|
Subversion.FileSystem.Root |
|
|
|
|
Description |
An interface to functions that work on both existing revisions and
ongoing transactions in a filesystem.
|
|
Synopsis |
|
|
|
|
Class
|
|
class Monad m => MonadFS m where |
MonadFS m is a monad which holds internally either an existing
revision or ongoing transaction.
| | Methods | getRoot :: m FileSystemRoot | | unsafeIOToFS :: IO a -> m a | unsafeIOToFS runs an IO monad in MonadFS.
This is unsafe if the monad is a transaction monad. When a
transaction fails before getting commited, all transactional
operations are cancelled at once. But if you had launched
missiles with unsafeIOToFS during the transaction, your
missiles can never go back. So you must use this carefully.
| | isTransaction :: m Bool | isTransaction returns True iff the monad is a transaction
monad.
|
| | Instances | |
|
|
Getting file content and others
|
|
getFileLength :: MonadFS m => FilePath -> m Integer |
getFileLength path returns the length of file path.
|
|
getFileMD5 :: MonadFS m => FilePath -> m [Word8] |
getFileMD5 path returns the MD5 checksum of file path. If
the filesystem does not have a prerecorded checksum for path, it
doesn't calculate a checksum dynamically, just puts all 0's into
the resulting digest. (By convention, the all-zero checksum is
considered to match any checksum.)
|
|
getFileContents :: MonadFS m => FilePath -> m String |
getFileContents path returns the content of file path.
If this is a non-transactional monad (that is, a monad whose
isTransaction returns False), it reads the content
lazilly. But if this is a transactional monad, getFileContents
does the operation strictly: I mean it loads the entire file onto
the memory! This is because svn_fs_file_contents() in the
libsvn_fs doesn't guarantee, when we are in a transaction, that we
can progressively read a file which is suddenly modified in the
same transaction during the progressive reading.
I think getFileContents might have to return
[Word8] instead of String because every
files in filesystem should be considered binary. Yes,
readFile also returns String but this is an
immature part of Haskell. I wish someday the GHC gets more clear
distinction between binary data and an Unicode string, then I
change the form of getFileContents alike.
|
|
getFileContentsLBS :: MonadFS m => FilePath -> m LazyByteString |
getFileContentsLBS does the same thing as getFileContents
but returns LazyByteString instead.
|
|
Getting node type
|
|
checkPath :: MonadFS m => FilePath -> m NodeKind |
checkPath path returns a NodeKind for
path. Unlike most other actions, checkPath doesn't throw an
error even if the path doesn't point to an existent node: in that
case it just returns NoNode.
|
|
isDirectory :: MonadFS m => FilePath -> m Bool |
isDirectory path returns True iff the path points
to a directory in a revision or transaction. It returns
False for inexistent path.
|
|
isFile :: MonadFS m => FilePath -> m Bool |
isFile path returns True iff the path points to a
file in a revision or transaction. It returns False for
inexistent path.
|
|
Getting node property
|
|
getNodeProp :: MonadFS m => FilePath -> String -> m (Maybe String) |
getNodeProp path propName returns the value of the property
named propName of path in a revision or transaction.
|
|
getNodePropList :: MonadFS m => FilePath -> m [(String, String)] |
getNodePropList path returns the property list of path in a
revision or transaction.
|
|
Getting nodes in directory
|
|
getDirEntries :: MonadFS m => FilePath -> m [DirEntry] |
getDirEntries path returns a list containing the entries of
the directory at path in a revision or transaction.
|
|
Getting change list
|
|
getPathsChanged :: MonadFS m => m [(FilePath, PathChange)] |
getPathsChanged returns a list containing descriptions of the
paths changed under a revision or transaction.
|
|
Produced by Haddock version 0.8 |