diff options
Diffstat (limited to 'Types/Export.hs')
-rw-r--r-- | Types/Export.hs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/Types/Export.hs b/Types/Export.hs new file mode 100644 index 000000000..cc1b8debf --- /dev/null +++ b/Types/Export.hs @@ -0,0 +1,31 @@ +{- git-annex export types + - + - Copyright 2017 Joey Hess <id@joeyh.name> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Types.Export where + +import qualified System.FilePath.Posix as Posix + +-- A location on a remote that a key can be exported to. +-- The FilePath will be relative to the top of the export, +-- and may contain unix-style path separators. +newtype ExportLocation = ExportLocation FilePath + deriving (Show, Eq) + +newtype ExportDirectory = ExportDirectory FilePath + deriving (Show, Eq) + +-- | All subdirectories down to the ExportLocation, with the deepest ones +-- last. Does not include the top of the export. +exportDirectories :: ExportLocation -> [ExportDirectory] +exportDirectories (ExportLocation f) = + map (ExportDirectory . Posix.joinPath . reverse) (subs [] dirs) + where + subs _ [] = [] + subs ps (d:ds) = (d:ps) : subs (d:ps) ds + + dirs = map Posix.dropTrailingPathSeparator $ + reverse $ drop 1 $ reverse $ Posix.splitPath f |