]> git.neil.brown.name Git - wiggle.git/commitdiff
vpatch: avoid repeated backups.
authorNeilBrown <neilb@suse.de>
Wed, 14 Nov 2012 05:10:15 +0000 (16:10 +1100)
committerNeilBrown <neilb@suse.de>
Wed, 14 Nov 2012 22:20:40 +0000 (09:20 +1100)
If we have already saved a merge, taking a backup, then don't take further
backups - pointless and possibly distructive.

Signed-off-by: NeilBrown <neilb@suse.de>
merge2.c
vpatch.c
wiggle.h

index 53f8f8ecc9573be22bbf6cd411bf4320e4323fe2..8520082bf55b2af7865670fab2c6afc0ed66401b 100644 (file)
--- a/merge2.c
+++ b/merge2.c
@@ -659,7 +659,7 @@ void print_merge(FILE *out, struct file *a, struct file *b, struct file *c,
 }
 
 int save_merge(struct file a, struct file b, struct file c,
-               struct merge *merger, char *file)
+              struct merge *merger, char *file, int backup)
 {
        char *replacename = xmalloc(strlen(file) + 20);
        char *orignew = xmalloc(strlen(file) + 20);
@@ -679,8 +679,9 @@ int save_merge(struct file a, struct file b, struct file c,
        outfile = fdopen(fd, "w");
        print_merge(outfile, &a, &b, &c, 0, merger);
        fclose(outfile);
-       if (rename(file, orignew) != 0 ||
-           rename(replacename, file) != 0)
+       if (backup && rename(file, orignew) != 0)
+               err = -2;
+       else if (rename(replacename, file) != 0)
                err = -2;
 
 out:
index 07cad7c3aac620e4a73754e00346e5fd42e05661..3d68fbab4edeca82af59d662bf8cee0c21284ed3 100644 (file)
--- a/vpatch.c
+++ b/vpatch.c
@@ -1637,7 +1637,7 @@ static int merge_window(struct plist *p, FILE *f, int reverse)
                                        break;
                                if (answer)
                                        save_merge(fm, fb, fa, ci.merger,
-                                                  p->file);
+                                                  p->file, !p->is_merge);
                        }
                        free(sm.body);
                        free(sb.body);
@@ -2436,7 +2436,7 @@ static void main_window(struct plist *pl, int *np, FILE *f, int reverse)
                                csl2 = diff(fb, fa);
                                ci = make_merger(fm, fb, fa, csl1, csl2, 0, 1, 0);
                                if (save_merge(fm, fb, fa, ci.merger,
-                                              pl[pos].file) == 0) {
+                                              pl[pos].file, 1) == 0) {
                                        pl[pos].is_merge = 1;
                                        snprintf(mesg_buf, cols,
                                                 "Saved file %s.",
index 32a68bc777d650bab75f9d43736897a32fd1fd3e..1974523fbbc4ae83105858a9c57088b75d06dab4 100644 (file)
--- a/wiggle.h
+++ b/wiggle.h
@@ -172,7 +172,7 @@ extern void print_merge(FILE *out,
                        int words, struct merge *merger);
 extern void printword(FILE *f, struct elmnt e);
 extern int save_merge(struct file a, struct file b, struct file c,
-                     struct merge *merger, char *file);
+                     struct merge *merger, char *file, int backup);
 
 extern int isolate_conflicts(struct file af, struct file bf, struct file cf,
                             struct csl *csl1, struct csl *csl2, int words,