diff --git a/main.go b/main.go index 968d090..0620fd4 100755 --- a/main.go +++ b/main.go @@ -147,18 +147,25 @@ func applyPatch(patchPath, rootPath string) error { return fmt.Errorf("failed to read patch file: %v", err) } - if inputFilePath == "" && patchType != "new" { - return fmt.Errorf("patch file must specify input (i:) file") - } + if patchType != "replace-all" { + if inputFilePath == "" && patchType != "new" { + return fmt.Errorf("patch file must specify input (i:) file") + } - if outputFilePath == "" { - return fmt.Errorf("patch file must specify output (o:) file") - } + if outputFilePath == "" { + return fmt.Errorf("patch file must specify output (o:) file") + } - if patchType != "new" && patchType != "copy" && inputFilePath != outputFilePath { - err = os.Rename(inputFilePath, outputFilePath) - if err != nil { - return fmt.Errorf("failed to replace output file: %v", err) + // Only do this rename if it's not 'new' or 'copy' + if patchType != "new" && patchType != "copy" && inputFilePath != outputFilePath { + // Only rename if the input file actually exists + if _, err := os.Stat(inputFilePath); os.IsNotExist(err) { + return fmt.Errorf("input file does not exist: %s", inputFilePath) + } + err = os.Rename(inputFilePath, outputFilePath) + if err != nil { + return fmt.Errorf("failed to replace output file: %v", err) + } } } diff --git a/replace-all.go b/replace-all.go index 0af8d72..302192a 100644 --- a/replace-all.go +++ b/replace-all.go @@ -32,15 +32,24 @@ func applyReplaceAllPatch(rootPath string, modifications []string) error { if err != nil { return err } - if d.IsDir() { - // Skip patcher's own directory and subdirectories - if strings.HasPrefix(path, patcherDir) { + + // Skip patcher's own dir and subdirs + if strings.HasPrefix(path, patcherDir) { + if d.IsDir() { return fs.SkipDir } return nil } - // Skip patcher's own files - if strings.HasPrefix(path, patcherDir) { + + // Skip any obj-* folders inside mozilla-release + if strings.Contains(path, "mozilla-release/obj-") { + if d.IsDir() { + return fs.SkipDir + } + return nil + } + + if d.IsDir() { return nil }