This commit is contained in:
Dmitry Zuikov 2024-06-07 06:59:47 +03:00
parent 5287be1e50
commit 9644a6f208
3 changed files with 37 additions and 15 deletions

View File

@ -33,6 +33,7 @@ import Data.HashMap.Strict qualified as HM
import Data.Set qualified as Set import Data.Set qualified as Set
import Data.List qualified as List import Data.List qualified as List
import Data.Text qualified as Text import Data.Text qualified as Text
import Data.Text.IO qualified as Text
import Text.InterpolatedString.Perl6 (qc) import Text.InterpolatedString.Perl6 (qc)
import Data.Coerce import Data.Coerce
import Control.Monad.Identity import Control.Monad.Identity
@ -41,6 +42,7 @@ import System.Process.Typed
import Control.Monad.Trans.Cont import Control.Monad.Trans.Cont
import Control.Monad.Trans.Maybe import Control.Monad.Trans.Maybe
import System.IO.Temp as Temp import System.IO.Temp as Temp
import System.IO qualified as IO
import Streaming.Prelude qualified as S import Streaming.Prelude qualified as S
@ -102,8 +104,10 @@ defaultTemplate = HM.fromList [ ("default", Simple (SimpleTemplate short)) ]
runFixmeCLI :: FixmePerks m => FixmeM m a -> m a runFixmeCLI :: FixmePerks m => FixmeM m a -> m a
runFixmeCLI m = do runFixmeCLI m = do
db <- newDBPipeEnv dbPipeOptsDef =<< localDBPath db <- newDBPipeEnv dbPipeOptsDef =<< localDBPath
env <- FixmeEnv Nothing db git <- findGitDir
<$> newTVarIO mempty env <- FixmeEnv db
<$> newTVarIO git
<*> newTVarIO mempty
<*> newTVarIO mempty <*> newTVarIO mempty
<*> newTVarIO mempty <*> newTVarIO mempty
<*> newTVarIO mempty <*> newTVarIO mempty
@ -281,7 +285,7 @@ modify_ txt a b = do
printEnv :: FixmePerks m => FixmeM m () printEnv :: FixmePerks m => FixmeM m ()
printEnv = do printEnv = do
g <- asks fixmeEnvGitDir g <- asks fixmeEnvGitDir >>= readTVarIO
masks <- asks fixmeEnvFileMask >>= readTVarIO masks <- asks fixmeEnvFileMask >>= readTVarIO
tags <- asks fixmeEnvTags >>= readTVarIO tags <- asks fixmeEnvTags >>= readTVarIO
days <- asks fixmeEnvGitScanDays >>= readTVarIO days <- asks fixmeEnvGitScanDays >>= readTVarIO
@ -318,6 +322,8 @@ printEnv = do
for_ vals$ \(v, vs) -> do for_ vals$ \(v, vs) -> do
liftIO $ print $ "fixme-value-set" <+> pretty v <+> hsep (fmap pretty (HS.toList vs)) liftIO $ print $ "fixme-value-set" <+> pretty v <+> hsep (fmap pretty (HS.toList vs))
for_ g $ \git -> do
liftIO $ print $ "fixme-git-dir" <+> dquotes (pretty git)
(before,after) <- asks fixmeEnvCatContext >>= readTVarIO (before,after) <- asks fixmeEnvCatContext >>= readTVarIO
@ -416,6 +422,10 @@ runForms ss = for_ ss $ \s -> do
ta <- asks fixmeEnvAttribs ta <- asks fixmeEnvAttribs
atomically $ modifyTVar ta (<> HS.fromList (fmap fromString xs)) atomically $ modifyTVar ta (<> HS.fromList (fmap fromString xs))
ListVal [SymbolVal "fixme-git-dir", StringLike g] -> do
ta <- asks fixmeEnvGitDir
atomically $ writeTVar ta (Just g)
ListVal [SymbolVal "fixme-def-context", LitIntVal a, LitIntVal b] -> do ListVal [SymbolVal "fixme-def-context", LitIntVal a, LitIntVal b] -> do
t <- asks fixmeEnvCatContext t <- asks fixmeEnvCatContext
atomically $ writeTVar t (fromIntegral a, fromIntegral b) atomically $ writeTVar t (fromIntegral a, fromIntegral b)
@ -488,8 +498,7 @@ runForms ss = for_ ss $ \s -> do
ReadFixmeStdin -> readFixmeStdin ReadFixmeStdin -> readFixmeStdin
ListVal [SymbolVal "print-env"] -> do ListVal [SymbolVal "print-env"] -> printEnv
printEnv
ListVal (SymbolVal "hello" : xs) -> do ListVal (SymbolVal "hello" : xs) -> do
notice $ "hello" <+> pretty xs notice $ "hello" <+> pretty xs
@ -602,6 +611,19 @@ runForms ss = for_ ss $ \s -> do
ListVal [SymbolVal "silence"] -> do ListVal [SymbolVal "silence"] -> do
silence silence
ListVal [SymbolVal "builtin:run-stdin"] -> do
let ini = mempty :: [Text]
flip fix ini $ \next acc -> do
eof <- liftIO IO.isEOF
s <- if eof then pure "" else liftIO Text.getLine <&> Text.strip
if Text.null s then do
let code = parseTop (Text.unlines acc) & fromRight mempty
runForms code
unless eof do
next mempty
else do
next (acc <> [s])
ListVal [SymbolVal "builtin:evolve"] -> do ListVal [SymbolVal "builtin:evolve"] -> do
evolve evolve

View File

@ -80,7 +80,6 @@ listCommits = do
let cmd = [qc|git {gd} log --all --format="%H '%cn' '%ce' %ct" {days}|] let cmd = [qc|git {gd} log --all --format="%H '%cn' '%ce' %ct" {days}|]
-- FIXME: git-dir
gitRunCommand cmd gitRunCommand cmd
<&> fromRight mempty <&> fromRight mempty
<&> LBS8.lines <&> LBS8.lines
@ -130,10 +129,10 @@ listRefs every = do
done <- withState $ isProcessed $ ViaSerialise h done <- withState $ isProcessed $ ViaSerialise h
pure (not done) pure (not done)
listBlobs :: FixmePerks m => GitHash -> m [(FilePath,GitHash)] listBlobs :: (FixmePerks m, MonadReader FixmeEnv m) => GitHash -> m [(FilePath,GitHash)]
listBlobs co = do listBlobs co = do
-- FIXME: git-dir gd <- fixmeGetGitDirCLIOpt
gitRunCommand [qc|git ls-tree -r -l -t {pretty co}|] gitRunCommand [qc|git {gd} ls-tree -r -l -t {pretty co}|]
<&> fromRight mempty <&> fromRight mempty
<&> fmap LBS8.words . LBS8.lines <&> fmap LBS8.words . LBS8.lines
<&> mapMaybe <&> mapMaybe
@ -266,7 +265,7 @@ scanGitLocal args p = do
debug $ "commit" <+> pretty commit debug $ "commit" <+> pretty commit
blobs <- listBlobs commit >>= withFixmeEnv env . filterBlobs blobs <- lift $ listBlobs commit >>= withFixmeEnv env . filterBlobs
let ts = HM.lookup "commit-time" attr let ts = HM.lookup "commit-time" attr
>>= readMay @Word64 . Text.unpack . coerce >>= readMay @Word64 . Text.unpack . coerce

View File

@ -241,8 +241,8 @@ class FixmeRenderTemplate a b where
data FixmeEnv = data FixmeEnv =
FixmeEnv FixmeEnv
{ fixmeEnvGitDir :: Maybe FilePath { fixmeEnvDb :: DBPipeEnv
, fixmeEnvDb :: DBPipeEnv , fixmeEnvGitDir :: TVar (Maybe FilePath)
, fixmeEnvFileMask :: TVar [FilePattern] , fixmeEnvFileMask :: TVar [FilePattern]
, fixmeEnvTags :: TVar (HashSet FixmeTag) , fixmeEnvTags :: TVar (HashSet FixmeTag)
, fixmeEnvAttribs :: TVar (HashSet FixmeAttrName) , fixmeEnvAttribs :: TVar (HashSet FixmeAttrName)
@ -276,11 +276,12 @@ fixmeGetCommentsFor (Just fp) = do
{- HLINT ignore "Functor law" -} {- HLINT ignore "Functor law" -}
fixmeGetGitDirCLIOpt :: MonadReader FixmeEnv m => m String fixmeGetGitDirCLIOpt :: (FixmePerks m, MonadReader FixmeEnv m) => m String
fixmeGetGitDirCLIOpt = do fixmeGetGitDirCLIOpt = do
asks fixmeEnvGitDir asks fixmeEnvGitDir
<&> fmap (\d -> [qc|--dir-dir {d}|]) >>= readTVarIO
<&> fromMaybe "" <&> fmap (\d -> [qc|--dir-dir {d}|])
<&> fromMaybe ""
newtype FixmeM m a = FixmeM { fromFixmeM :: ReaderT FixmeEnv m a } newtype FixmeM m a = FixmeM { fromFixmeM :: ReaderT FixmeEnv m a }
deriving newtype ( Applicative deriving newtype ( Applicative