reinject: Added --guesskeys option

Sponsored-by: Noam Kremen on Patreon
This commit is contained in:
Joey Hess 2023-06-26 14:05:31 -04:00
parent 19cac6fa14
commit d98aa35b3b
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
3 changed files with 46 additions and 0 deletions

View file

@ -1,3 +1,9 @@
git-annex (10.20230627) UNRELEASED; urgency=medium
* reinject: Added --guesskeys option.
-- Joey Hess <id@joeyh.name> Mon, 26 Jun 2023 13:10:40 -0400
git-annex (10.20230626) upstream; urgency=medium
* Split out two new commands, git-annex pull and git-annex push.

View file

@ -29,6 +29,7 @@ cmd = withAnnexOptions [backendOption, jsonOptions] $
data ReinjectOptions = ReinjectOptions
{ params :: CmdParams
, knownOpt :: Bool
, guessKeysOpt :: Bool
}
optParser :: CmdParamsDesc -> Parser ReinjectOptions
@ -39,9 +40,16 @@ optParser desc = ReinjectOptions
<> help "inject all known files"
<> hidden
)
<*> switch
( long "guesskeys"
<> help "inject files that are named like keys"
<> hidden
)
seek :: ReinjectOptions -> CommandSeek
seek os
| guessKeysOpt os && knownOpt os = giveup "Cannot combine --known with --guesskeys"
| guessKeysOpt os = withStrings (commandAction . startGuessKeys) (params os)
| knownOpt os = withStrings (commandAction . startKnown) (params os)
| otherwise = withPairs (commandAction . startSrcDest) (params os)
@ -66,6 +74,24 @@ startSrcDest (si, (src, dest))
src' = toRawFilePath src
ai = ActionItemOther (Just (QuotedPath src'))
startGuessKeys :: FilePath -> CommandStart
startGuessKeys src = starting "reinject" ai si $ notAnnexed src' $
case fileKey (toRawFilePath (takeFileName src)) of
Just key -> ifM (verifyKeyContent key src')
( perform src' key
, do
qp <- coreQuotePath <$> Annex.getGitConfig
giveup $ decodeBS $ quote qp $ QuotedPath src'
<> " does not have expected content"
)
Nothing -> do
warning "Not named like an object file; skipping"
next $ return True
where
src' = toRawFilePath src
ai = ActionItemOther (Just (QuotedPath src'))
si = SeekInput [src]
startKnown :: FilePath -> CommandStart
startKnown src = starting "reinject" ai si $ notAnnexed src' $ do
(key, _) <- genKey ks nullMeterUpdate =<< defaultBackend

View file

@ -54,6 +54,20 @@ needing to specify the dest file.
Specify the key-value backend to use when checking if a file is known
with the `--known` option.
* `--guesskeys`
With this option, each specified source file is checked to see if it
has the name of a git-annex key, and if so it is imported as the content
of that key.
This can be used to pluck git-annex objects out of `lost+found`,
as long as the original filename has not been lost,
and is particularly useful when using key-value backends that don't hash
to the content of a file.
When the key-value backend does support hashing, the content of the file
is verified before importing it.
* `--json`
Enable JSON output. This is intended to be parsed by programs that use