X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=cmd%2Fsafcm%2Fsync_changes.go;h=3e91768bfca3eb3273e5c24954c506f86934a63b;hb=5d6cc7f14a4bacc36bf3a23cd735a75ad4a90f1d;hp=46349116a602d1fb7e389b7b089116aabbbbd418;hpb=30df06d9dc760f7adf8ce51f2443dedc773f1350;p=safcm%2Fsafcm.git diff --git a/cmd/safcm/sync_changes.go b/cmd/safcm/sync_changes.go index 4634911..3e91768 100644 --- a/cmd/safcm/sync_changes.go +++ b/cmd/safcm/sync_changes.go @@ -30,6 +30,40 @@ import ( // the remote helper is untrusted and must be either escaped with %q or by // calling EscapeControlCharacters(). +func (s *Sync) formatChanges(resp safcm.MsgSyncResp) string { + var changes []string + if len(resp.FileChanges) > 0 { + changes = append(changes, + s.formatFileChanges(resp.FileChanges)) + } + if len(resp.PackageChanges) > 0 { + changes = append(changes, + s.formatPackageChanges(resp.PackageChanges)) + } + if len(resp.ServiceChanges) > 0 { + changes = append(changes, + s.formatServiceChanges(resp.ServiceChanges)) + } + if len(resp.CommandChanges) > 0 { + changes = append(changes, + s.formatCommandChanges(resp.CommandChanges)) + } + if len(changes) == 0 { + // Notify user that the host was synced successfully + return "no changes" + } + + x := strings.Join(changes, "\n") + // If quiet is used and only commands without output were executed + // then don't prepend a newline so that the whole change output of a + // host fits in a single line. This makes the output much more + // readable with multiple hosts. + if strings.Count(x, "\n") == 1 { + return x + } + return "\n" + x +} + func (s *Sync) formatFileChanges(changes []safcm.FileChange) string { var buf strings.Builder fmt.Fprintf(&buf, "changed %d file(s):", len(changes)) @@ -152,7 +186,7 @@ func (s *Sync) formatCommandChanges(changes []safcm.CommandChange) string { // 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 { + if s.config.Quiet { for _, x := range changes { if x.Trigger == "" && x.Error == "" && @@ -164,7 +198,7 @@ func (s *Sync) formatCommandChanges(changes []safcm.CommandChange) string { var buf strings.Builder fmt.Fprintf(&buf, "executed %d command(s)", len(changes)) - if noOutput > 0 { + if noOutput > 0 && !s.config.DryRun { fmt.Fprintf(&buf, ", %d with no output", noOutput) } if noOutput != len(changes) { @@ -226,10 +260,6 @@ func (s *Sync) formatDiff(diff string) string { } func indentBlock(x string, sep string) string { - if x == "" { - return "" - } - lines := strings.Split(x, "\n") if lines[len(lines)-1] == "" { lines = lines[:len(lines)-1]