0033e6c0a6
Especially useful with proxied remotes and clusters, where the user may not be entirely familiar with the name and can learn by tab completion.
44 lines
1.3 KiB
Haskell
44 lines
1.3 KiB
Haskell
{- git-annex command
|
|
-
|
|
- Copyright 2011, 2015 Joey Hess <id@joeyh.name>
|
|
-
|
|
- Licensed under the GNU AGPL version 3 or higher.
|
|
-}
|
|
|
|
module Command.Dead where
|
|
|
|
import Command
|
|
import Types.TrustLevel
|
|
import Command.Trust (trustCommand)
|
|
import Logs.Location
|
|
import Remote (keyLocations)
|
|
import Git.Types
|
|
|
|
cmd :: Command
|
|
cmd = withAnnexOptions [jsonOptions] $
|
|
command "dead" SectionSetup "hide a lost repository or key"
|
|
(paramRepeating paramRepository) (seek <$$> optParser)
|
|
|
|
data DeadOptions = DeadRemotes [RemoteName] | DeadKeys [Key]
|
|
|
|
optParser :: CmdParamsDesc -> Parser DeadOptions
|
|
optParser desc = (DeadRemotes <$> cmdParamsWithCompleter desc completeRemotes)
|
|
<|> (DeadKeys <$> many (option (str >>= parseKey)
|
|
( long "key" <> metavar paramKey
|
|
<> help "keys whose content has been irretrievably lost"
|
|
)))
|
|
|
|
seek :: DeadOptions -> CommandSeek
|
|
seek (DeadRemotes rs) = trustCommand "dead" DeadTrusted rs
|
|
seek (DeadKeys ks) = commandActions $ map startKey ks
|
|
|
|
startKey :: Key -> CommandStart
|
|
startKey key = starting "dead" (mkActionItem key) (SeekInput []) $
|
|
keyLocations key >>= \case
|
|
[] -> performKey key
|
|
_ -> giveup "This key is still known to be present in some locations; not marking as dead."
|
|
|
|
performKey :: Key -> CommandPerform
|
|
performKey key = do
|
|
setDead key
|
|
next $ return True
|