glacier: Better handling of the glacier inventory, which avoids duplicate uploads to the same glacier repository by git annex copy.

The checkpresent hook can return either True or, False, or fail with a message
if it cannot successfully check the remote. Currently for glacier, when
--trust-glacier is not set, it always returns False. Crucially, in the case
when a file is in glacier, this is telling git-annex it's not there, so copy
re-uploads it. This is not desirable; it breaks using glacier-cli to retreive
that file later, and it wastes money/bandwidth.

What if it instead, when the glacier inventory is missing a
file, it returns False. And when the glacier inventory has a file, unless
--trust-glacier is set, it *fails*.

The result would be:

* `git annex copy --to glacier` would only send things not listed in inventory. If a file is listed in the inventory, `copy`
  would complain that --trust-glacier` is not set, and not re-upload the file.
* `git annex drop` would only trust that glacier has a file when --trust-glacier is set. Behavior unchanged.
* `git annex move --to glacier`, when the file is not listed in inventory, would send the file, and delete it locally. Behavior unchanged.
* `git annex move --to glacier`, when the file is listed in inventory, would only trust that glacier has the file when --trust-glacier is set
* `git annex copy --from glacier` / `git annex get`, when the file is located in glacier, would trust the location log, and attempt to get the file from glacier.
This commit is contained in:
Joey Hess 2013-05-29 13:52:42 -04:00
parent a0ab3dc3c4
commit 88d2d59f83
2 changed files with 3 additions and 3 deletions

View file

@ -195,14 +195,12 @@ checkPresent r k = do
, Param $ archive r k
]
untrusted = do
showLongNote $ unlines
untrusted = return $ Left $ unlines
[ "Glacier's inventory says it has a copy."
, "However, the inventory could be out of date, if it was recently removed."
, "(Use --trust-glacier if you're sure it's still in Glacier.)"
, ""
]
return $ Right False
glacierAction :: Remote -> [CommandParam] -> Annex Bool
glacierAction r params = runGlacier (config r) (uuid r) params

2
debian/changelog vendored
View file

@ -21,6 +21,8 @@ git-annex (4.20130522) UNRELEASED; urgency=low
* XMPP: Fix a file descriptor leak.
* Android: Added an "Open WebApp" item to the terminal's menu.
Should work for Android devices that cannot auto-open the webapp on start.
* glacier: Better handling of the glacier inventory, which avoids
duplicate uploads to the same glacier repository by `git annex copy`.
-- Joey Hess <joeyh@debian.org> Tue, 21 May 2013 18:22:46 -0400