Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Junio C Hamano committed Jul 24, 2015
1 parent 1d51ece commit 15ed07d
Showing 1 changed file with 26 additions and 24 deletions.
50 changes: 26 additions & 24 deletions rerere.c
Expand Up @@ -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};
Expand All @@ -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")) ||
Expand All @@ -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);
Expand Down

0 comments on commit 15ed07d

Please sign in to comment.