From 6fa92bf3cdbfdd8c9c56ef40a5170a859442b166 Mon Sep 17 00:00:00 2001 From: Alex Riesen Date: Mon, 12 Nov 2007 22:38:23 +0100 Subject: [PATCH 1/2] Add a test checking if send-pack updated local tracking branches correctly Signed-off-by: Alex Riesen Signed-off-by: Junio C Hamano --- t/t5404-tracking-branches.sh | 40 ++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100755 t/t5404-tracking-branches.sh diff --git a/t/t5404-tracking-branches.sh b/t/t5404-tracking-branches.sh new file mode 100755 index 000000000..20718d467 --- /dev/null +++ b/t/t5404-tracking-branches.sh @@ -0,0 +1,40 @@ +#!/bin/sh + +test_description='tracking branch update checks for git push' + +. ./test-lib.sh + +test_expect_success 'setup' ' + echo 1 >file && + git add file && + git commit -m 1 && + git branch b1 && + git branch b2 && + git clone . aa && + git checkout b1 && + echo b1 >>file && + git commit -a -m b1 && + git checkout b2 && + echo b2 >>file && + git commit -a -m b2 +' + +test_expect_success 'check tracking branches updated correctly after push' ' + cd aa && + b1=$(git rev-parse origin/b1) && + b2=$(git rev-parse origin/b2) && + git checkout -b b1 origin/b1 && + echo aa-b1 >>file && + git commit -a -m aa-b1 && + git checkout -b b2 origin/b2 && + echo aa-b2 >>file && + git commit -a -m aa-b2 && + git checkout master && + echo aa-master >>file && + git commit -a -m aa-master && + git push && + test "$(git rev-parse origin/b1)" = "$b1" && + test "$(git rev-parse origin/b2)" = "$b2" +' + +test_done From ed31df312a30d91c288a4b6e3d031de15284405a Mon Sep 17 00:00:00 2001 From: Alex Riesen Date: Mon, 12 Nov 2007 22:39:38 +0100 Subject: [PATCH 2/2] Update the tracking references only if they were succesfully updated on remote It fixes the bug where local tracking branches were filled with zeroed SHA-1 if the remote branch was not updated because, for instance, it was not an ancestor of the local (i.e. had other changes). Signed-off-by: Alex Riesen Signed-off-by: Junio C Hamano --- send-pack.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/send-pack.c b/send-pack.c index b74fd454f..d56d980af 100644 --- a/send-pack.c +++ b/send-pack.c @@ -349,7 +349,8 @@ static int send_pack(int in, int out, struct remote *remote, int nr_refspec, cha if (!dry_run && remote && ret == 0) { for (ref = remote_refs; ref; ref = ref->next) - update_tracking_ref(remote, ref); + if (!is_null_sha1(ref->new_sha1)) + update_tracking_ref(remote, ref); } if (!new_refs && ret == 0)