diff options
author | Joey Hess <joey@kitenet.net> | 2014-02-22 13:35:50 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2014-02-22 13:35:50 -0400 |
commit | 8e609f7a026795a106a819916e7d6756544b528e (patch) | |
tree | 04f3de0c13ba86df8da47559369ff7565a210679 /Annex/View | |
parent | 067aaa4b4ef6a56e67caad1933812083ac09ce16 (diff) |
factor out new module
Diffstat (limited to 'Annex/View')
-rw-r--r-- | Annex/View/ViewedFile.hs | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/Annex/View/ViewedFile.hs b/Annex/View/ViewedFile.hs new file mode 100644 index 000000000..b773e728d --- /dev/null +++ b/Annex/View/ViewedFile.hs @@ -0,0 +1,67 @@ +{- filenames (not paths) used in views + - + - Copyright 2014 Joey Hess <joey@kitenet.net> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Annex.View.ViewedFile where + +import Common.Annex +import Types.View +import Types.MetaData +import qualified Git +import qualified Git.DiffTree as DiffTree +import qualified Git.Branch +import qualified Git.LsFiles +import qualified Git.Ref +import Git.UpdateIndex +import Git.Sha +import Git.HashObject +import Git.Types +import Git.FilePath +import qualified Backend +import Annex.Index +import Annex.Link +import Annex.CatFile +import Logs.MetaData +import Logs.View +import Utility.Glob +import Utility.FileMode +import Types.Command +import Config +import CmdLine.Action + +type FileName = String +type ViewedFile = FileName + +type MkViewedFile = FilePath -> ViewedFile + +{- Converts a filepath used in a reference branch to the + - filename that will be used in the view. + - + - No two filepaths from the same branch should yeild the same result, + - so all directory structure needs to be included in the output file + - in some way. However, the branch's directory structure is not replicated + - in the view. + - + - So, from dir/subdir/file.foo, generate file_{dir;subdir}.foo + - + - (To avoid collisions with a filename that already contains {foo}, + - that is doubled to {{foo}}.) + -} +viewedFileFromReference :: MkViewedFile +viewedFileFromReference f = concat + [ double base + , if null dirs then "" else "_{" ++ double (intercalate ";" dirs) ++ "}" + , double $ concat extensions + ] + where + (path, basefile) = splitFileName f + dirs = filter (/= ".") $ map dropTrailingPathSeparator (splitPath path) + (base, extensions) = splitShortExtensions basefile + + double = replace "{" "{{" . replace "}" "}}" + +viewedFileReuse :: MkViewedFile +viewedFileReuse = takeFileName |