status: More accurate display of sizes of tmp and bad keys.

Can't trust the key size to be accurate for tmp and bad keys, so check
actual file size. In the wild I saw the old code be wrong by a factor
of about 100!

If all tmp/bad keys are empty, they're not shown in status at all.
Showing 0 bytes and suggesting to clean it up seemed weird..
This commit is contained in:
Joey Hess 2012-03-12 00:41:48 -04:00
parent 83bbb3bc93
commit 89ee70c43a
2 changed files with 14 additions and 6 deletions

View file

@ -211,12 +211,19 @@ showSizeKeys d = total ++ missingnote
" keys of unknown size"
staleSize :: String -> (Git.Repo -> FilePath) -> Stat
staleSize label dirspec = do
keys <- lift (Command.Unused.staleKeys dirspec)
if null keys
then nostat
else stat label $ json (++ aside "clean up with git-annex unused") $
return $ showSizeKeys $ foldKeys keys
staleSize label dirspec = go =<< lift (Command.Unused.staleKeys dirspec)
where
go [] = nostat
go keys = onsize =<< sum <$> keysizes keys
onsize 0 = nostat
onsize size = stat label $
json (++ aside "clean up with git-annex unused") $
return $ roughSize storageUnits False size
keysizes keys = map (fromIntegral . fileSize) <$> stats keys
stats keys = do
dir <- lift $ fromRepo dirspec
liftIO $ forM keys $ \k ->
getFileStatus (dir </> keyFile k)
aside :: String -> String
aside s = " (" ++ s ++ ")"

1
debian/changelog vendored
View file

@ -7,6 +7,7 @@ git-annex (3.20120310) UNRELEASED; urgency=low
space, but now only needs to store the set of file contents that
are present in the annex in memory.
* status: Fixed to run in constant space.
* status: More accurate display of sizes of tmp and bad keys.
-- Joey Hess <joeyh@debian.org> Sat, 10 Mar 2012 14:03:22 -0400