summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2012-01-06 16:24:40 -0400
committerGravatar Joey Hess <joey@kitenet.net>2012-01-06 16:24:40 -0400
commit47646d44b7a391d9439998ba34498f2fb74b4259 (patch)
tree4c888d82d5b72dff2da049734be9ee3413f3550c
parenta3a9f87047d27306c27f4108ee58af3365f284af (diff)
use a zipper
-rw-r--r--Command/Log.hs23
1 files changed, 12 insertions, 11 deletions
diff --git a/Command/Log.hs b/Command/Log.hs
index 486efdf11..3489c5ab0 100644
--- a/Command/Log.hs
+++ b/Command/Log.hs
@@ -33,29 +33,30 @@ seek = [withFilesInGit $ whenAnnexed $ start]
start :: FilePath -> (Key, Backend) -> CommandStart
start file (key, _) = do
showStart file ""
- liftIO $ putStrLn ""
showLog =<< readLog key
stop
showLog :: [(POSIXTime, Git.Ref)] -> Annex ()
-showLog v = go Nothing v =<< (liftIO getCurrentTimeZone)
+showLog ps = do
+ zone <- liftIO getCurrentTimeZone
+ sets <- mapM getset ps
+ liftIO $ putStrLn ""
+ mapM_ (diff zone) $ zip sets (drop 1 sets ++ genesis)
where
- go new [] zone = diff S.empty new zone
- go new ((ts, ref):ls) zone = do
- cur <- S.fromList <$> get ref
- diff cur new zone
- go (Just (ts, cur)) ls zone
+ genesis = [(0, S.empty)]
+ getset (ts, ref) = do
+ s <- S.fromList <$> get ref
+ return (ts, s)
get ref = map toUUID . Logs.Presence.getLog . L.unpack <$>
catObject ref
- diff _ Nothing _ = return ()
- diff cur (Just (ts, new)) zone = do
+ diff zone ((ts, new), (_, old)) = do
let time = show $ utcToLocalTime zone $
posixSecondsToUTCTime ts
output time True added
output time False removed
where
- added = S.difference new cur
- removed = S.difference cur new
+ added = S.difference new old
+ removed = S.difference old new
output time present s = do
rs <- map (dropWhile isSpace) . lines <$>
Remote.prettyPrintUUIDs "log" (S.toList s)