🐙 Templated web page generator for your git repositories
git clone https://github.com/m-col/gitja
Files | Refs | Readme | License

Commit 7ffff1509e31ac7dee1d9ff5ad97696711f17a69
Parent: 993107b3a773d6db4272c3db0d75a93d3df4c9de
Author: mcol <mcol@posteo.net>
Date: 2022-04-14 21:34:29 +0100
Committer: mcol <mcol@posteo.net>
Committed: 2022-04-14 21:34:29 +0100

move some helper functions into a where block

src/Repositories.hs Modified

@@ -281,32 +281,33 @@
 contents.
 -}
 getTree :: Git.CommitOid LgRepo -> ReaderT LgRepo IO [TreeFile]
-getTree = getTree' "" . Git.commitTree <=< Git.lookupCommit
-
-getTree' :: Git.TreeFilePath -> Git.TreeOid LgRepo -> ReaderT LgRepo IO [TreeFile]
-getTree' parent toid = do
-    entries <- Git.listTreeEntries =<< Git.lookupTree toid
-    let entries' = fmap (prependParent parent) entries
-    contents <- mapM getEntryContents entries'
-    modes <- mapM (getEntryModes . snd) entries'
-    return $ zipWith3 TreeFile (fmap treePaths entries') contents modes
-
-prependParent :: Git.TreeFilePath -> (Git.TreeFilePath, Git.TreeEntry LgRepo) -> (Git.TreeFilePath, Git.TreeEntry LgRepo)
-prependParent "" pathentry = pathentry
-prependParent parent (path, entry) = (mconcat [parent, "/", path], entry)
-
-getEntryContents :: (Git.TreeFilePath, Git.TreeEntry LgRepo) -> ReaderT LgRepo IO TreeFileContents
-getEntryContents (_, Git.BlobEntry oid _) = getBlobContents oid
-getEntryContents (path, Git.TreeEntry oid) = FolderContents <$> getTree' path oid
-getEntryContents (_, Git.CommitEntry oid) = return . FileContents . B.fromString . show . untag $ oid
-
-getEntryModes :: Git.TreeEntry LgRepo -> ReaderT LgRepo IO TreeEntryMode
-getEntryModes (Git.BlobEntry _ kind) = return . blobkindToMode $ kind
-getEntryModes (Git.TreeEntry _) = return ModeDirectory
-getEntryModes (Git.CommitEntry _) = return ModeSubmodule
-
-treePaths :: (Git.TreeFilePath, Git.TreeEntry LgRepo) -> Text
-treePaths = T.decodeUtf8With T.lenientDecode . fst
+getTree = getTree' "" 0 . Git.commitTree <=< Git.lookupCommit
+  where
+    getTree' :: Git.TreeFilePath -> Int -> Git.TreeOid LgRepo -> ReaderT LgRepo IO [TreeFile]
+    getTree' parent count toid = do
+        one <- Git.lookupTree toid
+        entries <- Git.listTreeEntries one
+        let entries' = fmap (prependParent parent) entries
+        contents <- mapM (\x -> getEntryContents x (count + 1)) entries'
+        modes <- mapM (getEntryModes . snd) entries'
+        return $ zipWith3 TreeFile (fmap treePaths entries') contents modes
+
+    prependParent :: Git.TreeFilePath -> (Git.TreeFilePath, Git.TreeEntry LgRepo) -> (Git.TreeFilePath, Git.TreeEntry LgRepo)
+    prependParent "" pathentry = pathentry
+    prependParent parent (path, entry) = (mconcat [parent, "/", path], entry)
+
+    getEntryContents :: (Git.TreeFilePath, Git.TreeEntry LgRepo) -> Int -> ReaderT LgRepo IO TreeFileContents
+    getEntryContents (_, Git.BlobEntry oid _) _ = getBlobContents oid
+    getEntryContents (path, Git.TreeEntry oid) count = FolderContents <$> getTree' path count oid
+    getEntryContents (_, Git.CommitEntry oid) _ = return . FileContents . B.fromString . show . untag $ oid
+
+    getEntryModes :: Git.TreeEntry LgRepo -> ReaderT LgRepo IO TreeEntryMode
+    getEntryModes (Git.BlobEntry _ kind) = return . blobkindToMode $ kind
+    getEntryModes (Git.TreeEntry _) = return ModeDirectory
+    getEntryModes (Git.CommitEntry _) = return ModeSubmodule
+
+    treePaths :: (Git.TreeFilePath, Git.TreeEntry LgRepo) -> Text
+    treePaths = T.decodeUtf8With T.lenientDecode . fst
 
 {-
 Find a file in the tree starting with the specified prefix. The prefix is looked for on