* [PATCH v2 0/2] module_list enhancements
@ 2013-06-14 0:26 Fredrik Gustafsson
2013-06-14 0:26 ` [PATCH v2 1/2] [submodule] handle multibyte characters in name Fredrik Gustafsson
2013-06-14 0:26 ` [PATCH v2 2/2] [submodule] Replace perl-code with sh Fredrik Gustafsson
0 siblings, 2 replies; 4+ messages in thread
From: Fredrik Gustafsson @ 2013-06-14 0:26 UTC (permalink / raw)
To: iveqy; +Cc: git
The first iteration can be found here:
http://thread.gmane.org/gmane.comp.version-control.git/227572/
The errors in the first patch was a faulty test. I also applied Junios solution in the
first patch, it was nicer.
Fredrik Gustafsson (2):
[submodule] handle multibyte characters in name
[submodule] Replace perl-code with sh
git-submodule.sh | 53 ++++++++++++++++++++--------------------------
t/t7400-submodule-basic.sh | 12 +++++++++++
2 files changed, 35 insertions(+), 30 deletions(-)
--
1.8.3.1.381.g2ab719e.dirty
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2 1/2] [submodule] handle multibyte characters in name
2013-06-14 0:26 [PATCH v2 0/2] module_list enhancements Fredrik Gustafsson
@ 2013-06-14 0:26 ` Fredrik Gustafsson
2013-06-14 15:02 ` Junio C Hamano
2013-06-14 0:26 ` [PATCH v2 2/2] [submodule] Replace perl-code with sh Fredrik Gustafsson
1 sibling, 1 reply; 4+ messages in thread
From: Fredrik Gustafsson @ 2013-06-14 0:26 UTC (permalink / raw)
To: iveqy; +Cc: git
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.
Tell "git ls-files" to not C-quote its output, which is easier than unwrapping
C-quote ourselves.
Solution-suggested-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Fredrik Gustafsson <iveqy@iveqy.com>
---
git-submodule.sh | 2 +-
t/t7400-submodule-basic.sh | 12 ++++++++++++
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/git-submodule.sh b/git-submodule.sh
index 79bfaac..bad051e 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 -c core.quotepath=false ls-files --error-unmatch --stage -- "$@" ||
echo "unmatched pathspec exists"
) |
perl -e '
diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
index ff26535..d5743ee 100755
--- a/t/t7400-submodule-basic.sh
+++ b/t/t7400-submodule-basic.sh
@@ -868,4 +868,16 @@ test_expect_success 'submodule deinit fails when submodule has a .git directory
test -n "$(git config --get-regexp "submodule\.example\.")"
'
+test_expect_success 'submodule with strange name works "å äö"' '
+ mkdir "å äö" &&
+ (
+ cd "å äö" &&
+ git init &&
+ touch sub
+ git add sub
+ git commit -m "init sub"
+ )
+ git submodule add "/å äö" &&
+ test -n "$(git submodule | grep "å äö")"
+'
test_done
--
1.8.3.1.381.g2ab719e.dirty
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v2 1/2] [submodule] handle multibyte characters in name
2013-06-14 0:26 ` [PATCH v2 1/2] [submodule] handle multibyte characters in name Fredrik Gustafsson
@ 2013-06-14 15:02 ` Junio C Hamano
0 siblings, 0 replies; 4+ messages in thread
From: Junio C Hamano @ 2013-06-14 15:02 UTC (permalink / raw)
To: Fredrik Gustafsson; +Cc: git
Fredrik Gustafsson <iveqy@iveqy.com> writes:
> Many "git submodule" operations do not work on a submodule at a path whose
> name is not in ASCII.
Thanks. A suggestion to add some more explanation to the log
message follows.
> 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.
And pathnames that has a double-quote, a backslash, or a control
character like a newline or a tab in them.
> Tell "git ls-files" to not C-quote its output, which is easier than unwrapping
> C-quote ourselves.
This patch still does not allow pathnames with characters that do
need C-quote, but the code didn't handle them before, so it is not
making things worse.
The correct approach to solve the problem for all pathnames may be
to use "ls-files -z" and tell the Perl script that reads its output
to read NUL separated records by using $/ = "\0".
> Solution-suggested-by: Junio C Hamano <gitster@pobox.com>
> Signed-off-by: Fredrik Gustafsson <iveqy@iveqy.com>
> ---
> git-submodule.sh | 2 +-
> t/t7400-submodule-basic.sh | 12 ++++++++++++
> 2 files changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/git-submodule.sh b/git-submodule.sh
> index 79bfaac..bad051e 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 -c core.quotepath=false ls-files --error-unmatch --stage -- "$@" ||
> echo "unmatched pathspec exists"
> ) |
> perl -e '
> diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
> index ff26535..d5743ee 100755
> --- a/t/t7400-submodule-basic.sh
> +++ b/t/t7400-submodule-basic.sh
> @@ -868,4 +868,16 @@ test_expect_success 'submodule deinit fails when submodule has a .git directory
> test -n "$(git config --get-regexp "submodule\.example\.")"
> '
>
> +test_expect_success 'submodule with strange name works "å äö"' '
> + mkdir "å äö" &&
> + (
> + cd "å äö" &&
> + git init &&
> + touch sub
> + git add sub
> + git commit -m "init sub"
> + )
> + git submodule add "/å äö" &&
> + test -n "$(git submodule | grep "å äö")"
> +'
> test_done
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2 2/2] [submodule] Replace perl-code with sh
2013-06-14 0:26 [PATCH v2 0/2] module_list enhancements Fredrik Gustafsson
2013-06-14 0:26 ` [PATCH v2 1/2] [submodule] handle multibyte characters in name Fredrik Gustafsson
@ 2013-06-14 0:26 ` Fredrik Gustafsson
1 sibling, 0 replies; 4+ messages in thread
From: Fredrik Gustafsson @ 2013-06-14 0:26 UTC (permalink / raw)
To: iveqy; +Cc: git
This will prevent a fork and makes the code similair to the rest of the
file.
In the long term git-submodule.sh needs to use something else than sh to
handle newline in filenames (and therefore needs to use a language that
accepts \0 in strings). However I don't think that keeping that small
perl-part will ease any rewrite.
Signed-off-by: Fredrik Gustafsson <iveqy@iveqy.com>
---
git-submodule.sh | 51 ++++++++++++++++++++++-----------------------------
1 file changed, 22 insertions(+), 29 deletions(-)
diff --git a/git-submodule.sh b/git-submodule.sh
index bad051e..be96934 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -112,38 +112,31 @@ resolve_relative_url ()
#
module_list()
{
+ null_sha1=0000000000000000000000000000000000000000
+ unmerged=
(
git -c core.quotepath=false ls-files --error-unmatch --stage -- "$@" ||
- echo "unmatched pathspec exists"
+ echo "#unmatched"
) |
- perl -e '
- my %unmerged = ();
- my ($null_sha1) = ("0" x 40);
- my @out = ();
- my $unmatched = 0;
- while (<STDIN>) {
- if (/^unmatched pathspec/) {
- $unmatched = 1;
- next;
- }
- chomp;
- my ($mode, $sha1, $stage, $path) =
- /^([0-7]+) ([0-9a-f]{40}) ([0-3])\t(.*)$/;
- next unless $mode eq "160000";
- if ($stage ne "0") {
- if (!$unmerged{$path}++) {
- push @out, "$mode $null_sha1 U\t$path\n";
- }
- next;
- }
- push @out, "$_\n";
- }
- if ($unmatched) {
- print "#unmatched\n";
- } else {
- print for (@out);
- }
- '
+ while read mode sha1 stage path
+ do
+ if test $mode = "#unmatched"
+ then
+ echo "#unmatched"
+ elif test $mode = "160000"
+ then
+ if test $stage != "0"
+ then
+ if test "$unmerged" != "$path"
+ then
+ echo "$mode $null_sha1 U $path"
+ fi
+ unmerged="$path"
+ else
+ echo "$mode $sha1 $stage $path"
+ fi
+ fi
+ done
}
die_if_unmatched ()
--
1.8.3.1.381.g2ab719e.dirty
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2013-06-14 15:02 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-06-14 0:26 [PATCH v2 0/2] module_list enhancements Fredrik Gustafsson
2013-06-14 0:26 ` [PATCH v2 1/2] [submodule] handle multibyte characters in name Fredrik Gustafsson
2013-06-14 15:02 ` Junio C Hamano
2013-06-14 0:26 ` [PATCH v2 2/2] [submodule] Replace perl-code with sh Fredrik Gustafsson
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 NNTP newsgroup(s).