aboutsummaryrefslogtreecommitdiff
path: root/Annex/View
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2014-02-22 13:35:50 -0400
committerGravatar Joey Hess <joey@kitenet.net>2014-02-22 13:35:50 -0400
commit8e609f7a026795a106a819916e7d6756544b528e (patch)
tree04f3de0c13ba86df8da47559369ff7565a210679 /Annex/View
parent067aaa4b4ef6a56e67caad1933812083ac09ce16 (diff)
factor out new module
Diffstat (limited to 'Annex/View')
-rw-r--r--Annex/View/ViewedFile.hs67
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