From: NeilBrown Date: Thu, 22 Aug 2013 03:44:47 +0000 (+1000) Subject: Browser: if editing leaves no conflicts, display diff. X-Git-Tag: v1.0~17 X-Git-Url: http://git.neil.brown.name/?a=commitdiff_plain;h=d22ae78f38b9194521487ef8264ea9bc9a8b4ac7;p=wiggle.git Browser: if editing leaves no conflicts, display diff. This isn't completely consistent behaviour, but it seems useful for now. Signed-off-by: NeilBrown --- diff --git a/vpatch.c b/vpatch.c index 3d52803..52c9d3f 100644 --- a/vpatch.c +++ b/vpatch.c @@ -1276,6 +1276,12 @@ static void do_edit(char *file, int line) } } +static void *memdup(void *a, int len) +{ + char *r = malloc(len); + memcpy(r, a, len); + return r; +} static int merge_window(struct plist *p, FILE *f, int reverse, int replace, int selftest, int ignore_blanks, int just_diff) @@ -1848,6 +1854,16 @@ static int merge_window(struct plist *p, FILE *f, int reverse, int replace, do_edit(tempname, lineno); sp = load_file(tempname); split_merge(sp, &sm, &sb, &sa); + if (sp.len == sm.len && + memcmp(sp.body, sm.body, sm.len) == 0 && + !p->is_merge) { + /* no conflicts left, so display diff */ + free(sm.body); + sm = load_file(p->file); + free(sb.body); + sb = sm; + sb.body = memdup(sm.body, sm.len); + } free(sp.body); prepare_merge(0); refresh = 2;