From eefc0263709eecacc98b79b97c3867d8db122a95 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 13 Sep 2022 14:38:13 -0400 Subject: [PATCH] fix reversion on skipping dead keys in --all/bare Fix a reversion that made dead keys not be skipped when operating on all keys via --all or in a bare repo. (Introduced in version 8.20200720) Also, improved the documentation of git-annex-dead, it does not only apply to fsck --all. Also, made git-annex fsck, when run on a file whose key is dead, display that. Before, it displayed that only when run with --all, but with this fix, it skips dead keys with --all. But it can still be run on a file that uses a dead key, and displaying "This key is dead" explains to the user why it does not consider missing content for it to be a problem. Sponsored-by: k0ld on Patreon --- CHANGELOG | 3 +++ CmdLine/Seek.hs | 4 +++- Command/Fsck.hs | 2 +- ...nt_4_ee99cdb44671eea30eaa4351dbb9dc96._comment | 15 +++++++++++++++ doc/git-annex-dead.mdwn | 4 ++-- 5 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 doc/forum/How_to_forget_keys_that_get_can__39__t_find__63__/comment_4_ee99cdb44671eea30eaa4351dbb9dc96._comment diff --git a/CHANGELOG b/CHANGELOG index d948c20931..be72e2089e 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -10,6 +10,9 @@ git-annex (10.20220823) UNRELEASED; urgency=medium process, rather than repeatedly prompting. * Use curl for downloads from git remotes when annex.url-options and other git configs are set. + * Fix a reversion that made dead keys not be skipped when operating on + all keys via --all or in a bare repo. + (Introduced in version 8.20200720) -- Joey Hess Mon, 29 Aug 2022 15:03:04 -0400 diff --git a/CmdLine/Seek.hs b/CmdLine/Seek.hs index a20999a16c..24ee8f03f4 100644 --- a/CmdLine/Seek.hs +++ b/CmdLine/Seek.hs @@ -27,6 +27,7 @@ import CmdLine.GitAnnex.Options import CmdLine.Action import Logs import Logs.Unused +import Logs.Location import Types.Transfer import Logs.Transfer import Types.Link @@ -283,7 +284,8 @@ withKeyOptions' ko auto mkkeyaction fallbackaction worktreeitems = do let go reader = reader >>= \case Just (k, f, content) -> checktimelimit (discard reader) $ do maybe noop (Annex.Branch.precache f) content - keyaction Nothing (SeekInput [], k, mkActionItem k) + unlessM (checkDead k) $ + keyaction Nothing (SeekInput [], k, mkActionItem k) go reader Nothing -> return () Annex.Branch.overBranchFileContents getk go >>= \case diff --git a/Command/Fsck.hs b/Command/Fsck.hs index eef6a4f214..77929f14ba 100644 --- a/Command/Fsck.hs +++ b/Command/Fsck.hs @@ -574,7 +574,7 @@ checkKeyNumCopies key afile numcopies = do (deadlocations, safelocations) <- trustPartition DeadTrusted otherlocations let present = length safelocations if present < fromNumCopies numcopies - then ifM (pure (not hasafile) <&&> checkDead key) + then ifM (checkDead key) ( do showLongNote $ "This key is dead, skipping." return True diff --git a/doc/forum/How_to_forget_keys_that_get_can__39__t_find__63__/comment_4_ee99cdb44671eea30eaa4351dbb9dc96._comment b/doc/forum/How_to_forget_keys_that_get_can__39__t_find__63__/comment_4_ee99cdb44671eea30eaa4351dbb9dc96._comment new file mode 100644 index 0000000000..f6cdbebdf5 --- /dev/null +++ b/doc/forum/How_to_forget_keys_that_get_can__39__t_find__63__/comment_4_ee99cdb44671eea30eaa4351dbb9dc96._comment @@ -0,0 +1,15 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 4""" + date="2022-09-13T18:21:13Z" + content=""" +This was a reversion. + +In 2017, [[!commit bcf276655c04f36e021f091240ed2dc8211924fd]] +made --all skip dead keys, by modifying loggedKeys. + +But, then the implementation of --all changed to not use loggedKeys +in [[!commit d010ab04be5a8d74fe85a2fa27a853784d1f9009]]. + +I've fixed this! +"""]] diff --git a/doc/git-annex-dead.mdwn b/doc/git-annex-dead.mdwn index d981aa4ba1..6dbfe9a8c8 100644 --- a/doc/git-annex-dead.mdwn +++ b/doc/git-annex-dead.mdwn @@ -17,8 +17,8 @@ Repositories can be specified using their remote name, their description, or their UUID. (To undo, use `git-annex semitrust`.) When a key is specified, indicates that the content of that key has been -irretrievably lost. This prevents commands like `git annex fsck --all` -from complaining about it. +irretrievably lost. This makes the key be skipped when operating +on all keys with eg `--all`. (To undo, add the key's content back to the repository, by using eg, `git-annex reinject`.) -- 2.30.2