- readPlainTree :: FilePath -> IO Tree
- readDarcsHashed :: FilePath -> Hash -> IO Tree
- readDarcsPristine :: FilePath -> IO Tree
- read :: Blob -> IO ByteString
- readSegment :: FileSegment -> IO ByteString
- writePlainTree :: Tree -> FilePath -> IO ()
- floatPath :: FilePath -> AnchoredPath
- printPath :: Tree -> FilePath -> IO ()
Please note that Trees obtained this way will contain Stub
items. These need to be executed (they are IO actions) in order to be
expand to do this. However, many operations are
perfectly fine to be used on a stubbed Tree (and it is often more
efficient to do everything that can be done before expanding a Tree).
Read in a plain directory hierarchy from a filesystem. NB. The
function on Blobs with such a Tree is susceptible to file content
changes. Since we use mmap in
read, this will break referential
transparency and produce unexpected results. Please always make sure that
all parallel access to the underlying filesystem tree never mutates
files. Unlink + recreate is fine though (in other words, the sync/write
operations below are safe).
Read in a darcs-style hashed tree. This is mainly useful for reading "pristine.hashed". You need to provide the root hash you are interested in (found in _darcs/hashed_inventory).
Read a Blob into a Lazy ByteString. Might be backed by an mmap, use with care.
Read in a FileSegment into a Lazy ByteString. Implemented using mmap.
Write out *full* tree to a plain directory structure. If you instead want to make incremental updates, refer to Monad.plainTreeIO.
Unsafe functions for the curious explorer.
These are more useful for playing within ghci than for real, serious programs. They generally trade safety for conciseness. Please use responsibly. Don't kill innocent kittens.
Take a relative FilePath and turn it into an AnchoredPath. The operation is unsafe and if you break it, you keep both pieces. More useful for exploratory purposes (ghci) than for serious programming.