From: "Torsten Bögershausen" <tboegi@web.de>
To: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Cc: peff@peff.net, git@vger.kernel.org, pawelparuzel95@gmail.com,
sandals@crustytoothpaste.net
Subject: Re: [PATCH/RFC] clone: report duplicate entries on case-insensitive filesystems
Date: Tue, 31 Jul 2018 20:23:44 +0200 [thread overview]
Message-ID: <20180731182344.GA3286@tor.lan> (raw)
In-Reply-To: <20180730152756.15012-1-pclouds@gmail.com>
On Mon, Jul 30, 2018 at 05:27:55PM +0200, Nguyễn Thái Ngọc Duy wrote:
> Paths that only differ in case work fine in a case-sensitive
> filesystems, but if those repos are cloned in a case-insensitive one,
> you'll get problems. The first thing to notice is "git status" will
> never be clean with no indication what's exactly is "dirty".
>
> This patch helps the situation a bit by pointing out the problem at
> clone time. I have not suggested any way to work around or fix this
> problem. But I guess we could probably have a section in
> Documentation/ dedicated to this problem and point there instead of
> a long advice in this warning.
>
> Another thing we probably should do is catch in "git checkout" too,
> not just "git clone" since your linux/unix colleage colleague may
> accidentally add some files that your mac/windows machine is not very
> happy with. But then there's another problem, once the problem is
> known, we probably should stop spamming this warning at every
> checkout, but how?
>
> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
> ---
> builtin/clone.c | 41 +++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 41 insertions(+)
>
> diff --git a/builtin/clone.c b/builtin/clone.c
> index 5c439f1394..32738c2737 100644
> --- a/builtin/clone.c
> +++ b/builtin/clone.c
> @@ -711,6 +711,33 @@ static void update_head(const struct ref *our, const struct ref *remote,
> }
> }
>
> +static void find_duplicate_icase_entries(struct index_state *istate,
> + struct string_list *dup)
> +{
> + struct string_list list = STRING_LIST_INIT_NODUP;
> + int i;
> +
> + for (i = 0; i < istate->cache_nr; i++)
> + string_list_append(&list, istate->cache[i]->name);
> +
> + list.cmp = fspathcmp;
> + string_list_sort(&list);
> +
> + for (i = 1; i < list.nr; i++) {
> + const char *cur = list.items[i].string;
> + const char *prev = list.items[i - 1].string;
> +
> + if (dup->nr &&
> + !fspathcmp(cur, dup->items[dup->nr - 1].string)) {
> + string_list_append(dup, cur);
> + } else if (!fspathcmp(cur, prev)) {
> + string_list_append(dup, prev);
> + string_list_append(dup, cur);
> + }
> + }
> + string_list_clear(&list, 0);
> +}
> +
> static int checkout(int submodule_progress)
> {
> struct object_id oid;
> @@ -761,6 +788,20 @@ static int checkout(int submodule_progress)
> if (write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
> die(_("unable to write new index file"));
>
> + if (ignore_case) {
> + struct string_list dup = STRING_LIST_INIT_DUP;
> + int i;
> +
> + find_duplicate_icase_entries(&the_index, &dup);
> + if (dup.nr) {
> + warning(_("the following paths in this repository only differ in case and will\n"
> + "cause problems because you have cloned it on an case-insensitive filesytem:\n"));
Thanks for the patch.
I wonder if we can tell the users more about the "problems"
and how to avoid them, or to live with them.
This is more loud thinking:
"The following paths only differ in case\n"
"One a case-insensitive file system only one at a time can be present\n"
"You may rename one like this:\n"
"git checkout <file> && git mv <file> <file>.1\n"
> + fprintf(stderr, "\t%s\n", dup.items[i].string);
Another question:
Do we need any quote_path() here ?
(This may be overkill, since typically the repos with conflicting names
only use ASCII.)
> + }
> + string_list_clear(&dup, 0);
> + }
> +
> err |= run_hook_le(NULL, "post-checkout", sha1_to_hex(null_sha1),
> oid_to_hex(&oid), "1", NULL);
>
> --
> 2.18.0.656.gda699b98b3
>
next prev parent reply other threads:[~2018-07-31 18:24 UTC|newest]
Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-27 9:59 Git clone and case sensitivity Paweł Paruzel
2018-07-27 20:59 ` brian m. carlson
2018-07-28 4:36 ` Duy Nguyen
2018-07-28 4:45 ` Duy Nguyen
2018-07-28 4:48 ` Jeff King
2018-07-28 5:11 ` Duy Nguyen
2018-07-28 9:48 ` Simon Ruderich
2018-07-28 9:56 ` Jeff King
2018-07-28 18:05 ` brian m. carlson
2018-07-29 5:26 ` Duy Nguyen
2018-07-29 9:28 ` Jeff King
2018-07-30 15:27 ` [PATCH/RFC] clone: report duplicate entries on case-insensitive filesystems Nguyễn Thái Ngọc Duy
2018-07-31 18:23 ` Torsten Bögershausen [this message]
2018-08-01 15:25 ` Duy Nguyen
2018-07-31 18:44 ` Elijah Newren
2018-07-31 19:12 ` Junio C Hamano
2018-07-31 19:29 ` Jeff King
2018-07-31 20:12 ` Junio C Hamano
2018-07-31 20:37 ` Jeff King
2018-07-31 20:57 ` Junio C Hamano
2018-08-01 21:20 ` Junio C Hamano
2018-08-02 14:43 ` Duy Nguyen
2018-08-02 16:27 ` Junio C Hamano
2018-08-02 19:06 ` Jeff King
2018-08-02 21:14 ` Junio C Hamano
2018-08-02 21:28 ` Jeff King
2018-08-03 18:23 ` Jeff Hostetler
2018-08-03 18:49 ` Junio C Hamano
2018-08-03 18:53 ` Jeff King
2018-08-05 14:01 ` Jeff Hostetler
2018-08-03 14:28 ` Torsten Bögershausen
2018-08-01 15:21 ` Duy Nguyen
2018-07-31 19:13 ` Junio C Hamano
2018-08-01 15:16 ` Duy Nguyen
2018-08-07 19:01 ` [PATCH v2] " Nguyễn Thái Ngọc Duy
2018-08-07 19:31 ` Junio C Hamano
2018-08-08 19:48 ` Jeff Hostetler
2018-08-08 22:31 ` Jeff King
2018-08-09 0:41 ` Junio C Hamano
2018-08-09 14:23 ` Jeff King
2018-08-09 21:14 ` Jeff Hostetler
2018-08-09 21:34 ` Jeff King
2018-08-09 21:40 ` Elijah Newren
2018-08-09 21:44 ` Jeff King
2018-08-09 21:53 ` Elijah Newren
2018-08-09 21:59 ` Jeff King
2018-08-09 23:05 ` Elijah Newren
2018-08-09 22:07 ` Junio C Hamano
2018-08-10 15:36 ` [PATCH v3 0/1] clone: warn on colidding entries on checkout Nguyễn Thái Ngọc Duy
2018-08-10 15:36 ` [PATCH v3 1/1] clone: report duplicate entries on case-insensitive filesystems Nguyễn Thái Ngọc Duy
2018-08-10 16:42 ` Junio C Hamano
2018-08-11 10:09 ` SZEDER Gábor
2018-08-11 13:16 ` Duy Nguyen
2018-08-13 16:55 ` Junio C Hamano
2018-08-13 17:12 ` Duy Nguyen
2018-08-10 16:12 ` [PATCH v3 0/1] clone: warn on colidding entries on checkout Junio C Hamano
2018-08-12 9:07 ` [PATCH v4] clone: report duplicate entries on case-insensitive filesystems Nguyễn Thái Ngọc Duy
2018-08-13 15:32 ` Jeff Hostetler
2018-08-13 17:18 ` Junio C Hamano
2018-08-15 19:08 ` Torsten Bögershausen
2018-08-15 19:35 ` Duy Nguyen
2018-08-16 15:56 ` [PATCH] config.txt: clarify core.checkStat = minimal Nguyễn Thái Ngọc Duy
2018-08-16 17:01 ` Junio C Hamano
2018-08-16 18:19 ` Duy Nguyen
2018-08-16 22:29 ` Junio C Hamano
2018-08-17 15:26 ` Junio C Hamano
2018-08-17 15:29 ` Duy Nguyen
2018-08-15 19:38 ` [PATCH v4] clone: report duplicate entries on case-insensitive filesystems Junio C Hamano
2018-08-16 14:03 ` Torsten Bögershausen
2018-08-16 15:42 ` Duy Nguyen
2018-08-16 16:23 ` Junio C Hamano
2018-08-17 16:16 ` [PATCH v5] " Nguyễn Thái Ngọc Duy
2018-08-17 17:20 ` Junio C Hamano
2018-08-17 18:00 ` Duy Nguyen
2018-08-17 19:46 ` Torsten Bögershausen
2018-11-19 8:20 ` Carlo Marcelo Arenas Belón
2018-11-19 12:28 ` Torsten Bögershausen
2018-11-19 17:14 ` Carlo Arenas
2018-11-19 18:24 ` Duy Nguyen
2018-11-19 21:03 ` Duy Nguyen
2018-11-19 21:04 ` Duy Nguyen
2018-11-19 21:17 ` Duy Nguyen
2018-11-19 23:29 ` Ramsay Jones
2018-11-19 23:54 ` Ramsay Jones
2018-11-20 1:05 ` Carlo Arenas
2018-11-20 2:22 ` Junio C Hamano
2018-11-20 16:28 ` [PATCH] clone: fix colliding file detection on APFS Nguyễn Thái Ngọc Duy
2018-11-20 19:20 ` Ramsay Jones
2018-11-20 19:35 ` Carlo Arenas
2018-11-20 19:38 ` Duy Nguyen
2018-11-22 17:59 ` [PATCH v1 1/1] t5601-99: Enable colliding file detection for MINGW tboegi
2018-11-22 20:16 ` Carlo Marcelo Arenas Belón
2018-11-23 11:24 ` Johannes Schindelin
2018-11-19 17:21 ` [PATCH v5] clone: report duplicate entries on case-insensitive filesystems Ramsay Jones
2018-11-19 19:39 ` Carlo Arenas
2018-07-31 19:39 ` Git clone and case sensitivity Jeff Hostetler
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=20180731182344.GA3286@tor.lan \
--to=tboegi@web.de \
--cc=git@vger.kernel.org \
--cc=pawelparuzel95@gmail.com \
--cc=pclouds@gmail.com \
--cc=peff@peff.net \
--cc=sandals@crustytoothpaste.net \
/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.