]> ruderich.org/simon Gitweb - safcm/safcm.git/blobdiff - cmd/safcm/sync_changes.go
safcm: add -q (quiet) command line option
[safcm/safcm.git] / cmd / safcm / sync_changes.go
index 14d73c271a4bb0d8434d5896bf17bd78a4552407..46349116a602d1fb7e389b7b089116aabbbbd418 100644 (file)
@@ -145,13 +145,41 @@ func (s *Sync) formatServiceChanges(changes []safcm.ServiceChange) string {
 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)