From 8ee5d73137f355c21e8d4db365ae8d301e067395 Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Mon, 13 Oct 2008 11:36:52 +0200 Subject: Fix fetch/pull when run without --update-head-ok Some confusing tutorials suggested that it would be a good idea to fetch into the current branch with something like this: git fetch origin master:master (or even worse: the same command line with "pull" instead of "fetch"). While it might make sense to store what you want to pull, it typically is plain wrong when the current branch is "master". This should only be allowed when (an incorrect) "git pull origin master:master" tries to work around by giving --update-head-ok to underlying "git fetch", and otherwise we should refuse it, but somewhere along the lines we lost that behavior. The check for the current branch is now _only_ performed in non-bare repositories, which is an improvement from the original behaviour. Some newer tests were depending on the broken behaviour of "git fetch" this patch fixes, and have been adjusted. Signed-off-by: Johannes Schindelin Acked-by: Shawn O. Pearce Acked-by: Daniel Barkalow Signed-off-by: Junio C Hamano --- t/t5405-send-pack-rewind.sh | 2 +- t/t5505-remote.sh | 2 +- t/t5510-fetch.sh | 12 ++++++++++++ t/t9300-fast-import.sh | 2 +- 4 files changed, 15 insertions(+), 3 deletions(-) (limited to 't') diff --git a/t/t5405-send-pack-rewind.sh b/t/t5405-send-pack-rewind.sh index 86abc62271..cb9aacc7bc 100755 --- a/t/t5405-send-pack-rewind.sh +++ b/t/t5405-send-pack-rewind.sh @@ -12,7 +12,7 @@ test_expect_success setup ' mkdir another && ( cd another && git init && - git fetch .. master:master + git fetch --update-head-ok .. master:master ) && >file2 && git add file2 && test_tick && diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh index c4496635df..0103e1a180 100755 --- a/t/t5505-remote.sh +++ b/t/t5505-remote.sh @@ -188,7 +188,7 @@ test_expect_success 'prune --dry-run' ' test_expect_success 'add --mirror && prune' ' (mkdir mirror && cd mirror && - git init && + git init --bare && git remote add --mirror -f origin ../one) && (cd one && git branch -m side2 side) && diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh index de26c20327..52094e78dc 100755 --- a/t/t5510-fetch.sh +++ b/t/t5510-fetch.sh @@ -303,4 +303,16 @@ test_expect_success 'pushing nonexistent branch by mistake should not segv' ' ' +test_expect_success 'refuse to fetch into the current branch' ' + + test_must_fail git fetch . side:master + +' + +test_expect_success 'fetch into the current branch with --update-head-ok' ' + + git fetch --update-head-ok . side:master + +' + test_done diff --git a/t/t9300-fast-import.sh b/t/t9300-fast-import.sh index c6bc0a607f..dba3a1b48f 100755 --- a/t/t9300-fast-import.sh +++ b/t/t9300-fast-import.sh @@ -983,7 +983,7 @@ test_expect_success \ git checkout subuse1 && rm -rf sub && mkdir sub && cd sub && git init && - git fetch .. refs/heads/sub:refs/heads/master && + git fetch --update-head-ok .. refs/heads/sub:refs/heads/master && git checkout master && cd .. && git submodule init && -- cgit v1.2.3 From b0ad11ea165e07308fc02a5091efbe2e2d22237c Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Tue, 14 Oct 2008 15:32:20 -0700 Subject: pull: allow "git pull origin $something:$current_branch" into an unborn branch Some misguided documents floating on the Net suggest this sequence: mkdir newdir && cd newdir git init git remote add origin $url git pull origin master:master "git pull" has known about misguided "pull" that lets the underlying fetch update the current branch for a long time. It also has known about "git pull origin master" into a branch yet to be born. These two workarounds however were not aware of the existence of each other and did not work well together. This fixes it. Signed-off-by: Junio C Hamano --- t/t5520-pull.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 't') diff --git a/t/t5520-pull.sh b/t/t5520-pull.sh index 997b2db827..725771fac1 100755 --- a/t/t5520-pull.sh +++ b/t/t5520-pull.sh @@ -29,6 +29,18 @@ test_expect_success 'checking the results' ' diff file cloned/file ' +test_expect_success 'pulling into void using master:master' ' + mkdir cloned-uho && + ( + cd cloned-uho && + git init && + git pull .. master:master + ) && + test -f file && + test -f cloned-uho/file && + test_cmp file cloned-uho/file +' + test_expect_success 'test . as a remote' ' git branch copy master && -- cgit v1.2.3