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@xxxxxxxxx> --- 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html