parse X in location log file as indicating a dead key
A dead key is both not present at the location that thinks it has a copy, and also is assumed to probably not be present anywhere else. Although there may be lurking disconnected repos that somehow still have a copy. Suprisingly few changes needed for this! This is because the presence log code only really concerns itself with keys that are present, and dead keys are not present. Note that both the location and web log can be parsed as having a dead key. I don't see any value to having keys listed as dead in the web log, but since it doesn't change any behavior, there was no point in not parsing it.
This commit is contained in:
parent
15a02d6e90
commit
53ede1a10e
2 changed files with 5 additions and 3 deletions
|
@ -20,7 +20,7 @@ data LogLine = LogLine {
|
||||||
info :: String
|
info :: String
|
||||||
} deriving (Eq, Show)
|
} deriving (Eq, Show)
|
||||||
|
|
||||||
data LogStatus = InfoPresent | InfoMissing
|
data LogStatus = InfoPresent | InfoMissing | InfoDead
|
||||||
deriving (Eq, Show, Bounded, Enum)
|
deriving (Eq, Show, Bounded, Enum)
|
||||||
|
|
||||||
{- Parses a log file. Unparseable lines are ignored. -}
|
{- Parses a log file. Unparseable lines are ignored. -}
|
||||||
|
@ -38,6 +38,7 @@ parseLog = mapMaybe parseline . lines
|
||||||
parseStatus :: String -> Maybe LogStatus
|
parseStatus :: String -> Maybe LogStatus
|
||||||
parseStatus "1" = Just InfoPresent
|
parseStatus "1" = Just InfoPresent
|
||||||
parseStatus "0" = Just InfoMissing
|
parseStatus "0" = Just InfoMissing
|
||||||
|
parseStatus "X" = Just InfoDead
|
||||||
parseStatus _ = Nothing
|
parseStatus _ = Nothing
|
||||||
|
|
||||||
{- Generates a log file. -}
|
{- Generates a log file. -}
|
||||||
|
@ -47,6 +48,7 @@ showLog = unlines . map genline
|
||||||
genline (LogLine d s i) = unwords [show d, genstatus s, i]
|
genline (LogLine d s i) = unwords [show d, genstatus s, i]
|
||||||
genstatus InfoPresent = "1"
|
genstatus InfoPresent = "1"
|
||||||
genstatus InfoMissing = "0"
|
genstatus InfoMissing = "0"
|
||||||
|
genstatus InfoDead = "X"
|
||||||
|
|
||||||
{- Given a log, returns only the info that is are still in effect. -}
|
{- Given a log, returns only the info that is are still in effect. -}
|
||||||
getLog :: String -> [String]
|
getLog :: String -> [String]
|
||||||
|
|
|
@ -171,8 +171,8 @@ for file contents. These are placed in two levels of subdirectories
|
||||||
for hashing. See [[hashing]] for details.
|
for hashing. See [[hashing]] for details.
|
||||||
|
|
||||||
The name of the key is the filename, and the content
|
The name of the key is the filename, and the content
|
||||||
consists of a timestamp, either 1 (present) or 0 (not present), and
|
consists of a timestamp, either 1 (present) or 0 (not present) or X (dead),
|
||||||
the UUID of the repository that has or lacks the file content.
|
and the UUID of the repository that has or lacks the file content.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue