Re: [PATCH] Add default merge options for all branches

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, May 2, 2011 at 1:19 PM, Michael Grubb <devel@xxxxxxxxxxxxx> wrote:
> Introduce a new configuration variable, merge.mergeoptions.
> The semantics of this new variable are the same as the branch specific
> branch.<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.<branch>.mergeoptions semantics, but assign a special value for
> <branch> to be the global default.
>
> Signed-off-by: Michael Grubb <devel@xxxxxxxxxxxxx>
> ---
> Â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.<name>.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.<driver>.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@xxxxxxxxxxxxxxx
> 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@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]