]> ruderich.org/simon Gitweb - safcm/safcm.git/blobdiff - cmd/safcm/sync_sync.go
safcm: use only slash separated paths for the configuration
[safcm/safcm.git] / cmd / safcm / sync_sync.go
index 930a263998566c3a71563b30c1e374f6ada06ecb..3f0c30b0e88e88baa2044212ce0c84646b692ea9 100644 (file)
@@ -21,7 +21,6 @@ import (
        "fmt"
        "math"
        "os"
-       "path/filepath"
        "sort"
        "strings"
 
@@ -47,7 +46,7 @@ func (s *Sync) hostSync(conn *rpc.Conn, detectedGroups []string) error {
        // Display changes
        changes := s.formatChanges(resp)
        if changes != "" {
-               s.logf(safcm.LogInfo, true, "%s", changes)
+               s.log(safcm.LogInfo, true, changes)
        }
 
        if resp.Error != "" {
@@ -83,9 +82,9 @@ func (s *Sync) hostSyncReq(detectedGroups []string) (
                sort.Slice(priorities, func(i, j int) bool {
                        a := priorities[i]
                        b := priorities[j]
-                       return groupPriority[a] < groupPriority[b]
+                       return groupPriority[a] > groupPriority[b]
                })
-               s.logVerbosef("host group priorities (desc. priority): %v",
+               s.logVerbosef("host group priorities (descending): %v",
                        strings.Join(priorities, " "))
        }
 
@@ -186,21 +185,21 @@ 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] = math.MinInt32 + i + 1
+               groupPriority[x] = len(s.config.GroupPriority) - i
        }
        // Host itself always has highest priority
-       groupPriority[s.host.Name] = math.MinInt32
+       groupPriority[s.host.Name] = math.MaxInt32
 
        // Sort groups after priority and name
        sort.Slice(groups, func(i, j int) bool {
                a := groups[i]
                b := groups[j]
-               if groupPriority[a] > groupPriority[b] {
+               if groupPriority[a] < groupPriority[b] {
                        return true
-               } else if groupPriority[a] < groupPriority[b] {
+               } else if groupPriority[a] > groupPriority[b] {
                        return false
                } else {
                        return a < b
@@ -220,7 +219,7 @@ func (s *Sync) checkFileConflict(group string, path string, file *safcm.File,
 
        newPrio := groupPriority[group]
        oldPrio := groupPriority[old.OrigGroup]
-       if oldPrio > newPrio {
+       if oldPrio < newPrio {
                if old.Mode.IsDir() && file.Mode.IsDir() &&
                        old.TriggerCommands != nil {
                        s.logDebugf("files: %q: "+
@@ -228,7 +227,7 @@ func (s *Sync) checkFileConflict(group string, path string, file *safcm.File,
                                path, group, old.OrigGroup)
                }
                return nil
-       } else if oldPrio < newPrio {
+       } else if oldPrio > newPrio {
                // Should never happen, groups are sorted by priority
                panic("invalid group priorities")
        }
@@ -241,7 +240,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 +254,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