Re: [PATCH 1/2] submodule: handle multibyte characters in name

Subsystems: the rest

2 messages, 2 authors, 2016-06-15 · open the first message on its own page

Re: [PATCH 1/2] submodule: handle multibyte characters in name

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:57:43

Fredrik Gustafsson [off-list ref] 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?

 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;

Re: [PATCH 1/2] submodule: handle multibyte characters in name

From: Jens Lehmann <hidden>
Date: 2016-06-15 22:57:43

Am 12.06.2013 23:06, schrieb Junio C Hamano:
Fredrik Gustafsson [off-list ref] writes:
quoted
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.
quoted
 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.
quoted hunk
 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;
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help