X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=cmd%2Fsafcm%2Fsync_sync.go;h=ff4f4c8a41935fe45eb06f6fec55e9dd89dc21dd;hb=HEAD;hp=f07d07f68f4e901c57d78239f78c27cc21bd5bd5;hpb=22b2572ad75a0bf6fb93a4655e71cf04328ec2a9;p=safcm%2Fsafcm.git diff --git a/cmd/safcm/sync_sync.go b/cmd/safcm/sync_sync.go index f07d07f..ff4f4c8 100644 --- a/cmd/safcm/sync_sync.go +++ b/cmd/safcm/sync_sync.go @@ -1,19 +1,7 @@ // "sync" sub-command: sync files -// Copyright (C) 2021 Simon Ruderich -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . +// SPDX-License-Identifier: GPL-3.0-or-later +// Copyright (C) 2021-2024 Simon Ruderich package main @@ -21,12 +9,12 @@ import ( "fmt" "math" "os" - "path/filepath" "sort" "strings" "ruderich.org/simon/safcm" "ruderich.org/simon/safcm/cmd/safcm/config" + "ruderich.org/simon/safcm/frontend" "ruderich.org/simon/safcm/rpc" ) @@ -35,19 +23,20 @@ func (s *Sync) hostSync(conn *rpc.Conn, detectedGroups []string) error { if err != nil { return err } - x, err := s.sendRecv(conn, req) + resp, err := s.loop.HostSyncMsg(s, conn, req) if err != nil { return err } - resp, ok := x.(safcm.MsgSyncResp) - if !ok { - return fmt.Errorf("unexpected response %v", x) - } // Display changes - changes := s.formatChanges(resp) + c := frontend.Changes{ + DryRun: s.config.DryRun, + Quiet: s.config.Quiet, + IsTTY: s.isTTY, + } + changes := c.FormatChanges(resp) if changes != "" { - s.logf(safcm.LogInfo, true, "%s", changes) + s.log(safcm.LogInfo, true, changes) } if resp.Error != "" { @@ -85,7 +74,7 @@ func (s *Sync) hostSyncReq(detectedGroups []string) ( b := priorities[j] return groupPriority[a] > groupPriority[b] }) - s.logVerbosef("host group priorities (desc. priority): %v", + s.logVerbosef("host group priorities (descending): %v", strings.Join(priorities, " ")) } @@ -186,7 +175,7 @@ func (s *Sync) resolveHostGroups(detectedGroups []string) ( return nil, nil, err } - // Early entries have higher priorities + // Early entries in "group_priority" have higher priorities groupPriority := make(map[string]int) for i, x := range s.config.GroupPriority { groupPriority[x] = len(s.config.GroupPriority) - i @@ -241,7 +230,7 @@ func (s *Sync) checkFileConflict(group string, path string, file *safcm.File, return nil } - return fmt.Errorf("groups %s and %s both provide file %q\n"+ + return fmt.Errorf("groups %s and %s both provide %q\n"+ "Use 'group_priority' in config.yaml to declare preference", group, old.OrigGroup, path) } @@ -255,7 +244,8 @@ func resolveFileDirConflicts(files map[string]*safcm.File) { return paths[i] < paths[j] }) - const sep = string(filepath.Separator) + // Slash separated paths are used for the configuration + const sep = "/" // Remove invalid paths which can result from group_priority // overriding paths from another group (e.g. "/foo" as file from one