diff options
author | Joey Hess <joeyh@joeyh.name> | 2016-04-22 13:49:32 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2016-04-22 13:49:32 -0400 |
commit | b48a044d26bb607da9962b9086e9da2db9e11620 (patch) | |
tree | 0a5b94be74befcbf51431ea4a0d7da31cbdcf357 /Command/Reinject.hs | |
parent | 475f9475f162c1c1f9aee727fa3f3a471ebe2506 (diff) |
reinject: Added new mode which can reinject known files into the annex.
For example: git-annex reinject --known /mnt/backup/*
Diffstat (limited to 'Command/Reinject.hs')
-rw-r--r-- | Command/Reinject.hs | 67 |
1 files changed, 50 insertions, 17 deletions
diff --git a/Command/Reinject.hs b/Command/Reinject.hs index 0b1b0e2e2..ce18c7cb6 100644 --- a/Command/Reinject.hs +++ b/Command/Reinject.hs @@ -1,6 +1,6 @@ {- git-annex command - - - Copyright 2011 Joey Hess <id@joeyh.name> + - Copyright 2011-2016 Joey Hess <id@joeyh.name> - - Licensed under the GNU GPL version 3 or higher. -} @@ -10,30 +10,63 @@ module Command.Reinject where import Command import Logs.Location import Annex.Content +import Backend +import Types.KeySource cmd :: Command cmd = command "reinject" SectionUtility - "sets content of annexed file" - (paramPair "SRC" "DEST") (withParams seek) + "inject content of file back into annex" + (paramRepeating (paramPair "SRC" "DEST") + `paramOr` "--known " ++ paramRepeating "SRC") + (seek <$$> optParser) -seek :: CmdParams -> CommandSeek -seek = withWords start +data ReinjectOptions = ReinjectOptions + { params :: CmdParams + , knownOpt :: Bool + } -start :: [FilePath] -> CommandStart -start (src:dest:[]) +optParser :: CmdParamsDesc -> Parser ReinjectOptions +optParser desc = ReinjectOptions + <$> cmdParams desc + <*> switch + ( long "known" + <> help "inject all known files" + <> hidden + ) + +seek :: ReinjectOptions -> CommandSeek +seek os + | knownOpt os = withStrings startKnown (params os) + | otherwise = withWords startSrcDest (params os) + +startSrcDest :: [FilePath] -> CommandStart +startSrcDest (src:dest:[]) | src == dest = stop - | otherwise = - ifAnnexed src - (error $ "cannot used annexed file as src: " ++ src) - go - where - go = do + | otherwise = notAnnexed src $ do showStart "reinject" dest - next $ whenAnnexed (perform src) dest -start _ = error "specify a src file and a dest file" + next $ ifAnnexed dest + (perform src) + stop +startSrcDest _ = error "specify a src file and a dest file" + +startKnown :: FilePath -> CommandStart +startKnown src = notAnnexed src $ do + showStart "reinject" src + mkb <- genKey (KeySource src src Nothing) Nothing + case mkb of + Nothing -> error "Failed to generate key" + Just (key, _) -> ifM (isKnownKey key) + ( next $ perform src key + , do + warning "Not known content; skipping" + next $ next $ return True + ) + +notAnnexed :: FilePath -> CommandStart -> CommandStart +notAnnexed src = ifAnnexed src (error $ "cannot used annexed file as src: " ++ src) -perform :: FilePath -> FilePath -> Key -> CommandPerform -perform src _dest key = ifM move +perform :: FilePath -> Key -> CommandPerform +perform src key = ifM move ( next $ cleanup key , error "failed" ) |