From f8fd934b46c4fd4c246d875af7d9489f703d6513 Mon Sep 17 00:00:00 2001 From: fcd <1352288+femnad@users.noreply.github.com> Date: Sun, 4 Feb 2024 23:22:21 +0000 Subject: [PATCH] fix: set owner if the file is new --- internal/run.go | 8 ++++++-- main.go | 2 +- provision/ensurelines.go | 26 ++++++++++++++++---------- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/internal/run.go b/internal/run.go index 354aa07..54ad9dc 100644 --- a/internal/run.go +++ b/internal/run.go @@ -64,7 +64,7 @@ func MaybeRunWithSudoForPath(cmdStr, path string) error { return err } -func Move(src, dst string) error { +func Move(src, dst string, setOwner bool) error { if IsHomePath(dst) { return os.Rename(src, dst) } @@ -75,5 +75,9 @@ func Move(src, dst string) error { return err } - return chown(src, rootUser, rootUser) + if setOwner { + return chown(dst, rootUser, rootUser) + } + + return nil } diff --git a/main.go b/main.go index 7681432..50d4e5c 100644 --- a/main.go +++ b/main.go @@ -13,7 +13,7 @@ import ( ) const ( - version = "0.31.7" + version = "0.31.8" ) type args struct { diff --git a/provision/ensurelines.go b/provision/ensurelines.go index 8fe0c02..049415b 100644 --- a/provision/ensurelines.go +++ b/provision/ensurelines.go @@ -14,13 +14,18 @@ import ( ) var ( - ensureFns = map[string]func(string, *os.File, entity.LineInFile) (bool, error){ + ensureFns = map[string]func(string, *os.File, entity.LineInFile) (ensureResult, error){ "ensure": ensure, "replace": replace, } ) -func ensure(file string, tmpFile *os.File, line entity.LineInFile) (changed bool, err error) { +type ensureResult struct { + changed bool + new bool +} + +func ensure(file string, tmpFile *os.File, line entity.LineInFile) (result ensureResult, err error) { content := mapset.NewSet[string]() for _, l := range line.Content { content.Add(l) @@ -46,7 +51,7 @@ func ensure(file string, tmpFile *os.File, line entity.LineInFile) (changed bool } if content.Cardinality() == 0 { - return false, nil + return } content.Each(func(l string) bool { @@ -55,13 +60,13 @@ func ensure(file string, tmpFile *os.File, line entity.LineInFile) (changed bool }) if err != nil { - return false, fmt.Errorf("error ensuring lines in file %s", file) + return result, fmt.Errorf("error ensuring lines in file %s", file) } - return true, nil + return ensureResult{changed: true, new: newFile}, nil } -func replace(file string, tmpFile *os.File, line entity.LineInFile) (changed bool, err error) { +func replace(file string, tmpFile *os.File, line entity.LineInFile) (result ensureResult, err error) { srcFile, err := os.Open(file) if err != nil { return @@ -82,6 +87,7 @@ func replace(file string, tmpFile *os.File, line entity.LineInFile) (changed boo replacements[replacement.Old] = replacement.New } + var changed bool for scanner.Scan() { var lineToWrite string l := scanner.Text() @@ -106,7 +112,7 @@ func replace(file string, tmpFile *os.File, line entity.LineInFile) (changed boo } } - return changed, nil + return ensureResult{changed: changed}, nil } func ensureLine(config entity.Config, line entity.LineInFile) error { @@ -126,13 +132,13 @@ func ensureLine(config entity.Config, line entity.LineInFile) error { return fmt.Errorf("no method for %s'ing a line", line.Name) } - changed, err := ensureFn(target, tmpFile, line) + result, err := ensureFn(target, tmpFile, line) if err != nil { return err } tmpPath := tmpFile.Name() - if !changed { + if !result.changed { internal.Log.Debugf("Not modifying %s as no changes were found", target) err = os.Remove(tmpPath) if err != nil { @@ -147,7 +153,7 @@ func ensureLine(config entity.Config, line entity.LineInFile) error { return err } - err = internal.Move(tmpPath, target) + err = internal.Move(tmpPath, target, result.new) if err != nil { return fmt.Errorf("error renaming %s to %s: %v", tmpPath, target, err) }