From: NeilBrown Date: Wed, 14 Nov 2012 05:10:15 +0000 (+1100) Subject: vpatch: avoid repeated backups. X-Git-Tag: v1.0~88 X-Git-Url: http://git.neil.brown.name/?a=commitdiff_plain;h=1cec80a024bd04decfefad24cdfc435f271a9f7e;p=wiggle.git vpatch: avoid repeated backups. If we have already saved a merge, taking a backup, then don't take further backups - pointless and possibly distructive. Signed-off-by: NeilBrown --- diff --git a/merge2.c b/merge2.c index 53f8f8e..8520082 100644 --- 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: diff --git a/vpatch.c b/vpatch.c index 07cad7c..3d68fba 100644 --- 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.", diff --git a/wiggle.h b/wiggle.h index 32a68bc..1974523 100644 --- 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,