diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Expression.hs | 9 | ||||
| -rw-r--r-- | src/Repo.hs | 9 |
2 files changed, 18 insertions, 0 deletions
diff --git a/src/Expression.hs b/src/Expression.hs index 994912e..bf35f2a 100644 --- a/src/Expression.hs +++ b/src/Expression.hs @@ -31,6 +31,7 @@ import Data.Maybe import Data.Proxy import Data.Text (Text) import Data.Text qualified as T +import Data.Time.LocalTime import Data.Void import Text.Megaparsec @@ -277,6 +278,9 @@ parseRangeExpression = bimap errorBundlePretty id . runParser parser "" "highesttag" -> do pat <- parseTagPattern return $ SingleRevisionExpression $ StaticRef $ TagRef pat higherTag + "lasttag" -> do + pat <- parseTagPattern + return $ SingleRevisionExpression $ StaticRef $ TagRef pat laterTag _ -> unexpected $ Tokens $ NE.fromList $ chunkToTokens @Text Proxy tok , do @@ -306,3 +310,8 @@ higherTag t t' = Left $ read @Integer $ T.unpack s | otherwise = Right s + +laterTag :: Tag a -> Tag a -> Tag a +laterTag t t' + | zonedTimeToUTC (tagTime t) < zonedTimeToUTC (tagTime t') = t' + | otherwise = t diff --git a/src/Repo.hs b/src/Repo.hs index b6ad8d4..7fe699c 100644 --- a/src/Repo.hs +++ b/src/Repo.hs @@ -52,6 +52,8 @@ import Data.Maybe import Data.Text (Text) import Data.Text qualified as T import Data.Text.Encoding +import Data.Time.Format +import Data.Time.LocalTime import System.Environment import System.Exit @@ -118,6 +120,8 @@ data Tag a = Tag { tagTag :: Text , tagId :: TagId , tagObject :: a + , tagTagger :: Text + , tagTime :: ZonedTime , tagMessage :: Text } @@ -263,6 +267,11 @@ tryReadTag repo tag = do guard (otype == "commit") tagTag <- T.pack <$> lookup "tag" info cid <- CommitId . BC.pack <$> lookup "object" info + + tagger <- T.pack <$> lookup "tagger" info + let tagTagger = T.dropEnd 1 $ T.dropWhileEnd (/= ' ') $ T.dropEnd 1 $ T.dropWhileEnd (/= ' ') tagger + tagTime <- parseTimeM False defaultTimeLocale "%s %z" $ T.unpack $ T.drop (T.length tagTagger + 1) tagger + let tagMessage = T.pack $ unlines $ dropWhile null message Just $ do tagObject <- liftIO $ mkCommit repo cid |