aboutsummaryrefslogtreecommitdiffstats
path: root/app/Git.hs
diff options
context:
space:
mode:
Diffstat (limited to 'app/Git.hs')
-rw-r--r--app/Git.hs9
1 files changed, 6 insertions, 3 deletions
diff --git a/app/Git.hs b/app/Git.hs
index af02b70..653ddbd 100644
--- a/app/Git.hs
+++ b/app/Git.hs
@@ -5,11 +5,14 @@ module Git
)
where
-import Control.Exception (finally)
+import Control.Exception (finally, throw)
import Data.ByteString.Lazy.Char8 qualified as LB8
+import Data.List.NonEmpty (NonEmpty)
+import Data.List.NonEmpty qualified as N
import Data.Maybe (fromMaybe)
import Data.Text qualified as T
import Data.Text.Encoding qualified as T
+import Exception qualified as E
import Process (proc, sh, sh_)
import System.Directory (createDirectoryIfMissing)
import System.FilePath (dropTrailingPathSeparator, takeDirectory)
@@ -22,8 +25,8 @@ withWorkingTree path hash action = do
action `finally` do
sh_ $ proc "git worktree remove --force %" path
-getCommitHashes :: IO [T.Text]
-getCommitHashes = T.lines . T.decodeUtf8 . LB8.toStrict <$> sh "git log --format=%H"
+getCommitHashes :: IO (NonEmpty T.Text)
+getCommitHashes = fromMaybe (throw E.NoCommits) . N.nonEmpty . reverse . T.lines . T.decodeUtf8 . LB8.toStrict <$> sh "git log --format=%H"
getRootDir :: IO FilePath
getRootDir = T.unpack . stripTrailingNL . T.decodeUtf8 . LB8.toStrict <$> sh (proc "git rev-parse --show-toplevel")