From 30c56eaa2e7ab230a89a6fdc76682d2afaf5d4b1 Mon Sep 17 00:00:00 2001 From: Jonathan Nieder Date: Sat, 24 Apr 2010 07:11:51 -0500 Subject: tests for request-pull Test that request-pull handles failure to push cleanly, writes pull requests that produce the correct effect when followed, and uses a predictable format. Signed-off-by: Jonathan Nieder Signed-off-by: Junio C Hamano --- t/t5150-request-pull.sh | 214 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 214 insertions(+) create mode 100644 t/t5150-request-pull.sh (limited to 't') diff --git a/t/t5150-request-pull.sh b/t/t5150-request-pull.sh new file mode 100644 index 0000000000..e012a364e1 --- /dev/null +++ b/t/t5150-request-pull.sh @@ -0,0 +1,214 @@ +#!/bin/sh + +test_description='Test workflows involving pull request.' + +. ./test-lib.sh + +test_expect_success 'setup' ' + + git init --bare upstream.git && + git init --bare downstream.git && + git clone upstream.git upstream-private && + git clone downstream.git local && + + trash_url="file://$TRASH_DIRECTORY" && + downstream_url="$trash_url/downstream.git/" && + upstream_url="$trash_url/upstream.git/" && + + ( + cd upstream-private && + cat <<-\EOT >mnemonic.txt && + Thirtey days hath November, + Aprile, June, and September: + EOT + git add mnemonic.txt && + test_tick && + git commit -m "\"Thirty days\", a reminder of month lengths" && + git tag -m "version 1" -a initial && + git push --tags origin master + ) && + ( + cd local && + git remote add upstream "$trash_url/upstream.git" && + git fetch upstream && + git pull upstream master && + cat <<-\EOT >>mnemonic.txt && + Of twyecescore-eightt is but eine, + And all the remnante be thrycescore-eine. + O’course Leap yare comes an’pynes, + Ev’rie foure yares, gote it ryghth. + An’twyecescore-eight is but twyecescore-nyne. + EOT + git add mnemonic.txt && + test_tick && + git commit -m "More detail" && + git tag -m "version 2" -a full && + git checkout -b simplify HEAD^ && + mv mnemonic.txt mnemonic.standard && + cat <<-\EOT >mnemonic.clarified && + Thirty days has September, + All the rest I can’t remember. + EOT + git add -N mnemonic.standard mnemonic.clarified && + git commit -a -m "Adapt to use modern, simpler English + +But keep the old version, too, in case some people prefer it." && + git checkout master + ) + +' + +test_expect_success 'setup: two scripts for reading pull requests' ' + + downstream_url_for_sed=$( + printf "%s\n" "$downstream_url" | + sed -e '\''s/\\/\\\\/g'\'' -e '\''s/[[/.*^$]/\\&/g'\'' + ) && + + cat <<-\EOT >read-request.sed && + #!/bin/sed -nf + / in the git repository at:$/! d + n + /^$/! q + n + s/^[ ]*\(.*\) \([^ ]*\)/please pull\ + \1\ + \2/p + q + EOT + + cat <<-EOT >fuzz.sed + #!/bin/sed -nf + s/$_x40/OBJECT_NAME/g + s/A U Thor/AUTHOR/g + s/ [^ ].*/ SUBJECT/g + s/$downstream_url_for_sed/URL/g + s/for-upstream/BRANCH/g + s/mnemonic.txt/FILENAME/g + /^ FILENAME | *[0-9]* [-+]*\$/ b diffstat + /^AUTHOR ([0-9]*):\$/ b shortlog + p + b + : diffstat + n + / [0-9]* files changed/ { + a\ + DIFFSTAT + b + } + b diffstat + : shortlog + /^ [a-zA-Z]/ n + /^[a-zA-Z]* ([0-9]*):\$/ n + /^\$/ N + /^\n[a-zA-Z]* ([0-9]*):\$/! { + a\ + SHORTLOG + D + } + n + b shortlog + EOT + +' + +test_expect_success 'pull request when forgot to push' ' + + rm -fr downstream.git && + git init --bare downstream.git && + ( + cd local && + git checkout initial && + git merge --ff-only master && + test_must_fail git request-pull initial "$downstream_url" \ + 2>../err + ) && + grep "No branch of.*is at:\$" err && + grep "Are you sure you pushed" err + +' + +test_expect_success 'pull request after push' ' + + rm -fr downstream.git && + git init --bare downstream.git && + ( + cd local && + git checkout initial && + git merge --ff-only master && + git push origin master:for-upstream && + git request-pull initial origin >../request + ) && + sed -nf read-request.sed digest && + cat digest && + { + read task && + read repository && + read branch + } ../request + ) && + sed -nf read-request.sed digest && + cat digest && + { + read task && + read repository && + read branch + } expect && + The following changes since commit OBJECT_NAME: + AUTHOR (1): + SUBJECT + + are available in the git repository at: + + URL BRANCH + + SHORTLOG + + DIFFSTAT + EOT + ( + cd local && + git checkout initial && + git merge --ff-only master && + git push origin master:for-upstream && + git request-pull initial "$downstream_url" >../request + ) && + request.fuzzy && + test_cmp expect request.fuzzy + +' + +test_done -- cgit v1.2.3 From 50ab6558bf688e15048e189bdaf9174b217e1748 Mon Sep 17 00:00:00 2001 From: Jonathan Nieder Date: Sat, 24 Apr 2010 07:15:37 -0500 Subject: request-pull: protect against OPTIONS_KEEPDASHDASH from environment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Like most git commands, request-pull supports a -- delimiter to allow callers to pass arguments that would otherwise be treated as an option afterwards. The internal OPTIONS_KEEPDASHDASH variable is passed empty to git-sh-setup to indicate that request-pull itself does not care about the position of the -- delimiter. But if the user has that variable in her environment, request-pull will see the “--” and fail. Empty it explicitly to guard against this. While at it, make the corresponding fix to git-resurrect, too (all other scripts in git.git already protect themselves). Acked-by: Thomas Rast Acked-by: Miklos Vajna Signed-off-by: Jonathan Nieder Signed-off-by: Junio C Hamano --- t/t5150-request-pull.sh | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 't') diff --git a/t/t5150-request-pull.sh b/t/t5150-request-pull.sh index e012a364e1..4c7f48a807 100644 --- a/t/t5150-request-pull.sh +++ b/t/t5150-request-pull.sh @@ -211,4 +211,18 @@ test_expect_success 'pull request format' ' ' +test_expect_success 'request-pull ignores OPTIONS_KEEPDASHDASH poison' ' + + ( + cd local && + OPTIONS_KEEPDASHDASH=Yes && + export OPTIONS_KEEPDASHDASH && + git checkout initial && + git merge --ff-only master && + git push origin master:for-upstream && + git request-pull -- initial "$downstream_url" >../request + ) + +' + test_done -- cgit v1.2.3 From 5bab69172fc20bb86b5245bd1ec41c32dae9eaa6 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Fri, 7 May 2010 21:29:50 -0700 Subject: t5150: protect backslash with backslash in shell At least /bin/sh on FreeBSD 8 interprets backslash followed by newline in an unquoted here text as "empty". Signed-off-by: Junio C Hamano --- t/t5150-request-pull.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 't') diff --git a/t/t5150-request-pull.sh b/t/t5150-request-pull.sh index 4c7f48a807..8e0425b7ac 100644 --- a/t/t5150-request-pull.sh +++ b/t/t5150-request-pull.sh @@ -92,7 +92,7 @@ test_expect_success 'setup: two scripts for reading pull requests' ' : diffstat n / [0-9]* files changed/ { - a\ + a\\ DIFFSTAT b } @@ -102,7 +102,7 @@ test_expect_success 'setup: two scripts for reading pull requests' ' /^[a-zA-Z]* ([0-9]*):\$/ n /^\$/ N /^\n[a-zA-Z]* ([0-9]*):\$/! { - a\ + a\\ SHORTLOG D } -- cgit v1.2.3