]> git.neil.brown.name Git - wiggle.git/commitdiff
Preserve file mode when using doing --merge --replace
authorBenjamin Poirier <benjamin.poirier@gmail.com>
Tue, 27 Aug 2019 05:28:43 +0000 (14:28 +0900)
committerBenjamin Poirier <benjamin.poirier@gmail.com>
Tue, 27 Aug 2019 05:28:43 +0000 (14:28 +0900)
wiggle.c

index 140b292da78fcd58e6fc8b7142cb7c93f1b838a1..d4e88ebd0c6d149ec32428cc7336b5f8978e0634 100644 (file)
--- a/wiggle.c
+++ b/wiggle.c
@@ -589,6 +589,20 @@ static int do_merge(int argc, char *argv[], int obj, int blanks,
        if (outfilename)
                fclose(outfile);
        else if (replace) {
+               struct stat statbuf;
+
+               if (stat(argv[0], &statbuf) != 0) {
+                       fprintf(stderr,
+                               "%s: failed to stat original file. - %s\n",
+                               Cmd, strerror(errno));
+                       return 2;
+               }
+               if (fchmod(fileno(outfile), statbuf.st_mode) != 0) {
+                       fprintf(stderr,
+                               "%s: failed to change permission of new file. - %s\n",
+                               Cmd, strerror(errno));
+                       return 2;
+               }
                fclose(outfile);
                if (rename(argv[0], orignew) == 0 &&
                    rename(replacename, argv[0]) == 0)