From: Jacob Keller <jacob.keller@gmail.com>
To: Elijah Newren <newren@gmail.com>
Cc: Git mailing list <git@vger.kernel.org>,
Junio C Hamano <gitster@pobox.com>, Jeff King <peff@peff.net>,
Phillip Wood <phillip.wood@dunelm.org.uk>,
Linus Nilsson <Linus.Nilsson@trimma.se>
Subject: Re: [PATCH v3 00/15] Switch directory rename detection default
Date: Fri, 5 Apr 2019 09:32:06 -0700 [thread overview]
Message-ID: <CA+P7+xrbd3c7J5tW+LOXKq7g62HL_0GdDOBZhT-oNgRPHOeS+A@mail.gmail.com> (raw)
In-Reply-To: <20190405150026.5260-1-newren@gmail.com>
On Fri, Apr 5, 2019 at 8:03 AM Elijah Newren <newren@gmail.com> wrote:
>
> This series adds a new configuration option, merge.directoryRenames,
> for setting how to make use of directory rename detection heuristics.
> The default becomes "conflict", meaning that conflicts are reported
> instead of silently moving paths according to the heuristics. Also,
> even when merge.directoryRenames config setting is "true", this series
> changes behavior in that it now prints informational messages about
> paths that are adjusted by the directory rename detection heuristics.
>
I read through the v2 series, and the range diff on v3. I thought it
looked good.
> Changes since v2 (range-diff below):
> * Made use of git_parse_maybe_bool() as suggested by Ævar, and made
> the parsing of the merge.directoryRenames setting look more like
> that for merge.ff.
>
> I didn't get much review of round 2, which maybe means everyone is
> happy with what they see. If anyone would like to take a look at just
> part of the series, the pieces I'd most like folks to look at are:
> * Patch 15, particularly looking over the new testcases (13a-13d) in
> t6043 and the documentation.
The documentation made sense to me. I can't speak much towards the
implementation, but I definitely agree that conflicting is a suitable
default, and better than silently renaming.
> * Should I have switched the type of "mode" from 'unsigned short' to
> 'unsigned' instead of vice-versa in patch 1?
I think switching to unsigned short is better. Unless we need the full
integer width for some reason? but since it's already short I don't
see why we would..
> * Similarly, does anyone have a reason to prefer oid,mode pair over
> using a diff_filespec (in patch 11 I convert half the sites to the
> latter)?
>
>
> Elijah Newren (15):
> Use 'unsigned short' for mode, like diff_filespec does
> merge-recursive: rename merge_options argument from 'o' to 'opt'
> merge-recursive: rename diff_filespec 'one' to 'o'
> merge-recursive: rename locals 'o' and 'a' to 'obuf' and 'abuf'
> merge-recursive: use 'ci' for rename_conflict_info variable name
> merge-recursive: move some struct declarations together
> merge-recursive: shrink rename_conflict_info
> merge-recursive: remove ren[12]_other fields from rename_conflict_info
> merge-recursive: track branch where rename occurred in rename struct
> merge-recursive: cleanup handle_rename_* function signatures
> merge-recursive: switch from (oid,mode) pairs to a diff_filespec
> t6043: fix copied test description to match its purpose
> merge-recursive: track information associated with directory renames
> merge-recursive: give callers of handle_content_merge() access to
> contents
> merge-recursive: switch directory rename detection default
>
> Documentation/config/merge.txt | 19 +-
> archive.c | 2 +-
> blame.c | 2 +-
> blame.h | 2 +-
> builtin/rm.c | 2 +-
> builtin/update-index.c | 2 +-
> cache.h | 2 +-
> fsck.c | 2 +-
> line-log.c | 2 +-
> match-trees.c | 8 +-
> merge-recursive.c | 1853 ++++++++++++------------
> notes.c | 2 +-
> sha1-name.c | 2 +-
> t/t3401-rebase-and-am-rename.sh | 8 +-
> t/t6043-merge-rename-directories.sh | 462 +++++-
> t/t6046-merge-skip-unneeded-updates.sh | 8 +-
> tree-diff.c | 2 +-
> tree-walk.c | 6 +-
> tree-walk.h | 6 +-
> 19 files changed, 1367 insertions(+), 1025 deletions(-)
>
> Range-diff:
> 1: bb5b410a61 = 1: bb5b410a61 Use 'unsigned short' for mode, like diff_filespec does
> 2: f91c28257e = 2: f91c28257e merge-recursive: rename merge_options argument from 'o' to 'opt'
> 3: e3fe8baa15 = 3: e3fe8baa15 merge-recursive: rename diff_filespec 'one' to 'o'
> 4: c6bd963ffb = 4: c6bd963ffb merge-recursive: rename locals 'o' and 'a' to 'obuf' and 'abuf'
> 5: eca30e7571 = 5: eca30e7571 merge-recursive: use 'ci' for rename_conflict_info variable name
> 6: 07f0d5fa8e = 6: 07f0d5fa8e merge-recursive: move some struct declarations together
> 7: 4cdd1ecbcb = 7: 4cdd1ecbcb merge-recursive: shrink rename_conflict_info
> 8: 3490324bdd = 8: 3490324bdd merge-recursive: remove ren[12]_other fields from rename_conflict_info
> 9: fb73a2c55d = 9: fb73a2c55d merge-recursive: track branch where rename occurred in rename struct
> 10: 124ee08ed8 = 10: 124ee08ed8 merge-recursive: cleanup handle_rename_* function signatures
> 11: 78a5916efe = 11: 78a5916efe merge-recursive: switch from (oid,mode) pairs to a diff_filespec
> 12: a8309326c1 = 12: a8309326c1 t6043: fix copied test description to match its purpose
> 13: b362f4db1e = 13: b362f4db1e merge-recursive: track information associated with directory renames
> 14: 2e0258a358 = 14: 2e0258a358 merge-recursive: give callers of handle_content_merge() access to contents
> 15: 719c25afaf ! 15: 428cdf62b3 merge-recursive: switch directory rename detection default
> @@ -262,17 +262,12 @@
> free(value);
> }
> + if (!git_config_get_string("merge.directoryrenames", &value)) {
> -+ if (!strcasecmp(value, "true"))
> -+ opt->detect_directory_renames = 2;
> -+ else if (!strcasecmp(value, "false"))
> -+ opt->detect_directory_renames = 0;
> -+ else if (!strcasecmp(value, "conflict"))
> ++ int boolval = git_parse_maybe_bool(value);
> ++ if (0 <= boolval) {
> ++ opt->detect_directory_renames = boolval ? 2 : 0;
> ++ } else if (!strcasecmp(value, "conflict")) {
> + opt->detect_directory_renames = 1;
> -+ else {
> -+ error(_("Invalid value for merge.directoryRenames: %s"),
> -+ value);
> -+ opt->detect_directory_renames = 1;
> -+ }
> ++ } /* avoid erroring on values from future versions of git */
> + free(value);
> + }
> git_config(git_xmerge_config, NULL);
> --
> 2.21.0.211.g719c25afaf.dirty
>
prev parent reply other threads:[~2019-04-05 16:32 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-27 12:47 [BUG] All files in folder are moved when cherry-picking commit that moves fewer files Linus Nilsson
2019-02-27 14:30 ` Phillip Wood
2019-02-27 16:02 ` Elijah Newren
2019-02-27 16:40 ` Jeff King
2019-02-27 17:31 ` Elijah Newren
2019-02-28 8:16 ` Linus Nilsson
2019-03-01 2:52 ` Junio C Hamano
2019-03-02 23:48 ` Elijah Newren
2019-03-03 1:33 ` Junio C Hamano
2019-03-06 0:27 ` Elijah Newren
2019-03-06 4:43 ` Junio C Hamano
2019-03-07 4:14 ` Elijah Newren
2019-03-07 5:45 ` Junio C Hamano
2019-03-07 5:45 ` Junio C Hamano
2019-03-30 0:33 ` [PATCH v2 00/15] Switch directory rename detection default Elijah Newren
2019-03-30 0:33 ` [PATCH v2 01/15] Use 'unsigned short' for mode, like diff_filespec does Elijah Newren
2019-03-30 0:33 ` [PATCH v2 02/15] merge-recursive: rename merge_options argument from 'o' to 'opt' Elijah Newren
2019-03-30 0:33 ` [PATCH v2 03/15] merge-recursive: rename diff_filespec 'one' to 'o' Elijah Newren
2019-03-30 0:33 ` [PATCH v2 04/15] merge-recursive: rename locals 'o' and 'a' to 'obuf' and 'abuf' Elijah Newren
2019-03-30 0:33 ` [PATCH v2 05/15] merge-recursive: use 'ci' for rename_conflict_info variable name Elijah Newren
2019-03-30 0:33 ` [PATCH v2 06/15] merge-recursive: move some struct declarations together Elijah Newren
2019-03-30 0:33 ` [PATCH v2 07/15] merge-recursive: shrink rename_conflict_info Elijah Newren
2019-03-30 0:33 ` [PATCH v2 08/15] merge-recursive: remove ren[12]_other fields from rename_conflict_info Elijah Newren
2019-03-30 0:33 ` [PATCH v2 09/15] merge-recursive: track branch where rename occurred in rename struct Elijah Newren
2019-03-30 0:33 ` [PATCH v2 10/15] merge-recursive: cleanup handle_rename_* function signatures Elijah Newren
2019-03-30 0:33 ` [PATCH v2 11/15] merge-recursive: switch from (oid,mode) pairs to a diff_filespec Elijah Newren
2019-03-30 0:33 ` [PATCH v2 12/15] t6043: fix copied test description to match its purpose Elijah Newren
2019-03-30 0:33 ` [PATCH v2 13/15] merge-recursive: track information associated with directory renames Elijah Newren
2019-03-30 0:33 ` [PATCH v2 14/15] merge-recursive: give callers of handle_content_merge() access to contents Elijah Newren
2019-03-30 0:33 ` [PATCH v2 15/15] merge-recursive: switch directory rename detection default Elijah Newren
2019-03-30 9:12 ` Ævar Arnfjörð Bjarmason
2019-04-01 15:41 ` Elijah Newren
2019-04-05 15:00 ` [PATCH v3 00/15] Switch " Elijah Newren
2019-04-05 15:00 ` [PATCH v3 01/15] Use 'unsigned short' for mode, like diff_filespec does Elijah Newren
2019-04-05 15:00 ` [PATCH v3 02/15] merge-recursive: rename merge_options argument from 'o' to 'opt' Elijah Newren
2019-04-05 15:00 ` [PATCH v3 03/15] merge-recursive: rename diff_filespec 'one' to 'o' Elijah Newren
2019-04-05 15:00 ` [PATCH v3 04/15] merge-recursive: rename locals 'o' and 'a' to 'obuf' and 'abuf' Elijah Newren
2019-04-05 15:00 ` [PATCH v3 05/15] merge-recursive: use 'ci' for rename_conflict_info variable name Elijah Newren
2019-04-05 15:00 ` [PATCH v3 06/15] merge-recursive: move some struct declarations together Elijah Newren
2019-04-05 15:00 ` [PATCH v3 07/15] merge-recursive: shrink rename_conflict_info Elijah Newren
2019-04-05 15:00 ` [PATCH v3 08/15] merge-recursive: remove ren[12]_other fields from rename_conflict_info Elijah Newren
2019-04-05 15:00 ` [PATCH v3 09/15] merge-recursive: track branch where rename occurred in rename struct Elijah Newren
2019-04-05 15:00 ` [PATCH v3 10/15] merge-recursive: cleanup handle_rename_* function signatures Elijah Newren
2019-04-05 15:00 ` [PATCH v3 11/15] merge-recursive: switch from (oid,mode) pairs to a diff_filespec Elijah Newren
2019-04-05 15:00 ` [PATCH v3 12/15] t6043: fix copied test description to match its purpose Elijah Newren
2019-04-05 15:00 ` [PATCH v3 13/15] merge-recursive: track information associated with directory renames Elijah Newren
2019-04-05 15:00 ` [PATCH v3 14/15] merge-recursive: give callers of handle_content_merge() access to contents Elijah Newren
2019-04-05 15:00 ` [PATCH v3 15/15] merge-recursive: switch directory rename detection default Elijah Newren
2019-04-05 16:32 ` Jacob Keller [this message]
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CA+P7+xrbd3c7J5tW+LOXKq7g62HL_0GdDOBZhT-oNgRPHOeS+A@mail.gmail.com \
--to=jacob.keller@gmail.com \
--cc=Linus.Nilsson@trimma.se \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=newren@gmail.com \
--cc=peff@peff.net \
--cc=phillip.wood@dunelm.org.uk \
/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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).