Code

Merge branch 'maint'
authorJunio C Hamano <gitster@pobox.com>
Wed, 4 Jan 2012 19:21:42 +0000 (11:21 -0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 4 Jan 2012 19:21:42 +0000 (11:21 -0800)
* maint:
  t5550: repack everything into one file
  Catch invalid --depth option passed to clone or fetch

1  2 
t/t5550-http-fetch.sh
transport.c

diff --combined t/t5550-http-fetch.sh
index 95a133d697204a3b5dc469d188939198727e183a,7926ab3c91e2b962760955640b8e8d45796d1e6f..e5e6b8f643206c2d4fd01e3ad71ca50a43f3da19
@@@ -49,84 -49,40 +49,84 @@@ test_expect_success 'setup askpass help
        EOF
        chmod +x askpass &&
        GIT_ASKPASS="$PWD/askpass" &&
 -      export GIT_ASKPASS &&
 -      >askpass-expect-none &&
 -      echo "askpass: Password for '\''$HTTPD_DEST'\'': " >askpass-expect-pass &&
 -      { echo "askpass: Username for '\''$HTTPD_DEST'\'': " &&
 -        cat askpass-expect-pass
 -      } >askpass-expect-both
 +      export GIT_ASKPASS
  '
  
 +expect_askpass() {
 +      dest=$HTTPD_DEST
 +      {
 +              case "$1" in
 +              none)
 +                      ;;
 +              pass)
 +                      echo "askpass: Password for 'http://$2@$dest': "
 +                      ;;
 +              both)
 +                      echo "askpass: Username for 'http://$dest': "
 +                      echo "askpass: Password for 'http://$2@$dest': "
 +                      ;;
 +              *)
 +                      false
 +                      ;;
 +              esac
 +      } >askpass-expect &&
 +      test_cmp askpass-expect askpass-query
 +}
 +
  test_expect_success 'cloning password-protected repository can fail' '
        >askpass-query &&
        echo wrong >askpass-response &&
        test_must_fail git clone "$HTTPD_URL/auth/repo.git" clone-auth-fail &&
 -      test_cmp askpass-expect-both askpass-query
 +      expect_askpass both wrong
  '
  
  test_expect_success 'http auth can use user/pass in URL' '
        >askpass-query &&
 -      echo wrong >askpass-reponse &&
 +      echo wrong >askpass-response &&
        git clone "$HTTPD_URL_USER_PASS/auth/repo.git" clone-auth-none &&
 -      test_cmp askpass-expect-none askpass-query
 +      expect_askpass none
  '
  
  test_expect_success 'http auth can use just user in URL' '
        >askpass-query &&
        echo user@host >askpass-response &&
        git clone "$HTTPD_URL_USER/auth/repo.git" clone-auth-pass &&
 -      test_cmp askpass-expect-pass askpass-query
 +      expect_askpass pass user@host
  '
  
  test_expect_success 'http auth can request both user and pass' '
        >askpass-query &&
        echo user@host >askpass-response &&
        git clone "$HTTPD_URL/auth/repo.git" clone-auth-both &&
 -      test_cmp askpass-expect-both askpass-query
 +      expect_askpass both user@host
 +'
 +
 +test_expect_success 'http auth respects credential helper config' '
 +      test_config_global credential.helper "!f() {
 +              cat >/dev/null
 +              echo username=user@host
 +              echo password=user@host
 +      }; f" &&
 +      >askpass-query &&
 +      echo wrong >askpass-response &&
 +      git clone "$HTTPD_URL/auth/repo.git" clone-auth-helper &&
 +      expect_askpass none
 +'
 +
 +test_expect_success 'http auth can get username from config' '
 +      test_config_global "credential.$HTTPD_URL.username" user@host &&
 +      >askpass-query &&
 +      echo user@host >askpass-response &&
 +      git clone "$HTTPD_URL/auth/repo.git" clone-auth-user &&
 +      expect_askpass pass user@host
 +'
 +
 +test_expect_success 'configured username does not override URL' '
 +      test_config_global "credential.$HTTPD_URL.username" wrong &&
 +      >askpass-query &&
 +      echo user@host >askpass-response &&
 +      git clone "$HTTPD_URL_USER/auth/repo.git" clone-auth-user2 &&
 +      expect_askpass pass user@host
  '
  
  test_expect_success 'fetch changes via http' '
@@@ -162,8 -118,7 +162,7 @@@ test_expect_success 'http remote detect
  test_expect_success 'fetch packed objects' '
        cp -R "$HTTPD_DOCUMENT_ROOT_PATH"/repo.git "$HTTPD_DOCUMENT_ROOT_PATH"/repo_pack.git &&
        (cd "$HTTPD_DOCUMENT_ROOT_PATH"/repo_pack.git &&
-        git --bare repack &&
-        git --bare prune-packed
+        git --bare repack -a -d
        ) &&
        git clone $HTTPD_URL/dumb/repo_pack.git
  '
diff --combined transport.c
index a99b7c9c457c4ac3b76dc6859507711f847e5f62,72a9c292e5bcf00b226de6682656a5390e5c6ca2..cac0c065ff9f82011b204f932932283b01a5d034
@@@ -163,7 -163,7 +163,7 @@@ static void set_upstreams(struct transp
                /* Follow symbolic refs (mainly for HEAD). */
                localname = ref->peer_ref->name;
                remotename = ref->name;
 -              tmp = resolve_ref(localname, sha, 1, &flag);
 +              tmp = resolve_ref_unsafe(localname, sha, 1, &flag);
                if (tmp && flag & REF_ISSYMREF &&
                        !prefixcmp(tmp, "refs/heads/"))
                        localname = tmp;
@@@ -474,8 -474,12 +474,12 @@@ static int set_git_option(struct git_tr
        } else if (!strcmp(name, TRANS_OPT_DEPTH)) {
                if (!value)
                        opts->depth = 0;
-               else
-                       opts->depth = atoi(value);
+               else {
+                       char *end;
+                       opts->depth = strtol(value, &end, 0);
+                       if (*end)
+                               die("transport: invalid depth option '%s'", value);
+               }
                return 0;
        }
        return 1;