]> ruderich.org/simon Gitweb - safcm/safcm.git/blobdiff - cmd/safcm/sync_sync.go
Use SPDX license identifiers
[safcm/safcm.git] / cmd / safcm / sync_sync.go
index f07d07f68f4e901c57d78239f78c27cc21bd5bd5..ff4f4c8a41935fe45eb06f6fec55e9dd89dc21dd 100644 (file)
@@ -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 <http://www.gnu.org/licenses/>.
+// 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