[PATCH v2 09/13] Honour the refspec when updating refs after import
From: Sverre Rabbelier <hidden>
Date: 2016-06-15 22:47:40
Subsystem:
the rest · Maintainer:
Linus Torvalds
This way the helper can write to 'refs/remotes/origin/*' instead of
writing to 'refs/heads/*'.
Signed-off-by: Sverre Rabbelier <redacted>
---
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