All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Xiaolong Ye <xiaolong.ye@intel.com>
Cc: git@vger.kernel.org, fengguang.wu@intel.com,
	ying.huang@intel.com, philip.li@intel.com, julie.du@intel.com
Subject: Re: [PATCH v3 3/4] format-patch: introduce --base=auto option
Date: Thu, 31 Mar 2016 10:43:48 -0700	[thread overview]
Message-ID: <xmqqtwjmo84r.fsf@gitster.mtv.corp.google.com> (raw)
In-Reply-To: <1459388776-18066-4-git-send-email-xiaolong.ye@intel.com> (Xiaolong Ye's message of "Thu, 31 Mar 2016 09:46:15 +0800")

Xiaolong Ye <xiaolong.ye@intel.com> writes:

> Introduce --base=auto to record the base commit info automatically, the base_commit
> will be the merge base of tip commit of the upstream branch and revision-range
> specified in cmdline.

This line is probably a bit too long.

>
> Helped-by: Junio C Hamano <gitster@pobox.com>
> Helped-by: Wu Fengguang <fengguang.wu@intel.com>
> Signed-off-by: Xiaolong Ye <xiaolong.ye@intel.com>
> ---
>  Documentation/git-format-patch.txt |  4 ++++
>  builtin/log.c                      | 31 +++++++++++++++++++++++++++----
>  2 files changed, 31 insertions(+), 4 deletions(-)
>
> diff --git a/Documentation/git-format-patch.txt b/Documentation/git-format-patch.txt
> index 067d562..d8fe651 100644
> --- a/Documentation/git-format-patch.txt
> +++ b/Documentation/git-format-patch.txt
> @@ -290,6 +290,10 @@ you can use `--suffix=-patch` to get `0001-description-of-my-change-patch`.
>  	patches for A, B and C, and the identifiers for P, X, Y, Z are appended
>  	at the end of the _first_ message.
>  
> +	If set '--base=auto' in cmdline, it will track base commit automatically,
> +	the base commit will be the merge base of tip commit of the remote-tracking
> +	branch and revision-range specified in cmdline.
> +
>  --root::
>  	Treat the revision argument as a <revision range>, even if it
>  	is just a single commit (that would normally be treated as a
> diff --git a/builtin/log.c b/builtin/log.c
> index 03cbab0..c5efe73 100644
> --- a/builtin/log.c
> +++ b/builtin/log.c
> @@ -1200,6 +1200,9 @@ static void prepare_bases(struct base_tree_info *bases,
>  	struct rev_info revs;
>  	struct diff_options diffopt;
>  	struct object_id *patch_id;
> +	struct branch *curr_branch;
> +	struct commit_list *base_list;
> +	const char *upstream;
>  	unsigned char sha1[20];
>  	int i;
>  
> @@ -1207,10 +1210,30 @@ static void prepare_bases(struct base_tree_info *bases,
>  	DIFF_OPT_SET(&diffopt, RECURSIVE);
>  	diff_setup_done(&diffopt);
>  
> -	base = lookup_commit_reference_by_name(base_commit);
> -	if (!base)
> -		die(_("Unknown commit %s"), base_commit);
> -	oidcpy(&bases->base_commit, &base->object.oid);
> +	if (!strcmp(base_commit, "auto")) {
> +		curr_branch = branch_get(NULL);

Can branch_get() return NULL?  Which ...

> +		upstream = branch_get_upstream(curr_branch, NULL);

... would cause branch_get_upstream() to give you an error (which
you ignore)?  I guess that is OK because upstream will safely be set
to NULL in that case.

> +		if (upstream) {
> +			if (get_sha1(upstream, sha1))
> +				die(_("Failed to resolve '%s' as a valid ref."), upstream);
> +			commit = lookup_commit_or_die(sha1, "upstream base");
> +			base_list = get_merge_bases_many(commit, total, list);
> +			if (!bases)
> +				die(_("Could not find merge base."));
> +			base = base_list->item;
> +			free_commit_list(base_list);

What should happen when there are multiple merge bases?  The code
picks one at random and ignores the remainder, if I am reading this
correctly.

> +			oidcpy(&bases->base_commit, &base->object.oid);
> +		} else {
> +			die(_("Failed to get upstream, if you want to record base commit automatically,\n"
> +			      "please use git branch --set-upstream-to to track a remote branch.\n"
> +			      "Or you could specify base commit by --base=<base-commit-id> manually."));
> +		}
> +	} else {
> +		base = lookup_commit_reference_by_name(base_commit);
> +		if (!base)
> +			die(_("Unknown commit %s"), base_commit);
> +		oidcpy(&bases->base_commit, &base->object.oid);
> +	}
>  
>  	init_revisions(&revs, NULL);
>  	revs.max_parents = 1;

  reply	other threads:[~2016-03-31 17:43 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-31  1:46 [PATCH v3 0/4] Add an option to git-format-patch to record base tree info Xiaolong Ye
2016-03-31  1:46 ` [PATCH v3 1/4] patch-ids: make commit_patch_id() a public helper function Xiaolong Ye
2016-03-31  1:46 ` [PATCH v3 2/4] format-patch: add '--base' option to record base tree info Xiaolong Ye
2016-03-31 17:38   ` Junio C Hamano
2016-04-01 13:38     ` Ye Xiaolong
2016-04-01 16:00       ` Junio C Hamano
2016-04-05  5:52         ` Ye Xiaolong
2016-04-09 15:56     ` Ye Xiaolong
2016-03-31  1:46 ` [PATCH v3 3/4] format-patch: introduce --base=auto option Xiaolong Ye
2016-03-31 17:43   ` Junio C Hamano [this message]
2016-04-01 13:52     ` Ye Xiaolong
2016-04-01 16:06       ` Junio C Hamano
2016-04-05  6:36         ` Ye Xiaolong
2016-04-05  7:21           ` Junio C Hamano
2016-03-31  1:46 ` [PATCH v3 4/4] format-patch: introduce format.base configuration Xiaolong Ye
2016-03-31 17:45 ` [PATCH v3 0/4] Add an option to git-format-patch to record base tree info 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=xmqqtwjmo84r.fsf@gitster.mtv.corp.google.com \
    --to=gitster@pobox.com \
    --cc=fengguang.wu@intel.com \
    --cc=git@vger.kernel.org \
    --cc=julie.du@intel.com \
    --cc=philip.li@intel.com \
    --cc=xiaolong.ye@intel.com \
    --cc=ying.huang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.