public inbox for git@vger.kernel.org 
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox•com>
To: Johannes Schindelin <johannes.schindelin@gmx•de>
Cc: git@vger•kernel.org
Subject: Re: [PATCH 7/9] merge-recursive: handle return values indicating errors
Date: Wed, 29 Jun 2016 14:06:35 -0700	[thread overview]
Message-ID: <xmqqbn2j3dt0.fsf@gitster.mtv.corp.google.com> (raw)
In-Reply-To: <4f2817208cf2f7d4e839ddb6818bf652b0aa633c.1467199553.git.johannes.schindelin@gmx.de> (Johannes Schindelin's message of "Wed, 29 Jun 2016 13:37:04 +0200 (CEST)")

Johannes Schindelin <johannes.schindelin@gmx•de> writes:

> diff --git a/merge-recursive.c b/merge-recursive.c
> index 6ab7dfc..bb075e3 100644
> --- a/merge-recursive.c
> +++ b/merge-recursive.c
> @@ -266,8 +266,10 @@ struct tree *write_tree_from_memory(struct merge_options *o)
>  		active_cache_tree = cache_tree();
>  
>  	if (!cache_tree_fully_valid(active_cache_tree) &&
> -	    cache_tree_update(&the_index, 0) < 0)
> -		die(_("error building trees"));
> +	    cache_tree_update(&the_index, 0) < 0) {
> +		error(_("error building trees"));
> +		return NULL;
> +	}

This actually is a BUG(), isn't it?  We have already verified that
the cache is merged, so cache_tree_update() ought to be able to come
up with the whole-tree hash.

> @@ -548,19 +550,17 @@ static int update_stages(const char *path, const struct diff_filespec *o,
>  	 */
>  	int clear = 1;
>  	int options = ADD_CACHE_OK_TO_ADD | ADD_CACHE_SKIP_DFCHECK;
> +	int ret = 0;
> +
>  	if (clear)
> -		if (remove_file_from_cache(path))
> -			return -1;
> -	if (o)
> -		if (add_cacheinfo(o->mode, o->sha1, path, 1, 0, options))
> -			return -1;
> -	if (a)
> -		if (add_cacheinfo(a->mode, a->sha1, path, 2, 0, options))
> -			return -1;
> -	if (b)
> -		if (add_cacheinfo(b->mode, b->sha1, path, 3, 0, options))
> -			return -1;
> -	return 0;
> +		ret = remove_file_from_cache(path);
> +	if (!ret && o)
> +		ret = add_cacheinfo(o->mode, o->sha1, path, 1, 0, options);
> +	if (!ret && a)
> +		ret = add_cacheinfo(a->mode, a->sha1, path, 2, 0, options);
> +	if (!ret && b)
> +		ret = add_cacheinfo(b->mode, b->sha1, path, 3, 0, options);
> +	return ret;
>  }

Aren't the preimage and the postimage doing the same thing?  The
only two differences I spot are (1) it is clear in the original that
the returned value is -1 in the error case, even if the error
convention of remove_file_from_cache() and add_cacheinfo() were "0
is good, others are bad"; and (2) the control flow is easier to
follow in the original.

> @@ -736,7 +736,7 @@ static int make_room_for_path(struct merge_options *o, const char *path)
>  	return error(msg, path, _(": perhaps a D/F conflict?"));
>  }
>  
> -static void update_file_flags(struct merge_options *o,
> +static int update_file_flags(struct merge_options *o,
>  			      const unsigned char *sha,
>  			      unsigned mode,
>  			      const char *path,
> @@ -777,8 +777,7 @@ static void update_file_flags(struct merge_options *o,
>  
>  		if (make_room_for_path(o, path) < 0) {
>  			update_wd = 0;
> -			free(buf);
> -			goto update_index;
> +			goto free_buf;
>  		}
>  		if (S_ISREG(mode) || (!has_symlinks && S_ISLNK(mode))) {
>  			int fd;
> @@ -801,20 +800,22 @@ static void update_file_flags(struct merge_options *o,
>  		} else
>  			die(_("do not know what to do with %06o %s '%s'"),
>  			    mode, sha1_to_hex(sha), path);
> +free_buf:
>  		free(buf);

I somehow find the above change harder to follow than the original.

>  	}
>   update_index:
>  	if (update_cache)
>  		add_cacheinfo(mode, sha, path, 0, update_wd, ADD_CACHE_OK_TO_ADD);
> +	return 0;
>  }
>  

This one is in line with the stated goal of the patch.

> @@ -1028,21 +1030,23 @@ static void handle_change_delete(struct merge_options *o,
>  		 * correct; since there is no true "middle point" between
>  		 * them, simply reuse the base version for virtual merge base.
>  		 */
> -		remove_file_from_cache(path);
> -		update_file(o, 0, o_sha, o_mode, renamed ? renamed : path);
> +		ret = remove_file_from_cache(path);
> +		if (!ret)
> +			ret = update_file(o, 0, o_sha, o_mode,
> +					  renamed ? renamed : path);

As you noted in the log message, this does change the behaviour.  If
remove returns non-zero for whatever reason, we still did update()
in the original, but we no longer do.  Does this have negative
effect to the overall codeflow?

Or, assuming that everybody returns -1 for errors, perhaps

	ret = remove();
        ret |= update();

may be a more faithful and safe conversion?

> @@ -1087,21 +1094,22 @@ static void conflict_rename_delete(struct merge_options *o,
>  		b_mode = dest->mode;
>  	}
>  
> -	handle_change_delete(o,
> +	ret = handle_change_delete(o,
>  			     o->call_depth ? orig->path : dest->path,
>  			     orig->sha1, orig->mode,
>  			     a_sha, a_mode,
>  			     b_sha, b_mode,
>  			     _("rename"), _("renamed"));
> -
> -	if (o->call_depth) {
> -		remove_file_from_cache(dest->path);
> -	} else {
> -		update_stages(dest->path, NULL,
> +	if (ret < 0)
> +		return ret;
> +	if (o->call_depth)
> +		ret = remove_file_from_cache(dest->path);
> +	else
> +		ret = update_stages(dest->path, NULL,
>  			      rename_branch == o->branch1 ? dest : NULL,
>  			      rename_branch == o->branch1 ? NULL : dest);
> -	}

Similarly, if handle_change_delete() returns non-zero, we no longer
call remove() or update().  Is that a good behaviour change?

> -static void handle_file(struct merge_options *o,
> +static int handle_file(struct merge_options *o,
>  			struct diff_filespec *rename,
>  			int stage,
>  			struct rename_conflict_info *ci)

Likewise.

> -static void conflict_rename_rename_1to2(struct merge_options *o,
> +static int conflict_rename_rename_1to2(struct merge_options *o,
>  					struct rename_conflict_info *ci)
>  {
> ...
> -		if (merge_file_one(o, one->path,
> +		if ((ret = merge_file_one(o, one->path,
>  				 one->sha1, one->mode,
>  				 a->sha1, a->mode,
>  				 b->sha1, b->mode,
> -				 ci->branch1, ci->branch2, &mfi) < 0)
> -			return;
> +				 ci->branch1, ci->branch2, &mfi)))
> +			return ret;

This does not change behaviour.

> @@ -1194,7 +1208,8 @@ static void conflict_rename_rename_1to2(struct merge_options *o,
>  		 * pathname and then either rename the add-source file to that
>  		 * unique path, or use that unique path instead of src here.
>  		 */
> -		update_file(o, 0, mfi.sha, mfi.mode, one->path);
> +		if ((ret = update_file(o, 0, mfi.sha, mfi.mode, one->path)))
> +			return ret;

But this does.

> @@ -1205,22 +1220,31 @@ static void conflict_rename_rename_1to2(struct merge_options *o,
>  		 * resolving the conflict at that path in its favor.
>  		 */
>  		add = filespec_from_entry(&other, ci->dst_entry1, 2 ^ 1);
> -		if (add)
> -			update_file(o, 0, add->sha1, add->mode, a->path);
> +		if (add) {
> +			if ((ret = update_file(o, 0, add->sha1, add->mode,
> +					a->path)))
> +				return ret;
> +		}

So does this.


>  		else
>  			remove_file_from_cache(a->path);
>  		add = filespec_from_entry(&other, ci->dst_entry2, 3 ^ 1);
> -		if (add)
> -			update_file(o, 0, add->sha1, add->mode, b->path);
> +		if (add) {
> +			if ((ret = update_file(o, 0, add->sha1, add->mode,
> +					b->path)))
> +				return ret;
> +		}

And this.

>  	} else {
> -		handle_file(o, a, 2, ci);
> -		handle_file(o, b, 3, ci);
> +		if ((ret = handle_file(o, a, 2, ci)) ||
> +		    (ret = handle_file(o, b, 3, ci)))
> +			return ret;

And this.

  reply	other threads:[~2016-06-29 21:06 UTC|newest]

Thread overview: 262+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-29 11:36 [PATCH 0/9] Use merge_recursive() directly in the builtin am Johannes Schindelin
2016-06-29 11:36 ` [PATCH 1/9] Report bugs consistently Johannes Schindelin
2016-06-29 15:11   ` Johannes Schindelin
2016-06-29 18:12   ` Eric Sunshine
2016-06-30  8:41     ` Johannes Schindelin
2016-06-29 20:50   ` Junio C Hamano
2016-06-30  8:42     ` Johannes Schindelin
2016-06-30  9:23       ` Jeff King
2016-07-01 13:51         ` Johannes Schindelin
2016-07-01 18:16           ` Jeff King
2016-06-30  5:38   ` Johannes Sixt
2016-06-30  8:45     ` Johannes Schindelin
2016-07-02  5:11   ` Duy Nguyen
2016-07-02  7:25     ` Johannes Schindelin
2016-07-02  8:01       ` Duy Nguyen
2016-07-05 11:32         ` Johannes Schindelin
2016-06-29 11:36 ` [PATCH 2/9] merge-recursive: clarify code in was_tracked() Johannes Schindelin
2016-06-29 18:35   ` Junio C Hamano
2016-07-01  9:23     ` Johannes Schindelin
2016-07-01 15:31       ` Junio C Hamano
2016-07-02  7:20         ` Johannes Schindelin
2016-07-06 15:30           ` Junio C Hamano
2016-07-07 11:17             ` Johannes Schindelin
2016-06-29 11:36 ` [PATCH 3/9] Prepare the builtins for a libified merge_recursive() Johannes Schindelin
2016-06-29 18:56   ` Junio C Hamano
2016-07-01 10:14     ` Johannes Schindelin
2016-07-01 15:43       ` Junio C Hamano
2016-07-02  7:24         ` Johannes Schindelin
2016-06-29 11:36 ` [PATCH 4/9] merge_recursive: abort properly upon errors Johannes Schindelin
2016-06-29 20:08   ` Junio C Hamano
2016-07-01 10:16     ` Johannes Schindelin
2016-07-01 15:56       ` Junio C Hamano
2016-07-02 11:30         ` Johannes Schindelin
2016-06-29 11:36 ` [PATCH 5/9] merge-recursive: avoid returning a wholesale struct Johannes Schindelin
2016-06-29 20:21   ` Junio C Hamano
2016-07-01 13:48     ` Johannes Schindelin
2016-07-01 15:02       ` Eric Wong
2016-06-29 11:37 ` [PATCH 6/9] merge-recursive: allow write_tree_from_memory() to error out Johannes Schindelin
2016-06-29 11:37 ` [PATCH 7/9] merge-recursive: handle return values indicating errors Johannes Schindelin
2016-06-29 21:06   ` Junio C Hamano [this message]
2016-07-01 11:08     ` Johannes Schindelin
2016-06-29 11:37 ` [PATCH 8/9] merge-recursive: switch to returning errors instead of dying Johannes Schindelin
2016-06-29 21:19   ` Junio C Hamano
2016-07-01 11:14     ` Johannes Schindelin
2016-06-29 11:38 ` [PATCH 9/9] am: make a direct call to merge_recursive Johannes Schindelin
2016-06-29 17:45   ` Junio C Hamano
2016-06-30  8:38     ` Johannes Schindelin
2016-07-01 16:03       ` Junio C Hamano
2016-06-29 21:23   ` Junio C Hamano
2016-07-01 12:46     ` Johannes Schindelin
2016-07-05 11:22 ` [PATCH v2 00/17] Use merge_recursive() directly in the builtin am Johannes Schindelin
2016-07-05 11:23   ` [PATCH v2 01/17] Verify that `git pull --rebase` shows the helpful advice when failing Johannes Schindelin
2016-07-05 11:23   ` [PATCH v2 02/17] Report bugs consistently Johannes Schindelin
2016-07-05 13:05     ` Jakub Narębski
2016-07-05 13:38       ` Johannes Schindelin
2016-07-06 15:30     ` Duy Nguyen
2016-07-07 11:23       ` Johannes Schindelin
2016-07-05 11:23   ` [PATCH v2 03/17] Avoid translating bug messages Johannes Schindelin
2016-07-05 11:23   ` [PATCH v2 04/17] merge-recursive: clarify code in was_tracked() Johannes Schindelin
2016-07-05 11:23   ` [PATCH v2 05/17] Prepare the builtins for a libified merge_recursive() Johannes Schindelin
2016-07-05 11:23   ` [PATCH v2 06/17] merge_recursive: abort properly upon errors Johannes Schindelin
2016-07-05 11:23   ` [PATCH v2 07/17] merge-recursive: avoid returning a wholesale struct Johannes Schindelin
2016-07-05 11:23   ` [PATCH v2 08/17] merge-recursive: allow write_tree_from_memory() to error out Johannes Schindelin
2016-07-05 11:23   ` [PATCH v2 09/17] merge-recursive: handle return values indicating errors Johannes Schindelin
2016-07-05 11:23   ` [PATCH v2 10/17] merge-recursive: switch to returning errors instead of dying Johannes Schindelin
2016-07-05 11:23   ` [PATCH v2 11/17] am: counteract gender bias Johannes Schindelin
2016-07-06 21:22     ` Junio C Hamano
2016-07-07 11:30       ` Johannes Schindelin
2016-07-07 15:26         ` Junio C Hamano
2016-07-07 15:54           ` Johannes Schindelin
2016-07-07 16:03             ` Junio C Hamano
2016-07-05 11:24   ` [PATCH v2 12/17] am -3: use merge_recursive() directly again Johannes Schindelin
2016-07-05 11:24   ` [PATCH v2 13/17] merge-recursive: flush output buffer before printing error messages Johannes Schindelin
2016-07-05 11:24   ` [PATCH v2 14/17] merge-recursive: write the commit title in one go Johannes Schindelin
2016-07-05 11:24   ` [PATCH v2 15/17] merge-recursive: offer an option to retain the output in 'obuf' Johannes Schindelin
2016-07-05 11:24   ` [PATCH v2 16/17] Ensure that the output buffer is released after calling merge_trees() Johannes Schindelin
2016-07-05 11:24   ` [PATCH v2 17/17] merge-recursive: flush output buffer even when erroring out Johannes Schindelin
2016-07-06 21:26   ` [PATCH v2 00/17] Use merge_recursive() directly in the builtin am Junio C Hamano
2016-07-07 11:16     ` Johannes Schindelin
2016-07-07 14:35   ` [PATCH v3 00/16] " Johannes Schindelin
2016-07-07 14:35     ` [PATCH v3 01/16] Verify that `git pull --rebase` shows the helpful advice when failing Johannes Schindelin
2016-07-07 14:35     ` [PATCH v3 02/16] Report bugs consistently Johannes Schindelin
2016-07-07 14:35     ` [PATCH v3 03/16] Avoid translating bug messages Johannes Schindelin
2016-07-07 14:35     ` [PATCH v3 04/16] merge-recursive: clarify code in was_tracked() Johannes Schindelin
2016-07-07 14:35     ` [PATCH v3 05/16] Prepare the builtins for a libified merge_recursive() Johannes Schindelin
2016-07-07 14:35     ` [PATCH v3 06/16] merge_recursive: abort properly upon errors Johannes Schindelin
2016-07-07 14:35     ` [PATCH v3 07/16] merge-recursive: avoid returning a wholesale struct Johannes Schindelin
2016-07-07 14:35     ` [PATCH v3 08/16] merge-recursive: allow write_tree_from_memory() to error out Johannes Schindelin
2016-07-07 14:35     ` [PATCH v3 09/16] merge-recursive: handle return values indicating errors Johannes Schindelin
2016-07-07 14:35     ` [PATCH v3 10/16] merge-recursive: switch to returning errors instead of dying Johannes Schindelin
2016-07-07 14:35     ` [PATCH v3 11/16] am -3: use merge_recursive() directly again Johannes Schindelin
2016-07-07 14:36     ` [PATCH v3 12/16] merge-recursive: flush output buffer before printing error messages Johannes Schindelin
2016-07-07 14:36     ` [PATCH v3 13/16] merge-recursive: write the commit title in one go Johannes Schindelin
2016-07-07 14:36     ` [PATCH v3 14/16] merge-recursive: offer an option to retain the output in 'obuf' Johannes Schindelin
2016-07-07 14:36     ` [PATCH v3 15/16] Ensure that the output buffer is released after calling merge_trees() Johannes Schindelin
2016-07-07 14:36     ` [PATCH v3 16/16] merge-recursive: flush output buffer even when erroring out Johannes Schindelin
2016-07-12 21:27     ` [PATCH v3 00/16] Use merge_recursive() directly in the builtin am Junio C Hamano
2016-07-14 14:03       ` Johannes Schindelin
2016-07-14 19:39         ` Junio C Hamano
2016-07-19  0:17           ` Junio C Hamano
2016-07-19 12:31             ` Johannes Schindelin
2016-07-19 14:28               ` Johannes Schindelin
2016-07-19 19:33                 ` Junio C Hamano
2016-07-22 12:23     ` [PATCH v4 " Johannes Schindelin
2016-07-22 12:24       ` [PATCH v4 01/16] Verify that `git pull --rebase` shows the helpful advice when failing Johannes Schindelin
2016-07-25 21:39         ` Junio C Hamano
2016-07-26 12:21           ` Johannes Schindelin
2016-07-22 12:24       ` [PATCH v4 02/16] Report bugs consistently Johannes Schindelin
2016-07-25 21:44         ` Junio C Hamano
2016-07-25 22:17           ` Jeff King
2016-07-25 22:36             ` Junio C Hamano
2016-07-26 12:24               ` Johannes Schindelin
2016-07-22 12:24       ` [PATCH v4 03/16] Avoid translating bug messages Johannes Schindelin
2016-07-22 12:25       ` [PATCH v4 04/16] merge-recursive: clarify code in was_tracked() Johannes Schindelin
2016-07-22 12:25       ` [PATCH v4 05/16] Prepare the builtins for a libified merge_recursive() Johannes Schindelin
2016-07-22 12:25       ` [PATCH v4 06/16] merge_recursive: abort properly upon errors Johannes Schindelin
2016-07-25 22:09         ` Junio C Hamano
2016-07-26 12:26           ` Johannes Schindelin
2016-07-22 12:25       ` [PATCH v4 07/16] merge-recursive: avoid returning a wholesale struct Johannes Schindelin
2016-07-22 12:25       ` [PATCH v4 08/16] merge-recursive: allow write_tree_from_memory() to error out Johannes Schindelin
2016-07-22 12:25       ` [PATCH v4 09/16] merge-recursive: handle return values indicating errors Johannes Schindelin
2016-07-22 12:25       ` [PATCH v4 10/16] merge-recursive: switch to returning errors instead of dying Johannes Schindelin
2016-07-22 12:25       ` [PATCH v4 11/16] am -3: use merge_recursive() directly again Johannes Schindelin
2016-07-25 22:19         ` Junio C Hamano
2016-07-26 12:30           ` Johannes Schindelin
2016-07-26 17:12             ` Junio C Hamano
2016-07-22 12:25       ` [PATCH v4 12/16] merge-recursive: flush output buffer before printing error messages Johannes Schindelin
2016-07-22 12:25       ` [PATCH v4 13/16] merge-recursive: write the commit title in one go Johannes Schindelin
2016-07-22 12:25       ` [PATCH v4 14/16] merge-recursive: offer an option to retain the output in 'obuf' Johannes Schindelin
2016-07-22 12:25       ` [PATCH v4 15/16] Ensure that the output buffer is released after calling merge_trees() Johannes Schindelin
2016-07-22 12:26       ` [PATCH v4 16/16] merge-recursive: flush output buffer even when erroring out Johannes Schindelin
2016-07-26 16:05       ` [PATCH v5 00/16] Use merge_recursive() directly in the builtin am Johannes Schindelin
2016-07-26 16:05         ` [PATCH v5 01/16] t5520: verify that `pull --rebase` shows the helpful advice when failing Johannes Schindelin
2016-07-26 16:05         ` [PATCH v5 02/16] Report bugs consistently Johannes Schindelin
2016-07-26 16:05         ` [PATCH v5 03/16] Avoid translating bug messages Johannes Schindelin
2016-07-26 16:05         ` [PATCH v5 04/16] merge-recursive: clarify code in was_tracked() Johannes Schindelin
2016-07-26 16:06         ` [PATCH v5 05/16] Prepare the builtins for a libified merge_recursive() Johannes Schindelin
2016-07-26 16:06         ` [PATCH v5 06/16] merge_recursive: abort properly upon errors Johannes Schindelin
2016-07-26 16:06         ` [PATCH v5 07/16] merge-recursive: avoid returning a wholesale struct Johannes Schindelin
2016-07-26 16:06         ` [PATCH v5 08/16] merge-recursive: allow write_tree_from_memory() to error out Johannes Schindelin
2016-07-26 16:06         ` [PATCH v5 09/16] merge-recursive: handle return values indicating errors Johannes Schindelin
2016-07-26 16:06         ` [PATCH v5 10/16] merge-recursive: switch to returning errors instead of dying Johannes Schindelin
2016-07-26 16:06         ` [PATCH v5 11/16] am -3: use merge_recursive() directly again Johannes Schindelin
2016-07-26 16:06         ` [PATCH v5 12/16] merge-recursive: flush output buffer before printing error messages Johannes Schindelin
2016-07-27 21:37           ` Junio C Hamano
2016-07-27 21:53             ` Junio C Hamano
2016-08-01  9:18             ` Johannes Schindelin
2016-07-26 16:06         ` [PATCH v5 13/16] merge-recursive: write the commit title in one go Johannes Schindelin
2016-07-27 22:36           ` Junio C Hamano
2016-08-01  9:53             ` Johannes Schindelin
2016-07-26 16:06         ` [PATCH v5 14/16] merge-recursive: offer an option to retain the output in 'obuf' Johannes Schindelin
2016-07-27 22:09           ` Junio C Hamano
2016-07-28  0:17             ` Junio C Hamano
2016-08-01  9:34               ` Johannes Schindelin
2016-08-01 19:09                 ` Junio C Hamano
2016-08-02  8:01                   ` Johannes Schindelin
2016-08-02 21:19                     ` Junio C Hamano
2016-08-01  9:35             ` Johannes Schindelin
2016-07-26 16:06         ` [PATCH v5 15/16] Ensure that the output buffer is released after calling merge_trees() Johannes Schindelin
2016-07-27 22:15           ` Junio C Hamano
2016-08-01  9:40             ` Johannes Schindelin
2016-07-26 16:06         ` [PATCH v5 16/16] merge-recursive: flush output buffer even when erroring out Johannes Schindelin
2016-07-27 22:20           ` Junio C Hamano
2016-08-01  9:49             ` Johannes Schindelin
2016-08-01 18:32               ` Junio C Hamano
2016-08-01 11:36         ` [PATCH v6 00/16] Use merge_recursive() directly in the builtin am Johannes Schindelin
2016-08-01 11:36           ` [PATCH v6 01/16] t5520: verify that `pull --rebase` shows the helpful advice when failing Johannes Schindelin
2016-08-01 11:36           ` [PATCH v6 02/16] Report bugs consistently Johannes Schindelin
2016-08-01 11:43           ` [PATCH v6 03/16] Avoid translating bug messages Johannes Schindelin
2016-08-01 11:44           ` [PATCH v6 04/16] merge-recursive: clarify code in was_tracked() Johannes Schindelin
2016-08-01 11:44           ` [PATCH v6 05/16] Prepare the builtins for a libified merge_recursive() Johannes Schindelin
2016-08-01 18:40             ` Junio C Hamano
2016-08-02  8:02               ` Johannes Schindelin
2016-08-01 11:44           ` [PATCH v6 06/16] merge_recursive: abort properly upon errors Johannes Schindelin
2016-08-01 18:41             ` Junio C Hamano
2016-08-02  8:12               ` Johannes Schindelin
2016-08-02 21:26                 ` Junio C Hamano
2016-08-03 11:59                   ` patch submission process, was " Johannes Schindelin
2016-08-03 15:33                     ` Junio C Hamano
2016-08-03 16:07                       ` Johannes Schindelin
2016-08-03 17:47                         ` Stefan Beller
2016-08-04 15:58                           ` Johannes Schindelin
2016-08-04 16:42                             ` Stefan Beller
2016-08-04 20:17                               ` Eric Wong
2016-08-05  8:24                                 ` Johannes Schindelin
2016-08-05  8:50                                   ` Eric Wong
2016-08-05  8:20                               ` Johannes Schindelin
2016-08-05 17:59                                 ` Stefan Beller
2016-08-05 19:21                                   ` Josh Triplett
2016-08-05 21:01                                   ` Eric Wong
2016-08-06  8:58                                   ` Johannes Schindelin
2016-08-06 18:33                                     ` Junio C Hamano
2016-08-06 21:43                                       ` Eric Wong
2016-08-07  8:46                                         ` Johannes Schindelin
2016-08-08 17:22                                           ` Junio C Hamano
2016-08-09 11:48                                             ` Johannes Schindelin
2016-08-07 11:09                                     ` Lars Schneider
2016-08-08 17:29                                       ` Junio C Hamano
2016-08-09 11:41                                         ` Johannes Schindelin
2016-08-09 17:25                                           ` Junio C Hamano
2016-08-05 18:46                                 ` Eric Wong
2016-08-06  8:44                                   ` Johannes Schindelin
2016-08-05 11:59                               ` Richard Ipsum
2016-08-05 15:24                                 ` Johannes Schindelin
2016-08-06 16:45                                   ` Richard Ipsum
2016-08-08 22:20                             ` Michael Haggerty
2016-08-08 22:36                               ` Junio C Hamano
2016-08-08 23:20                                 ` Michael Haggerty
2016-08-09  8:11                                   ` Michael J Gruber
2016-08-09 10:57                                     ` Jeff King
2016-08-10  0:46                                       ` Josh Triplett
2016-08-09 11:37                                   ` Jeff King
2016-08-09 17:34                                     ` Junio C Hamano
2016-08-09 17:50                                       ` Jeff King
2016-08-09 19:19                                         ` Junio C Hamano
2016-08-09 18:43                                     ` Duy Nguyen
2016-08-09 18:50                                       ` Stefan Beller
2016-08-09 18:58                                         ` Jeff King
2016-08-09 18:55                                       ` Jeff King
2016-08-09 18:36                                   ` Duy Nguyen
2016-08-09 18:38                                     ` Duy Nguyen
2016-08-09  4:22                               ` Duy Nguyen
2016-08-09  9:17                                 ` Richard Ipsum
2016-08-09 10:34                                   ` Jeff King
2016-08-09 10:19                                 ` Michael Haggerty
2016-08-09 12:07                               ` Johannes Schindelin
2016-08-09 18:28                               ` Eric Wong
2016-08-10  0:55                                 ` Josh Triplett
2016-08-10  1:57                                   ` Eric Wong
2016-08-10  7:30                                   ` Jakub Narębski
2016-08-10 19:30                                     ` Josh Triplett
2016-08-10 21:14                                       ` Junio C Hamano
2016-08-05 14:55                         ` Duy Nguyen
2016-08-05 15:13                           ` Johannes Schindelin
2016-08-05 18:42                           ` Philip Oakley
2016-08-06  8:38                             ` Johannes Schindelin
2016-08-06 17:45                               ` Philip Oakley
2016-08-03 16:34                       ` Jeff King
2016-08-03 16:53                         ` Junio C Hamano
2016-08-03 16:56                           ` Jeff King
2016-08-04 15:29                             ` Johannes Schindelin
2016-08-04 18:07                               ` Jeff King
2016-08-04 21:12                                 ` Junio C Hamano
2016-08-05  8:17                                   ` Jeff King
2016-08-05 15:51                                   ` Johannes Schindelin
2016-08-02 22:28                 ` Junio C Hamano
2016-08-01 11:44           ` [PATCH v6 07/16] merge-recursive: avoid returning a wholesale struct Johannes Schindelin
2016-08-04 18:09             ` Junio C Hamano
2016-08-01 11:44           ` [PATCH v6 08/16] merge-recursive: allow write_tree_from_memory() to error out Johannes Schindelin
2016-08-04 18:14             ` Junio C Hamano
2016-08-01 11:44           ` [PATCH v6 09/16] merge-recursive: handle return values indicating errors Johannes Schindelin
2016-08-01 11:44           ` [PATCH v6 10/16] merge-recursive: switch to returning errors instead of dying Johannes Schindelin
2016-08-01 11:44           ` [PATCH v6 11/16] am -3: use merge_recursive() directly again Johannes Schindelin
2016-08-01 11:44           ` [PATCH v6 12/16] merge-recursive: flush output buffer before printing error messages Johannes Schindelin
2016-08-01 11:44           ` [PATCH v6 13/16] merge-recursive: write the commit title in one go Johannes Schindelin
2016-08-01 11:44           ` [PATCH v6 14/16] merge-recursive: offer an option to retain the output in 'obuf' Johannes Schindelin
2016-08-01 11:44           ` [PATCH v6 15/16] Ensure that the output buffer is released after calling merge_trees() Johannes Schindelin
2016-08-04 18:18             ` Junio C Hamano
2016-08-01 11:44           ` [PATCH v6 16/16] merge-recursive: flush output buffer even when erroring out Johannes Schindelin
2016-08-04 18:20             ` Junio C Hamano
2016-08-05 15:41               ` Johannes Schindelin
2016-08-06 16:37                 ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=xmqqbn2j3dt0.fsf@gitster.mtv.corp.google.com \
    --to=gitster@pobox$(echo .)com \
    --cc=git@vger$(echo .)kernel.org \
    --cc=johannes.schindelin@gmx$(echo .)de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox