improve match explanations

Using == and != proved too hard to read, so went with [TRUE] and [FALSE]
after the term. I would kind of liked to have used emojis for a green
check and red X, but probably that is too fancy to be a good idea.

Make --explain output be inside [ ] with whitespace around them, to
avoid it ending with eg "[FALSE]]" and to make it easier to visually
find the start of it.

Sponsored-by: Dartmouth College's DANDI project
This commit is contained in:
Joey Hess 2023-07-26 15:29:23 -04:00
parent 08071a1b90
commit 499d014123
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
4 changed files with 24 additions and 4 deletions

View file

@ -625,8 +625,9 @@ checkKey a (MatchingFile fi) = lookupFileKey fi >>= maybe (return False) a
checkKey a (MatchingInfo p) = maybe (return False) a (providedKey p)
checkKey a (MatchingUserInfo p) = a =<< getUserInfo (userProvidedKey p)
matchDescSimple :: String -> Bool -> Utility.Matcher.MatchDesc
matchDescSimple s b = Utility.Matcher.MatchDesc $ (if b then "" else "!") ++ s
matchDescSimple :: String -> (Bool -> Utility.Matcher.MatchDesc)
matchDescSimple s b = Utility.Matcher.MatchDesc $ s ++
if b then "[TRUE]" else "[FALSE]"
(=?) :: String -> String -> (Bool -> Utility.Matcher.MatchDesc)
k =? v = \b -> Utility.Matcher.MatchDesc $ k ++ (if b then "==" else "!=") ++ v
k =? v = matchDescSimple (k ++ "=" ++ v)

View file

@ -306,7 +306,7 @@ explain ai (Just msg) = do
when (Annex.explainenabled rd) $
let d = actionItemDesc ai
in outputMessage JSON.none id $
"[" <> (if d == mempty then "" else (d <> " ")) <> msg <> "]\n"
"[ " <> (if d == mempty then "" else (d <> " ")) <> msg <> " ]\n"
explain _ _ = return ()
{- Prevents any concurrent console access while running an action, so

View file

@ -37,6 +37,13 @@ Most of these options are accepted by all git-annex commands.
what to do. The explanations will be inside square brackets.
For example, "[foo is not present here]"
This includes explanations of why preferred content expressions and
other similar expressions like annex.largefiles match or fail to match.
In these explanations, the expression is displayed, with each term
followed by "[TRUE]" or "[FALSE]" to indicate the value.
Irrelevant terms will be ommitted from the explanation, for example
`"exclude=* and copies=1"` will be displayed as `"exclude=*[FALSE]"`
* `--debug`
Display debug messages to standard error.

View file

@ -0,0 +1,12 @@
[[!comment format=mdwn
username="joey"
subject="""comment 2"""
date="2023-07-26T19:31:40Z"
content="""
--explain is implemented and expanations for preferred content expressions,
annex.largefiles, and annex.addunlocked are now displayed.
Leaving this open because I do think that explanations of numcopies and
content presence checking should be added, as well as perhaps explanations
of drop proofs.
"""]]