Skip to content

Commit 3a85a78

Browse files
committed
Record date field
The `sources.json` now has a `date` field for `git` repositories.
1 parent 94f2ba0 commit 3a85a78

2 files changed

Lines changed: 23 additions & 13 deletions

File tree

src/Niv/Git/Cmd.hs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
121123
gitUpdate ::
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 () ()
127129
gitUpdate 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
144148
gitUpdate' :: Update () ()
145149
gitUpdate' = 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)
149153
latestRevInfo 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
170174
latestRev repo ref = snd <$> latestRevInfo repo (Just ref)
171175

172176
-- TODO: test this
173177
defaultRefAndHEAD ::
174178
-- | the repository
175179
T.Text ->
176-
IO (T.Text, T.Text)
180+
IO (T.Text, CommitInfo)
177181
defaultRefAndHEAD repo = latestRevInfo repo Nothing
178182

179183
abortNoRev :: [T.Text] -> T.Text -> IO a

src/Niv/Git/Test.hs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,10 @@ test_gitUpdateRev = do
6565
$ error
6666
$ "State mismatch: " <> show actualState
6767
where
68-
latestRev' _ _ = pure "some-other-rev"
69-
defaultRefAndHEAD' _ = pure ("some-ref", "some-rev")
68+
latestRev' _ _ = pure someOtherCommit
69+
someCommit = CommitInfo { revision = "some-rev", date = "some-date" }
70+
someOtherCommit = CommitInfo { revision = "some-other-rev", date = "some-other-date" }
71+
defaultRefAndHEAD' _ = pure ("some-ref", someCommit)
7072
initialState =
7173
HMS.fromList
7274
[("repo", (Free, "git@github.com:nmattia/niv"))]
@@ -75,6 +77,7 @@ test_gitUpdateRev = do
7577
[ ("repo", "git@github.com:nmattia/niv"),
7678
("ref", "some-ref"),
7779
("rev", "some-other-rev"),
80+
("date", "some-other-date"),
7881
("type", "git")
7982
]
8083

@@ -115,8 +118,10 @@ test_gitCalledOnce = do
115118
$ error
116119
$ "State mismatch: " <> show actualState
117120
where
118-
latestRev' _ _ = pure "some-other-rev"
119-
defaultRefAndHEAD' _ = pure ("some-ref", "some-rev")
121+
latestRev' _ _ = pure someOtherCommit
122+
someCommit = CommitInfo { revision = "some-rev", date = "some-date" }
123+
someOtherCommit = CommitInfo { revision = "some-other-rev", date = "some-other-date" }
124+
defaultRefAndHEAD' _ = pure ("some-ref", someCommit)
120125
initialState =
121126
HMS.fromList
122127
[("repo", (Free, "git@github.com:nmattia/niv"))]
@@ -125,5 +130,6 @@ test_gitCalledOnce = do
125130
[ ("repo", "git@github.com:nmattia/niv"),
126131
("ref", "some-ref"),
127132
("rev", "some-other-rev"),
133+
("date", "some-other-date"),
128134
("type", "git")
129135
]

0 commit comments

Comments
 (0)