This way the helper can write to 'refs/remotes/origin/*' instead of writing to 'refs/heads/*'. Signed-off-by: Sverre Rabbelier <srabbelier@xxxxxxxxx> --- Daniel, does this look good to you? Let's assume the following: * list: only HEAD is a symref (to refs/heads/<branch>), all other refs are '? refs/heads/<branch>'. * import: the helper creates branches under refs/remotes/<alias>/* (since the refspec code is not yet in that would allow it to create them under refs/<vcs>/<alias>/*) Now when updating the refs we do the following: transport-helper.c:145 "read_ref(posn->name, posn->old_sha1);" The value of posn->name looks like "refs/heads/<branch>". So what does this lookup do? It tries to lookup the new value of the ref _where it will be created_, this fails of course, since the ref currently only exists as "refs/remotes/origin/<branch>". So, we should instead be doing a lookup using posn->peer_ref->name, and not do a lookup at all if it posn->peer_ref is not set (which should not occur as we are passed only wanted peer refs). Please let me know if this makes sense and both this and 0008 can be squashed with 0007. transport-helper.c | 5 ++++- 1 files changed, 4 insertions(+), 1 deletions(-) diff --git a/transport-helper.c b/transport-helper.c index 148496c..72ed95b 100644 --- a/transport-helper.c +++ b/transport-helper.c @@ -142,7 +142,10 @@ static int fetch_with_import(struct transport *transport, posn = to_fetch[i]; if (posn->status & REF_STATUS_UPTODATE) continue; - read_ref(posn->name, posn->old_sha1); + if(posn->peer_ref) { + read_ref(posn->peer_ref->name, posn->peer_ref->old_sha1); + hashcpy(posn->old_sha1, posn->peer_ref->old_sha1); + } } return 0; } -- 1.6.5.2.295.g0d105 -- 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