Re: [PATCH 1/2] submodule: handle multibyte characters in name
- From
Jens Lehmann <jens.lehmann@web.de>
- Date
- Jun 12, 2013, 21:38 UTC
- Message-ID
- <51B8EA67.7040801@web.de>
- In-Reply-To
- <7vppvr11kg.fsf_-_@alter.siamese.dyndns.org>
Am 12.06.2013 23:06, schrieb Junio C Hamano:
Show 35 quoted lines
> Fredrik Gustafsson <iveqy@iveqy.com> writes:
>
>> Bugg reported here:
>> http://thread.gmane.org/gmane.comp.version-control.git/218922/focus=226791
>
> The URL is nice supplemental info as footnote, but please write log
> message in a way that a reader can understand without going there.
> In this case, it wouldn't be so hard, I think, perhaps like:
>
> Many "git submodule" operations do not work on a submodule
> at a path whose name is not in ASCII.
>
> This is because "git ls-files" is used to find which paths
> are bound to submodules to the current working tree, and the
> output is C-quoted by default for non ASCII pathnames.
>
> Read from "git ls-files -z" instead, which is easier than
> unwrapping C-quote ourselves.
>
> or something.
>
>> module_list()
>> {
>> (
>> - git ls-files --error-unmatch --stage -- "$@" ||
>> + git ls-files --error-unmatch --stage -z -- "$@" ||
>> echo "unmatched pathspec exists"
>> ) |
>> + sed -e 's/\x00/\n/g' |
>
> It is strange to preprosess input to be read by a Perl script with
> sed ;-)
>
> How about doing it this way instead? Does the result pass your
> test?Hmm, I just came around to test that patch, and for me the new test even succeeds without the changes to module_list(). So I'm not convinced yet what we are fixing here ;-)
The original poster reported that the submodule just added locally is not showing up in a subsequent `git submodule`. And it doesn't for me either, no matter if the path contains umlauts or not. Will take a deeper look when I find some more time to do that, maybe recent changes to "git add" play a role here too.
Show 25 quoted lines
> git-submodule.sh | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/git-submodule.sh b/git-submodule.sh
> index 79bfaac..19faf58 100755
> --- a/git-submodule.sh
> +++ b/git-submodule.sh
> @@ -113,7 +113,7 @@ resolve_relative_url ()
> module_list()
> {
> (
> - git ls-files --error-unmatch --stage -- "$@" ||
> + git ls-files --error-unmatch --stage -z -- "$@" ||
> echo "unmatched pathspec exists"
> ) |
> perl -e '
> @@ -121,6 +121,7 @@ module_list()
> my ($null_sha1) = ("0" x 40);
> my @out = ();
> my $unmatched = 0;
> + $/ = "\0";
> while (<STDIN>) {
> if (/^unmatched pathspec/) {
> $unmatched = 1;
>