From afb7e8e2c886c9907f9aee8f9c32baabcbbcf997 Mon Sep 17 00:00:00 2001
From: Simon Ruderich <simon@ruderich.org>
Date: Thu, 13 May 2021 13:40:54 +0200
Subject: [PATCH] safcm: use only slash separated paths for the configuration

This change is in preparation to support running synchronizations from
Windows systems. However, Windows remotes won't be supported in the
foreseeable future.
---
 cmd/safcm/config/files.go | 7 +++++--
 cmd/safcm/sync_sync.go    | 4 ++--
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/cmd/safcm/config/files.go b/cmd/safcm/config/files.go
index 8f63770..7ffa8b2 100644
--- a/cmd/safcm/config/files.go
+++ b/cmd/safcm/config/files.go
@@ -21,7 +21,9 @@ import (
 	"fmt"
 	"io/fs"
 	"os"
+	slashpath "path"
 	"path/filepath"
+	"runtime"
 
 	"ruderich.org/simon/safcm"
 )
@@ -84,12 +86,13 @@ via "safcm fixperms".
 			return fmt.Errorf("%q: file type not supported", path)
 		}
 
-		// Convert to absolute path as used on the target host
+		// Convert to absolute and slash-separated path as used on the
+		// target host
 		x, err := filepath.Rel(basePath, path)
 		if err != nil {
 			return err
 		}
-		x = filepath.Join("/", x)
+		x = slashpath.Join("/", filepath.ToSlash(x))
 
 		files[x] = &safcm.File{
 			Path: x,
diff --git a/cmd/safcm/sync_sync.go b/cmd/safcm/sync_sync.go
index 0d5a722..3f0c30b 100644
--- a/cmd/safcm/sync_sync.go
+++ b/cmd/safcm/sync_sync.go
@@ -21,7 +21,6 @@ import (
 	"fmt"
 	"math"
 	"os"
-	"path/filepath"
 	"sort"
 	"strings"
 
@@ -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
-- 
2.49.0