dropping unused marks as dead

Dropping an object with drop --unused or dropunused will mark it as
dead, preventing fsck --all from complaining about it after it's been
dropped from all repositories.

If another repository still has a copy, it won't be treated as dead
until it's also dropped from there.

The drop has to use --unused, can't be --key or something else, because
this indicates that the user has recently ran git-annex unused. If it
checked the unused log on every drop, bad things would happen when the
unused log was out of date, eg a file used to be unused but then got
re-added. Marking such a file as dead could be confusing. When the user
uses --unused/dropunused, they must consider the unused information to be
up-to-date.

The particular workflow this enables is:

	git annex add foo
	git annex unannex foo
	git annex unused
	git annex drop --unused / dropunused
	git annex fsck --all # no warnings

The docs for git-annex unannex say to use git-annex unused and dropunused,
so the user should be pointed in this direction when they want to undo an
accidental add.

Sponsored-by: Brock Spratlen on Patreon
This commit is contained in:
Joey Hess 2021-06-25 15:22:05 -04:00
parent b08b9ed210
commit 3a14648142
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
10 changed files with 88 additions and 31 deletions

View file

@ -1,3 +1,5 @@
When you want to dead a file in your checkout, you can only do so via the key of the file. You can find the corresponding key with a bit of bash like this: `git annex dead --key $(basename $(readlink file))` but that shouldn't be necessary IMO.
It'd be a lot better if you could just dead files like this: `git annex dead --file file` or even like this: `git annex dead --file file1 file2 file3 otherfiles.*` (or maybe even like this: `git annex dead --file file1 file2 --key $key1 $key2`).
> [[done]] in another way --[[Joey]]

View file

@ -0,0 +1,26 @@
[[!comment format=mdwn
username="joey"
subject="""comment 2"""
date="2021-06-25T18:22:04Z"
content="""
In <https://git-annex.branchable.com/forum/Forget_about_accidentally_added_file__63__/>
there is an idea of `git annex unannex --forget file`
And using unannex for this makes some sense; it's intended to be used to undo an
accidental `git-annex add`. When it's used that way, and later `git-annex
unused` finds the object file is not used by anything and the object gets
deleted, fsck --all will start complaining about it.
But there are still many ways it could go wrong. Being run recursively by
accident. Or another file, perhaps in another branch, using the same key,
which gets marked as dead.
Hmm, `git annex dropunused` (or `drop --unused`)
could mark the key as dead. At that point it's known to be unused.
This way, the existing workflow of git-annex unannex followed by git-annex
unused followed by dropping can be followed, and fsck --all does
not later complain about the key.
Done!
"""]]