From 8e609f7a026795a106a819916e7d6756544b528e Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 22 Feb 2014 13:35:50 -0400 Subject: factor out new module --- Annex/View/ViewedFile.hs | 67 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 Annex/View/ViewedFile.hs (limited to 'Annex/View') 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 + - + - 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 -- cgit v1.2.3