-
Notifications
You must be signed in to change notification settings - Fork 27
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add hints for failing conditions #172
Conversation
Would it be possible to implement check-wide hints for checks with multiple conditions? This would be useful in the case that you don't want per-condition hints but one for an entire check. Do you think people would run into this/find that feature useful? |
@@ -91,7 +91,7 @@ func debug(p ...interface{}) { | |||
} else { | |||
printStr = printer(color.FgMagenta, "DBUG", toPrint) | |||
} | |||
fmt.Printf(printStr) | |||
fmt.Print(printStr) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As it was Printf()
before, this is just a sanity check, but it is intentional that it is Print()
and not Println()
yeah?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah sorry had this change lying around for a while, it is supposed to be Print. Printf was kind of like a format string vulnerability lol, not that those exist in go. The newline is added in toPrint via Sprintln.
score.go
Outdated
@@ -252,27 +274,24 @@ func scoreCheck(check check) { | |||
} | |||
} | |||
|
|||
func checkFails(check *check) bool { | |||
func checkOr(check *check, hint *hintItem) bool { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we have a line or two to explain what checkOr
and checkAnd
are designed to do? it is a slightly less direct name than previously
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I saw that the functions were identical for checkFails/PassOverride because they were both OR/|| behavior, in that on the first true, return. Whereas pass is AND/&& because everything needs to be true otherwise return false. Sure I'll add a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actually good catch I messed that up and forgot to change it to take a list of conds rather than a check
Cmd: "dpkg -s " + c.Name, | ||
}.Command() | ||
Cmd: "dpkg -s " + c.Name, | ||
Value: " install", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
what does this change do?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this question also applies to line 215
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yea lol I think that check was broken. After removing something with apt, dpkg just shows the status as deinstall. Does not return nonzero value for -s
docs/hints.md
Outdated
# This hint will NOT print unless the condition above succeeds. | ||
# Pass conditions are logically AND-- they all need to succeed. | ||
# If one fails, there's no reason to execute the other ones. | ||
hint = "Removing just the binary is insufficient; use a package manager to remove all of a tool's files." |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
at least by my logic, if a Program is NOT installed (so its no longer in the package manager DB saying it is or is not installed), then "using a package manager to remove the tool's files" would be useless since the package manager has no idea it exists -- if my understanding is right, shouldn't the hint be more like "The binary and its files need removed!"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The example here is a "common" issue where people remove a package but don't purge or autoremove, so there's a hint for that (eg remove john, john-data still exists). I suppose the hint could be "Ensure that you use a package manager to remove ALL of a tool's files"
type = "PathExistsNot" | ||
path = "/usr/share/john" | ||
``` | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
so you would end up with two hints to the same check? Which can be confusing when its based on points so
(Points: 5) (hint)
(Points: 5) (another hint on the same thing, but it could be interpreted as solving both hints give you 10 points)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
When points are for the same item they're grouped in a list so I don't think that would be confusing. Maybe vice versa if there are two hints for 5 points someone could think they're the same underlying check but I think that's unlikely
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good on paper, if you want me to give it a spin before we push I can do that today.
I should probably also update the docs for my (now 2 weeks old) PR and we push both of these at the same time with a version change?
Add hints, like:
Example pseudo config: