From 30c56eaa2e7ab230a89a6fdc76682d2afaf5d4b1 Mon Sep 17 00:00:00 2001 From: Jonathan Nieder Date: Sat, 24 Apr 2010 07:11:51 -0500 Subject: [PATCH 1/5] 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 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 From 50ab6558bf688e15048e189bdaf9174b217e1748 Mon Sep 17 00:00:00 2001 From: Jonathan Nieder Date: Sat, 24 Apr 2010 07:15:37 -0500 Subject: [PATCH 2/5] 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 --- contrib/git-resurrect.sh | 1 + git-request-pull.sh | 1 + t/t5150-request-pull.sh | 14 ++++++++++++++ 3 files changed, 16 insertions(+) diff --git a/contrib/git-resurrect.sh b/contrib/git-resurrect.sh index c364dda696..a4ed4c3c62 100755 --- a/contrib/git-resurrect.sh +++ b/contrib/git-resurrect.sh @@ -9,6 +9,7 @@ other/Merge into (respectively) commit subjects, which is rather slow but allows you to resurrect other people's topic branches." +OPTIONS_KEEPDASHDASH= OPTIONS_SPEC="\ git resurrect $USAGE -- diff --git a/git-request-pull.sh b/git-request-pull.sh index 630ceddf03..b0a03111cc 100755 --- a/git-request-pull.sh +++ b/git-request-pull.sh @@ -8,6 +8,7 @@ USAGE=' []' LONG_USAGE='Summarizes the changes between two commits to the standard output, and includes the given URL in the generated summary.' SUBDIRECTORY_OK='Yes' +OPTIONS_KEEPDASHDASH= OPTIONS_SPEC='git request-pull [options] start url [end] -- p show patch text as well 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 From 5bab69172fc20bb86b5245bd1ec41c32dae9eaa6 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Fri, 7 May 2010 21:29:50 -0700 Subject: [PATCH 3/5] 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(-) 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 } From f2cabf6abfb1ebf8c1f1a4789ae003990b5f0ba9 Mon Sep 17 00:00:00 2001 From: Jonathan Nieder Date: Sat, 24 Apr 2010 07:29:52 -0500 Subject: [PATCH 4/5] adapt request-pull tests for new pull request format MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 10eb0007 (request-pull: avoid mentioning that the start point is a single commit, 2010-01-29), changed the pull request format, so the test needs some changes to still pass: - tolerate a missing blank line between “in the git repository at:” and the name of repository and branch - recognize subject and date in the new request format - update the expected request template to match the new format Signed-off-by: Jonathan Nieder Acked-by: Miklos Vajna Signed-off-by: Junio C Hamano --- t/t5150-request-pull.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/t/t5150-request-pull.sh b/t/t5150-request-pull.sh index 8e0425b7ac..169d3ea376 100644 --- a/t/t5150-request-pull.sh +++ b/t/t5150-request-pull.sh @@ -69,8 +69,7 @@ test_expect_success 'setup: two scripts for reading pull requests' ' #!/bin/sed -nf / in the git repository at:$/! d n - /^$/! q - n + /^$/ n s/^[ ]*\(.*\) \([^ ]*\)/please pull\ \1\ \2/p @@ -81,7 +80,9 @@ test_expect_success 'setup: two scripts for reading pull requests' ' #!/bin/sed -nf s/$_x40/OBJECT_NAME/g s/A U Thor/AUTHOR/g + s/[-0-9]\{10\} [:0-9]\{8\} [-+][0-9]\{4\}/DATE/g s/ [^ ].*/ SUBJECT/g + s/ [^ ].* (DATE)/ SUBJECT (DATE)/g s/$downstream_url_for_sed/URL/g s/for-upstream/BRANCH/g s/mnemonic.txt/FILENAME/g @@ -188,11 +189,10 @@ test_expect_success 'pull request format' ' git init --bare downstream.git && cat <<-\EOT >expect && The following changes since commit OBJECT_NAME: - AUTHOR (1): - SUBJECT + + SUBJECT (DATE) are available in the git repository at: - URL BRANCH SHORTLOG From bf4d382615ac2a3d2df7eae3020dc9103889d2ae Mon Sep 17 00:00:00 2001 From: Jeff King Date: Mon, 10 May 2010 05:51:39 -0400 Subject: [PATCH 5/5] tests: chmod +x t5150 Signed-off-by: Jeff King Signed-off-by: Junio C Hamano --- t/t5150-request-pull.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 t/t5150-request-pull.sh diff --git a/t/t5150-request-pull.sh b/t/t5150-request-pull.sh old mode 100644 new mode 100755