@@ -118,11 +118,13 @@ describeGit =
118118 Opts. <$$> " niv add git --repo /my/custom/repo --name custom --ref foobar"
119119 ]
120120
121+ data CommitInfo = CommitInfo { revision :: T. Text , date :: T. Text }
122+
121123gitUpdate ::
122124 -- | latest rev
123- (T. Text -> T. Text -> IO T. Text ) ->
125+ (T. Text -> T. Text -> IO CommitInfo ) ->
124126 -- | latest rev and default ref
125- (T. Text -> IO (T. Text , T. Text )) ->
127+ (T. Text -> IO (T. Text , CommitInfo )) ->
126128 Update () ()
127129gitUpdate latestRev' defaultRefAndHEAD' = proc () -> do
128130 useOrSet " type" -< (" git" :: Box T. Text )
@@ -132,20 +134,22 @@ gitUpdate latestRev' defaultRefAndHEAD' = proc () -> do
132134 discoverRefAndRev = proc repository -> do
133135 refAndRev <- run defaultRefAndHEAD' -< repository
134136 update " ref" -< fst <$> refAndRev
135- update " rev" -< snd <$> refAndRev
137+ update " rev" -< (revision . snd ) <$> refAndRev
138+ update " date" -< (date . snd ) <$> refAndRev
136139 returnA -< ()
137140 discoverRev = proc repository -> do
138141 ref <- load " ref" -< ()
139142 rev <- run' (uncurry latestRev') -< (,) <$> repository <*> ref
140- update " rev" -< rev
143+ update " rev" -< revision <$> rev
144+ update " date" -< date <$> rev
141145 returnA -< ()
142146
143147-- | The "real" (IO) update
144148gitUpdate' :: Update () ()
145149gitUpdate' = gitUpdate latestRev defaultRefAndHEAD
146150
147151-- TODO: document the git operations
148- latestRevInfo :: T. Text -> Maybe T. Text -> IO (T. Text , T. Text )
152+ latestRevInfo :: T. Text -> Maybe T. Text -> IO (T. Text , CommitInfo )
149153latestRevInfo repo mref = runGits $ \ git -> do
150154 void $ git [" init" ]
151155 void $ git [" remote" , " add" , " origin" , repo]
@@ -154,10 +158,10 @@ latestRevInfo repo mref = runGits $ \git -> do
154158 void $ git [" checkout" , ref]
155159 git [" show" , " --quiet" , " --format=%H%n%aD" , ref] >>= \ case
156160 [] -> abort " Git did not produce enough output while reading commit information"
157- [rev, _date ] -> do
161+ [rev, dte ] -> do
158162 unless (isRev rev) $ do
159163 abort $ " The revision retrieved from git does not look like a revision: '" <> rev <> " '."
160- pure (ref, rev)
164+ pure (ref, CommitInfo { revision = rev, date = dte } )
161165 output ->
162166 abort $ T. unlines $
163167 [" Git produced too much output while reading commit information:" ] <> output
@@ -166,14 +170,14 @@ latestRevInfo repo mref = runGits $ \git -> do
166170 Just l -> pure (T. strip l)
167171 Nothing -> abort $ T. unlines $ [" could not parse default ref: " ] <> ls
168172
169- latestRev :: T. Text -> T. Text -> IO T. Text
173+ latestRev :: T. Text -> T. Text -> IO CommitInfo
170174latestRev repo ref = snd <$> latestRevInfo repo (Just ref)
171175
172176-- TODO: test this
173177defaultRefAndHEAD ::
174178 -- | the repository
175179 T. Text ->
176- IO (T. Text , T. Text )
180+ IO (T. Text , CommitInfo )
177181defaultRefAndHEAD repo = latestRevInfo repo Nothing
178182
179183abortNoRev :: [T. Text ] -> T. Text -> IO a
0 commit comments