Skip to content

Commit

Permalink
Merge branch 'mh/deref-symref-over-helper-transport'
Browse files Browse the repository at this point in the history
"git fetch" over a remote-helper that cannot respond to "list"
command could not fetch from a symbolic reference e.g. HEAD.

* mh/deref-symref-over-helper-transport:
  transport-helper: do not request symbolic refs to remote helpers
  • Loading branch information
Junio C Hamano committed Feb 17, 2015
2 parents 18d0fec + 33cae54 commit a6c6815
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 6 deletions.
8 changes: 7 additions & 1 deletion git-remote-testgit.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
#!/bin/sh
# Copyright (c) 2012 Felipe Contreras

alias=$1
# The first argument can be a url when the fetch/push command was a url
# instead of a configured remote. In this case, use a generic alias.
if test "$1" = "testgit::$2"; then
alias=_
else
alias=$1
fi
url=$2

dir="$GIT_DIR/testgit/$alias"
Expand Down
24 changes: 24 additions & 0 deletions t/t5801-remote-helpers.sh
Original file line number Diff line number Diff line change
Expand Up @@ -281,4 +281,28 @@ test_expect_success 'push messages' '
)
'

test_expect_success 'fetch HEAD' '
(cd server &&
git checkout master &&
echo more >>file &&
git commit -a -m more
) &&
(cd local &&
git fetch origin HEAD
) &&
compare_refs server HEAD local FETCH_HEAD
'

test_expect_success 'fetch url' '
(cd server &&
git checkout master &&
echo more >>file &&
git commit -a -m more
) &&
(cd local &&
git fetch "testgit::${PWD}/../server"
) &&
compare_refs server HEAD local FETCH_HEAD
'

test_done
13 changes: 8 additions & 5 deletions transport-helper.c
Original file line number Diff line number Diff line change
Expand Up @@ -356,7 +356,8 @@ static int fetch_with_fetch(struct transport *transport,
continue;

strbuf_addf(&buf, "fetch %s %s\n",
sha1_to_hex(posn->old_sha1), posn->name);
sha1_to_hex(posn->old_sha1),
posn->symref ? posn->symref : posn->name);
}

strbuf_addch(&buf, '\n');
Expand Down Expand Up @@ -454,7 +455,8 @@ static int fetch_with_import(struct transport *transport,
if (posn->status & REF_STATUS_UPTODATE)
continue;

strbuf_addf(&buf, "import %s\n", posn->name);
strbuf_addf(&buf, "import %s\n",
posn->symref ? posn->symref : posn->name);
sendline(data, &buf);
strbuf_reset(&buf);
}
Expand Down Expand Up @@ -487,14 +489,15 @@ static int fetch_with_import(struct transport *transport,
* fast-forward or this is a forced update.
*/
for (i = 0; i < nr_heads; i++) {
char *private;
char *private, *name;
posn = to_fetch[i];
if (posn->status & REF_STATUS_UPTODATE)
continue;
name = posn->symref ? posn->symref : posn->name;
if (data->refspecs)
private = apply_refspecs(data->refspecs, data->refspec_nr, posn->name);
private = apply_refspecs(data->refspecs, data->refspec_nr, name);
else
private = xstrdup(posn->name);
private = xstrdup(name);
if (private) {
read_ref(private, posn->old_sha1);
free(private);
Expand Down

0 comments on commit a6c6815

Please sign in to comment.