func (s *Sync) formatCommandChanges(changes []safcm.CommandChange) string {
const indent = " > "
+ // Quiet hides all successful, non-trigger commands which produce no
+ // output. This is useful as many commands will be used to enforce a
+ // certain state (e.g. file not-present, `ainsl`, etc.) and are run on
+ // each sync. Displaying them provides not much useful information.
+ // Instead, quiet shows them only when they produce output (e.g.
+ // `ainsl`, `rm -v`) and thus modify the host's state.
+ var noOutput int
+ if s.config.Quiet && !s.config.DryRun {
+ for _, x := range changes {
+ if x.Trigger == "" &&
+ x.Error == "" &&
+ x.Output == "" {
+ noOutput++
+ }
+ }
+ }
+
var buf strings.Builder
- fmt.Fprintf(&buf, "executed %d command(s):", len(changes))
+ fmt.Fprintf(&buf, "executed %d command(s)", len(changes))
+ if noOutput > 0 {
+ fmt.Fprintf(&buf, ", %d with no output", noOutput)
+ }
+ if noOutput != len(changes) {
+ fmt.Fprintf(&buf, ":")
+ }
if s.config.DryRun {
fmt.Fprintf(&buf, " (dry-run)")
}
fmt.Fprintf(&buf, "\n")
for _, x := range changes {
+ if noOutput > 0 &&
+ x.Trigger == "" && x.Error == "" && x.Output == "" {
+ continue
+ }
+
fmt.Fprintf(&buf, "%s", s.formatTarget(x.Command))
if x.Trigger != "" {
fmt.Fprintf(&buf, ", trigger for %q", x.Trigger)