diff options
author | Junio C Hamano <gitster@pobox.com> | 2015-07-06 15:32:53 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-07-24 16:05:40 -0700 |
commit | 15ed07d532db743a2a397a38bacc1f20e54b2c80 (patch) | |
tree | 118aa0160e95a6ea5f8f29068ac640922f75b1a2 | |
parent | rerere: use "struct rerere_id" instead of "char *" for conflict ID (diff) | |
download | tgif-15ed07d532db743a2a397a38bacc1f20e54b2c80.tar.xz |
rerere: un-nest merge() further
By consistently using "upon failure, set 'ret' and jump to out"
pattern, flatten the function further.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | rerere.c | 50 |
1 files changed, 26 insertions, 24 deletions
@@ -580,6 +580,7 @@ int rerere_remaining(struct string_list *merge_rr) */ static int merge(const struct rerere_id *id, const char *path) { + FILE *f; int ret; mmfile_t cur = {NULL, 0}, base = {NULL, 0}, other = {NULL, 0}; mmbuffer_t result = {NULL, 0}; @@ -588,8 +589,10 @@ static int merge(const struct rerere_id *id, const char *path) * Normalize the conflicts in path and write it out to * "thisimage" temporary file. */ - if (handle_file(path, NULL, rerere_path(id, "thisimage")) < 0) - return 1; + if (handle_file(path, NULL, rerere_path(id, "thisimage")) < 0) { + ret = 1; + goto out; + } if (read_mmfile(&cur, rerere_path(id, "thisimage")) || read_mmfile(&base, rerere_path(id, "preimage")) || @@ -603,29 +606,28 @@ static int merge(const struct rerere_id *id, const char *path) * low-level merge driver settings. */ ret = ll_merge(&result, path, &base, NULL, &cur, "", &other, "", NULL); - if (!ret) { - FILE *f; + if (ret) + goto out; - /* - * A successful replay of recorded resolution. - * Mark that "postimage" was used to help gc. - */ - if (utime(rerere_path(id, "postimage"), NULL) < 0) - warning("failed utime() on %s: %s", - rerere_path(id, "postimage"), - strerror(errno)); - - /* Update "path" with the resolution */ - f = fopen(path, "w"); - if (!f) - return error("Could not open %s: %s", path, - strerror(errno)); - if (fwrite(result.ptr, result.size, 1, f) != 1) - error("Could not write %s: %s", path, strerror(errno)); - if (fclose(f)) - return error("Writing %s failed: %s", path, - strerror(errno)); - } + /* + * A successful replay of recorded resolution. + * Mark that "postimage" was used to help gc. + */ + if (utime(rerere_path(id, "postimage"), NULL) < 0) + warning("failed utime() on %s: %s", + rerere_path(id, "postimage"), + strerror(errno)); + + /* Update "path" with the resolution */ + f = fopen(path, "w"); + if (!f) + return error("Could not open %s: %s", path, + strerror(errno)); + if (fwrite(result.ptr, result.size, 1, f) != 1) + error("Could not write %s: %s", path, strerror(errno)); + if (fclose(f)) + return error("Writing %s failed: %s", path, + strerror(errno)); out: free(cur.ptr); |