Merge branch 'fg/submodule-non-ascii-path'
authorJunio C Hamano <gitster@pobox.com>
Wed, 26 Jun 2013 22:07:35 +0000 (15:07 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 26 Jun 2013 22:07:36 +0000 (15:07 -0700)
Many "git submodule" operations do not work on a submodule at a
path whose name is not in ASCII.

* fg/submodule-non-ascii-path:
t7400: test of UTF-8 submodule names pass under Mac OS
handle multibyte characters in name

1  2 
git-submodule.sh
t/t7400-submodule-basic.sh
diff --combined git-submodule.sh
index 75feaf17492d27f0832828cee1d37ab91d9cbef6,48bdf843244503df247e0dbdef3c5541cd9eb48e..eb58c8e89d28626fed56604533ffb4b87991a6af
@@@ -113,7 -113,7 +113,7 @@@ resolve_relative_url (
  module_list()
  {
        (
-               git ls-files --error-unmatch --stage -- "$@" ||
+               git ls-files -z --error-unmatch --stage -- "$@" ||
                echo "unmatched pathspec exists"
        ) |
        perl -e '
        my ($null_sha1) = ("0" x 40);
        my @out = ();
        my $unmatched = 0;
+       $/ = "\0";
        while (<STDIN>) {
                if (/^unmatched pathspec/) {
                        $unmatched = 1;
@@@ -1129,16 -1130,16 +1130,16 @@@ cmd_status(
                        say "-$sha1 $displaypath"
                        continue;
                fi
 -              set_name_rev "$sm_path" "$sha1"
                if git diff-files --ignore-submodules=dirty --quiet -- "$sm_path"
                then
 +                      set_name_rev "$sm_path" "$sha1"
                        say " $sha1 $displaypath$revname"
                else
                        if test -z "$cached"
                        then
                                sha1=$(clear_local_git_env; cd "$sm_path" && git rev-parse --verify HEAD)
 -                              set_name_rev "$sm_path" "$sha1"
                        fi
 +                      set_name_rev "$sm_path" "$sha1"
                        say "+$sha1 $displaypath$revname"
                fi
  
index f47cc7b6044ba5f745f7b80ace0fcba0c255f4e5,7e2342130938c4d476f7d97464da9d8388479d98..71a42f00865944339187995bee63bab508f03b9c
@@@ -78,7 -78,7 +78,7 @@@ test_expect_success 'submodule add' 
        (
                cd addtest &&
                git submodule add -q "$submodurl" submod >actual &&
 -              test ! -s actual &&
 +              test_must_be_empty actual &&
                echo "gitdir: ../.git/modules/submod" >expect &&
                test_cmp expect submod/.git &&
                (
@@@ -308,7 -308,7 +308,7 @@@ test_expect_success 'update should wor
  
        mkdir init &&
        git submodule update -q >update.out &&
 -      test ! -s update.out &&
 +      test_must_be_empty update.out &&
  
        inspect init &&
        test_cmp expect head-sha1
@@@ -696,7 -696,7 +696,7 @@@ test_expect_success 'submodule add --na
                rm -rf repo &&
                git rm repo &&
                git submodule add -q --name repo_new "$submodurl/bare.git" repo >actual &&
 -              test ! -s actual &&
 +              test_must_be_empty actual &&
                echo "gitdir: ../.git/modules/submod" >expect &&
                test_cmp expect submod/.git &&
                (
@@@ -868,4 -868,19 +868,19 @@@ test_expect_success 'submodule deinit f
        test -n "$(git config --get-regexp "submodule\.example\.")"
  '
  
+ test_expect_success 'submodule with UTF-8 name' '
+       svname=$(printf "\303\245 \303\244\303\266") &&
+       mkdir "$svname" &&
+       (
+               cd "$svname" &&
+               git init &&
+               >sub &&
+               git add sub &&
+               git commit -m "init sub"
+       ) &&
+       test_config core.precomposeunicode true &&
+       git submodule add ./"$svname" &&
+       git submodule >&2 &&
+       test -n "$(git submodule | grep "$svname")"
+ '
  test_done