Skip to content

Commit

Permalink
git-pull: allow pulling into an empty repository
Browse files Browse the repository at this point in the history
We used to complain that we cannot merge anything we fetched
with a local branch that does not exist yet.  Just treat the
case as a natural extension of fast forwarding and make the
local branch'es tip point at the same commit we just fetched.
After all an empty repository without an initial commit is an
ancestor of any commit.

[jc: I added a trivial test.  We've become sloppy but we should
 stick to the discipline of covering new behaviour with new
 tests. ]

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Linus Torvalds authored and Junio C Hamano committed Nov 17, 2006
1 parent 73fbd33 commit d09e79c
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 2 deletions.
16 changes: 14 additions & 2 deletions git-pull.sh
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,10 @@ do
shift
done

orig_head=$(git-rev-parse --verify HEAD) || die "Pulling into a black hole?"
orig_head=$(git-rev-parse --verify HEAD 2>/dev/null)
git-fetch --update-head-ok --reflog-action=pull "$@" || exit 1

curr_head=$(git-rev-parse --verify HEAD)
curr_head=$(git-rev-parse --verify HEAD 2>/dev/null)
if test "$curr_head" != "$orig_head"
then
# The fetch involved updating the current branch.
Expand Down Expand Up @@ -80,6 +80,11 @@ case "$merge_head" in
exit 0
;;
?*' '?*)
if test -z "$orig_head"
then
echo >&2 "Cannot merge multiple branches into empty head"
exit 1
fi
var=`git-repo-config --get pull.octopus`
if test -n "$var"
then
Expand All @@ -95,6 +100,13 @@ case "$merge_head" in
;;
esac

if test -z "$orig_head"
then
git-update-ref -m "initial pull" HEAD $merge_head "" &&
git-read-tree --reset -u HEAD || exit 1
exit
fi

case "$strategy_args" in
'')
strategy_args=$strategy_default_args
Expand Down
33 changes: 33 additions & 0 deletions t/t5520-pull.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#!/bin/sh

test_description='pulling into void'

. ./test-lib.sh

D=`pwd`

test_expect_success setup '
echo file >file &&
git add file &&
git commit -a -m original
'

test_expect_success 'pulling into void' '
mkdir cloned &&
cd cloned &&
git init-db &&
git pull ..
'

cd "$D"

test_expect_success 'checking the results' '
test -f file &&
test -f cloned/file &&
diff file cloned/file
'

test_done

0 comments on commit d09e79c

Please sign in to comment.