Hi *, I think it didn't get to the list due to the size limit. So I send it as a gziped attatchment, with the test inline. Regards, Santi --- t/t5515-fetch-merge-logic.sh | 124 ++++++++++++++++++++ diff --git a/t/t5515-fetch-merge-logic.sh b/t/t5515-fetch-merge-logic.sh new file mode 100755 index 0000000..8d8a71f --- /dev/null +++ b/t/t5515-fetch-merge-logic.sh @@ -0,0 +1,124 @@ +#!/bin/sh +# +# Copyright (c) 2007 Santi BĂ©jar, based on t4013 by Junio C Hamano +# +# + +test_description='Merge logic in fetch' + +. ./test-lib.sh + +LF=' +' + +test_expect_success setup ' + GIT_AUTHOR_DATE="2006-06-26 00:00:00 +0000" && + GIT_COMMITTER_DATE="2006-06-26 00:00:00 +0000" && + export GIT_AUTHOR_DATE GIT_COMMITTER_DATE && + + echo >file original && + git add file && + git commit -a -m One && + git branch one && + + echo two >> file && + git commit -a -m Two && + git branch two && + + echo three >> file && + git commit -a -m Three && + git branch three && + + echo master >> file && + git commit -a -m Master + + git checkout three + + git clone . cloned && + cd cloned && + + git config remote.config-explicit.url ../.git/ && + git config remote.config-explicit.fetch refs/heads/master:remotes/rem/master && + git config --add remote.config-explicit.fetch refs/heads/one:remotes/rem/one && + git config --add remote.config-explicit.fetch two:remotes/rem/two && + git config --add remote.config-explicit.fetch refs/heads/three:remotes/rem/three && + + git config remote.config-glob.url ../.git/ && + git config remote.config-glob.fetch refs/heads/*:refs/remotes/rem/* && + + mkdir -p .git/remotes && + { + echo "URL: ../.git/" + echo "Pull: refs/heads/master:remotes/rem/master" + echo "Pull: refs/heads/one:remotes/rem/one" + echo "Pull: two:remotes/rem/two" + echo "Pull: refs/heads/three:remotes/rem/three" + } >.git/remotes/remote-explicit && + + { + echo "URL: ../.git/" + echo "Pull: refs/heads/*:refs/remotes/rem/*" + } >.git/remotes/remote-glob && + + mkdir -p .git/branches && + echo "../.git" > .git/branches/branches-default && + echo "../.git#one" > .git/branches/branches-one && + + for remote in config-explicit config-glob remote-explicit remote-glob \ + branches-default branches-one ; do + git config branch.br-$remote.remote $remote && + git config branch.br-$remote-merge.remote $remote && + git config branch.br-$remote-merge.merge refs/heads/three && + git config branch.br-$remote-octopus.remote $remote && + git config branch.br-$remote-octopus.merge refs/heads/one && + git config --add branch.br-$remote-octopus.merge two && + git config --add branch.br-$remote-octopus.merge remotes/rem/three && + branches="$branches br-$remote br-$remote-merge br-$remote-octopus" + done +' + +for branch in br-unconfig $branches ; do + echo $branch + for remote in config-explicit config-glob remote-explicit remote-glob \ + branches-default branches-one ../.git + do +cat < tests + +while read cmd +do + case "$cmd" in + '' | '#'*) continue ;; + esac + test=`echo "$cmd" | sed -e 's|[/ ][/ ]*|_|g'` + cnt=`expr $test_count + 1` + pfx=`printf "%04d" $cnt` + expect="../../t5515/fetch.$test" + actual="$pfx-fetch.$test" + + test_expect_success "$cmd" ' + { + echo "# $cmd" + set x $cmd; shift + git symbolic-ref HEAD refs/heads/$1 ; shift + git fetch "$@" >/dev/null + cut -f -2 .git/FETCH_HEAD + } >"$actual" && + if test -f "$expect" + then + diff -u "$expect" "$actual" && + rm -f "$actual" + else + # this is to help developing new tests. + cp "$actual" "$expect" + false + fi + ' +done < tests + +test_done