dead: A command which says that a repository is gone for good and you don't want git-annex to mention it again.

This commit is contained in:
Joey Hess 2011-12-02 16:59:55 -04:00
parent 7b08584c55
commit 251c01d51e
8 changed files with 40 additions and 15 deletions

View file

@ -46,6 +46,7 @@ import qualified Command.Uninit
import qualified Command.Trust
import qualified Command.Untrust
import qualified Command.Semitrust
import qualified Command.Dead
import qualified Command.AddUrl
import qualified Command.Map
import qualified Command.Upgrade
@ -70,6 +71,7 @@ cmds = concat
, Command.Trust.def
, Command.Untrust.def
, Command.Semitrust.def
, Command.Dead.def
, Command.AddUrl.def
, Command.FromKey.def
, Command.DropKey.def

View file

@ -27,6 +27,7 @@ module Logs.Location (
import Common.Annex
import qualified Annex.Branch
import Logs.Presence
import Logs.Trust
{- Log a change in the presence of a key's value in a repository. -}
logChange :: Key -> UUID -> LogStatus -> Annex ()
@ -34,9 +35,14 @@ logChange key (UUID u) s = addLog (logFile key) =<< logNow s u
logChange _ NoUUID _ = return ()
{- Returns a list of repository UUIDs that, according to the log, have
- the value of a key. -}
- the value of a key.
-
- Dead repositories are skipped.
-}
keyLocations :: Key -> Annex [UUID]
keyLocations key = map toUUID <$> (currentLog . logFile) key
keyLocations key = do
l <- map toUUID <$> (currentLog . logFile) key
snd <$> trustPartition DeadTrusted l
{- Finds all keys that have location log information.
- (There may be duplicate keys in the list.) -}

View file

@ -67,12 +67,14 @@ parseTrust s
w = words s
parse "1" = Trusted
parse "0" = UnTrusted
parse "X" = DeadTrusted
parse _ = SemiTrusted
showTrust :: TrustLevel -> String
showTrust SemiTrusted = "?"
showTrust UnTrusted = "0"
showTrust Trusted = "1"
showTrust UnTrusted = "0"
showTrust DeadTrusted = "X"
showTrust SemiTrusted = "?"
{- Changes the trust level for a uuid in the trustLog. -}
trustSet :: UUID -> TrustLevel -> Annex ()

View file

@ -14,7 +14,7 @@ import qualified Data.Map as M
import Types.UUID
data TrustLevel = SemiTrusted | UnTrusted | Trusted
data TrustLevel = Trusted | SemiTrusted | UnTrusted | DeadTrusted
deriving Eq
type TrustMap = M.Map UUID TrustLevel

2
debian/changelog vendored
View file

@ -15,6 +15,8 @@ git-annex (3.20111123) UNRELEASED; urgency=low
git repository.
* --inbackend can be used to make git-annex only operate on files
whose content is stored using a specified key-value backend.
* dead: A command which says that a repository is gone for good
and you don't want git-annex to mention it again.
-- Joey Hess <joeyh@debian.org> Tue, 22 Nov 2011 17:53:42 -0400

View file

@ -173,6 +173,11 @@ subdirectories).
Returns a repository to the default semi trusted state.
* dead [repository ...]
Indicates that the repository has been irretrevably lost.
(To undo, use semitrust.)
# REPOSITORY MAINTENANCE COMMANDS
* fsck [path ...]

View file

@ -4,16 +4,16 @@ drive died or some other misfortune has befallen your data.
Unless you configured backups, git-annex can't get your data back. But it
can help you deal with the loss.
First, go somewhere that knows about the lost repository, and mark it as
untrusted.
Go somewhere that knows about the lost repository, and mark it as
dead:
git annex untrust usbdrive
git annex dead usbdrive
To remind yourself later what happened, you can change its description, too:
This retains the [[location_tracking]] information for the repository,
but avoids trying to access it, or list it as a location where files
are present.
git annex describe usbdrive "USB drive lost in Timbuktu. Probably gone forever."
If you later found the drive, you could let git-annex know it's found
like so:
This retains the [[location_tracking]] information for the repository.
Maybe you'll find the drive later. Maybe that's impossible. Either way,
this lets git-annex tell you why a file is no longer accessible, and
it avoids it relying on that drive to hold any content.
git annex semitrusted usbdrive

View file

@ -1,8 +1,9 @@
Git-annex supports three levels of trust of a repository:
Git-annex supports several levels of trust of a repository:
* semitrusted (default)
* untrusted
* trusted
* dead
## semitrusted
@ -49,3 +50,10 @@ trust temporarily.
To configure a repository as fully and permanently trusted,
use the `git annex trust` command.
## dead
This is used to indicate that you have no trust that the repository
exists at all. It's appropriate to use when a drive has been lost,
or a directory irretrevably deleted. It will make git-annex avoid
even showing the repository as a place where data might still reside.