From d22ae78f38b9194521487ef8264ea9bc9a8b4ac7 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Thu, 22 Aug 2013 13:44:47 +1000 Subject: [PATCH] Browser: if editing leaves no conflicts, display diff. This isn't completely consistent behaviour, but it seems useful for now. Signed-off-by: NeilBrown --- vpatch.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) 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; -- 2.39.5