From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michael Grubb Subject: Re: [PATCH] Add default merge options for all branches Date: Mon, 02 May 2011 13:22:29 -0500 Message-ID: <4DBEF665.20309@dailyvoid.com> References: <4DBED99E.3050709@dailyvoid.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Cc: git@vger.kernel.org, vmiklos@frugalware.org, deskinm@umich.edu, gitster@pobox.com To: Thiago Farina X-From: git-owner@vger.kernel.org Mon May 02 20:22:42 2011 Return-path: Envelope-to: gcvg-git-2@lo.gmane.org Received: from vger.kernel.org ([209.132.180.67]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1QGxlZ-0000lH-1b for gcvg-git-2@lo.gmane.org; Mon, 02 May 2011 20:22:41 +0200 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756374Ab1EBSWf (ORCPT ); Mon, 2 May 2011 14:22:35 -0400 Received: from 75.98.162.166.static.a2webhosting.com ([75.98.162.166]:37751 "EHLO dailyvoid.com" rhost-flags-OK-FAIL-OK-OK) by vger.kernel.org with ESMTP id S1753747Ab1EBSWf (ORCPT ); Mon, 2 May 2011 14:22:35 -0400 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=default; d=dailyvoid.com; h=Received:Message-ID:Date:From:User-Agent:MIME-Version:To:CC:Subject:References:In-Reply-To:Content-Type:Content-Transfer-Encoding:X-Source:X-Source-Args:X-Source-Dir; b=rUCb9tLq9JWfhNj6XaLi7cl7MgUn/OQJHB8R8zXC4+VdPkXfZ+YCXTuLe+PQMRFHdUCAqES2039lrzprJzpeDV5DNplP5bhhk4gAENEQVFxmNfWZjImhjvtjDUIVWLFa; Received: from adsl-99-59-251-170.dsl.ltrkar.sbcglobal.net ([99.59.251.170] helo=macbook.local) by a2s24.a2hosting.com with esmtpsa (TLSv1:AES256-SHA:256) (Exim 4.69) (envelope-from ) id 1QGxlO-00053G-II; Mon, 02 May 2011 14:22:30 -0400 User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.17) Gecko/20110414 Thunderbird/3.1.10 In-Reply-To: X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - a2s24.a2hosting.com X-AntiAbuse: Original Domain - vger.kernel.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - dailyvoid.com X-Source: X-Source-Args: X-Source-Dir: Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Archived-At: Sorry for that, it's my own habit I'm afraid, however I did go back and fix it up so that it is consistent with the rest of the file. Should I resubmit the patch in reply to this thread? On 5/2/11 1:12 PM, Thiago Farina wrote: > On Mon, May 2, 2011 at 1:19 PM, Michael Grubb wrote: >> Introduce a new configuration variable, merge.mergeoptions. >> The semantics of this new variable are the same as the branch specific >> branch..mergeoptions. However, if a branch specific setting is >> found, this option will not override it. >> >> The need for this arises from the fact that there is currently not an >> easy way to set merge options for all branches. Instead of having to >> specify merge options for each individual branch there should be a way >> to set defaults for all branches and then override a specific branch's >> options. >> >> The approach taken is to make note of whether a branch specific >> mergeoptions key has been seen and only apply the global value if it >> hasn't. An alternative method would be to keep the >> branch..mergeoptions semantics, but assign a special value for >> to be the global default. >> >> Signed-off-by: Michael Grubb >> --- >> Documentation/merge-config.txt | 7 +++++++ >> builtin/merge.c | 27 ++++++++++++++++++++++----- >> t/t7600-merge.sh | 27 +++++++++++++++++++++++++++ >> 3 files changed, 56 insertions(+), 5 deletions(-) >> >> diff --git a/Documentation/merge-config.txt b/Documentation/merge-config.txt >> index 8920258..0fc7511 100644 >> --- a/Documentation/merge-config.txt >> +++ b/Documentation/merge-config.txt >> @@ -57,6 +57,13 @@ merge.verbosity:: >> above outputs debugging information. The default is level 2. >> Can be overridden by the 'GIT_MERGE_VERBOSITY' environment variable. >> +merge.mergeoptions:: >> + Sets default options for merging any branch. This value is only >> + used if there is not a branch..mergeoptions value set. >> + The syntax and supported options are the same as those of 'git >> + merge', but option values containing whitespace characters are >> + currently not supported. >> + >> merge..name:: >> Defines a human-readable name for a custom low-level >> merge driver. See linkgit:gitattributes[5] for details. >> diff --git a/builtin/merge.c b/builtin/merge.c >> index 0bdd19a..1d4f852 100644 >> --- a/builtin/merge.c >> +++ b/builtin/merge.c >> @@ -505,9 +505,18 @@ cleanup: >> static int git_merge_config(const char *k, const char *v, void *cb) >> { >> - if (branch && !prefixcmp(k, "branch.") && >> - !prefixcmp(k + 7, branch) && >> - !strcmp(k + 7 + strlen(branch), ".mergeoptions")) { >> + static int branch_merge_options_set = 0; >> + int merge_option_mode = 0; >> + >> + if ( !strcmp(k, "merge.mergeoptions") ) > > please, no need of spaces between if ( ... ) > > There are more cases in this change below. > > I don't know if Junio is strong about this and if you need to resend. > But at least that is not consistent with the rest of the file. > > Just my 0.02 cents. > >> + merge_option_mode = 1; >> + else if ( branch && !prefixcmp(k, "branch.") && >> + !prefixcmp(k + 7, branch) && >> + !strcmp(k + 7 + strlen(branch), ".mergeoptions")) >> + merge_option_mode = 2; >> + >> + if ( (merge_option_mode == 1 && !branch_merge_options_set) || >> + merge_option_mode == 2) { >> const char **argv; >> int argc; >> char *buf; >> @@ -515,14 +524,22 @@ static int git_merge_config(const char *k, const >> char *v, void *cb) >> buf = xstrdup(v); >> argc = split_cmdline(buf, &argv); >> if (argc < 0) >> - die(_("Bad branch.%s.mergeoptions string: %s"), branch, >> - split_cmdline_strerror(argc)); >> + { >> + if ( merge_option_mode == 1 ) >> + die(_("Bad merge.mergeoptions string: %s"), + >> split_cmdline_strerror(argc)); >> + else >> + die(_("Bad branch.%s.mergeoptions string: %s"), branch, >> + split_cmdline_strerror(argc)); >> + } >> argv = xrealloc(argv, sizeof(*argv) * (argc + 2)); >> memmove(argv + 1, argv, sizeof(*argv) * (argc + 1)); >> argc++; >> parse_options(argc, argv, NULL, builtin_merge_options, >> builtin_merge_usage, 0); >> free(buf); >> + if ( merge_option_mode == 2 ) >> + branch_merge_options_set = 1; >> } >> if (!strcmp(k, "merge.diffstat") || !strcmp(k, "merge.stat")) >> diff --git a/t/t7600-merge.sh b/t/t7600-merge.sh >> index 87d5d78..15e9418 100755 >> --- a/t/t7600-merge.sh >> +++ b/t/t7600-merge.sh >> @@ -415,6 +415,33 @@ test_expect_success 'merge c0 with c1 (no-ff)' ' >> test_debug 'git log --graph --decorate --oneline --all' >> +test_expect_success 'merge c0 with c1 (global no-ff)' ' >> + git reset --hard c0 && >> + git config --unset branch.master.mergeoptions && >> + git config merge.mergeoptions "--no-ff" && >> + test_tick && >> + git merge c1 && >> + git config --remove-section merge && >> + verify_merge file result.1 && >> + verify_parents $c0 $c1 >> +' >> + >> +test_debug 'git log --graph --decorate --oneline --all' >> + >> +test_expect_success 'combine merge.mergeoptions with >> branch.x.mergeoptions' ' >> + git reset --hard c0 && >> + git config --remove-section branch.master && >> + git config merge.mergeoptions "--no-ff" && >> + git config branch.master.mergeoptions "--ff" && >> + test_tick && >> + git merge c1 && >> + git config --remove-section merge && >> + verify_merge file result.1 && >> + verify_parents "$c0" >> +' >> + >> +test_debug 'git log --graph --decorate --oneline --all' >> + >> test_expect_success 'combining --squash and --no-ff is refused' ' >> test_must_fail git merge --squash --no-ff c1 && >> test_must_fail git merge --no-ff --squash c1 >> -- >> 1.7.5 >> >> -- >> To unsubscribe from this list: send the line "unsubscribe git" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html >> > -- > To unsubscribe from this list: send the line "unsubscribe git" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html >