{"thread":{"id":"36691","subject":"[GUILT v4 00/33] Teach guilt import-commit how to create legal patch names, and more","startedAt":"2014-05-18T21:59:36Z","lastAt":"2015-01-22T15:50:51Z","messageCount":40,"participants":["Per Cederqvist","Jeff Sipek"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"242096","messageId":"1400450409-30998-1-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":null,"subject":"[GUILT v4 00/33] Teach guilt import-commit how to create legal patch names, and more","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T21:59:36Z","receivedAt":"2014-05-18T21:59:36Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"This is version 4 of the patch series I sent back on 21 Mar 2014.  I\nhave addressed all feedback to date, update the documentation where\nneeded, improved the error handling in the \"cmd\" and \"shouldfail\"\nfunctions in the test suite, fixed compatibility with older Git\nversions, and added signed-off-by lines from Jeff Sipek for those\ncommits that I have received an explicit approval from him (but only\nif I have not made any other change to that particular commit).\n\nI have added two new patches:\n\n* Patch 32/33 adds documentation and test cases for the new regexp\nfunctionality of \"guilt header\".  This could be folded into patch 12.\n\n* Patch 33/33 adds documentation for the exit value of \"guilt push\"\nand \"guilt pop\".  This could be folded into patches 25-26.\n\nTo see how the patches have evolved, you might find\nhttp://www.lysator.liu.se/~ceder/guilt-oslo-2014-v4/ useful.  It\ndisplays diffs of all the patches between v3 and v4, in pdiffdiff\noutput format.\n\nHere is the original blurb for the series, slightly edited:\n\nI recently found myself sitting on a train with a computer in front of\nme.  I tried to use \"guilt import-commit\", which seemed to work, but\nwhen I tried to \"guilt push\" the commits I had just imported I got\nsome errors.  It turned out that \"guilt import-commit\" had generated\ninvalid patch names.\n\nI decided to fix the issue, and write a test case that demonstrated\nthe problem.\n\nOne thing led to another, and here I am, a few late nights at a hotel\nand a return trip on the train later, submitting a patch series in 28\nparts.  Sorry about the number of patches, but this is what happens\nwhen you uncover a bug while writing a test case for the bug you\nuncovered while writing a test case for your original problem.\n\nThe patch series consists of:\n\n - A number of fixes to the test suite.\n\n - A number of bug fixes which I hope are non-controversial.  Most of\n   the fixes have test cases.\n\n - Changed behavior: \"guilt push\" when there is nothing more to push\n   now uses exit status 1.  This makes it possible to write shell\n   loops such as \"while guilt push; do make test||break; done\".  Also,\n   \"guilt pop\" when no patches are applied also uses exit status 1.\n   (This aligns \"guilt push\" and \"guilt pop\" with how \"hg qpush\" and\n   \"hg qpop\" has worked for several years.)\n\n - Changed behavior: by default, guilt no longer changes branch when\n   you push a patch.  You need to do \"git config guilt.reusebranch\n   false\" to re-enable that.  This patch sets the default value of\n   guilt.reusebranch to true; it should in my opinion change to false\n   a year or two after the next release.\n\n - The humble beginnings of a coding style guide.\n\nA more detailed overview of the patches:\n\n1. Some tests fail if \"git config guilt.diffstat true\" is in effect.\n\n2-4. Some commands fail if run from a directory with spaces in its\n     name.\n\n5. \"guilt new\" had an overly restrictive argument parser.\n\n6-8. guilt.diffstat could break \"guilt fold\" and \"guilt new\".\n\n9-10. The test suite did not test exit status properly.\n\n11. Remove pointless redirections in the test suite.\n\n12-13. \"guilt header\" tried to check if a patch existed, but the check\n        was broken.\n\n14-16. Various parts of guilt tried to ensure that patch names were\n       legal git branch names, but failed.\n\n17-20. \"guilt graph\" failed when no patch was applied, and when a\n       branch name contained a comma or a quote.\n\n21-23. \"git config log.decorate short\" caused \"guilt import-commit\",\n       \"guilt patchbomb\" and \"guilt rebase\" to fail in various ways.\n\n24. Patches may contain backslashes, but various informative messages\n    from guilt did backslash processing.\n\n25-26. \"guilt push\" and \"guilt pop\" should fail when there is nothing\n       to do.\n\n28. Fix coding style problems in a test case.\n\n27, 29. These two commits were things I intended to contribute a while\n       back, when contributing the \"Change git branch when patches are\n       applied\" change (commit 67d3af63f422).  These commits makes\n       that behavior optional, and it defaults to being disabled, so\n       that you can use both Guilt v0.35 (and earlier) and the current\n       Guilt code against the same repo.  These commits add some code\n       complexity, and you might want to skip them if you think the\n       current behavior is better.\n\n30. A coding style guide, with Emacs support.\n\n31. Avoid using \"git log -p\".\n\n32. Test case + doc for \"guilt header\".\n\n33. Doc for \"guilt push\" and \"guilt pop.\"\n\nThis patch series is also available on\nhttp://repo.or.cz/w/guilt/ceder.git in the \"oslo-2014-v4\" branch.  If\nyou already have a copy of guilt, you should be able to fetch that\nbranch with something like:\n\n    git remote add ceder http://repo.or.cz/r/guilt/ceder.git\n    git fetch ceder refs/heads/oslo-2014-v4:refs/remotes/ceder/oslo-2014-v4\n\nA few of the regression/t-*.out files contain non-ASCII characters.  I\nhope they survive the mail transfer; if not, please use the repo above\nto fetch the commits.\n\nPer Cederqvist (33):\n  The tests should not fail if guilt.diffstat is set.\n  Allow \"guilt delete -f\" to run from a dir which contains spaces.\n  Added test case for \"guilt delete -f\".\n  Allow \"guilt import-commit\" to run from a dir which contains spaces.\n  \"guilt new\": Accept more than 4 arguments.\n  Fix the do_get_patch function.\n  Added test cases for \"guilt fold\".\n  Added more test cases for \"guilt new\": empty patches.\n  Test suite: properly check the exit status of commands.\n  Run test_failed if the exit status of a test script is bad.\n  test suite: remove pointless redirection.\n  \"guilt header\": more robust header selection.\n  Check that \"guilt header '.*'\" fails.\n  Use \"git check-ref-format\" to validate patch names.\n  Produce legal patch names in guilt-import-commit.\n  Fix backslash handling when creating names of imported patches.\n  \"guilt graph\" no longer loops when no patches are applied.\n  guilt-graph: Handle commas in branch names.\n  Check that \"guilt graph\" works when working on a branch with a comma.\n  \"guilt graph\": Handle patch names containing quotes.\n  The log.decorate setting should not influence import-commit.\n  The log.decorate setting should not influence patchbomb.\n  The log.decorate setting should not influence guilt rebase.\n  disp no longer processes backslashes.\n  \"guilt push\" now fails when there are no more patches to push.\n  \"guilt pop\" now fails when there are no more patches to pop.\n  Minor testsuite fix.\n  Fix coding style errors in t-061.sh.\n  Added guilt.reusebranch configuration option.\n  Added a short style guide, and Emacs settings.\n  Don't use \"git log -p\" in the test suite.\n  Improved doc and tests for guilt header.\n  Document the exit status of guilt push and guilt pop.\n\n .dir-locals.el                 |   3 +\n Documentation/Contributing     |  15 +\n Documentation/guilt-header.txt |   5 +-\n Documentation/guilt-pop.txt    |   3 +\n Documentation/guilt-push.txt   |   3 +\n guilt                          |  89 +++-\n guilt-delete                   |   2 +-\n guilt-fork                     |   2 +-\n guilt-graph                    |  13 +-\n guilt-header                   |  29 +-\n guilt-import                   |   2 +-\n guilt-import-commit            |  30 +-\n guilt-new                      |   9 +-\n guilt-patchbomb                |   2 +-\n guilt-pop                      |  17 +-\n guilt-push                     |  19 +-\n guilt-rebase                   |   2 +-\n regression/run-tests           |  10 +-\n regression/scaffold            |  25 +-\n regression/t-020.out           | 924 +++++++----------------------------------\n regression/t-020.sh            |  73 +++-\n regression/t-021.out           | 901 +---------------------------------------\n regression/t-021.sh            |  18 +-\n regression/t-025.out           | 426 ++++++++++++++++++-\n regression/t-025.sh            |  14 +-\n regression/t-026.out           |  15 +\n regression/t-026.sh            |   5 +-\n regression/t-028.out           |  16 +\n regression/t-028.sh            |   9 +-\n regression/t-032.out           |   4 +-\n regression/t-032.sh            |   2 +-\n regression/t-033.out           |  90 ++++\n regression/t-033.sh            |  61 +++\n regression/t-034.out           | 569 +++++++++++++++++++++++++\n regression/t-034.sh            |  73 ++++\n regression/t-035.out           | 467 +++++++++++++++++++++\n regression/t-035.sh            |  61 +++\n regression/t-061.out           |   1 -\n regression/t-061.sh            |  12 +-\n regression/t-062.out           | 420 +++++++++++++++++++\n regression/t-062.sh            | 130 ++++++\n 41 files changed, 2800 insertions(+), 1771 deletions(-)\n create mode 100644 .dir-locals.el\n create mode 100644 regression/t-033.out\n create mode 100755 regression/t-033.sh\n create mode 100644 regression/t-034.out\n create mode 100755 regression/t-034.sh\n create mode 100644 regression/t-035.out\n create mode 100755 regression/t-035.sh\n create mode 100644 regression/t-062.out\n create mode 100755 regression/t-062.sh\n\n-- \n1.8.3.1\n"},{"id":"242097","messageId":"1400450409-30998-2-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 01/33] The tests should not fail if guilt.diffstat is set.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T21:59:37Z","receivedAt":"2014-05-18T21:59:37Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"Explicitly set guilt.diffstat to its default value.  Without this, the\n027 test (and possibly others) fail if guilt.diffstat is set to true\nin ~/.gitconfig.\n\nSigned-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n regression/scaffold | 1 +\n 1 file changed, 1 insertion(+)\n\ndiff --git a/regression/scaffold b/regression/scaffold\nindex 546d8c6..5c8b73e 100644\n--- a/regression/scaffold\n+++ b/regression/scaffold\n@@ -87,6 +87,7 @@ function setup_git_repo\n \t# Explicitly set config that the tests rely on.\n \tgit config log.date default\n \tgit config log.decorate no\n+\tgit config guilt.diffstat false\n }\n \n function setup_guilt_repo\n-- \n1.8.3.1\n"},{"id":"242098","messageId":"1400450409-30998-3-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 02/33] Allow \"guilt delete -f\" to run from a dir which contains spaces.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T21:59:38Z","receivedAt":"2014-05-18T21:59:38Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"Signed-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n guilt-delete | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/guilt-delete b/guilt-delete\nindex 3e394f8..967ac10 100755\n--- a/guilt-delete\n+++ b/guilt-delete\n@@ -49,7 +49,7 @@ series_remove_patch \"$patch\"\n \n guilt_hook \"delete\" \"$patch\"\n \n-[ ! -z \"$force\" ] && rm -f $GUILT_DIR/$branch/$patch\n+[ ! -z \"$force\" ] && rm -f \"$GUILT_DIR/$branch/$patch\"\n \n exit 0\n \n-- \n1.8.3.1\n"},{"id":"242099","messageId":"1400450409-30998-4-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 03/33] Added test case for \"guilt delete -f\".","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T21:59:39Z","receivedAt":"2014-05-18T21:59:39Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"Ensure that the file really is deleted.\n\nSigned-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n regression/t-026.out | 15 +++++++++++++++\n regression/t-026.sh  |  5 ++++-\n 2 files changed, 19 insertions(+), 1 deletion(-)\n\ndiff --git a/regression/t-026.out b/regression/t-026.out\nindex 3b9fb14..be50b48 100644\n--- a/regression/t-026.out\n+++ b/regression/t-026.out\n@@ -29,3 +29,18 @@ f 7848194fd2e9ee0eb6589482900687d799d60a12  .git/patches/master/series\n f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/status\n+% guilt new delete-me\n+% guilt pop\n+All patches popped.\n+% guilt delete -f delete-me\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 7848194fd2e9ee0eb6589482900687d799d60a12  .git/patches/master/series\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/status\ndiff --git a/regression/t-026.sh b/regression/t-026.sh\nindex 0ccdf85..e25d0df 100755\n--- a/regression/t-026.sh\n+++ b/regression/t-026.sh\n@@ -20,4 +20,7 @@ cmd guilt delete add\n \n cmd list_files\n \n-# FIXME: test delete -f\n+cmd guilt new delete-me\n+cmd guilt pop\n+cmd guilt delete -f delete-me\n+cmd list_files\n-- \n1.8.3.1\n"},{"id":"242100","messageId":"1400450409-30998-5-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 04/33] Allow \"guilt import-commit\" to run from a dir which contains spaces.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T21:59:40Z","receivedAt":"2014-05-18T21:59:40Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"Signed-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n guilt-import-commit | 6 +++---\n 1 file changed, 3 insertions(+), 3 deletions(-)\n\ndiff --git a/guilt-import-commit b/guilt-import-commit\nindex 20dcee2..f14647c 100755\n--- a/guilt-import-commit\n+++ b/guilt-import-commit\n@@ -23,7 +23,7 @@ if ! must_commit_first; then\n fi\n \n disp \"About to begin conversion...\" >&2\n-disp \"Current head: `cat $GIT_DIR/refs/heads/\\`git_branch\\``\" >&2\n+disp \"Current head: `git rev-parse \\`git_branch\\``\" >&2\n \n for rev in `git rev-list $rhash`; do\n \ts=`git log --pretty=oneline -1 $rev | cut -c 42-`\n@@ -46,7 +46,7 @@ for rev in `git rev-list $rhash`; do\n \t\tdo_make_header $rev\n \t\techo \"\"\n \t\tgit diff --binary $rev^..$rev\n-\t) > $GUILT_DIR/$branch/$fname\n+\t) > \"$GUILT_DIR/$branch/$fname\"\n \n \t# FIXME: grab the GIT_AUTHOR_DATE from the commit object and set the\n \t# timestamp on the patch\n@@ -68,6 +68,6 @@ for rev in `git rev-list $rhash`; do\n done\n \n disp \"Done.\" >&2\n-disp \"Current head: `cat $GIT_DIR/refs/heads/\\`git_branch\\``\" >&2\n+disp \"Current head: `git rev-parse \\`git_branch\\``\" >&2\n \n }\n-- \n1.8.3.1\n"},{"id":"242101","messageId":"1400450409-30998-6-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 05/33] \"guilt new\": Accept more than 4 arguments.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T21:59:41Z","receivedAt":"2014-05-18T21:59:41Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"The argument parser arbitrarily refused to accept more than 4\narguments.  That made it impossible to run \"guilt new -f -s -m msg\npatch\".  Removed the checks for the number of arguments from the\n\"guilt new\" parser -- the other checks that are already there are\nenough to catch all errors.\n\nGive a better error message if \"-m\" isn't followed by a message\nargument.\n\nSigned-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n guilt-new | 7 +++----\n 1 file changed, 3 insertions(+), 4 deletions(-)\n\ndiff --git a/guilt-new b/guilt-new\nindex bb68924..9528438 100755\n--- a/guilt-new\n+++ b/guilt-new\n@@ -11,10 +11,6 @@ fi\n \n _main() {\n \n-if [ $# -lt 1 ] || [ $# -gt 4 ]; then\n-\tusage\n-fi\n-\n while [ $# -gt 0 ] ; do\n \tcase \"$1\" in\n \t\t-f)\n@@ -31,6 +27,9 @@ while [ $# -gt 0 ] ; do\n \t\t\tfi\n \t\t\t;;\n \t\t-m)\n+\t\t\tif [ $# -eq 1 ]; then\n+\t\t\t\tusage\n+\t\t\tfi\n \t\t\tmsg=\"$2\"\n \t\t\tshift\n \n-- \n1.8.3.1\n"},{"id":"242102","messageId":"1400450409-30998-7-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 06/33] Fix the do_get_patch function.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T21:59:42Z","receivedAt":"2014-05-18T21:59:42Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"A patch file consists of:\n\n(1) the description\n(2) optional diffstat\n(3) the patches\n\nWhen extracting the patch, we only want part 3.  The do_get_patch used\nto give us part 2 and part 3.  That made for instance this series of\noperations fail if guilt.diffstat is true:\n\n    $ guilt new empty-1\n    $ guilt new empty-2\n    $ guilt pop\n    Now at empty-1\n    $ guilt fold empty-2\n    $ guilt pop\n    All patches popped.\n    $ guilt push\n    Applying patch..empty-1\n    fatal: unrecognized input\n    To force apply this patch, use 'guilt push -f'\n\nSigned-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n guilt | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/guilt b/guilt\nindex 8701481..3fc524e 100755\n--- a/guilt\n+++ b/guilt\n@@ -334,7 +334,7 @@ do_get_patch()\n {\n \tawk '\n BEGIN{}\n-/^(diff |---$|--- )/ {patch = 1}\n+/^(diff |--- )/ {patch = 1}\n patch == 1 {print $0}\n END{}\n ' < \"$1\"\n-- \n1.8.3.1\n"},{"id":"242103","messageId":"1400450409-30998-8-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 07/33] Added test cases for \"guilt fold\".","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T21:59:43Z","receivedAt":"2014-05-18T21:59:43Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"Test that we can combine any combination of patches with empty and\nnon-empty messages, both with and without guilt.diffstat.  (All\npatches are empty.)\n\nSigned-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n regression/t-035.out | 467 +++++++++++++++++++++++++++++++++++++++++++++++++++\n regression/t-035.sh  |  61 +++++++\n 2 files changed, 528 insertions(+)\n create mode 100644 regression/t-035.out\n create mode 100755 regression/t-035.sh\n\ndiff --git a/regression/t-035.out b/regression/t-035.out\nnew file mode 100644\nindex 0000000..cc16fb4\n--- /dev/null\n+++ b/regression/t-035.out\n@@ -0,0 +1,467 @@\n+% setup_repo\n+% git config guilt.diffstat true\n+%% empty + empty (diffstat=true)\n+% guilt new empty-1\n+% guilt pop\n+All patches popped.\n+% guilt push\n+Applying patch..empty-1\n+Patch applied.\n+% guilt new empty-2\n+% guilt pop\n+Now at empty-1.\n+% guilt push\n+Applying patch..empty-2\n+Patch applied.\n+% guilt pop\n+Now at empty-1.\n+% guilt fold empty-2\n+% guilt pop\n+All patches popped.\n+% guilt push\n+Applying patch..empty-1\n+Patch applied.\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 4ea806e306f0228a8ef41f186035e7b04097f1f2  .git/patches/master/status\n+f 7d261b8caad0f161c21daf5de65eeb521ff8c067  .git/patches/master/empty-1\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f d28d87b88c1e24d637e390dc3603cfa7c1715711  .git/patches/master/series\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-1~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-2~\n+r bde3d337af70f36836ad606c800d194006f883b3  .git/refs/patches/master/empty-1\n+% guilt pop\n+All patches popped.\n+% guilt delete -f empty-1\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-1~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-2~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/status\n+%% empty + nonempty (diffstat=true)\n+% guilt new empty\n+% guilt pop\n+All patches popped.\n+% guilt push\n+Applying patch..empty\n+Patch applied.\n+% guilt new -f -s -m A commit message. nonempty\n+% guilt pop\n+Now at empty.\n+% guilt push\n+Applying patch..nonempty\n+Patch applied.\n+% guilt pop\n+Now at empty.\n+% guilt fold nonempty\n+% guilt pop\n+All patches popped.\n+% guilt push\n+Applying patch..empty\n+Patch applied.\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 15aab0fd8b937eb3bb01841693f35dcb75da2faf  .git/patches/master/status\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 51fcfcf16db2903f19ab4a4a3caacd297ea9f6cd  .git/patches/master/empty~\n+f 51fcfcf16db2903f19ab4a4a3caacd297ea9f6cd  .git/patches/master/nonempty~\n+f 683678040eef9334d6329e00d5b9babda3e65b57  .git/patches/master/empty\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f a26a22287b500a2a372e42c2bab03599bbe37cdf  .git/patches/master/series\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-1~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-2~\n+r 4eedaa32894fc07af3298d8c1178052942a3ca6a  .git/refs/patches/master/empty\n+% guilt pop\n+All patches popped.\n+% guilt delete -f empty\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 51fcfcf16db2903f19ab4a4a3caacd297ea9f6cd  .git/patches/master/empty~\n+f 51fcfcf16db2903f19ab4a4a3caacd297ea9f6cd  .git/patches/master/nonempty~\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-1~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-2~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/status\n+%% nonempty + empty (diffstat=true)\n+% guilt new -f -s -m A commit message. nonempty\n+% guilt pop\n+All patches popped.\n+% guilt push\n+Applying patch..nonempty\n+Patch applied.\n+% guilt new empty\n+% guilt pop\n+Now at nonempty.\n+% guilt push\n+Applying patch..empty\n+Patch applied.\n+% guilt pop\n+Now at nonempty.\n+% guilt fold empty\n+% guilt pop\n+All patches popped.\n+% guilt push\n+Applying patch..nonempty\n+Patch applied.\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 51fcfcf16db2903f19ab4a4a3caacd297ea9f6cd  .git/patches/master/nonempty~\n+f 683678040eef9334d6329e00d5b9babda3e65b57  .git/patches/master/nonempty\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f c47ddc01337e3bb67a9968a8823a5ba12be67f77  .git/patches/master/series\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-1~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-2~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty~\n+f f7f068d44bf796d0f7cd14d27d1f48d6e659816a  .git/patches/master/status\n+r 4eedaa32894fc07af3298d8c1178052942a3ca6a  .git/refs/patches/master/nonempty\n+% guilt pop\n+All patches popped.\n+% guilt delete -f nonempty\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 51fcfcf16db2903f19ab4a4a3caacd297ea9f6cd  .git/patches/master/nonempty~\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-1~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-2~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/status\n+%% nonempty + nonempty (diffstat=true)\n+% guilt new -f -s -m A commit message. nonempty-1\n+% guilt pop\n+All patches popped.\n+% guilt push\n+Applying patch..nonempty-1\n+Patch applied.\n+% guilt new -f -s -m Another commit message. nonempty-2\n+% guilt pop\n+Now at nonempty-1.\n+% guilt push\n+Applying patch..nonempty-2\n+Patch applied.\n+% guilt pop\n+Now at nonempty-1.\n+% guilt fold nonempty-2\n+% guilt pop\n+All patches popped.\n+% guilt push\n+Applying patch..nonempty-1\n+Patch applied.\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 3b526c794741fb2d6b463f3245ab2f260fa74b7b  .git/patches/master/status\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 51fcfcf16db2903f19ab4a4a3caacd297ea9f6cd  .git/patches/master/nonempty~\n+f 669c9685ce791098bb3573f80af6d720a3689f80  .git/patches/master/nonempty-1\n+f 75c672c7dbec8e8275d26d720f499899d04912a4  .git/patches/master/nonempty-1~\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f a88f2625f128cfa307a52c8c2e84ed6c32a78d2b  .git/patches/master/series\n+f bbdc17918ad7ba268ea90ebf0fb71e32e0f09a02  .git/patches/master/nonempty-2~\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-1~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-2~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty~\n+r 895dfbc21bde85fcc666a353a6bd32eaec939082  .git/refs/patches/master/nonempty-1\n+% guilt pop\n+All patches popped.\n+% guilt delete -f nonempty-1\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 51fcfcf16db2903f19ab4a4a3caacd297ea9f6cd  .git/patches/master/nonempty~\n+f 75c672c7dbec8e8275d26d720f499899d04912a4  .git/patches/master/nonempty-1~\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n+f bbdc17918ad7ba268ea90ebf0fb71e32e0f09a02  .git/patches/master/nonempty-2~\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-1~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-2~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/status\n+% git config guilt.diffstat false\n+%% empty + empty (diffstat=false)\n+% guilt new empty-1\n+% guilt pop\n+All patches popped.\n+% guilt push\n+Applying patch..empty-1\n+Patch applied.\n+% guilt new empty-2\n+% guilt pop\n+Now at empty-1.\n+% guilt push\n+Applying patch..empty-2\n+Patch applied.\n+% guilt pop\n+Now at empty-1.\n+% guilt fold empty-2\n+% guilt pop\n+All patches popped.\n+% guilt push\n+Applying patch..empty-1\n+Patch applied.\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 4ea806e306f0228a8ef41f186035e7b04097f1f2  .git/patches/master/status\n+f 51fcfcf16db2903f19ab4a4a3caacd297ea9f6cd  .git/patches/master/nonempty~\n+f 75c672c7dbec8e8275d26d720f499899d04912a4  .git/patches/master/nonempty-1~\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bbdc17918ad7ba268ea90ebf0fb71e32e0f09a02  .git/patches/master/nonempty-2~\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f d28d87b88c1e24d637e390dc3603cfa7c1715711  .git/patches/master/series\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-1\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-1~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-2~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty~\n+r bde3d337af70f36836ad606c800d194006f883b3  .git/refs/patches/master/empty-1\n+% guilt pop\n+All patches popped.\n+% guilt delete -f empty-1\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 51fcfcf16db2903f19ab4a4a3caacd297ea9f6cd  .git/patches/master/nonempty~\n+f 75c672c7dbec8e8275d26d720f499899d04912a4  .git/patches/master/nonempty-1~\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n+f bbdc17918ad7ba268ea90ebf0fb71e32e0f09a02  .git/patches/master/nonempty-2~\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-1~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-2~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/status\n+%% empty + nonempty (diffstat=false)\n+% guilt new empty\n+% guilt pop\n+All patches popped.\n+% guilt push\n+Applying patch..empty\n+Patch applied.\n+% guilt new -f -s -m A commit message. nonempty\n+% guilt pop\n+Now at empty.\n+% guilt push\n+Applying patch..nonempty\n+Patch applied.\n+% guilt pop\n+Now at empty.\n+% guilt fold nonempty\n+% guilt pop\n+All patches popped.\n+% guilt push\n+Applying patch..empty\n+Patch applied.\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 15aab0fd8b937eb3bb01841693f35dcb75da2faf  .git/patches/master/status\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 51fcfcf16db2903f19ab4a4a3caacd297ea9f6cd  .git/patches/master/empty\n+f 51fcfcf16db2903f19ab4a4a3caacd297ea9f6cd  .git/patches/master/empty~\n+f 51fcfcf16db2903f19ab4a4a3caacd297ea9f6cd  .git/patches/master/nonempty~\n+f 75c672c7dbec8e8275d26d720f499899d04912a4  .git/patches/master/nonempty-1~\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f a26a22287b500a2a372e42c2bab03599bbe37cdf  .git/patches/master/series\n+f bbdc17918ad7ba268ea90ebf0fb71e32e0f09a02  .git/patches/master/nonempty-2~\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-1~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-2~\n+r 4eedaa32894fc07af3298d8c1178052942a3ca6a  .git/refs/patches/master/empty\n+% guilt pop\n+All patches popped.\n+% guilt delete -f empty\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 51fcfcf16db2903f19ab4a4a3caacd297ea9f6cd  .git/patches/master/empty~\n+f 51fcfcf16db2903f19ab4a4a3caacd297ea9f6cd  .git/patches/master/nonempty~\n+f 75c672c7dbec8e8275d26d720f499899d04912a4  .git/patches/master/nonempty-1~\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n+f bbdc17918ad7ba268ea90ebf0fb71e32e0f09a02  .git/patches/master/nonempty-2~\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-1~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-2~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/status\n+%% nonempty + empty (diffstat=false)\n+% guilt new -f -s -m A commit message. nonempty\n+% guilt pop\n+All patches popped.\n+% guilt push\n+Applying patch..nonempty\n+Patch applied.\n+% guilt new empty\n+% guilt pop\n+Now at nonempty.\n+% guilt push\n+Applying patch..empty\n+Patch applied.\n+% guilt pop\n+Now at nonempty.\n+% guilt fold empty\n+% guilt pop\n+All patches popped.\n+% guilt push\n+Applying patch..nonempty\n+Patch applied.\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 51fcfcf16db2903f19ab4a4a3caacd297ea9f6cd  .git/patches/master/nonempty\n+f 51fcfcf16db2903f19ab4a4a3caacd297ea9f6cd  .git/patches/master/nonempty~\n+f 75c672c7dbec8e8275d26d720f499899d04912a4  .git/patches/master/nonempty-1~\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bbdc17918ad7ba268ea90ebf0fb71e32e0f09a02  .git/patches/master/nonempty-2~\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f c47ddc01337e3bb67a9968a8823a5ba12be67f77  .git/patches/master/series\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-1~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-2~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty~\n+f f7f068d44bf796d0f7cd14d27d1f48d6e659816a  .git/patches/master/status\n+r 4eedaa32894fc07af3298d8c1178052942a3ca6a  .git/refs/patches/master/nonempty\n+% guilt pop\n+All patches popped.\n+% guilt delete -f nonempty\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 51fcfcf16db2903f19ab4a4a3caacd297ea9f6cd  .git/patches/master/nonempty~\n+f 75c672c7dbec8e8275d26d720f499899d04912a4  .git/patches/master/nonempty-1~\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n+f bbdc17918ad7ba268ea90ebf0fb71e32e0f09a02  .git/patches/master/nonempty-2~\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-1~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-2~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/status\n+%% nonempty + nonempty (diffstat=false)\n+% guilt new -f -s -m A commit message. nonempty-1\n+% guilt pop\n+All patches popped.\n+% guilt push\n+Applying patch..nonempty-1\n+Patch applied.\n+% guilt new -f -s -m Another commit message. nonempty-2\n+% guilt pop\n+Now at nonempty-1.\n+% guilt push\n+Applying patch..nonempty-2\n+Patch applied.\n+% guilt pop\n+Now at nonempty-1.\n+% guilt fold nonempty-2\n+% guilt pop\n+All patches popped.\n+% guilt push\n+Applying patch..nonempty-1\n+Patch applied.\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 3b526c794741fb2d6b463f3245ab2f260fa74b7b  .git/patches/master/status\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 51fcfcf16db2903f19ab4a4a3caacd297ea9f6cd  .git/patches/master/nonempty~\n+f 75c672c7dbec8e8275d26d720f499899d04912a4  .git/patches/master/nonempty-1\n+f 75c672c7dbec8e8275d26d720f499899d04912a4  .git/patches/master/nonempty-1~\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f a88f2625f128cfa307a52c8c2e84ed6c32a78d2b  .git/patches/master/series\n+f bbdc17918ad7ba268ea90ebf0fb71e32e0f09a02  .git/patches/master/nonempty-2~\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-1~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-2~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty~\n+r 895dfbc21bde85fcc666a353a6bd32eaec939082  .git/refs/patches/master/nonempty-1\n+% guilt pop\n+All patches popped.\n+% guilt delete -f nonempty-1\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 51fcfcf16db2903f19ab4a4a3caacd297ea9f6cd  .git/patches/master/nonempty~\n+f 75c672c7dbec8e8275d26d720f499899d04912a4  .git/patches/master/nonempty-1~\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n+f bbdc17918ad7ba268ea90ebf0fb71e32e0f09a02  .git/patches/master/nonempty-2~\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-1~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty-2~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty~\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/status\ndiff --git a/regression/t-035.sh b/regression/t-035.sh\nnew file mode 100755\nindex 0000000..c347e47\n--- /dev/null\n+++ b/regression/t-035.sh\n@@ -0,0 +1,61 @@\n+#!/bin/bash\n+#\n+# Test the fold code\n+#\n+\n+source \"$REG_DIR/scaffold\"\n+\n+cmd setup_repo\n+\n+function fixup_time_info\n+{\n+\tcmd guilt pop\n+\ttouch -a -m -t \"$TOUCH_DATE\" \".git/patches/master/$1\"\n+\tcmd guilt push\n+}\n+\n+function empty_patch\n+{\n+\tcmd guilt new \"empty$1\"\n+\tfixup_time_info \"empty$1\"\n+}\n+\n+function nonempty_patch\n+{\n+\tif [ \"$1\" = -2 ]; then\n+\t\tmsg=\"Another commit message.\"\n+\telse\n+\t\tmsg=\"A commit message.\"\n+\tfi\n+\n+\tcmd guilt new -f -s -m \"$msg\" \"nonempty$1\"\n+\tfixup_time_info \"nonempty$1\"\n+}\n+\n+for using_diffstat in true false; do\n+\tcmd git config guilt.diffstat $using_diffstat\n+\tfor patcha in empty nonempty; do\n+\t\tfor patchb in empty nonempty; do\n+\n+\t\t\tif [ $patcha = $patchb ]; then\n+\t\t\t\tsuffixa=-1\n+\t\t\t\tsuffixb=-2\n+\t\t\telse\n+\t\t\t\tsuffixa=\n+\t\t\t\tsuffixb=\n+\t\t\tfi\n+\n+\t\t\techo \"%% $patcha + $patchb (diffstat=$using_diffstat)\"\n+\t\t\t${patcha}_patch $suffixa\n+\t\t\t${patchb}_patch $suffixb\n+\t\t\tcmd guilt pop\n+\t\t\tcmd guilt fold $patchb$suffixb\n+\t\t\tfixup_time_info $patcha$suffixa\n+\t\t\tcmd list_files\n+\t\t\tcmd guilt pop\n+\t\t\tcmd guilt delete -f $patcha$suffixa\n+\t\t\tcmd list_files\n+\n+\t\tdone\n+\tdone\n+done\n-- \n1.8.3.1\n"},{"id":"242104","messageId":"1400450409-30998-9-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 08/33] Added more test cases for \"guilt new\": empty patches.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T21:59:44Z","receivedAt":"2014-05-18T21:59:44Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"Test that empty patches are handled correctly, both with and without\nthe guilt.diffstat configuration option.\n\nSigned-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n regression/t-020.out | 269 +++++++++++++++++++++++++++++++++++++++++++++++++++\n regression/t-020.sh  |  60 ++++++++++++\n 2 files changed, 329 insertions(+)\n\ndiff --git a/regression/t-020.out b/regression/t-020.out\nindex af45734..42433dc 100644\n--- a/regression/t-020.out\n+++ b/regression/t-020.out\n@@ -1128,3 +1128,272 @@ f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/status\n+% guilt new empty.patch\n+% guilt pop\n+All patches popped.\n+% guilt push\n+Applying patch..empty.patch\n+Patch applied.\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f d15a1d2d34493f790c78ddacb8815b0b9536ee2b  .git/patches/master/series\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty.patch\n+f e90b964f01cbef60bbe00c38c55d9ea86618a66a  .git/patches/master/status\n+r c7a139f532a43c3c8b0e068cac04f8f6af0f94e1  .git/refs/patches/master/empty.patch\n+% git log -p\n+commit c7a139f532a43c3c8b0e068cac04f8f6af0f94e1\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    patch empty.patch\n+\n+commit d4850419ccc1146c7169f500725ce504b9774ed0\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    initial\n+    \n+    Signed-off-by: Commiter Name <commiter@email>\n+\n+diff --git a/def b/def\n+new file mode 100644\n+index 0000000..8baef1b\n+--- /dev/null\n++++ b/def\n+@@ -0,0 +1 @@\n++abc\n+% git config guilt.diffstat true\n+% guilt refresh\n+Patch empty.patch refreshed\n+% guilt pop\n+All patches popped.\n+% guilt push\n+Applying patch..empty.patch\n+Patch applied.\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 7d261b8caad0f161c21daf5de65eeb521ff8c067  .git/patches/master/empty.patch\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f d15a1d2d34493f790c78ddacb8815b0b9536ee2b  .git/patches/master/series\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty.patch~\n+f e90b964f01cbef60bbe00c38c55d9ea86618a66a  .git/patches/master/status\n+r c7a139f532a43c3c8b0e068cac04f8f6af0f94e1  .git/refs/patches/master/empty.patch\n+% git log -p\n+commit c7a139f532a43c3c8b0e068cac04f8f6af0f94e1\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    patch empty.patch\n+\n+commit d4850419ccc1146c7169f500725ce504b9774ed0\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    initial\n+    \n+    Signed-off-by: Commiter Name <commiter@email>\n+\n+diff --git a/def b/def\n+new file mode 100644\n+index 0000000..8baef1b\n+--- /dev/null\n++++ b/def\n+@@ -0,0 +1 @@\n++abc\n+% git config guilt.diffstat false\n+% guilt pop\n+All patches popped.\n+% guilt push\n+Applying patch..empty.patch\n+Patch applied.\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 7ad87a0bdb8cf0a57cfc384633edabbb9c2bfa1b  .git/patches/master/empty.patch\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f d15a1d2d34493f790c78ddacb8815b0b9536ee2b  .git/patches/master/series\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty.patch~\n+f e90b964f01cbef60bbe00c38c55d9ea86618a66a  .git/patches/master/status\n+r 8ed27228b117c0c88abf3d586bcc43c68e975cea  .git/refs/patches/master/empty.patch\n+% git log -p\n+commit 8ed27228b117c0c88abf3d586bcc43c68e975cea\n+Author: Per Cederqvist <ceder@lysator.liu.se>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Fix a bug.\n+    \n+    This commit fixes a serious bug.\n+    \n+    FIXME:\n+        - add a test case\n+        - track down the bug\n+        - actually fix it\n+\n+commit d4850419ccc1146c7169f500725ce504b9774ed0\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    initial\n+    \n+    Signed-off-by: Commiter Name <commiter@email>\n+\n+diff --git a/def b/def\n+new file mode 100644\n+index 0000000..8baef1b\n+--- /dev/null\n++++ b/def\n+@@ -0,0 +1 @@\n++abc\n+% git config guilt.diffstat true\n+% guilt refresh\n+Patch empty.patch refreshed\n+% guilt pop\n+All patches popped.\n+% guilt push\n+Applying patch..empty.patch\n+Patch applied.\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 0803c721968056410df61400bb239380d033b9d5  .git/patches/master/empty.patch\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 7ad87a0bdb8cf0a57cfc384633edabbb9c2bfa1b  .git/patches/master/empty.patch~\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f d15a1d2d34493f790c78ddacb8815b0b9536ee2b  .git/patches/master/series\n+f e90b964f01cbef60bbe00c38c55d9ea86618a66a  .git/patches/master/status\n+r 8ed27228b117c0c88abf3d586bcc43c68e975cea  .git/refs/patches/master/empty.patch\n+% git log -p\n+commit 8ed27228b117c0c88abf3d586bcc43c68e975cea\n+Author: Per Cederqvist <ceder@lysator.liu.se>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Fix a bug.\n+    \n+    This commit fixes a serious bug.\n+    \n+    FIXME:\n+        - add a test case\n+        - track down the bug\n+        - actually fix it\n+\n+commit d4850419ccc1146c7169f500725ce504b9774ed0\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    initial\n+    \n+    Signed-off-by: Commiter Name <commiter@email>\n+\n+diff --git a/def b/def\n+new file mode 100644\n+index 0000000..8baef1b\n+--- /dev/null\n++++ b/def\n+@@ -0,0 +1 @@\n++abc\n+% git config guilt.diffstat false\n+% guilt refresh\n+Patch empty.patch refreshed\n+% guilt pop\n+All patches popped.\n+% guilt push\n+Applying patch..empty.patch\n+Patch applied.\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 0803c721968056410df61400bb239380d033b9d5  .git/patches/master/empty.patch~\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 7ad87a0bdb8cf0a57cfc384633edabbb9c2bfa1b  .git/patches/master/empty.patch\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f d15a1d2d34493f790c78ddacb8815b0b9536ee2b  .git/patches/master/series\n+f e90b964f01cbef60bbe00c38c55d9ea86618a66a  .git/patches/master/status\n+r 8ed27228b117c0c88abf3d586bcc43c68e975cea  .git/refs/patches/master/empty.patch\n+% git log -p\n+commit 8ed27228b117c0c88abf3d586bcc43c68e975cea\n+Author: Per Cederqvist <ceder@lysator.liu.se>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Fix a bug.\n+    \n+    This commit fixes a serious bug.\n+    \n+    FIXME:\n+        - add a test case\n+        - track down the bug\n+        - actually fix it\n+\n+commit d4850419ccc1146c7169f500725ce504b9774ed0\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    initial\n+    \n+    Signed-off-by: Commiter Name <commiter@email>\n+\n+diff --git a/def b/def\n+new file mode 100644\n+index 0000000..8baef1b\n+--- /dev/null\n++++ b/def\n+@@ -0,0 +1 @@\n++abc\n+% guilt delete empty.patch\n+Cannot delete an applied patch\n+% guilt pop -a\n+All patches popped.\n+% guilt delete -f empty.patch\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 0803c721968056410df61400bb239380d033b9d5  .git/patches/master/empty.patch~\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/status\n+% git log -p\n+commit d4850419ccc1146c7169f500725ce504b9774ed0\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    initial\n+    \n+    Signed-off-by: Commiter Name <commiter@email>\n+\n+diff --git a/def b/def\n+new file mode 100644\n+index 0000000..8baef1b\n+--- /dev/null\n++++ b/def\n+@@ -0,0 +1 @@\n++abc\ndiff --git a/regression/t-020.sh b/regression/t-020.sh\nindex cdd08ba..c165884 100755\n--- a/regression/t-020.sh\n+++ b/regression/t-020.sh\n@@ -5,6 +5,13 @@\n \n source \"$REG_DIR/scaffold\"\n \n+function fixup_time_info\n+{\n+\tcmd guilt pop\n+\ttouch -a -m -t \"$TOUCH_DATE\" \".git/patches/master/$1\"\n+\tcmd guilt push\n+}\n+\n cmd setup_repo\n \n #\n@@ -69,6 +76,59 @@ done\n \n cmd list_files\n \n+# push an empty patch with no commit message\n+cmd guilt new empty.patch\n+fixup_time_info empty.patch\n+cmd list_files\n+cmd git log -p\n+\n+# Ensure we can push the empty patch even when guilt.diffstat is true.\n+cmd git config guilt.diffstat true\n+cmd guilt refresh\n+fixup_time_info empty.patch\n+cmd list_files\n+cmd git log -p\n+cmd git config guilt.diffstat false\n+\n+# Let the patch have a commit message, but no data.\n+cat > .git/patches/master/empty.patch <<EOF\n+Fix a bug.\n+\n+From: Per Cederqvist <ceder@lysator.liu.se>\n+\n+This commit fixes a serious bug.\n+\n+FIXME:\n+    - add a test case\n+    - track down the bug\n+    - actually fix it\n+EOF\n+\n+fixup_time_info empty.patch\n+cmd list_files\n+cmd git log -p\n+\n+# And once more, with an empty diffstat.\n+\n+cmd git config guilt.diffstat true\n+cmd guilt refresh\n+fixup_time_info empty.patch\n+cmd list_files\n+cmd git log -p\n+\n+# Restore the diffstat setting and remove the empty patch.\n+cmd git config guilt.diffstat false\n+cmd guilt refresh\n+fixup_time_info empty.patch\n+cmd list_files\n+cmd git log -p\n+# (Cannot delete an applied patch)\n+shouldfail guilt delete empty.patch\n+cmd guilt pop -a\n+cmd guilt delete -f empty.patch\n+cmd list_files\n+cmd git log -p\n+\n # FIXME:\n #   --all\n #   -a\n-- \n1.8.3.1\n"},{"id":"242105","messageId":"1400450409-30998-10-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 09/33] Test suite: properly check the exit status of commands.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T21:59:45Z","receivedAt":"2014-05-18T21:59:45Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"The \"cmd\" and \"shouldfail\" functions checked the exit status of the\nreplace_path function instead of the actual command that was running.\n(The $? construct checks the exit status of the last command in a\npipeline, not the first command.)\n\nPrint an explicit error message if a command that should fail actually\nsucceeds.\n\nUpdated t-032.sh, which used \"shouldfail\" instead of \"cmd\" in one\nplace.  (The comment in the script makes it clear that the command is\nexpected to succeed.)\n\nSigned-off-by: Per Cederqvist <cederp@opera.com>\n---\n regression/scaffold | 23 ++++++++++++++++-------\n regression/t-032.sh |  2 +-\n 2 files changed, 17 insertions(+), 8 deletions(-)\n\ndiff --git a/regression/scaffold b/regression/scaffold\nindex 5c8b73e..2e04c83 100644\n--- a/regression/scaffold\n+++ b/regression/scaffold\n@@ -51,19 +51,28 @@ function filter_dd\n function cmd\n {\n \techo \"% $@\"\n-\t\"$@\" 2>&1 | replace_path && return 0\n-\treturn 1\n+\tif ! (\n+\t\texec 3>&1\n+\t\trv=`((\"$@\" 2>&1; echo $? >&4) | replace_path >&3 ) 4>&1`\n+\t\texit $rv\n+\t) ; then\n+\t\techo \"% FAIL: The above command should succeed but failed.\"\n+\t\texit 1\n+\tfi\n }\n \n # usage: shouldfail <cmd>..\n function shouldfail\n {\n \techo \"% $@\"\n-\t(\n-\t\t\"$@\" 2>&1 || return 0\n-\t\treturn 1\n-\t) | replace_path\n-\treturn $?\n+\tif (\n+\t\texec 3>&1\n+\t\trv=`((\"$@\" 2>&1; echo $? >&4) | replace_path >&3 ) 4>&1`\n+\t\texit $rv\n+\t) ; then\n+\t\techo \"% FAIL: The above command should fail but succeeded.\"\n+\t\texit 1\n+\tfi\n }\n \n # usage: list_files\ndiff --git a/regression/t-032.sh b/regression/t-032.sh\nindex b1d5f19..bba401e 100755\n--- a/regression/t-032.sh\n+++ b/regression/t-032.sh\n@@ -28,7 +28,7 @@ shouldfail guilt import -P foo3 foo\n cmd guilt import -P foo2 foo\n \n # ok\n-shouldfail guilt import foo\n+cmd guilt import foo\n \n # duplicate patch name (implicit)\n shouldfail guilt import foo\n-- \n1.8.3.1\n"},{"id":"242106","messageId":"1400450409-30998-11-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 10/33] Run test_failed if the exit status of a test script is bad.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T21:59:46Z","receivedAt":"2014-05-18T21:59:46Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"There were two problems with the old code:\n\n - Since \"set -e\" is in effect (that is set in scaffold) the run-test\n   script exited immediately if a t-*.sh script failed.  This is not\n   nice, as we want the error report that test_failed prints.\n\n - The code ran \"cd -\" between running the t-*.sh script and checking\n   the exit status, so the exit status was lost.  (Actually, the exit\n   status was saved in $ERR, but nothing ever looked at $ERR.)\n\nSigned-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n regression/run-tests | 10 +++++++---\n 1 file changed, 7 insertions(+), 3 deletions(-)\n\ndiff --git a/regression/run-tests b/regression/run-tests\nindex a10e796..8e0af9f 100755\n--- a/regression/run-tests\n+++ b/regression/run-tests\n@@ -55,11 +55,15 @@ function run_test\n \n \t# run the test\n \tcd \"$REPODIR\" > /dev/null\n-\t\"$REG_DIR/t-$1.sh\" 2>&1 > \"$LOGFILE\"\n-\tERR=$?\n+\tif \"$REG_DIR/t-$1.sh\" 2>&1 > \"$LOGFILE\"; then\n+\t\tERR=false\n+\telse\n+\t\tERR=true\n+\tfi\n+\n \tcd - > /dev/null\n \n-\t[ $? -ne 0 ] && test_failed\n+\t$ERR && test_failed\n \tdiff -u \"t-$1.out\" \"$LOGFILE\" || test_failed\n \n \techo \"done.\"\n-- \n1.8.3.1\n"},{"id":"242107","messageId":"1400450409-30998-12-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 11/33] test suite: remove pointless redirection.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T21:59:47Z","receivedAt":"2014-05-18T21:59:47Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"The shouldfail function already redirects stderr to stdout, so there\nis no need to do the same in t-028.sh and t-021.sh.\n\nSigned-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n regression/t-021.sh | 2 +-\n regression/t-025.sh | 2 +-\n regression/t-028.sh | 2 +-\n 3 files changed, 3 insertions(+), 3 deletions(-)\n\ndiff --git a/regression/t-021.sh b/regression/t-021.sh\nindex 6337d7b..614e870 100755\n--- a/regression/t-021.sh\n+++ b/regression/t-021.sh\n@@ -61,7 +61,7 @@ for n in `_seq -2 $npatches`; do\n \tif [ $n -gt 0 ]; then\n \t\tcmd guilt pop -n $n\n \telse\n-\t\tshouldfail guilt pop -n $n 2>&1\n+\t\tshouldfail guilt pop -n $n\n \tfi\n \n \tcmd list_files\ndiff --git a/regression/t-025.sh b/regression/t-025.sh\nindex 3824608..985fed4 100755\n--- a/regression/t-025.sh\n+++ b/regression/t-025.sh\n@@ -44,7 +44,7 @@ shouldfail guilt new \"white space\"\n cmd list_files\n \n for pname in prepend mode /abc ./blah ../blah abc/./blah abc/../blah abc/. abc/.. abc/ ; do\n-\tshouldfail guilt new \"$pname\" 2>&1\n+\tshouldfail guilt new \"$pname\"\n \n \tcmd list_files\n done\ndiff --git a/regression/t-028.sh b/regression/t-028.sh\nindex 8480100..88e9adb 100755\n--- a/regression/t-028.sh\n+++ b/regression/t-028.sh\n@@ -29,6 +29,6 @@ guilt series | while read n; do\n \tcmd guilt header $n\n done\n \n-shouldfail guilt header non-existant 2>&1\n+shouldfail guilt header non-existant\n \n # FIXME: how do we check that -e works?\n-- \n1.8.3.1\n"},{"id":"242108","messageId":"1400450409-30998-13-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 12/33] \"guilt header\": more robust header selection.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T21:59:48Z","receivedAt":"2014-05-18T21:59:48Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"If you run something like \"guilt header '.*'\" the command would crash,\nbecause the grep comand that tries to ensure that the patch exist\nwould detect a match, but the later code expected the match to be\nexact.\n\nFixed by comparing exact strings.\n\nAnd as a creeping feature \"guilt header\" will now try to use the\nsupplied patch name as an unanchored regexp if no exact match was\nfound.  If the regexp yields a unique match, it is used; if more than\none patch matches, the names of all patches are listed and the command\nfails.  (Exercise left to the reader: generalized this so that \"guilt\npush\" also accepts a unique regular expression.)\n\nSigned-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n guilt-header | 29 ++++++++++++++++++++++++++---\n 1 file changed, 26 insertions(+), 3 deletions(-)\n\ndiff --git a/guilt-header b/guilt-header\nindex 41e00cc..c3d24f9 100755\n--- a/guilt-header\n+++ b/guilt-header\n@@ -45,10 +45,33 @@ esac\n [ -z \"$patch\" ] && die \"No patches applied.\"\n \n # check that patch exists in the series\n-ret=`get_full_series | grep -e \"^$patch\\$\" | wc -l`\n-if [ $ret -eq 0 ]; then\n-\tdie \"Patch $patch is not in the series\"\n+TMP_FULL_SERIES=`get_tmp_file series`\n+get_full_series > \"$TMP_FULL_SERIES\"\n+found_patch=\n+while read x; do\n+\tif [ \"$x\" = \"$patch\" ]; then\n+\t\tfound_patch=\"$patch\"\n+\t\tbreak\n+\tfi\n+done < \"$TMP_FULL_SERIES\"\n+if [ -z \"$found_patch\" ]; then\n+\tTMP_MATCHES=`get_tmp_file series`\n+\tgrep \"$patch\" < \"$TMP_FULL_SERIES\" > \"$TMP_MATCHES\"\n+\tnr=`wc -l < $TMP_MATCHES`\n+\tif [ $nr -gt 1 ]; then\n+\t\techo \"$patch does not uniquely identify a patch. Did you mean any of these?\" >&2\n+\t\tsed 's/^/  /' \"$TMP_MATCHES\" >&2\n+\t\trm -f \"$TMP_MATCHES\" \"$TMP_FULL_SERIES\"\n+\t\texit 1\n+\telif [ $nr -eq 0 ]; then\n+\t\trm -f \"$TMP_MATCHES\" \"$TMP_FULL_SERIES\"\n+\t\tdie \"Patch $patch is not in the series\"\n+\tfi\n+\tfound_patch=`cat $TMP_MATCHES`\n+\trm -f \"$TMP_MATCHES\"\n fi\n+rm -f \"$TMP_FULL_SERIES\"\n+patch=\"$found_patch\"\n \n # FIXME: warn if we're editing an applied patch\n \n-- \n1.8.3.1\n"},{"id":"242109","messageId":"1400450409-30998-14-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 13/33] Check that \"guilt header '.*'\" fails.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T21:59:49Z","receivedAt":"2014-05-18T21:59:49Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"Signed-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n regression/t-028.out | 7 +++++++\n regression/t-028.sh  | 4 ++++\n 2 files changed, 11 insertions(+)\n\ndiff --git a/regression/t-028.out b/regression/t-028.out\nindex 1564c09..ea72a3a 100644\n--- a/regression/t-028.out\n+++ b/regression/t-028.out\n@@ -49,3 +49,10 @@ Signed-off-by: Commiter Name <commiter@email>\n \n % guilt header non-existant\n Patch non-existant is not in the series\n+% guilt header .*\n+.* does not uniquely identify a patch. Did you mean any of these?\n+  modify\n+  add\n+  remove\n+  mode\n+  patch-with-some-desc\ndiff --git a/regression/t-028.sh b/regression/t-028.sh\nindex 88e9adb..2ce0378 100755\n--- a/regression/t-028.sh\n+++ b/regression/t-028.sh\n@@ -31,4 +31,8 @@ done\n \n shouldfail guilt header non-existant\n \n+# This is an evil variant of a non-existant patch.  However, this\n+# patch name is a regexp that just happens to match an existing patch.\n+shouldfail guilt header '.*'\n+\n # FIXME: how do we check that -e works?\n-- \n1.8.3.1\n"},{"id":"242110","messageId":"1400450409-30998-15-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 14/33] Use \"git check-ref-format\" to validate patch names.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T21:59:50Z","receivedAt":"2014-05-18T21:59:50Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"The valid_patchname now lets \"git check-ref-format\" do its job instead\nof trying (and failing) to implement the same rules.  See\ngit-check-ref-format(1) for a list of the rules.  Re-implement rules\nadded to \"git check-ref-format\" after Git 1.5.0, so that guilt rejects\nthe same names no matter what version of Git we are using (but\nversions prior to 1.5.0 are not supported).\n\nRefer to the git-check-ref-format(1) man page in the error messages\nproduced when valid_patchname indicates that the name is bad.\n\nAdded testcases that breaks most of the rules in that man-page.\n\nSigned-off-by: Per Cederqvist <cederp@opera.com>\n---\n guilt                |  46 +++++-\n guilt-fork           |   2 +-\n guilt-import         |   2 +-\n guilt-new            |   2 +-\n regression/t-025.out | 426 +++++++++++++++++++++++++++++++++++++++++++++++++--\n regression/t-025.sh  |  12 +-\n regression/t-032.out |   4 +-\n 7 files changed, 474 insertions(+), 20 deletions(-)\n\ndiff --git a/guilt b/guilt\nindex 3fc524e..9567a78 100755\n--- a/guilt\n+++ b/guilt\n@@ -132,14 +132,50 @@ fi\n # usage: valid_patchname <patchname>\n valid_patchname()\n {\n+\t# Once we only support Git 1.7.8 and newer, the command below\n+\t# could be replaced with:\n+\t#\n+\t#     git check-ref-format --allow-onelevel \"$1\"\n+\t#\n+\t# Instead, we arbitrarily prepend one level.  The result\n+\t# should be the same, and this is portable to all existing\n+\t# versions of Git.\n+\tgit check-ref-format a/\"$1\"\n+\tif [ $? -ne 0 ]; then\n+\t\treturn 1\n+\tfi\n+\n+\t# We want to reject all names that Git 2.0.0 rejects.  In case\n+\t# we are running an older version, we explicitly check some\n+\t# cases that were added to Git after version 1.5.0.  This code\n+\t# aims to support Git version 1.5.0 and newer.\n+\n+\t# Git 1.7.6.4 and newer rejects the DEL character.\n+\tif [ `echo \"$1\"|tr -d '\\177'` != \"$1\" ]; then\n+\t\treturn 1\n+\tfi\n+\n+\t# Git 1.7.8 and newer rejects refs that start or end with\n+\t# slash or contain multiple adjacent slashes.\n \tcase \"$1\" in\n-\t\t/*|./*|../*|*/./*|*/../*|*/.|*/..|*/|*\\ *|*\\\t*)\n+\t\t/*|*/|*//*)\n \t\t\treturn 1;;\n-\t\t*:*)\n-\t\t\treturn 1;;\n-\t\t*)\n-\t\t\treturn 0;;\n \tesac\n+\n+\t# Git 1.7.8 and newer rejects refname components that end in\n+\t# .lock.\n+\tcase \"$1\" in\n+\t\t*.lock/*|*.lock)\n+\t\t\treturn 1;;\n+\tesac\n+\n+\t# Git 1.8.5 and newer rejects refnames that are made up of the\n+\t# single character \"@\".\n+\tif [ \"$1\" = \"@\" ]; then\n+\t\treturn 1\n+\tfi\n+\n+\treturn 0\n }\n \n get_branch()\ndiff --git a/guilt-fork b/guilt-fork\nindex a85d391..6447e55 100755\n--- a/guilt-fork\n+++ b/guilt-fork\n@@ -37,7 +37,7 @@ else\n fi\n \n if ! valid_patchname \"$newpatch\"; then\n-\tdie \"The specified patch name contains invalid characters (:).\"\n+\tdie \"The specified patch name is invalid according to git-check-ref-format(1).\"\n fi\n \n if [ -e \"$GUILT_DIR/$branch/$newpatch\" ]; then\ndiff --git a/guilt-import b/guilt-import\nindex 3e9b3bb..928e325 100755\n--- a/guilt-import\n+++ b/guilt-import\n@@ -40,7 +40,7 @@ if [ -e \"$GUILT_DIR/$branch/$newname\" ]; then\n fi\n \n if ! valid_patchname \"$newname\"; then\n-\tdie \"The specified patch name contains invalid characters (:).\"\n+\tdie \"The specified patch name is invalid according to git-check-ref-format(1).\"\n fi\n \n # create any directories as needed\ndiff --git a/guilt-new b/guilt-new\nindex 9528438..9f7fa44 100755\n--- a/guilt-new\n+++ b/guilt-new\n@@ -64,7 +64,7 @@ fi\n \n if ! valid_patchname \"$patch\"; then\n \tdisp \"Patchname is invalid.\" >&2\n-\tdie \"it cannot begin with '/', './' or '../', or contain /./, /../, or whitespace\"\n+\tdie \"It must follow the rules in git-check-ref-format(1).\"\n fi\n \n # create any directories as needed\ndiff --git a/regression/t-025.out b/regression/t-025.out\nindex 7811ab1..01bc406 100644\n--- a/regression/t-025.out\n+++ b/regression/t-025.out\n@@ -141,7 +141,7 @@ f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n % guilt new white space\n Patchname is invalid.\n-it cannot begin with '/', './' or '../', or contain /./, /../, or whitespace\n+It must follow the rules in git-check-ref-format(1).\n % list_files\n d .git/patches\n d .git/patches/master\n@@ -211,7 +211,7 @@ f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n % guilt new /abc\n Patchname is invalid.\n-it cannot begin with '/', './' or '../', or contain /./, /../, or whitespace\n+It must follow the rules in git-check-ref-format(1).\n % list_files\n d .git/patches\n d .git/patches/master\n@@ -235,7 +235,7 @@ f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n % guilt new ./blah\n Patchname is invalid.\n-it cannot begin with '/', './' or '../', or contain /./, /../, or whitespace\n+It must follow the rules in git-check-ref-format(1).\n % list_files\n d .git/patches\n d .git/patches/master\n@@ -259,7 +259,7 @@ f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n % guilt new ../blah\n Patchname is invalid.\n-it cannot begin with '/', './' or '../', or contain /./, /../, or whitespace\n+It must follow the rules in git-check-ref-format(1).\n % list_files\n d .git/patches\n d .git/patches/master\n@@ -283,7 +283,7 @@ f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n % guilt new abc/./blah\n Patchname is invalid.\n-it cannot begin with '/', './' or '../', or contain /./, /../, or whitespace\n+It must follow the rules in git-check-ref-format(1).\n % list_files\n d .git/patches\n d .git/patches/master\n@@ -307,7 +307,7 @@ f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n % guilt new abc/../blah\n Patchname is invalid.\n-it cannot begin with '/', './' or '../', or contain /./, /../, or whitespace\n+It must follow the rules in git-check-ref-format(1).\n % list_files\n d .git/patches\n d .git/patches/master\n@@ -331,7 +331,7 @@ f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n % guilt new abc/.\n Patchname is invalid.\n-it cannot begin with '/', './' or '../', or contain /./, /../, or whitespace\n+It must follow the rules in git-check-ref-format(1).\n % list_files\n d .git/patches\n d .git/patches/master\n@@ -355,7 +355,7 @@ f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n % guilt new abc/..\n Patchname is invalid.\n-it cannot begin with '/', './' or '../', or contain /./, /../, or whitespace\n+It must follow the rules in git-check-ref-format(1).\n % list_files\n d .git/patches\n d .git/patches/master\n@@ -379,7 +379,415 @@ f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n % guilt new abc/\n Patchname is invalid.\n-it cannot begin with '/', './' or '../', or contain /./, /../, or whitespace\n+It must follow the rules in git-check-ref-format(1).\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/patches/master/dir\n+d .git/patches/master/dir/subdir\n+d .git/refs/patches\n+d .git/refs/patches/master\n+d .git/refs/patches/master/dir\n+d .git/refs/patches/master/dir/subdir\n+f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n+r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n+% guilt new abc.lock\n+Patchname is invalid.\n+It must follow the rules in git-check-ref-format(1).\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/patches/master/dir\n+d .git/patches/master/dir/subdir\n+d .git/refs/patches\n+d .git/refs/patches/master\n+d .git/refs/patches/master/dir\n+d .git/refs/patches/master/dir/subdir\n+f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n+r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n+% guilt new a/b.lock/c\n+Patchname is invalid.\n+It must follow the rules in git-check-ref-format(1).\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/patches/master/dir\n+d .git/patches/master/dir/subdir\n+d .git/refs/patches\n+d .git/refs/patches/master\n+d .git/refs/patches/master/dir\n+d .git/refs/patches/master/dir/subdir\n+f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n+r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n+% guilt new cr\n+Patchname is invalid.\n+It must follow the rules in git-check-ref-format(1).\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/patches/master/dir\n+d .git/patches/master/dir/subdir\n+d .git/refs/patches\n+d .git/refs/patches/master\n+d .git/refs/patches/master/dir\n+d .git/refs/patches/master/dir/subdir\n+f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n+r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n+% guilt new ctrl-a\u0001\n+Patchname is invalid.\n+It must follow the rules in git-check-ref-format(1).\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/patches/master/dir\n+d .git/patches/master/dir/subdir\n+d .git/refs/patches\n+d .git/refs/patches/master\n+d .git/refs/patches/master/dir\n+d .git/refs/patches/master/dir/subdir\n+f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n+r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n+% guilt new formfeed\f\n+Patchname is invalid.\n+It must follow the rules in git-check-ref-format(1).\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/patches/master/dir\n+d .git/patches/master/dir/subdir\n+d .git/refs/patches\n+d .git/refs/patches/master\n+d .git/refs/patches/master/dir\n+d .git/refs/patches/master/dir/subdir\n+f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n+r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n+% guilt new del\n+Patchname is invalid.\n+It must follow the rules in git-check-ref-format(1).\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/patches/master/dir\n+d .git/patches/master/dir/subdir\n+d .git/refs/patches\n+d .git/refs/patches/master\n+d .git/refs/patches/master/dir\n+d .git/refs/patches/master/dir/subdir\n+f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n+r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n+% guilt new tilde~\n+Patchname is invalid.\n+It must follow the rules in git-check-ref-format(1).\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/patches/master/dir\n+d .git/patches/master/dir/subdir\n+d .git/refs/patches\n+d .git/refs/patches/master\n+d .git/refs/patches/master/dir\n+d .git/refs/patches/master/dir/subdir\n+f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n+r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n+% guilt new caret^\n+Patchname is invalid.\n+It must follow the rules in git-check-ref-format(1).\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/patches/master/dir\n+d .git/patches/master/dir/subdir\n+d .git/refs/patches\n+d .git/refs/patches/master\n+d .git/refs/patches/master/dir\n+d .git/refs/patches/master/dir/subdir\n+f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n+r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n+% guilt new colon:\n+Patchname is invalid.\n+It must follow the rules in git-check-ref-format(1).\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/patches/master/dir\n+d .git/patches/master/dir/subdir\n+d .git/refs/patches\n+d .git/refs/patches/master\n+d .git/refs/patches/master/dir\n+d .git/refs/patches/master/dir/subdir\n+f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n+r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n+% guilt new questionmark?\n+Patchname is invalid.\n+It must follow the rules in git-check-ref-format(1).\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/patches/master/dir\n+d .git/patches/master/dir/subdir\n+d .git/refs/patches\n+d .git/refs/patches/master\n+d .git/refs/patches/master/dir\n+d .git/refs/patches/master/dir/subdir\n+f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n+r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n+% guilt new asterisk*\n+Patchname is invalid.\n+It must follow the rules in git-check-ref-format(1).\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/patches/master/dir\n+d .git/patches/master/dir/subdir\n+d .git/refs/patches\n+d .git/refs/patches/master\n+d .git/refs/patches/master/dir\n+d .git/refs/patches/master/dir/subdir\n+f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n+r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n+% guilt new open[bracket\n+Patchname is invalid.\n+It must follow the rules in git-check-ref-format(1).\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/patches/master/dir\n+d .git/patches/master/dir/subdir\n+d .git/refs/patches\n+d .git/refs/patches/master\n+d .git/refs/patches/master/dir\n+d .git/refs/patches/master/dir/subdir\n+f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n+r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n+% guilt new consecutive//slashes\n+Patchname is invalid.\n+It must follow the rules in git-check-ref-format(1).\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/patches/master/dir\n+d .git/patches/master/dir/subdir\n+d .git/refs/patches\n+d .git/refs/patches/master\n+d .git/refs/patches/master/dir\n+d .git/refs/patches/master/dir/subdir\n+f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n+r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n+% guilt new trailing-dot.\n+Patchname is invalid.\n+It must follow the rules in git-check-ref-format(1).\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/patches/master/dir\n+d .git/patches/master/dir/subdir\n+d .git/refs/patches\n+d .git/refs/patches/master\n+d .git/refs/patches/master/dir\n+d .git/refs/patches/master/dir/subdir\n+f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n+r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n+% guilt new bad@{seq\n+Patchname is invalid.\n+It must follow the rules in git-check-ref-format(1).\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/patches/master/dir\n+d .git/patches/master/dir/subdir\n+d .git/refs/patches\n+d .git/refs/patches/master\n+d .git/refs/patches/master/dir\n+d .git/refs/patches/master/dir/subdir\n+f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n+r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n+% guilt new @\n+Patchname is invalid.\n+It must follow the rules in git-check-ref-format(1).\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/patches/master/dir\n+d .git/patches/master/dir/subdir\n+d .git/refs/patches\n+d .git/refs/patches/master\n+d .git/refs/patches/master/dir\n+d .git/refs/patches/master/dir/subdir\n+f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n+r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n+% guilt new backslash\\\n+Patchname is invalid.\n+It must follow the rules in git-check-ref-format(1).\n % list_files\n d .git/patches\n d .git/patches/master\ndiff --git a/regression/t-025.sh b/regression/t-025.sh\nindex 985fed4..8c439fc 100755\n--- a/regression/t-025.sh\n+++ b/regression/t-025.sh\n@@ -43,7 +43,17 @@ shouldfail guilt new \"white space\"\n \n cmd list_files\n \n-for pname in prepend mode /abc ./blah ../blah abc/./blah abc/../blah abc/. abc/.. abc/ ; do\n+b()\n+{\n+    printf \"%b\" \"$1\"\n+}\n+\n+for pname in prepend mode /abc ./blah ../blah abc/./blah abc/../blah abc/. \\\n+\tabc/.. abc/ abc.lock a/b.lock/c `b 'cr\\r'` `b 'ctrl-a\\001'` \\\n+\t`b 'formfeed\\f'` `b 'del\\177'` \"tilde~\" \"caret^\" \"colon:\" \\\n+\t\"questionmark?\" \"asterisk*\" \"open[bracket\" \"consecutive//slashes\" \\\n+\t\"trailing-dot.\" \"bad@{seq\" \"@\" \"backslash\\\\\"\n+do\n \tshouldfail guilt new \"$pname\"\n \n \tcmd list_files\ndiff --git a/regression/t-032.out b/regression/t-032.out\nindex 53f0370..4e65db0 100644\n--- a/regression/t-032.out\n+++ b/regression/t-032.out\n@@ -1,7 +1,7 @@\n % setup_repo\n % touch foo foo:baz\n % guilt import -P foo:bar foo\n-The specified patch name contains invalid characters (:).\n+The specified patch name is invalid according to git-check-ref-format(1).\n % guilt import -P foo:bar foo2\n Specified file does not exist.\n % guilt import -P foo foo2\n@@ -15,4 +15,4 @@ Already tracking a patch under that name.\n Already tracking a patch under that name.\n % guilt import -P foo,bar foo\n % guilt import foo:baz\n-The specified patch name contains invalid characters (:).\n+The specified patch name is invalid according to git-check-ref-format(1).\n-- \n1.8.3.1\n"},{"id":"242111","messageId":"1400450409-30998-16-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 15/33] Produce legal patch names in guilt-import-commit.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T21:59:51Z","receivedAt":"2014-05-18T21:59:51Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"Try harder to create patch names that adhere to the rules in\ngit-check-ref-format(1) when deriving a patch name from the commit\nmessage.  Verify that the derived name using \"git check-ref-format\",\nand as a final fallback simply use the patch name \"x\" (to ensure that\nthe code is future-proof in case new rules are added in the future).\n\nAlways append a \".patch\" suffix to the patch name.\n\nAdded test cases.\n\nSigned-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n guilt-import-commit  |  20 +-\n regression/t-034.out | 567 +++++++++++++++++++++++++++++++++++++++++++++++++++\n regression/t-034.sh  |  71 +++++++\n 3 files changed, 656 insertions(+), 2 deletions(-)\n create mode 100644 regression/t-034.out\n create mode 100755 regression/t-034.sh\n\ndiff --git a/guilt-import-commit b/guilt-import-commit\nindex f14647c..6260c56 100755\n--- a/guilt-import-commit\n+++ b/guilt-import-commit\n@@ -28,19 +28,35 @@ disp \"Current head: `git rev-parse \\`git_branch\\``\" >&2\n for rev in `git rev-list $rhash`; do\n \ts=`git log --pretty=oneline -1 $rev | cut -c 42-`\n \n+\t# Try to convert the first line of the commit message to a\n+\t# valid patch name.\n \tfname=`echo $s | sed -e \"s/&/and/g\" -e \"s/[ :]/_/g\" -e \"s,[/\\\\],-,g\" \\\n \t\t\t-e \"s/['\\\\[{}]//g\" -e 's/]//g' -e 's/\\*/-/g' \\\n-\t\t\t-e 's/\\?/-/g' | tr A-Z a-z`\n+\t\t\t-e 's/\\?/-/g' -e 's/\\.\\.\\.*/./g' -e 's/^\\.//' \\\n+\t\t\t-e 's/\\.patch$//' -e 's/\\.$//' | tr A-Z a-z`\n+\n+\tif ! valid_patchname \"$fname\"; then\n+\t\t# Try harder to make it a legal commit name by\n+\t\t# removing all but a few safe characters.\n+\t\tfname=`echo $fname|tr -d -c _a-zA-Z0-9---/\\\\n`\n+\tfi\n+\tif ! valid_patchname \"$fname\"; then\n+\t\t# If we failed to derive a legal patch name, use the\n+\t\t# name \"x\".  (If this happens, we likely have to\n+\t\t# append a suffix to make the name unique.)\n+\t\tfname=x\n+\tfi\n \n \tdisp \"Converting `echo $rev | cut -c 1-8` as $fname\"\n \n \tmangle_prefix=1\n \tfname_base=$fname\n-\twhile [ -f \"$GUILT_DIR/$branch/$fname\" ]; do\n+\twhile [ -f \"$GUILT_DIR/$branch/$fname.patch\" ]; do\n \t\tfname=\"$fname_base-$mangle_prefix\"\n \t        mangle_prefix=`expr $mangle_prefix + 1`\n \t\tdisp \"Patch under that name exists...trying '$fname'\"\n \tdone\n+\tfname=\"$fname\".patch\n \n \t(\n \t\tdo_make_header $rev\ndiff --git a/regression/t-034.out b/regression/t-034.out\nnew file mode 100644\nindex 0000000..7bc9459\n--- /dev/null\n+++ b/regression/t-034.out\n@@ -0,0 +1,567 @@\n+% setup_git_repo\n+% git tag base\n+% create_commit a The sequence /. is forbidden.\n+[master eebb76e] The sequence /. is forbidden.\n+ Author: Author Name <author@email>\n+ 1 file changed, 1 insertion(+)\n+ create mode 100644 a\n+% create_commit a The sequence .lock/ is forbidden.\n+[master 45e81b5] The sequence .lock/ is forbidden.\n+ Author: Author Name <author@email>\n+ 1 file changed, 1 insertion(+)\n+% create_commit a A/component/may/not/end/in/foo.lock\n+[master bbf3f59] A/component/may/not/end/in/foo.lock\n+ Author: Author Name <author@email>\n+ 1 file changed, 1 insertion(+)\n+% create_commit a Two consecutive dots (..) is forbidden.\n+[master 1535e67] Two consecutive dots (..) is forbidden.\n+ Author: Author Name <author@email>\n+ 1 file changed, 1 insertion(+)\n+% create_commit a Check/multiple/../dots/...../foo..patch\n+[master 48eb60c] Check/multiple/../dots/...../foo..patch\n+ Author: Author Name <author@email>\n+ 1 file changed, 1 insertion(+)\n+% create_commit a Space is forbidden.\n+[master 10dea83] Space is forbidden.\n+ Author: Author Name <author@email>\n+ 1 file changed, 1 insertion(+)\n+% create_commit a Tilde~is~forbidden.\n+[master 70a83b7] Tilde~is~forbidden.\n+ Author: Author Name <author@email>\n+ 1 file changed, 1 insertion(+)\n+% create_commit a Caret^is^forbidden.\n+[master ee6ef2c] Caret^is^forbidden.\n+ Author: Author Name <author@email>\n+ 1 file changed, 1 insertion(+)\n+% create_commit a Colon:is:forbidden.\n+[master c077fe2] Colon:is:forbidden.\n+ Author: Author Name <author@email>\n+ 1 file changed, 1 insertion(+)\n+% create_commit a Delisforbidden.\n+[master 589ee30] Delisforbidden.\n+ Author: Author Name <author@email>\n+ 1 file changed, 1 insertion(+)\n+% git branch some-branch\n+% git tag some-tag\n+% create_commit a Ctrl\u0001is\u0002forbidden.\n+[master e63cdde] Ctrl\u0001is\u0002forbidden.\n+ Author: Author Name <author@email>\n+ 1 file changed, 1 insertion(+)\n+% create_commit a CR\nis\nalso\nforbidden.\n+[master 21ad093] CR\nis\nalso\nforbidden.\n+ Author: Author Name <author@email>\n+ 1 file changed, 1 insertion(+)\n+% create_commit a Question-mark?is?forbidden.\n+[master be2fa9b] Question-mark?is?forbidden.\n+ Author: Author Name <author@email>\n+ 1 file changed, 1 insertion(+)\n+% create_commit a Asterisk*is*forbidden.\n+[master af7b50f] Asterisk*is*forbidden.\n+ Author: Author Name <author@email>\n+ 1 file changed, 1 insertion(+)\n+% create_commit a Open[bracket[is[forbidden.\n+[master 689f618] Open[bracket[is[forbidden.\n+ Author: Author Name <author@email>\n+ 1 file changed, 1 insertion(+)\n+% create_commit a Multiple/slashes//are//forbidden.\n+[master 6e7d52a] Multiple/slashes//are//forbidden.\n+ Author: Author Name <author@email>\n+ 1 file changed, 1 insertion(+)\n+% create_commit a Cannot/end/in/slash/\n+[master 95bb6cd] Cannot/end/in/slash/\n+ Author: Author Name <author@email>\n+ 1 file changed, 1 insertion(+)\n+% create_commit a Cannot end in ..\n+[master 106e8e5] Cannot end in ..\n+ Author: Author Name <author@email>\n+ 1 file changed, 1 insertion(+)\n+% create_commit a Cannot@{have@{the@{sequence@{at-brace.\n+[master 30187ed] Cannot@{have@{the@{sequence@{at-brace.\n+ Author: Author Name <author@email>\n+ 1 file changed, 1 insertion(+)\n+% create_commit a @\n+[master aedb74f] @\n+ Author: Author Name <author@email>\n+ 1 file changed, 1 insertion(+)\n+% create_commit a Backslash\\is\\forbidden.\n+[master 0a46f8f] Backslash\\is\\forbidden.\n+ Author: Author Name <author@email>\n+ 1 file changed, 1 insertion(+)\n+% create_commit a Can/have/embedded/single/slashes\n+[master 2a8b188] Can/have/embedded/single/slashes\n+ Author: Author Name <author@email>\n+ 1 file changed, 1 insertion(+)\n+% git log\n+commit 2a8b1889aa5066193bac978e6bf5073ffcfa6541\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Can/have/embedded/single/slashes\n+\n+commit 0a46f8fa7c8c5a6f1039f842fe5cbd21d3a2a2a6\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Backslash\\is\\forbidden.\n+\n+commit aedb74fd8388282fd7af50cb191a7f62bfc45eb5\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    @\n+\n+commit 30187ed0f47d12df9cedcbb846647d0d52130c12\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Cannot@{have@{the@{sequence@{at-brace.\n+\n+commit 106e8e5a8cceec7297af97376ca5f93506643d0b\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Cannot end in ..\n+\n+commit 95bb6cd7edf7b1e634a1e7d02c8faa99e39cbbf2\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Cannot/end/in/slash/\n+\n+commit 6e7d52a7dacc684225c11b4edd2bac25fb52bd9b\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Multiple/slashes//are//forbidden.\n+\n+commit 689f618085195775d204898254154b8bb50897a5\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Open[bracket[is[forbidden.\n+\n+commit af7b50f93854bc5f46de5a389c1f3dea081eae2f\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Asterisk*is*forbidden.\n+\n+commit be2fa9b5c5788dc05c4036f1b8197a1d33169610\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Question-mark?is?forbidden.\n+\n+commit 21ad093a0c1b4a96285180a3d7b99a4045ef9202\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    CR\nis\nalso\nforbidden.\n+\n+commit e63cdde7a1c90b66d7d411683528200f3f067d5f\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Ctrl\u0001is\u0002forbidden.\n+\n+commit 589ee305a82aacf155529e75cbc84e661c37c83d\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Delisforbidden.\n+\n+commit c077fe203fd18036fb00b56eec1763673d1769c6\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Colon:is:forbidden.\n+\n+commit ee6ef2cc9dd5525409300377b013c0d9734bd931\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Caret^is^forbidden.\n+\n+commit 70a83b705a2602a9493aba7f8f22e7abd13adc63\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Tilde~is~forbidden.\n+\n+commit 10dea8380135f4d10cd10324e13da659261ceda3\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Space is forbidden.\n+\n+commit 48eb60cddaefdaac5f78655f9028a9da741a18d1\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Check/multiple/../dots/...../foo..patch\n+\n+commit 1535e67718949abf72f843685a1672ebfe4bd21f\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Two consecutive dots (..) is forbidden.\n+\n+commit bbf3f5926e11d97b08cdb6e833c9deb603453d1b\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    A/component/may/not/end/in/foo.lock\n+\n+commit 45e81b5163ec3ed656b058ac3fd95b8986824e0f\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    The sequence .lock/ is forbidden.\n+\n+commit eebb76e96913d2dc78aef5f233fadc74af770b3b\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    The sequence /. is forbidden.\n+\n+commit d4850419ccc1146c7169f500725ce504b9774ed0\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    initial\n+    \n+    Signed-off-by: Commiter Name <commiter@email>\n+% guilt init\n+% guilt import-commit base..HEAD\n+About to begin conversion...\n+Current head: 2a8b1889aa5066193bac978e6bf5073ffcfa6541\n+Converting 2a8b1889 as can-have-embedded-single-slashes\n+Converting 0a46f8fa as backslash-isorbidden\n+Converting aedb74fd as x\n+Converting 30187ed0 as cannot@have@the@sequence@at-brace\n+Converting 106e8e5a as cannot_end_in_\n+Converting 95bb6cd7 as cannot-end-in-slash-\n+Converting 6e7d52a7 as multiple-slashes--are--forbidden\n+Converting 689f6180 as openbracketisforbidden\n+Converting af7b50f9 as asterisk-is-forbidden\n+Converting be2fa9b5 as question-mark-is-forbidden\n+Converting 21ad093a as crisalsoforbidden\n+Converting e63cdde7 as ctrlisforbidden\n+Converting 589ee305 as delisforbidden\n+Converting c077fe20 as colon_is_forbidden\n+Converting ee6ef2cc as caretisforbidden\n+Converting 70a83b70 as tildeisforbidden\n+Converting 10dea838 as space_is_forbidden\n+Converting 48eb60cd as check-multiple-.-dots-.-foo\n+Converting 1535e677 as two_consecutive_dots_(.)_is_forbidden\n+Converting bbf3f592 as a-component-may-not-end-in-foolock\n+Converting 45e81b51 as the_sequence_.lock-_is_forbidden\n+Converting eebb76e9 as the_sequence_-._is_forbidden\n+Done.\n+Current head: d4850419ccc1146c7169f500725ce504b9774ed0\n+% guilt push -a\n+Applying patch..the_sequence_-._is_forbidden.patch\n+Patch applied.\n+Applying patch..the_sequence_.lock-_is_forbidden.patch\n+Patch applied.\n+Applying patch..a-component-may-not-end-in-foolock.patch\n+Patch applied.\n+Applying patch..two_consecutive_dots_(.)_is_forbidden.patch\n+Patch applied.\n+Applying patch..check-multiple-.-dots-.-foo.patch\n+Patch applied.\n+Applying patch..space_is_forbidden.patch\n+Patch applied.\n+Applying patch..tildeisforbidden.patch\n+Patch applied.\n+Applying patch..caretisforbidden.patch\n+Patch applied.\n+Applying patch..colon_is_forbidden.patch\n+Patch applied.\n+Applying patch..delisforbidden.patch\n+Patch applied.\n+Applying patch..ctrlisforbidden.patch\n+Patch applied.\n+Applying patch..crisalsoforbidden.patch\n+Patch applied.\n+Applying patch..question-mark-is-forbidden.patch\n+Patch applied.\n+Applying patch..asterisk-is-forbidden.patch\n+Patch applied.\n+Applying patch..openbracketisforbidden.patch\n+Patch applied.\n+Applying patch..multiple-slashes--are--forbidden.patch\n+Patch applied.\n+Applying patch..cannot-end-in-slash-.patch\n+Patch applied.\n+Applying patch..cannot_end_in_.patch\n+Patch applied.\n+Applying patch..cannot@have@the@sequence@at-brace.patch\n+Patch applied.\n+Applying patch..x.patch\n+Patch applied.\n+Applying patch..backslash-isorbidden.patch\n+Patch applied.\n+Applying patch..can-have-embedded-single-slashes.patch\n+Patch applied.\n+% git log --decorate\n+commit 434e07cacdd8e7eb4723e67cb2d100b3a4121a3a (HEAD, refs/patches/master/can-have-embedded-single-slashes.patch, guilt/master)\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Can/have/embedded/single/slashes\n+\n+commit 7c3ffa4f940c862e9f11f5d4a5ae421f7a8d3141 (refs/patches/master/backslash-isorbidden.patch)\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Backslash\\is\\forbidden.\n+\n+commit ea46f435d4d8f3c5349dce1aabc1a39fbf7ef803 (refs/patches/master/x.patch)\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    @\n+\n+commit a275ed5d7f10ea88c986852ee95a7d5a61663b5f (refs/patches/master/cannot@have@the@sequence@at-brace.patch)\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Cannot@{have@{the@{sequence@{at-brace.\n+\n+commit f091fee39457e64ebd35410c1cf95e6613816a54 (refs/patches/master/cannot_end_in_.patch)\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Cannot end in ..\n+\n+commit 025672497aff5c910c8ff86aaedc662f14c2f4ad (refs/patches/master/cannot-end-in-slash-.patch)\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Cannot/end/in/slash/\n+\n+commit f13e243c7c56f39422567a431bccceec8b789596 (refs/patches/master/multiple-slashes--are--forbidden.patch)\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Multiple/slashes//are//forbidden.\n+\n+commit edef5e925083d445f71c170d3293fac9619bc7a2 (refs/patches/master/openbracketisforbidden.patch)\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Open[bracket[is[forbidden.\n+\n+commit 1626a11d979a1e9e775c766484172212277153df (refs/patches/master/asterisk-is-forbidden.patch)\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Asterisk*is*forbidden.\n+\n+commit 74df14ab3a0ec9a0382998fbf167ebb1b0a36c6a (refs/patches/master/question-mark-is-forbidden.patch)\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Question-mark?is?forbidden.\n+\n+commit ec46429125abdb0c5ac2b46cc399bdcd7cfc73fd (refs/patches/master/crisalsoforbidden.patch)\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    CR\nis\nalso\nforbidden.\n+\n+commit 01524f9921af2a041cc88c068f76baa39e436cb2 (refs/patches/master/ctrlisforbidden.patch)\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Ctrl\u0001is\u0002forbidden.\n+\n+commit 9fc9677b61880f9159838e89f714893e0a2fcafb (refs/patches/master/delisforbidden.patch)\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Delisforbidden.\n+\n+commit 10433fd7206b7f79aabb4da514710d93c8deed4a (refs/patches/master/colon_is_forbidden.patch)\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Colon:is:forbidden.\n+\n+commit fb1edb753c97ec865ceea316420b1df586caaa2b (refs/patches/master/caretisforbidden.patch)\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Caret^is^forbidden.\n+\n+commit 3a0d5ccef0359004fcaa9cee98fbd6a2c4432e74 (refs/patches/master/tildeisforbidden.patch)\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Tilde~is~forbidden.\n+\n+commit ea22c3b49c448dba8d7eaa6b805f9f1bc83fbedc (refs/patches/master/space_is_forbidden.patch)\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Space is forbidden.\n+\n+commit db6ea8252440b04811344336f510a5469b2ddab0 (refs/patches/master/check-multiple-.-dots-.-foo.patch)\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Check/multiple/../dots/...../foo..patch\n+\n+commit fe07105cd62660f4440ad24b9fc7dfdd9e71d764 (refs/patches/master/two_consecutive_dots_(.)_is_forbidden.patch)\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Two consecutive dots (..) is forbidden.\n+\n+commit 96a3e92c4df85f52362ce4f6d31983c462db9ae9 (refs/patches/master/a-component-may-not-end-in-foolock.patch)\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    A/component/may/not/end/in/foo.lock\n+\n+commit ee4f0f96dfc9c94f5410c1e6414f9004325a37fc (refs/patches/master/the_sequence_.lock-_is_forbidden.patch)\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    The sequence .lock/ is forbidden.\n+\n+commit fdcb23c3072209bea3d9e0a2594132b936c5347e (refs/patches/master/the_sequence_-._is_forbidden.patch)\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    The sequence /. is forbidden.\n+\n+commit d4850419ccc1146c7169f500725ce504b9774ed0 (tag: base, master)\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    initial\n+    \n+    Signed-off-by: Commiter Name <commiter@email>\n+% git log --decorate some-branch\n+commit 589ee305a82aacf155529e75cbc84e661c37c83d (tag: some-tag, some-branch)\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Delisforbidden.\n+\n+commit c077fe203fd18036fb00b56eec1763673d1769c6\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Colon:is:forbidden.\n+\n+commit ee6ef2cc9dd5525409300377b013c0d9734bd931\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Caret^is^forbidden.\n+\n+commit 70a83b705a2602a9493aba7f8f22e7abd13adc63\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Tilde~is~forbidden.\n+\n+commit 10dea8380135f4d10cd10324e13da659261ceda3\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Space is forbidden.\n+\n+commit 48eb60cddaefdaac5f78655f9028a9da741a18d1\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Check/multiple/../dots/...../foo..patch\n+\n+commit 1535e67718949abf72f843685a1672ebfe4bd21f\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    Two consecutive dots (..) is forbidden.\n+\n+commit bbf3f5926e11d97b08cdb6e833c9deb603453d1b\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    A/component/may/not/end/in/foo.lock\n+\n+commit 45e81b5163ec3ed656b058ac3fd95b8986824e0f\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    The sequence .lock/ is forbidden.\n+\n+commit eebb76e96913d2dc78aef5f233fadc74af770b3b\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    The sequence /. is forbidden.\n+\n+commit d4850419ccc1146c7169f500725ce504b9774ed0 (tag: base, master)\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    initial\n+    \n+    Signed-off-by: Commiter Name <commiter@email>\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 06beca7069b9e576bd431f65d13862ed5d3e2a0f  .git/patches/master/ctrlisforbidden.patch\n+f 08267ec6783ea9d1adae55b275198f7594764ed0  .git/patches/master/series\n+f 08267ec6783ea9d1adae55b275198f7594764ed0  .git/patches/master/status\n+f 09b7e9be44ae5ec3a4bb30f5ee9d4ebc2c042f64  .git/patches/master/two_consecutive_dots_(.)_is_forbidden.patch\n+f 0b971c9a17aeca2319c93d700ffd98acc2a93451  .git/patches/master/question-mark-is-forbidden.patch\n+f 2b8392f63d61efc12add554555adae30883993cc  .git/patches/master/cannot-end-in-slash-.patch\n+f 2cd7c9ad392e071be03c051c6793e9b1e31d33c4  .git/patches/master/can-have-embedded-single-slashes.patch\n+f 3136e448a4c820f6d2642f9d894c4087d3d109ab  .git/patches/master/cannot_end_in_.patch\n+f 34e07c584032df137f19bdb66d93f316f00a5ac8  .git/patches/master/tildeisforbidden.patch\n+f 49bab499826b63deb2bd704629d60c7268c57aee  .git/patches/master/the_sequence_-._is_forbidden.patch\n+f 5bcddb8ccb6e6e5e8a61e9e56cb2e0f70cbab2f5  .git/patches/master/cannot@have@the@sequence@at-brace.patch\n+f 637b982fe14a240de181ae63226b27e0c406b3dc  .git/patches/master/asterisk-is-forbidden.patch\n+f 698f8a7d41a64e3b6be1a3eba86574078b22a5f3  .git/patches/master/backslash-isorbidden.patch\n+f 7b103c3c7ae298cd2334f6f49da48bae1424f77b  .git/patches/master/crisalsoforbidden.patch\n+f 9b810b8c63779c51d2e7f61ab59cd49835041563  .git/patches/master/x.patch\n+f a22958d9ae9976fd7b2b5a9d0bcd44bf7ad9b08a  .git/patches/master/caretisforbidden.patch\n+f ab325bf5a432937fc6f231d3e8a773a62d53952b  .git/patches/master/multiple-slashes--are--forbidden.patch\n+f cb9cffbd4465bddee266c20ccebd14eb687eaa89  .git/patches/master/delisforbidden.patch\n+f d0885a1a1fdee0fd1e4fedce3f7acd3100540bc4  .git/patches/master/openbracketisforbidden.patch\n+f d2903523fb66a346596eabbdd1bda4e52b266440  .git/patches/master/check-multiple-.-dots-.-foo.patch\n+f dfc11f76394059909671af036598c5fbe33001ba  .git/patches/master/space_is_forbidden.patch\n+f e47474c52d6c893f36d0457f885a6dd1267742bb  .git/patches/master/colon_is_forbidden.patch\n+f e7a5f8912592d9891e6159f5827c8b4f372cc406  .git/patches/master/the_sequence_.lock-_is_forbidden.patch\n+f edfaa5e06bd662ae1f6a642834324fd9b849bbd9  .git/patches/master/a-component-may-not-end-in-foolock.patch\n+r 01524f9921af2a041cc88c068f76baa39e436cb2  .git/refs/patches/master/ctrlisforbidden.patch\n+r 025672497aff5c910c8ff86aaedc662f14c2f4ad  .git/refs/patches/master/cannot-end-in-slash-.patch\n+r 10433fd7206b7f79aabb4da514710d93c8deed4a  .git/refs/patches/master/colon_is_forbidden.patch\n+r 1626a11d979a1e9e775c766484172212277153df  .git/refs/patches/master/asterisk-is-forbidden.patch\n+r 3a0d5ccef0359004fcaa9cee98fbd6a2c4432e74  .git/refs/patches/master/tildeisforbidden.patch\n+r 434e07cacdd8e7eb4723e67cb2d100b3a4121a3a  .git/refs/patches/master/can-have-embedded-single-slashes.patch\n+r 74df14ab3a0ec9a0382998fbf167ebb1b0a36c6a  .git/refs/patches/master/question-mark-is-forbidden.patch\n+r 7c3ffa4f940c862e9f11f5d4a5ae421f7a8d3141  .git/refs/patches/master/backslash-isorbidden.patch\n+r 96a3e92c4df85f52362ce4f6d31983c462db9ae9  .git/refs/patches/master/a-component-may-not-end-in-foolock.patch\n+r 9fc9677b61880f9159838e89f714893e0a2fcafb  .git/refs/patches/master/delisforbidden.patch\n+r a275ed5d7f10ea88c986852ee95a7d5a61663b5f  .git/refs/patches/master/cannot@have@the@sequence@at-brace.patch\n+r db6ea8252440b04811344336f510a5469b2ddab0  .git/refs/patches/master/check-multiple-.-dots-.-foo.patch\n+r ea22c3b49c448dba8d7eaa6b805f9f1bc83fbedc  .git/refs/patches/master/space_is_forbidden.patch\n+r ea46f435d4d8f3c5349dce1aabc1a39fbf7ef803  .git/refs/patches/master/x.patch\n+r ec46429125abdb0c5ac2b46cc399bdcd7cfc73fd  .git/refs/patches/master/crisalsoforbidden.patch\n+r edef5e925083d445f71c170d3293fac9619bc7a2  .git/refs/patches/master/openbracketisforbidden.patch\n+r ee4f0f96dfc9c94f5410c1e6414f9004325a37fc  .git/refs/patches/master/the_sequence_.lock-_is_forbidden.patch\n+r f091fee39457e64ebd35410c1cf95e6613816a54  .git/refs/patches/master/cannot_end_in_.patch\n+r f13e243c7c56f39422567a431bccceec8b789596  .git/refs/patches/master/multiple-slashes--are--forbidden.patch\n+r fb1edb753c97ec865ceea316420b1df586caaa2b  .git/refs/patches/master/caretisforbidden.patch\n+r fdcb23c3072209bea3d9e0a2594132b936c5347e  .git/refs/patches/master/the_sequence_-._is_forbidden.patch\n+r fe07105cd62660f4440ad24b9fc7dfdd9e71d764  .git/refs/patches/master/two_consecutive_dots_(.)_is_forbidden.patch\n+% guilt pop -a\n+All patches popped.\ndiff --git a/regression/t-034.sh b/regression/t-034.sh\nnew file mode 100755\nindex 0000000..f41f958\n--- /dev/null\n+++ b/regression/t-034.sh\n@@ -0,0 +1,71 @@\n+#!/bin/bash\n+#\n+# Test import-commit\n+#\n+\n+function create_commit\n+{\n+\techo $1 >> $1 &&\n+\t\tgit add $1 &&\n+\t\tgit commit -m\"$2\"\n+}\n+\n+source \"$REG_DIR/scaffold\"\n+\n+b()\n+{\n+\tprintf \"%b\" \"$1\"\n+}\n+\n+cmd setup_git_repo\n+\n+cmd git tag base\n+\n+# Create a series of commits whose first line of the commit message\n+# each violates one of the rules in get-check-ref-format(1).\n+\n+cmd create_commit a \"The sequence /. is forbidden.\"\n+cmd create_commit a \"The sequence .lock/ is forbidden.\"\n+cmd create_commit a \"A/component/may/not/end/in/foo.lock\"\n+cmd create_commit a \"Two consecutive dots (..) is forbidden.\"\n+cmd create_commit a \"Check/multiple/../dots/...../foo..patch\"\n+cmd create_commit a \"Space is forbidden.\"\n+cmd create_commit a \"Tilde~is~forbidden.\"\n+cmd create_commit a \"Caret^is^forbidden.\"\n+cmd create_commit a \"Colon:is:forbidden.\"\n+cmd create_commit a `b 'Del\\177is\\177forbidden.'`\n+# Create a branch and a tag from the current commit, to ensure that\n+# doing so does not affect how the commit is imported.\n+cmd git branch some-branch\n+cmd git tag some-tag\n+cmd create_commit a `b 'Ctrl\\001is\\002forbidden.'`\n+cmd create_commit a `b 'CR\\ris\\ralso\\rforbidden.'`\n+cmd create_commit a \"Question-mark?is?forbidden.\"\n+cmd create_commit a \"Asterisk*is*forbidden.\"\n+cmd create_commit a \"Open[bracket[is[forbidden.\"\n+cmd create_commit a \"Multiple/slashes//are//forbidden.\"\n+cmd create_commit a \"Cannot/end/in/slash/\"\n+cmd create_commit a \"Cannot end in ..\"\n+cmd create_commit a \"Cannot@{have@{the@{sequence@{at-brace.\"\n+cmd create_commit a \"@\"\n+cmd create_commit a \"Backslash\\\\is\\\\forbidden.\"\n+\n+# Slash is sometimes allowed; this is not problematic.\n+cmd create_commit a \"Can/have/embedded/single/slashes\"\n+\n+cmd git log\n+\n+# Import all the commits to guilt.\n+cmd guilt init\n+cmd guilt import-commit base..HEAD\n+\n+for patch in .git/patches/master/*.patch; do\n+\ttouch -a -m -t \"$TOUCH_DATE\" \"$patch\"\n+done\n+\n+# If push and pop works, the names we created are good.\n+cmd guilt push -a\n+cmd git log --decorate\n+cmd git log --decorate some-branch\n+cmd list_files\n+cmd guilt pop -a\n-- \n1.8.3.1\n"},{"id":"242112","messageId":"1400450409-30998-17-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 16/33] Fix backslash handling when creating names of imported patches.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T21:59:52Z","receivedAt":"2014-05-18T21:59:52Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"The 'echo $s' construct sometimes processes escape sequences.  (This\nhappens, for instance, under Ubuntu 14.04 when /bin/sh is actually\ndash.)  We don't want that to happen when we are importing commits, so\nuse 'printf %s \"$s\"' instead.\n\n(The -E option of bash that explicitly disables backslash expansion is\nnot portable; it is not supported by dash.)\n\nSigned-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n guilt-import-commit  |  2 +-\n regression/t-034.out | 14 +++++++-------\n 2 files changed, 8 insertions(+), 8 deletions(-)\n\ndiff --git a/guilt-import-commit b/guilt-import-commit\nindex 6260c56..45f2404 100755\n--- a/guilt-import-commit\n+++ b/guilt-import-commit\n@@ -30,7 +30,7 @@ for rev in `git rev-list $rhash`; do\n \n \t# Try to convert the first line of the commit message to a\n \t# valid patch name.\n-\tfname=`echo $s | sed -e \"s/&/and/g\" -e \"s/[ :]/_/g\" -e \"s,[/\\\\],-,g\" \\\n+\tfname=`printf %s \"$s\" | sed -e \"s/&/and/g\" -e \"s/[ :]/_/g\" -e \"s,[/\\\\],-,g\" \\\n \t\t\t-e \"s/['\\\\[{}]//g\" -e 's/]//g' -e 's/\\*/-/g' \\\n \t\t\t-e 's/\\?/-/g' -e 's/\\.\\.\\.*/./g' -e 's/^\\.//' \\\n \t\t\t-e 's/\\.patch$//' -e 's/\\.$//' | tr A-Z a-z`\ndiff --git a/regression/t-034.out b/regression/t-034.out\nindex 7bc9459..bda4399 100644\n--- a/regression/t-034.out\n+++ b/regression/t-034.out\n@@ -236,7 +236,7 @@ Date:   Mon Jan 1 00:00:00 2007 +0000\n About to begin conversion...\n Current head: 2a8b1889aa5066193bac978e6bf5073ffcfa6541\n Converting 2a8b1889 as can-have-embedded-single-slashes\n-Converting 0a46f8fa as backslash-isorbidden\n+Converting 0a46f8fa as backslash-is-forbidden\n Converting aedb74fd as x\n Converting 30187ed0 as cannot@have@the@sequence@at-brace\n Converting 106e8e5a as cannot_end_in_\n@@ -300,7 +300,7 @@ Applying patch..cannot@have@the@sequence@at-brace.patch\n Patch applied.\n Applying patch..x.patch\n Patch applied.\n-Applying patch..backslash-isorbidden.patch\n+Applying patch..backslash-is-forbidden.patch\n Patch applied.\n Applying patch..can-have-embedded-single-slashes.patch\n Patch applied.\n@@ -311,7 +311,7 @@ Date:   Mon Jan 1 00:00:00 2007 +0000\n \n     Can/have/embedded/single/slashes\n \n-commit 7c3ffa4f940c862e9f11f5d4a5ae421f7a8d3141 (refs/patches/master/backslash-isorbidden.patch)\n+commit 7c3ffa4f940c862e9f11f5d4a5ae421f7a8d3141 (refs/patches/master/backslash-is-forbidden.patch)\n Author: Author Name <author@email>\n Date:   Mon Jan 1 00:00:00 2007 +0000\n \n@@ -518,8 +518,6 @@ d .git/patches/master\n d .git/refs/patches\n d .git/refs/patches/master\n f 06beca7069b9e576bd431f65d13862ed5d3e2a0f  .git/patches/master/ctrlisforbidden.patch\n-f 08267ec6783ea9d1adae55b275198f7594764ed0  .git/patches/master/series\n-f 08267ec6783ea9d1adae55b275198f7594764ed0  .git/patches/master/status\n f 09b7e9be44ae5ec3a4bb30f5ee9d4ebc2c042f64  .git/patches/master/two_consecutive_dots_(.)_is_forbidden.patch\n f 0b971c9a17aeca2319c93d700ffd98acc2a93451  .git/patches/master/question-mark-is-forbidden.patch\n f 2b8392f63d61efc12add554555adae30883993cc  .git/patches/master/cannot-end-in-slash-.patch\n@@ -529,7 +527,7 @@ f 34e07c584032df137f19bdb66d93f316f00a5ac8  .git/patches/master/tildeisforbidden\n f 49bab499826b63deb2bd704629d60c7268c57aee  .git/patches/master/the_sequence_-._is_forbidden.patch\n f 5bcddb8ccb6e6e5e8a61e9e56cb2e0f70cbab2f5  .git/patches/master/cannot@have@the@sequence@at-brace.patch\n f 637b982fe14a240de181ae63226b27e0c406b3dc  .git/patches/master/asterisk-is-forbidden.patch\n-f 698f8a7d41a64e3b6be1a3eba86574078b22a5f3  .git/patches/master/backslash-isorbidden.patch\n+f 698f8a7d41a64e3b6be1a3eba86574078b22a5f3  .git/patches/master/backslash-is-forbidden.patch\n f 7b103c3c7ae298cd2334f6f49da48bae1424f77b  .git/patches/master/crisalsoforbidden.patch\n f 9b810b8c63779c51d2e7f61ab59cd49835041563  .git/patches/master/x.patch\n f a22958d9ae9976fd7b2b5a9d0bcd44bf7ad9b08a  .git/patches/master/caretisforbidden.patch\n@@ -537,6 +535,8 @@ f ab325bf5a432937fc6f231d3e8a773a62d53952b  .git/patches/master/multiple-slashes\n f cb9cffbd4465bddee266c20ccebd14eb687eaa89  .git/patches/master/delisforbidden.patch\n f d0885a1a1fdee0fd1e4fedce3f7acd3100540bc4  .git/patches/master/openbracketisforbidden.patch\n f d2903523fb66a346596eabbdd1bda4e52b266440  .git/patches/master/check-multiple-.-dots-.-foo.patch\n+f da90de1c84138194524994e0bc3bc4ca8189c999  .git/patches/master/series\n+f da90de1c84138194524994e0bc3bc4ca8189c999  .git/patches/master/status\n f dfc11f76394059909671af036598c5fbe33001ba  .git/patches/master/space_is_forbidden.patch\n f e47474c52d6c893f36d0457f885a6dd1267742bb  .git/patches/master/colon_is_forbidden.patch\n f e7a5f8912592d9891e6159f5827c8b4f372cc406  .git/patches/master/the_sequence_.lock-_is_forbidden.patch\n@@ -548,7 +548,7 @@ r 1626a11d979a1e9e775c766484172212277153df  .git/refs/patches/master/asterisk-is\n r 3a0d5ccef0359004fcaa9cee98fbd6a2c4432e74  .git/refs/patches/master/tildeisforbidden.patch\n r 434e07cacdd8e7eb4723e67cb2d100b3a4121a3a  .git/refs/patches/master/can-have-embedded-single-slashes.patch\n r 74df14ab3a0ec9a0382998fbf167ebb1b0a36c6a  .git/refs/patches/master/question-mark-is-forbidden.patch\n-r 7c3ffa4f940c862e9f11f5d4a5ae421f7a8d3141  .git/refs/patches/master/backslash-isorbidden.patch\n+r 7c3ffa4f940c862e9f11f5d4a5ae421f7a8d3141  .git/refs/patches/master/backslash-is-forbidden.patch\n r 96a3e92c4df85f52362ce4f6d31983c462db9ae9  .git/refs/patches/master/a-component-may-not-end-in-foolock.patch\n r 9fc9677b61880f9159838e89f714893e0a2fcafb  .git/refs/patches/master/delisforbidden.patch\n r a275ed5d7f10ea88c986852ee95a7d5a61663b5f  .git/refs/patches/master/cannot@have@the@sequence@at-brace.patch\n-- \n1.8.3.1\n"},{"id":"242113","messageId":"1400450409-30998-18-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 17/33] \"guilt graph\" no longer loops when no patches are applied.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T21:59:53Z","receivedAt":"2014-05-18T21:59:53Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"Give an error message if no patches are applied.  Added a test case\nthat never terminates unless this fix is applied.\n\nSigned-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n guilt-graph          |  9 +++++++--\n regression/t-033.out |  3 +++\n regression/t-033.sh  | 13 +++++++++++++\n 3 files changed, 23 insertions(+), 2 deletions(-)\n create mode 100644 regression/t-033.out\n create mode 100755 regression/t-033.sh\n\ndiff --git a/guilt-graph b/guilt-graph\nindex b3469dc..56d0e77 100755\n--- a/guilt-graph\n+++ b/guilt-graph\n@@ -17,8 +17,13 @@ fi\n \n patchname=\"$1\"\n \n-bottom=`git rev-parse refs/patches/$branch/$(head_n 1 < \"$applied\")`\n-base=`git rev-parse $bottom^`\n+bottompatch=$(head_n 1 < \"$applied\")\n+if [ -z \"$bottompatch\" ]; then\n+\techo \"No patch applied.\" >&2\n+\texit 1\n+fi\n+\n+base=`git rev-parse \"refs/patches/${branch}/${bottompatch}^\"`\n \n if [ -z \"$patchname\" ]; then\n \ttop=`git rev-parse HEAD`\ndiff --git a/regression/t-033.out b/regression/t-033.out\nnew file mode 100644\nindex 0000000..76613f9\n--- /dev/null\n+++ b/regression/t-033.out\n@@ -0,0 +1,3 @@\n+% setup_repo\n+% guilt graph\n+No patch applied.\ndiff --git a/regression/t-033.sh b/regression/t-033.sh\nnew file mode 100755\nindex 0000000..a3a8981\n--- /dev/null\n+++ b/regression/t-033.sh\n@@ -0,0 +1,13 @@\n+#!/bin/bash\n+#\n+# Test the graph code\n+#\n+\n+source \"$REG_DIR/scaffold\"\n+\n+cmd setup_repo\n+\n+# Check that \"guilt graph\" gives a proper \"No patch applied\" error\n+# message when no patches are applied.  (An older version of guilt\n+# used to enter an endless loop in this situation.)\n+shouldfail guilt graph\n-- \n1.8.3.1\n"},{"id":"242114","messageId":"1400450409-30998-19-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 18/33] guilt-graph: Handle commas in branch names.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T21:59:54Z","receivedAt":"2014-05-18T21:59:54Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"This fix relies on the fact that git branch names can not contain \":\".\n\nSigned-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n guilt-graph | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/guilt-graph b/guilt-graph\nindex 56d0e77..924a63e 100755\n--- a/guilt-graph\n+++ b/guilt-graph\n@@ -51,7 +51,7 @@ safebranch=`echo \"$branch\"|sed 's%/%\\\\\\\\/%g'`\n while [ \"$current\" != \"$base\" ]; do\n \tpname=`git show-ref | sed -n -e \"\n /^$current refs\\/patches\\/$safebranch/ {\n-\ts,^$current refs/patches/$branch/,,\n+\ts:^$current refs/patches/$branch/::\n \tp\n \tq\n }\"`\n-- \n1.8.3.1\n"},{"id":"242115","messageId":"1400450409-30998-20-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 19/33] Check that \"guilt graph\" works when working on a branch with a comma.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T21:59:55Z","receivedAt":"2014-05-18T21:59:55Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"git branch names can contain commas.  Check that \"guilt graph\" works\neven in that case.\n\nSigned-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n regression/t-033.out | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++\n regression/t-033.sh  | 39 +++++++++++++++++++++++++++++++\n 2 files changed, 104 insertions(+)\n\ndiff --git a/regression/t-033.out b/regression/t-033.out\nindex 76613f9..3d1c61f 100644\n--- a/regression/t-033.out\n+++ b/regression/t-033.out\n@@ -1,3 +1,68 @@\n % setup_repo\n % guilt graph\n No patch applied.\n+%% Testing branch a,graph\n+% git checkout -b a,graph master\n+Switched to a new branch 'a,graph'\n+% guilt init\n+% guilt new a.patch\n+% guilt pop\n+All patches popped.\n+% guilt push\n+Applying patch..a.patch\n+Patch applied.\n+% guilt graph\n+digraph G {\n+# checking rev 95275d7c05c6a6176d3941374115b91272877f6c\n+\t\"95275d7c05c6a6176d3941374115b91272877f6c\" [label=\"a.patch\"]\n+}\n+% git add file.txt\n+% guilt refresh\n+Patch a.patch refreshed\n+% guilt pop\n+All patches popped.\n+% guilt push\n+Applying patch..a.patch\n+Patch applied.\n+% guilt graph\n+digraph G {\n+# checking rev ff2775f8d1dc753f635830adcc3a067e0b681e2d\n+\t\"ff2775f8d1dc753f635830adcc3a067e0b681e2d\" [label=\"a.patch\"]\n+}\n+%% Adding an unrelated file in a new patch. No deps.\n+% guilt new b.patch\n+% git add file2.txt\n+% guilt refresh\n+Patch b.patch refreshed\n+% guilt pop\n+Now at a.patch.\n+% guilt push\n+Applying patch..b.patch\n+Patch applied.\n+% guilt graph\n+digraph G {\n+# checking rev c7014443c33d2b0237293687ceb9cbd38313df65\n+\t\"c7014443c33d2b0237293687ceb9cbd38313df65\" [label=\"b.patch\"]\n+# checking rev ff2775f8d1dc753f635830adcc3a067e0b681e2d\n+\t\"ff2775f8d1dc753f635830adcc3a067e0b681e2d\" [label=\"a.patch\"]\n+}\n+%% Changing a file already changed in the first patch adds a dependency.\n+% guilt new c.patch\n+% git add file.txt\n+% guilt refresh\n+Patch c.patch refreshed\n+% guilt pop\n+Now at b.patch.\n+% guilt push\n+Applying patch..c.patch\n+Patch applied.\n+% guilt graph\n+digraph G {\n+# checking rev 891bc14b5603474c9743fd04f3da888644413dc5\n+\t\"891bc14b5603474c9743fd04f3da888644413dc5\" [label=\"c.patch\"]\n+# checking rev c7014443c33d2b0237293687ceb9cbd38313df65\n+\t\"c7014443c33d2b0237293687ceb9cbd38313df65\" [label=\"b.patch\"]\n+# checking rev ff2775f8d1dc753f635830adcc3a067e0b681e2d\n+\t\"ff2775f8d1dc753f635830adcc3a067e0b681e2d\" [label=\"a.patch\"]\n+\t\"891bc14b5603474c9743fd04f3da888644413dc5\" -> \"ff2775f8d1dc753f635830adcc3a067e0b681e2d\"; // ?\n+}\ndiff --git a/regression/t-033.sh b/regression/t-033.sh\nindex a3a8981..fac081e 100755\n--- a/regression/t-033.sh\n+++ b/regression/t-033.sh\n@@ -3,6 +3,13 @@\n # Test the graph code\n #\n \n+function fixup_time_info\n+{\n+\tcmd guilt pop\n+\ttouch -a -m -t \"$TOUCH_DATE\" \".git/patches/a,graph/$1\"\n+\tcmd guilt push\n+}\n+\n source \"$REG_DIR/scaffold\"\n \n cmd setup_repo\n@@ -11,3 +18,35 @@ cmd setup_repo\n # message when no patches are applied.  (An older version of guilt\n # used to enter an endless loop in this situation.)\n shouldfail guilt graph\n+\n+echo \"%% Testing branch a,graph\"\n+cmd git checkout -b a,graph master\n+\n+cmd guilt init\n+\n+cmd guilt new a.patch\n+\n+fixup_time_info a.patch\n+cmd guilt graph\n+\n+cmd echo a >> file.txt\n+cmd git add file.txt\n+cmd guilt refresh\n+fixup_time_info a.patch\n+cmd guilt graph\n+\n+echo \"%% Adding an unrelated file in a new patch. No deps.\"\n+cmd guilt new b.patch\n+cmd echo b >> file2.txt\n+cmd git add file2.txt\n+cmd guilt refresh\n+fixup_time_info b.patch\n+cmd guilt graph\n+\n+echo \"%% Changing a file already changed in the first patch adds a dependency.\"\n+cmd guilt new c.patch\n+cmd echo c >> file.txt\n+cmd git add file.txt\n+cmd guilt refresh\n+fixup_time_info c.patch\n+cmd guilt graph\n-- \n1.8.3.1\n"},{"id":"242116","messageId":"1400450409-30998-21-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 20/33] \"guilt graph\": Handle patch names containing quotes.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T21:59:56Z","receivedAt":"2014-05-18T21:59:56Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"Quote quotes with a backslash in the \"guilt graph\" output.  Otherwise,\nthe \"dot\" file could contain syntax errors.\n\nAdded a test case.\n\nSigned-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n guilt-graph          |  2 ++\n regression/t-033.out | 22 ++++++++++++++++++++++\n regression/t-033.sh  |  9 +++++++++\n 3 files changed, 33 insertions(+)\n\ndiff --git a/guilt-graph b/guilt-graph\nindex 924a63e..0857e0d 100755\n--- a/guilt-graph\n+++ b/guilt-graph\n@@ -57,6 +57,8 @@ while [ \"$current\" != \"$base\" ]; do\n }\"`\n \t[ -z \"$pname\" ] && pname=\"?\"\n \n+\tpname=\"`printf \\\"%s\\\" \\\"$pname\\\" | sed 's/\\\"/\\\\\\\\\\\"/g'`\"\n+\n \tdisp \"# checking rev $current\"\n \tdisp \"\t\\\"$current\\\" [label=\\\"$pname\\\"]\"\n \ndiff --git a/regression/t-033.out b/regression/t-033.out\nindex 3d1c61f..c120d4f 100644\n--- a/regression/t-033.out\n+++ b/regression/t-033.out\n@@ -66,3 +66,25 @@ digraph G {\n \t\"ff2775f8d1dc753f635830adcc3a067e0b681e2d\" [label=\"a.patch\"]\n \t\"891bc14b5603474c9743fd04f3da888644413dc5\" -> \"ff2775f8d1dc753f635830adcc3a067e0b681e2d\"; // ?\n }\n+% guilt new a-\"better&quicker'-patch.patch\n+% git add file.txt\n+% guilt refresh\n+Patch a-\"better&quicker'-patch.patch refreshed\n+% guilt pop\n+Now at c.patch.\n+% guilt push\n+Applying patch..a-\"better&quicker'-patch.patch\n+Patch applied.\n+% guilt graph\n+digraph G {\n+# checking rev bc7df666a646739eaf559af23cab72f2bfd01f0e\n+\t\"bc7df666a646739eaf559af23cab72f2bfd01f0e\" [label=\"a-\\\"better&quicker'-patch.patch\"]\n+# checking rev 891bc14b5603474c9743fd04f3da888644413dc5\n+\t\"891bc14b5603474c9743fd04f3da888644413dc5\" [label=\"c.patch\"]\n+\t\"bc7df666a646739eaf559af23cab72f2bfd01f0e\" -> \"891bc14b5603474c9743fd04f3da888644413dc5\"; // ?\n+# checking rev c7014443c33d2b0237293687ceb9cbd38313df65\n+\t\"c7014443c33d2b0237293687ceb9cbd38313df65\" [label=\"b.patch\"]\n+# checking rev ff2775f8d1dc753f635830adcc3a067e0b681e2d\n+\t\"ff2775f8d1dc753f635830adcc3a067e0b681e2d\" [label=\"a.patch\"]\n+\t\"891bc14b5603474c9743fd04f3da888644413dc5\" -> \"ff2775f8d1dc753f635830adcc3a067e0b681e2d\"; // ?\n+}\ndiff --git a/regression/t-033.sh b/regression/t-033.sh\nindex fac081e..9fe1827 100755\n--- a/regression/t-033.sh\n+++ b/regression/t-033.sh\n@@ -50,3 +50,12 @@ cmd git add file.txt\n cmd guilt refresh\n fixup_time_info c.patch\n cmd guilt graph\n+\n+# A patch name that contains funky characters, including unbalanced\n+# quotes.\n+cmd guilt new \"a-\\\"better&quicker'-patch.patch\"\n+cmd echo d >> file.txt\n+cmd git add file.txt\n+cmd guilt refresh\n+fixup_time_info \"a-\\\"better&quicker'-patch.patch\"\n+cmd guilt graph\n-- \n1.8.3.1\n"},{"id":"242117","messageId":"1400450409-30998-22-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 21/33] The log.decorate setting should not influence import-commit.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T21:59:57Z","receivedAt":"2014-05-18T21:59:57Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"Use --no-decorate in the call to git log that tries to read the commit\nmessage to produce patch names.  Otherwise, if the user has set\nlog.decorate to short or full, the patch name will be less useful.\n\nModify the t-034.sh test case to demonstrate that this is needed.\n\nSigned-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n guilt-import-commit  | 2 +-\n regression/t-034.out | 2 ++\n regression/t-034.sh  | 2 ++\n 3 files changed, 5 insertions(+), 1 deletion(-)\n\ndiff --git a/guilt-import-commit b/guilt-import-commit\nindex 45f2404..1da7c8e 100755\n--- a/guilt-import-commit\n+++ b/guilt-import-commit\n@@ -26,7 +26,7 @@ disp \"About to begin conversion...\" >&2\n disp \"Current head: `git rev-parse \\`git_branch\\``\" >&2\n \n for rev in `git rev-list $rhash`; do\n-\ts=`git log --pretty=oneline -1 $rev | cut -c 42-`\n+\ts=`git log --no-decorate --pretty=oneline -1 $rev | cut -c 42-`\n \n \t# Try to convert the first line of the commit message to a\n \t# valid patch name.\ndiff --git a/regression/t-034.out b/regression/t-034.out\nindex bda4399..5d81bd4 100644\n--- a/regression/t-034.out\n+++ b/regression/t-034.out\n@@ -232,6 +232,7 @@ Date:   Mon Jan 1 00:00:00 2007 +0000\n     \n     Signed-off-by: Commiter Name <commiter@email>\n % guilt init\n+% git config log.decorate short\n % guilt import-commit base..HEAD\n About to begin conversion...\n Current head: 2a8b1889aa5066193bac978e6bf5073ffcfa6541\n@@ -259,6 +260,7 @@ Converting 45e81b51 as the_sequence_.lock-_is_forbidden\n Converting eebb76e9 as the_sequence_-._is_forbidden\n Done.\n Current head: d4850419ccc1146c7169f500725ce504b9774ed0\n+% git config log.decorate no\n % guilt push -a\n Applying patch..the_sequence_-._is_forbidden.patch\n Patch applied.\ndiff --git a/regression/t-034.sh b/regression/t-034.sh\nindex f41f958..648d009 100755\n--- a/regression/t-034.sh\n+++ b/regression/t-034.sh\n@@ -57,7 +57,9 @@ cmd git log\n \n # Import all the commits to guilt.\n cmd guilt init\n+cmd git config log.decorate short\n cmd guilt import-commit base..HEAD\n+cmd git config log.decorate no\n \n for patch in .git/patches/master/*.patch; do\n \ttouch -a -m -t \"$TOUCH_DATE\" \"$patch\"\n-- \n1.8.3.1\n"},{"id":"242118","messageId":"1400450409-30998-23-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 22/33] The log.decorate setting should not influence patchbomb.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T21:59:58Z","receivedAt":"2014-05-18T21:59:58Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"Signed-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n guilt-patchbomb | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/guilt-patchbomb b/guilt-patchbomb\nindex 1231418..164b10c 100755\n--- a/guilt-patchbomb\n+++ b/guilt-patchbomb\n@@ -47,7 +47,7 @@ if [ $? -ne 0 ]; then\n fi\n \n # display the list of commits to be sent as patches\n-git log --pretty=oneline \"$r\" | cut -c 1-8,41- | $pager\n+git log --no-decorate --pretty=oneline \"$r\" | cut -c 1-8,41- | $pager\n \n _disp \"Are these what you want to send? [Y/n] \"\n read n\n-- \n1.8.3.1\n"},{"id":"242119","messageId":"1400450409-30998-24-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 23/33] The log.decorate setting should not influence guilt rebase.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T21:59:59Z","receivedAt":"2014-05-18T21:59:59Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"Signed-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n guilt-rebase | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/guilt-rebase b/guilt-rebase\nindex fd28e48..a1714a0 100755\n--- a/guilt-rebase\n+++ b/guilt-rebase\n@@ -66,7 +66,7 @@ pop_all_patches\n git merge --no-commit $upstream > /dev/null 2> /dev/null\n \n disp \"\"\n-log=`git log -1 --pretty=oneline`\n+log=`git log -1 --no-decorate --pretty=oneline`\n disp \"HEAD is now at `echo $log | cut -c 1-7`... `echo \"$log\" | cut -c 41-`\"\n \n #\n-- \n1.8.3.1\n"},{"id":"242120","messageId":"1400450409-30998-25-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 24/33] disp no longer processes backslashes.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T22:00:00Z","receivedAt":"2014-05-18T22:00:00Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"Only one invocation of \"disp\" or \"_disp\" actually needed backslash\nprocessing.  In quite a few instances, it was wrong to do backslash\nprocessing, as the message contained data derived from the user.\n\nCreated the new function \"disp_e\" that should be used when backslash\nprocessing is required, and changed \"disp\" and \"_disp\" to use printf\ncode \"%s\" instead of \"%b\".\n\nSigned-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n guilt | 17 +++++++++++++----\n 1 file changed, 13 insertions(+), 4 deletions(-)\n\ndiff --git a/guilt b/guilt\nindex 9567a78..0500500 100755\n--- a/guilt\n+++ b/guilt\n@@ -36,15 +36,24 @@ usage()\n \texit 1\n }\n \n-# echo -n is a bashism, use printf instead\n+# Print arguments, but no trailing newline.\n+# (echo -n is a bashism, use printf instead)\n _disp()\n {\n-\tprintf \"%b\" \"$*\"\n+\tprintf \"%s\" \"$*\"\n }\n \n-# echo -e is a bashism, use printf instead\n+# Print arguments.\n+# (echo -E is a bashism, use printf instead)\n disp()\n {\n+\tprintf \"%s\\n\" \"$*\"\n+}\n+\n+# Print arguments, processing backslash sequences.\n+# (echo -e is a bashism, use printf instead)\n+disp_e()\n+{\n \tprintf \"%b\\n\" \"$*\"\n }\n \n@@ -117,7 +126,7 @@ else\n \n \tdisp \"\"\n \tdisp \"Example:\"\n-\tdisp \"\\tguilt push\"\n+\tdisp_e \"\\tguilt push\"\n \n \t# now, let's exit\n \texit 1\n-- \n1.8.3.1\n"},{"id":"242121","messageId":"1400450409-30998-26-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 25/33] \"guilt push\" now fails when there are no more patches to push.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T22:00:01Z","receivedAt":"2014-05-18T22:00:01Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"This makes it easier to script operations on the entire queue, for\nexample run the test suite on each patch in the queue:\n\n    guilt pop -a;while guilt push; do make test||break; done\n\nThis brings \"guilt push\" in line with the push operation in Mercurial\nQueues (hg qpush), which fails when there are no patches to apply.\n\nUpdated the test suite.\n\n\"guilt push -a\" still does not fail.  (It successfully manages to\nensure that all patches are pushed, even if it did not have to do\nanything to make it so.)\n\nSigned-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n guilt-push           | 19 ++++++-----\n regression/t-020.out | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++\n regression/t-020.sh  | 13 +++++++-\n 3 files changed, 113 insertions(+), 8 deletions(-)\n\ndiff --git a/guilt-push b/guilt-push\nindex 67687e7..39c125e 100755\n--- a/guilt-push\n+++ b/guilt-push\n@@ -56,6 +56,12 @@ fi\n patch=\"$1\"\n [ ! -z \"$all\" ] && patch=\"-a\"\n \n+# Treat \"guilt push\" as \"guilt push -n 1\".\n+if [ -z \"$patch\" ]; then\n+\tpatch=1\n+\tnum=t\n+fi\n+\n if [ \"$patch\" = \"-a\" ]; then\n \t# we are supposed to push all patches, get the last one out of\n \t# series\n@@ -65,7 +71,7 @@ if [ \"$patch\" = \"-a\" ]; then\n \t\tdie \"There are no patches to push.\"\n \tfi\n elif [ ! -z \"$num\" ]; then\n-\t# we are supposed to pop a set number of patches\n+\t# we are supposed to push a set number of patches\n \n \t[ \"$patch\" -lt 0 ] && die \"Invalid number of patches to push.\"\n \n@@ -78,11 +84,6 @@ elif [ ! -z \"$num\" ]; then\n \t# clamp to minimum\n \t[ $tidx -lt $eidx ] && eidx=$tidx\n \n-elif [ -z \"$patch\" ]; then\n-\t# we are supposed to push only the next patch onto the stack\n-\n-\teidx=`wc -l < \"$applied\"`\n-\teidx=`expr $eidx + 1`\n else\n \t# we're supposed to push only up to a patch, make sure the patch is\n \t# in the series\n@@ -109,7 +110,11 @@ if [ \"$sidx\" -gt \"$eidx\" ]; then\n \telse\n \t\tdisp \"File series fully applied, ends at patch `get_series | tail -n 1`\"\n \tfi\n-\texit 0\n+\tif [ -n \"$all\" ]; then\n+\t\texit 0\n+\telse\n+\t\texit 1\n+\tfi\n fi\n \n get_series | sed -n -e \"${sidx},${eidx}p\" | while read p\ndiff --git a/regression/t-020.out b/regression/t-020.out\nindex 42433dc..bcb8797 100644\n--- a/regression/t-020.out\n+++ b/regression/t-020.out\n@@ -270,6 +270,95 @@ index 0000000..8baef1b\n +++ b/def\n @@ -0,0 +1 @@\n +abc\n+% guilt push\n+File series fully applied, ends at patch mode\n+% guilt push -a\n+File series fully applied, ends at patch mode\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 71596bf71b72c2717e1aee378aabefbfa19ab7c8  .git/patches/master/status\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n+r 37d588cc39848368810e88332bd03b083f2ce3ac  .git/refs/patches/master/add\n+r ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba  .git/refs/patches/master/mode\n+r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9  .git/refs/patches/master/remove\n+% git log -p\n+commit ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    patch mode\n+\n+diff --git a/def b/def\n+old mode 100644\n+new mode 100755\n+\n+commit ffb7faa126a6d91bcdd44a494f76b96dd860b8b9\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    patch remove\n+\n+diff --git a/abd b/abd\n+deleted file mode 100644\n+index fd3896d..0000000\n+--- a/abd\n++++ /dev/null\n+@@ -1 +0,0 @@\n+-öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n+\\ No newline at end of file\n+\n+commit 37d588cc39848368810e88332bd03b083f2ce3ac\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    patch add\n+\n+diff --git a/abd b/abd\n+new file mode 100644\n+index 0000000..fd3896d\n+--- /dev/null\n++++ b/abd\n+@@ -0,0 +1 @@\n++öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n+\\ No newline at end of file\n+\n+commit 33633e7a1aa31972f125878baf7807be57b1672d\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    patch modify\n+\n+diff --git a/def b/def\n+index 8baef1b..7d69c2f 100644\n+--- a/def\n++++ b/def\n+@@ -1 +1,2 @@\n+ abc\n++asjhfksad\n+\n+commit d4850419ccc1146c7169f500725ce504b9774ed0\n+Author: Author Name <author@email>\n+Date:   Mon Jan 1 00:00:00 2007 +0000\n+\n+    initial\n+    \n+    Signed-off-by: Commiter Name <commiter@email>\n+\n+diff --git a/def b/def\n+new file mode 100644\n+index 0000000..8baef1b\n+--- /dev/null\n++++ b/def\n+@@ -0,0 +1 @@\n++abc\n % guilt pop --all\n All patches popped.\n % guilt push\ndiff --git a/regression/t-020.sh b/regression/t-020.sh\nindex c165884..3f70c26 100755\n--- a/regression/t-020.sh\n+++ b/regression/t-020.sh\n@@ -26,6 +26,17 @@ guilt series | while read n ; do\n done\n \n #\n+# pushing when there is nothing to push\n+#\n+\n+shouldfail guilt push\n+cmd guilt push -a\n+\n+cmd list_files\n+\n+cmd git log -p\n+\n+#\n # pop all\n #\n cmd guilt pop --all\n@@ -61,7 +72,7 @@ cmd guilt pop --all\n \n npatches=`guilt series | wc -l`\n for n in `_seq -2 $npatches`; do\n-\tif [ $n -ge 0 ]; then\n+\tif [ $n -gt 0 ]; then\n \t\tcmd guilt push -n $n\n \telse\n \t\tshouldfail guilt push -n $n\n-- \n1.8.3.1\n"},{"id":"242122","messageId":"1400450409-30998-27-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 26/33] \"guilt pop\" now fails when there are no more patches to pop.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T22:00:02Z","receivedAt":"2014-05-18T22:00:02Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"This is analogous to how \"guilt push\" now fails when there are no more\npatches to push.  Like push, the \"--all\" argument still succeeds even\nif there was no need to pop anything.\n\nUpdated the test suite.\n\nSigned-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n guilt-pop            | 17 +++++++++++------\n regression/t-021.out |  2 ++\n regression/t-021.sh  |  6 ++++++\n regression/t-061.sh  |  6 +++++-\n 4 files changed, 24 insertions(+), 7 deletions(-)\n\ndiff --git a/guilt-pop b/guilt-pop\nindex f0e647f..191313e 100755\n--- a/guilt-pop\n+++ b/guilt-pop\n@@ -49,9 +49,19 @@ fi\n patch=\"$1\"\n [ ! -z \"$all\" ] && patch=\"-a\"\n \n+# Treat \"guilt pop\" as \"guilt pop -n 1\".\n+if [ -z \"$patch\" ]; then\n+\tpatch=1\n+\tnum=t\n+fi\n+\n if [ ! -s \"$applied\" ]; then\n \tdisp \"No patches applied.\"\n-\texit 0\n+\tif [ \"$patch\" = \"-a\" ]; then\n+\t\texit 0\n+\telse\n+\t\texit 1\n+\tfi\n elif [ \"$patch\" = \"-a\" ]; then\n \t# we are supposed to pop all patches\n \n@@ -68,11 +78,6 @@ elif [ ! -z \"$num\" ]; then\n \t# catch underflow\n \t[ $eidx -lt 0 ] && eidx=0\n \t[ $eidx -eq $sidx ] && die \"No patches requested to be removed.\"\n-elif [ -z \"$patch\" ]; then\n-\t# we are supposed to pop only the current patch on the stack\n-\n-\tsidx=`wc -l < \"$applied\"`\n-\teidx=`expr $sidx - 1`\n else\n \t# we're supposed to pop only up to a patch, make sure the patch is\n \t# in the series\ndiff --git a/regression/t-021.out b/regression/t-021.out\nindex 9b42d9c..58be12f 100644\n--- a/regression/t-021.out\n+++ b/regression/t-021.out\n@@ -287,6 +287,8 @@ index 0000000..8baef1b\n +++ b/def\n @@ -0,0 +1 @@\n +abc\n+% guilt pop\n+No patches applied.\n % guilt push --all\n Applying patch..modify\n Patch applied.\ndiff --git a/regression/t-021.sh b/regression/t-021.sh\nindex 614e870..e0d2dc1 100755\n--- a/regression/t-021.sh\n+++ b/regression/t-021.sh\n@@ -23,6 +23,12 @@ guilt series | _tac | while read n ; do\n done\n \n #\n+# pop when there is nothing to pop\n+#\n+\n+shouldfail guilt pop\n+\n+#\n # push all\n #\n cmd guilt push --all\ndiff --git a/regression/t-061.sh b/regression/t-061.sh\nindex 1411baa..6192f1b 100755\n--- a/regression/t-061.sh\n+++ b/regression/t-061.sh\n@@ -48,7 +48,11 @@ cmd list_files\n \n for i in `seq 5`\n do\n-\tcmd guilt pop\n+\tif [ $i -ge 5 ]; then\n+\t\tshouldfail guilt pop\n+\telse\n+\t\tcmd guilt pop\n+\tfi\n \tcmd git for-each-ref\n \tcmd guilt push\n \tcmd git for-each-ref\n-- \n1.8.3.1\n"},{"id":"242123","messageId":"1400450409-30998-28-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 27/33] Minor testsuite fix.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T22:00:03Z","receivedAt":"2014-05-18T22:00:03Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"Fix remove_topic() in t-061.sh so that it doesn't print a git hash.\n\nSigned-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n regression/t-061.out | 1 -\n regression/t-061.sh  | 2 +-\n 2 files changed, 1 insertion(+), 2 deletions(-)\n\ndiff --git a/regression/t-061.out b/regression/t-061.out\nindex ef0f335..60ad56d 100644\n--- a/regression/t-061.out\n+++ b/regression/t-061.out\n@@ -381,7 +381,6 @@ ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit\trefs/patches/master/mode\n ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit\trefs/patches/master/remove\n % guilt pop -a\n No patches applied.\n-ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba\n % git checkout guilt/master\n Switched to branch \"guilt/master\"\n % guilt pop -a\ndiff --git a/regression/t-061.sh b/regression/t-061.sh\nindex 6192f1b..db26e12 100755\n--- a/regression/t-061.sh\n+++ b/regression/t-061.sh\n@@ -15,7 +15,7 @@ old_style_branch() {\n \n remove_topic() {\n \tcmd guilt pop -a\n-\tif git rev-parse --verify --quiet guilt/master\n+\tif git rev-parse --verify --quiet guilt/master >/dev/null\n \tthen\n \t\tcmd git checkout guilt/master\n \telse\n-- \n1.8.3.1\n"},{"id":"242124","messageId":"1400450409-30998-29-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 28/33] Fix coding style errors in t-061.sh.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T22:00:04Z","receivedAt":"2014-05-18T22:00:04Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"Signed-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n regression/t-061.sh | 6 ++----\n 1 file changed, 2 insertions(+), 4 deletions(-)\n\ndiff --git a/regression/t-061.sh b/regression/t-061.sh\nindex db26e12..bda50c7 100755\n--- a/regression/t-061.sh\n+++ b/regression/t-061.sh\n@@ -15,8 +15,7 @@ old_style_branch() {\n \n remove_topic() {\n \tcmd guilt pop -a\n-\tif git rev-parse --verify --quiet guilt/master >/dev/null\n-\tthen\n+\tif git rev-parse --verify --quiet guilt/master >/dev/null; then\n \t\tcmd git checkout guilt/master\n \telse\n \t\tcmd git checkout master\n@@ -46,8 +45,7 @@ cmd git for-each-ref\n \n cmd list_files\n \n-for i in `seq 5`\n-do\n+for i in `seq 5`; do\n \tif [ $i -ge 5 ]; then\n \t\tshouldfail guilt pop\n \telse\n-- \n1.8.3.1\n"},{"id":"242125","messageId":"1400450409-30998-30-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 29/33] Added guilt.reusebranch configuration option.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T22:00:05Z","receivedAt":"2014-05-18T22:00:05Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"When the option is true, Guilt does not create a new Git branch when\npatches are applied.  This way, you can switch between Guilt 0.35 and\nthe current version of Guilt with no issues.\n\nBy default, the option is false, so that all users will immediately\nget the added protection against pushing a branch upstream with a\npatch applied.  While this might break guilt if a user is running both\nversion 0.35 and the current version against the same local\nrepository, it will not lead to data loss, and that situation is\nprobably rare.\n\nSigned-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n guilt                |  24 ++-\n regression/scaffold  |   1 +\n regression/t-062.out | 420 +++++++++++++++++++++++++++++++++++++++++++++++++++\n regression/t-062.sh  | 130 ++++++++++++++++\n 4 files changed, 569 insertions(+), 6 deletions(-)\n create mode 100644 regression/t-062.out\n create mode 100755 regression/t-062.sh\n\ndiff --git a/guilt b/guilt\nindex 0500500..ea9d131 100755\n--- a/guilt\n+++ b/guilt\n@@ -884,6 +884,9 @@ guilt_push_diff_context=1\n # default diffstat value: true or false\n DIFFSTAT_DEFAULT=\"false\"\n \n+# default guilt.reusebranch value: true or false\n+REUSE_BRANCH_DEFAULT=\"false\"\n+\n # Prefix for guilt branches.\n GUILT_PREFIX=guilt/\n \n@@ -895,6 +898,10 @@ GUILT_PREFIX=guilt/\n diffstat=`git config --bool guilt.diffstat`\n [ -z \"$diffstat\" ] && diffstat=$DIFFSTAT_DEFAULT\n \n+# reuse Git branch?\n+reuse_branch=`git config --bool guilt.reusebranch`\n+[ -z \"$reuse_branch\" ] && reuse_branch=$REUSE_BRANCH_DEFAULT\n+\n #\n # The following gets run every time this file is source'd\n #\n@@ -959,13 +966,18 @@ else\n \tdie \"Unsupported operating system: $UNAME_S\"\n fi\n \n-if [ \"$branch\" = \"$raw_git_branch\" ] && [ -n \"`get_top 2>/dev/null`\" ]\n-then\n-    # This is for compat with old repositories that still have a\n-    # pushed patch without the new-style branch prefix.\n-    old_style_prefix=true\n+if [ -n \"`get_top 2>/dev/null`\" ]; then\n+\t# If there is at least one pushed patch, we set\n+\t# old_style_prefix according to how it was pushed.  It is only\n+\t# possible to change the prefix style while no patches are\n+\t# applied.\n+\tif [ \"$branch\" = \"$raw_git_branch\" ]; then\n+\t\told_style_prefix=true\n+\telse\n+\t\told_style_prefix=false\n+\tfi\n else\n-    old_style_prefix=false\n+\told_style_prefix=\"$reuse_branch\"\n fi\n \n _main \"$@\"\ndiff --git a/regression/scaffold b/regression/scaffold\nindex 2e04c83..b3135be 100644\n--- a/regression/scaffold\n+++ b/regression/scaffold\n@@ -97,6 +97,7 @@ function setup_git_repo\n \tgit config log.date default\n \tgit config log.decorate no\n \tgit config guilt.diffstat false\n+\tgit config guilt.reusebranch false\n }\n \n function setup_guilt_repo\ndiff --git a/regression/t-062.out b/regression/t-062.out\nnew file mode 100644\nindex 0000000..ad5c081\n--- /dev/null\n+++ b/regression/t-062.out\n@@ -0,0 +1,420 @@\n+% setup_repo\n+% git config guilt.reusebranch true\n+% guilt push -a\n+Applying patch..modify\n+Patch applied.\n+Applying patch..add\n+Patch applied.\n+Applying patch..remove\n+Patch applied.\n+Applying patch..mode\n+Patch applied.\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 71596bf71b72c2717e1aee378aabefbfa19ab7c8  .git/patches/master/status\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n+r 37d588cc39848368810e88332bd03b083f2ce3ac  .git/refs/patches/master/add\n+r ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba  .git/refs/patches/master/mode\n+r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9  .git/refs/patches/master/remove\n+% git for-each-ref\n+ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit\trefs/heads/master\n+37d588cc39848368810e88332bd03b083f2ce3ac commit\trefs/patches/master/add\n+ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit\trefs/patches/master/mode\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/patches/master/modify\n+ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit\trefs/patches/master/remove\n+% guilt pop\n+Now at remove.\n+% git for-each-ref\n+ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit\trefs/heads/master\n+37d588cc39848368810e88332bd03b083f2ce3ac commit\trefs/patches/master/add\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/patches/master/modify\n+ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit\trefs/patches/master/remove\n+% guilt push\n+Applying patch..mode\n+Patch applied.\n+% git for-each-ref\n+ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit\trefs/heads/master\n+37d588cc39848368810e88332bd03b083f2ce3ac commit\trefs/patches/master/add\n+ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit\trefs/patches/master/mode\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/patches/master/modify\n+ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit\trefs/patches/master/remove\n+% guilt pop\n+Now at remove.\n+% git for-each-ref\n+ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit\trefs/heads/master\n+37d588cc39848368810e88332bd03b083f2ce3ac commit\trefs/patches/master/add\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/patches/master/modify\n+ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit\trefs/patches/master/remove\n+% guilt pop\n+Now at add.\n+% git for-each-ref\n+37d588cc39848368810e88332bd03b083f2ce3ac commit\trefs/heads/master\n+37d588cc39848368810e88332bd03b083f2ce3ac commit\trefs/patches/master/add\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/patches/master/modify\n+% guilt push\n+Applying patch..remove\n+Patch applied.\n+% git for-each-ref\n+ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit\trefs/heads/master\n+37d588cc39848368810e88332bd03b083f2ce3ac commit\trefs/patches/master/add\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/patches/master/modify\n+ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit\trefs/patches/master/remove\n+% guilt pop\n+Now at add.\n+% git for-each-ref\n+37d588cc39848368810e88332bd03b083f2ce3ac commit\trefs/heads/master\n+37d588cc39848368810e88332bd03b083f2ce3ac commit\trefs/patches/master/add\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/patches/master/modify\n+% guilt pop\n+Now at modify.\n+% git for-each-ref\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/heads/master\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/patches/master/modify\n+% guilt push\n+Applying patch..add\n+Patch applied.\n+% git for-each-ref\n+37d588cc39848368810e88332bd03b083f2ce3ac commit\trefs/heads/master\n+37d588cc39848368810e88332bd03b083f2ce3ac commit\trefs/patches/master/add\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/patches/master/modify\n+% guilt pop\n+Now at modify.\n+% git for-each-ref\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/heads/master\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/patches/master/modify\n+% guilt pop\n+All patches popped.\n+% git for-each-ref\n+d4850419ccc1146c7169f500725ce504b9774ed0 commit\trefs/heads/master\n+% guilt push\n+Applying patch..modify\n+Patch applied.\n+% git for-each-ref\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/heads/master\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/patches/master/modify\n+% guilt pop\n+All patches popped.\n+% git for-each-ref\n+d4850419ccc1146c7169f500725ce504b9774ed0 commit\trefs/heads/master\n+% guilt pop\n+No patches applied.\n+% git for-each-ref\n+d4850419ccc1146c7169f500725ce504b9774ed0 commit\trefs/heads/master\n+% guilt push\n+Applying patch..modify\n+Patch applied.\n+% git for-each-ref\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/heads/master\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/patches/master/modify\n+% guilt pop\n+All patches popped.\n+% git for-each-ref\n+d4850419ccc1146c7169f500725ce504b9774ed0 commit\trefs/heads/master\n+% guilt push -a\n+Applying patch..modify\n+Patch applied.\n+Applying patch..add\n+Patch applied.\n+Applying patch..remove\n+Patch applied.\n+Applying patch..mode\n+Patch applied.\n+% git for-each-ref\n+ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit\trefs/heads/master\n+37d588cc39848368810e88332bd03b083f2ce3ac commit\trefs/patches/master/add\n+ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit\trefs/patches/master/mode\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/patches/master/modify\n+ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit\trefs/patches/master/remove\n+% guilt pop -a\n+All patches popped.\n+% git for-each-ref\n+d4850419ccc1146c7169f500725ce504b9774ed0 commit\trefs/heads/master\n+% guilt push add\n+Applying patch..modify\n+Patch applied.\n+Applying patch..add\n+Patch applied.\n+% git for-each-ref\n+37d588cc39848368810e88332bd03b083f2ce3ac commit\trefs/heads/master\n+37d588cc39848368810e88332bd03b083f2ce3ac commit\trefs/patches/master/add\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/patches/master/modify\n+% guilt branch topic\n+Switched to branch \"topic\"\n+% git for-each-ref\n+37d588cc39848368810e88332bd03b083f2ce3ac commit\trefs/heads/master\n+37d588cc39848368810e88332bd03b083f2ce3ac commit\trefs/heads/topic\n+37d588cc39848368810e88332bd03b083f2ce3ac commit\trefs/patches/master/add\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/patches/master/modify\n+37d588cc39848368810e88332bd03b083f2ce3ac commit\trefs/patches/topic/add\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/patches/topic/modify\n+% guilt pop -a\n+All patches popped.\n+% guilt push\n+Applying patch..modify\n+Patch applied.\n+% git for-each-ref\n+37d588cc39848368810e88332bd03b083f2ce3ac commit\trefs/heads/master\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/heads/topic\n+37d588cc39848368810e88332bd03b083f2ce3ac commit\trefs/patches/master/add\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/patches/master/modify\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/patches/topic/modify\n+% guilt pop -a\n+All patches popped.\n+% git checkout master\n+Switched to branch \"master\"\n+% guilt pop -a\n+All patches popped.\n+% git branch -d topic\n+Deleted branch topic (was d485041).\n+% rm -r .git/patches/topic\n+% git for-each-ref\n+d4850419ccc1146c7169f500725ce504b9774ed0 commit\trefs/heads/master\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+d .git/refs/patches/topic\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/status\n+% guilt push -a\n+Applying patch..modify\n+Patch applied.\n+Applying patch..add\n+Patch applied.\n+Applying patch..remove\n+Patch applied.\n+Applying patch..mode\n+Patch applied.\n+% guilt branch topic\n+Switched to branch \"topic\"\n+% git for-each-ref\n+ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit\trefs/heads/master\n+ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit\trefs/heads/topic\n+37d588cc39848368810e88332bd03b083f2ce3ac commit\trefs/patches/master/add\n+ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit\trefs/patches/master/mode\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/patches/master/modify\n+ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit\trefs/patches/master/remove\n+37d588cc39848368810e88332bd03b083f2ce3ac commit\trefs/patches/topic/add\n+ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit\trefs/patches/topic/mode\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/patches/topic/modify\n+ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit\trefs/patches/topic/remove\n+% guilt pop -a\n+All patches popped.\n+% git checkout master\n+Switched to branch \"master\"\n+% guilt pop -a\n+All patches popped.\n+% git branch -d topic\n+Deleted branch topic (was d485041).\n+% rm -r .git/patches/topic\n+% git for-each-ref\n+d4850419ccc1146c7169f500725ce504b9774ed0 commit\trefs/heads/master\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+d .git/refs/patches/topic\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/status\n+% guilt branch topic\n+Switched to branch \"topic\"\n+% git for-each-ref\n+d4850419ccc1146c7169f500725ce504b9774ed0 commit\trefs/heads/master\n+d4850419ccc1146c7169f500725ce504b9774ed0 commit\trefs/heads/topic\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/patches/topic\n+d .git/refs/patches\n+d .git/refs/patches/master\n+d .git/refs/patches/topic\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/topic/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/topic/remove\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/topic/add\n+f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n+f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/topic/series\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/topic/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/status\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/topic/status\n+% guilt pop -a\n+No patches applied.\n+% git checkout master\n+Switched to branch \"master\"\n+% guilt pop -a\n+No patches applied.\n+% git branch -d topic\n+Deleted branch topic (was d485041).\n+% rm -r .git/patches/topic\n+% git for-each-ref\n+d4850419ccc1146c7169f500725ce504b9774ed0 commit\trefs/heads/master\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+d .git/refs/patches/topic\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/status\n+% guilt push -a\n+Applying patch..modify\n+Patch applied.\n+Applying patch..add\n+Patch applied.\n+Applying patch..remove\n+Patch applied.\n+Applying patch..mode\n+Patch applied.\n+% guilt branch topic\n+Switched to branch \"topic\"\n+% git for-each-ref\n+ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit\trefs/heads/master\n+ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit\trefs/heads/topic\n+37d588cc39848368810e88332bd03b083f2ce3ac commit\trefs/patches/master/add\n+ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit\trefs/patches/master/mode\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/patches/master/modify\n+ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit\trefs/patches/master/remove\n+37d588cc39848368810e88332bd03b083f2ce3ac commit\trefs/patches/topic/add\n+ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit\trefs/patches/topic/mode\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/patches/topic/modify\n+ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit\trefs/patches/topic/remove\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/patches/topic\n+d .git/refs/patches\n+d .git/refs/patches/master\n+d .git/refs/patches/topic\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/topic/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/topic/remove\n+f 71596bf71b72c2717e1aee378aabefbfa19ab7c8  .git/patches/master/status\n+f 71596bf71b72c2717e1aee378aabefbfa19ab7c8  .git/patches/topic/status\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/topic/add\n+f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n+f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/topic/series\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/topic/modify\n+r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n+r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/topic/modify\n+r 37d588cc39848368810e88332bd03b083f2ce3ac  .git/refs/patches/master/add\n+r 37d588cc39848368810e88332bd03b083f2ce3ac  .git/refs/patches/topic/add\n+r ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba  .git/refs/patches/master/mode\n+r ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba  .git/refs/patches/topic/mode\n+r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9  .git/refs/patches/master/remove\n+r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9  .git/refs/patches/topic/remove\n+% guilt pop -a\n+All patches popped.\n+% git for-each-ref\n+ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit\trefs/heads/master\n+d4850419ccc1146c7169f500725ce504b9774ed0 commit\trefs/heads/topic\n+37d588cc39848368810e88332bd03b083f2ce3ac commit\trefs/patches/master/add\n+ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit\trefs/patches/master/mode\n+33633e7a1aa31972f125878baf7807be57b1672d commit\trefs/patches/master/modify\n+ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit\trefs/patches/master/remove\n+% guilt pop -a\n+No patches applied.\n+% git checkout master\n+Switched to branch \"master\"\n+% guilt pop -a\n+All patches popped.\n+% git branch -d topic\n+Deleted branch topic (was d485041).\n+% rm -r .git/patches/topic\n+% git for-each-ref\n+d4850419ccc1146c7169f500725ce504b9774ed0 commit\trefs/heads/master\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+d .git/refs/patches/topic\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/status\n+% guilt new newpatch\n+% git for-each-ref --format=%(refname)\n+refs/heads/master\n+refs/patches/master/newpatch\n+% guilt pop\n+All patches popped.\n+% guilt push\n+Applying patch..newpatch\n+Patch applied.\n+% git for-each-ref\n+25465dc1687f3833ecbd4e8bca437e522d7026db commit\trefs/heads/master\n+25465dc1687f3833ecbd4e8bca437e522d7026db commit\trefs/patches/master/newpatch\n+% git branch\n+* master\n+% guilt applied\n+newpatch\n+% guilt commit -a\n+% git for-each-ref\n+25465dc1687f3833ecbd4e8bca437e522d7026db commit\trefs/heads/master\n+% git branch\n+* master\n+% guilt push -a\n+Applying patch..modify\n+Patch applied.\n+Applying patch..add\n+Patch applied.\n+Applying patch..remove\n+Patch applied.\n+Applying patch..mode\n+Patch applied.\n+% guilt applied\n+modify\n+add\n+remove\n+mode\n+% git branch\n+* master\n+% git for-each-ref\n+fefbdcef61022d473838926619f31e030dd04fdc commit\trefs/heads/master\n+5effcbeb303e8433935151d8c69f3bf63db1e8ef commit\trefs/patches/master/add\n+fefbdcef61022d473838926619f31e030dd04fdc commit\trefs/patches/master/mode\n+9509f22e2e627756d87b42432931c45955b74234 commit\trefs/patches/master/modify\n+9cbe2fc643b1a9e2179a8738f80424a1c2aa202d commit\trefs/patches/master/remove\n+% guilt commit -n 2\n+% git for-each-ref\n+fefbdcef61022d473838926619f31e030dd04fdc commit\trefs/heads/master\n+fefbdcef61022d473838926619f31e030dd04fdc commit\trefs/patches/master/mode\n+9cbe2fc643b1a9e2179a8738f80424a1c2aa202d commit\trefs/patches/master/remove\n+% git branch\n+* master\n+% guilt commit -n 2\n+% git for-each-ref\n+fefbdcef61022d473838926619f31e030dd04fdc commit\trefs/heads/master\n+% git branch\n+* master\n+% guilt series\ndiff --git a/regression/t-062.sh b/regression/t-062.sh\nnew file mode 100755\nindex 0000000..7656766\n--- /dev/null\n+++ b/regression/t-062.sh\n@@ -0,0 +1,130 @@\n+#!/bin/bash\n+#\n+# Test that the guilt.reusebranch=true setting works.\n+#\n+\n+source $REG_DIR/scaffold\n+\n+remove_topic() {\n+\tcmd guilt pop -a\n+\tif git rev-parse --verify --quiet guilt/master >/dev/null; then\n+\t\tcmd git checkout guilt/master\n+\telse\n+\t\tcmd git checkout master\n+\tfi\n+\tcmd guilt pop -a\n+\tcmd git branch -d $1\n+\tcmd rm -r .git/patches/$1\n+\tcmd git for-each-ref\n+\tcmd list_files\n+}\n+\n+function fixup_time_info\n+{\n+\ttouch -a -m -t \"$TOUCH_DATE\" \".git/patches/master/$1\"\n+}\n+\n+cmd setup_repo\n+\n+cmd git config guilt.reusebranch true\n+\n+cmd guilt push -a\n+cmd list_files\n+cmd git for-each-ref\n+\n+for i in `seq 5`; do\n+\tif [ $i -ge 5 ]; then\n+\t\tshouldfail guilt pop\n+\telse\n+\t\tcmd guilt pop\n+\tfi\n+\tcmd git for-each-ref\n+\tcmd guilt push\n+\tcmd git for-each-ref\n+\tcmd guilt pop\n+\tcmd git for-each-ref\n+done\n+\n+# Check that \"pop -a\" properly pops all patches.\n+cmd guilt push -a\n+cmd git for-each-ref\n+cmd guilt pop -a\n+cmd git for-each-ref\n+\n+# Check that pushing two patches converts the repo to now-style (since\n+# it currently has no patches applied).\n+cmd guilt push add\n+cmd git for-each-ref\n+\n+# Check guilt branch with a few patches applied.\n+cmd guilt branch topic\n+cmd git for-each-ref\n+\n+# Check that the topic branch is converted to new-style.\n+cmd guilt pop -a\n+cmd guilt push\n+cmd git for-each-ref\n+\n+remove_topic topic\n+\n+# Check guilt branch with the full patch series applied.\n+cmd guilt push -a\n+cmd guilt branch topic\n+cmd git for-each-ref\n+\n+remove_topic topic\n+\n+# Check guilt branch with no patches applied.\n+# This gives us a new-style checkout.\n+cmd guilt branch topic\n+cmd git for-each-ref\n+cmd list_files\n+\n+remove_topic topic\n+\n+# Check guilt branch in a new-style directory with all patches\n+# applied.  (Strictly speaking, this test should probably move to a\n+# file devoted to testing \"guilt branch\".)\n+cmd guilt push -a\n+cmd guilt branch topic\n+cmd git for-each-ref\n+cmd list_files\n+cmd guilt pop -a\n+cmd git for-each-ref\n+\n+remove_topic topic\n+\n+# Check that \"guilt new\" does the right thing when no patches are\n+# applied.  (Strictly speaking, this test should maybe move to\n+# t-025.sh).\n+\n+cmd guilt new newpatch\n+cmd git for-each-ref '--format=%(refname)'\n+cmd guilt pop\n+fixup_time_info newpatch\n+cmd guilt push\n+cmd git for-each-ref\n+\n+# Check that \"guilt commit\" does the right thing when committing all\n+# applied patches.  (Strictly speaking, this test should maybe move to\n+# t-030.sh).\n+cmd git branch\n+cmd guilt applied\n+cmd guilt commit -a\n+cmd git for-each-ref\n+cmd git branch\n+\n+# Check that \"guilt commit\" does the right thing when committing only\n+# a few of the applied patches.  (Strictly speaking, this test should\n+# maybe move to t-030.sh).\n+cmd guilt push -a\n+cmd guilt applied\n+cmd git branch\n+cmd git for-each-ref\n+cmd guilt commit -n 2\n+cmd git for-each-ref\n+cmd git branch\n+cmd guilt commit -n 2\n+cmd git for-each-ref\n+cmd git branch\n+cmd guilt series\n-- \n1.8.3.1\n"},{"id":"242126","messageId":"1400450409-30998-31-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 30/33] Added a short style guide, and Emacs settings.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T22:00:06Z","receivedAt":"2014-05-18T22:00:06Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"Signed-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n .dir-locals.el             |  3 +++\n Documentation/Contributing | 15 +++++++++++++++\n 2 files changed, 18 insertions(+)\n create mode 100644 .dir-locals.el\n\ndiff --git a/.dir-locals.el b/.dir-locals.el\nnew file mode 100644\nindex 0000000..50ef2b7\n--- /dev/null\n+++ b/.dir-locals.el\n@@ -0,0 +1,3 @@\n+((nil . ((indent-tabs-mode . t)\n+\t (tab-width . 8)))\n+ (sh-mode . ((sh-basic-offset . 8))))\ndiff --git a/Documentation/Contributing b/Documentation/Contributing\nindex abf3480..0da49d6 100644\n--- a/Documentation/Contributing\n+++ b/Documentation/Contributing\n@@ -4,6 +4,21 @@ Documentation/SubmittingPatches file. :)\n \n 1) Hack on the code a bit\n \n+Please follow this style guide:\n+\n+ - Use tabs for indentation.\n+\n+ - Put \"then\" on the same line as \"if\".\n+\n+ - Follow the style of the existing code, except if it breaks the\n+   above guidlines.\n+\n+ - If you change the code to conform to the style guide, please do so\n+   in a separate commit that does not change anything else.\n+\n+Please check that you change does not break \"make test\".  Please add\n+new testcases for any new functionality, and if you fix a bug.\n+\n 2) Make a patch:\n \n Use \"diff -up\" or \"diff -uprN\" to create patches. Or simply use git to\n-- \n1.8.3.1\n"},{"id":"242127","messageId":"1400450409-30998-32-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 31/33] Don't use \"git log -p\" in the test suite.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T22:00:07Z","receivedAt":"2014-05-18T22:00:07Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"The exact format of \"git log -p\" may change due to user configuration,\nand even if the test suite can try to set all configuration that\ninfluences the format explicitly it is hard to guard against future\nchanges in git.  Since we already run \"cmd list_files\" immediately\nbefore all instances of running \"git log -p\", we are still assured\nthat the history contains what we expect.\n\nThere was one instance in t-021.sh where \"cmd git log -p\" were not\npreceded by \"cmd list_files\".\n\nSigned-off-by: Per Cederqvist <cederp@opera.com>\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n---\n regression/t-020.out | 1000 --------------------------------------------------\n regression/t-020.sh  |   16 -\n regression/t-021.out |  899 +--------------------------------------------\n regression/t-021.sh  |   10 +-\n 4 files changed, 16 insertions(+), 1909 deletions(-)\n\ndiff --git a/regression/t-020.out b/regression/t-020.out\nindex bcb8797..5d7c918 100644\n--- a/regression/t-020.out\n+++ b/regression/t-020.out\n@@ -14,36 +14,6 @@ f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n-% git log -p\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt push\n Applying patch..add\n Patch applied.\n@@ -60,51 +30,6 @@ f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n r 37d588cc39848368810e88332bd03b083f2ce3ac  .git/refs/patches/master/add\n-% git log -p\n-commit 37d588cc39848368810e88332bd03b083f2ce3ac\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch add\n-\n-diff --git a/abd b/abd\n-new file mode 100644\n-index 0000000..fd3896d\n---- /dev/null\n-+++ b/abd\n-@@ -0,0 +1 @@\n-+öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt push\n Applying patch..remove\n Patch applied.\n@@ -122,66 +47,6 @@ f f322f08d907e3737a4321b0ec90bc545f71af7cf  .git/patches/master/status\n r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n r 37d588cc39848368810e88332bd03b083f2ce3ac  .git/refs/patches/master/add\n r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9  .git/refs/patches/master/remove\n-% git log -p\n-commit ffb7faa126a6d91bcdd44a494f76b96dd860b8b9\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch remove\n-\n-diff --git a/abd b/abd\n-deleted file mode 100644\n-index fd3896d..0000000\n---- a/abd\n-+++ /dev/null\n-@@ -1 +0,0 @@\n--öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 37d588cc39848368810e88332bd03b083f2ce3ac\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch add\n-\n-diff --git a/abd b/abd\n-new file mode 100644\n-index 0000000..fd3896d\n---- /dev/null\n-+++ b/abd\n-@@ -0,0 +1 @@\n-+öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt push\n Applying patch..mode\n Patch applied.\n@@ -200,76 +65,6 @@ r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n r 37d588cc39848368810e88332bd03b083f2ce3ac  .git/refs/patches/master/add\n r ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba  .git/refs/patches/master/mode\n r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9  .git/refs/patches/master/remove\n-% git log -p\n-commit ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch mode\n-\n-diff --git a/def b/def\n-old mode 100644\n-new mode 100755\n-\n-commit ffb7faa126a6d91bcdd44a494f76b96dd860b8b9\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch remove\n-\n-diff --git a/abd b/abd\n-deleted file mode 100644\n-index fd3896d..0000000\n---- a/abd\n-+++ /dev/null\n-@@ -1 +0,0 @@\n--öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 37d588cc39848368810e88332bd03b083f2ce3ac\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch add\n-\n-diff --git a/abd b/abd\n-new file mode 100644\n-index 0000000..fd3896d\n---- /dev/null\n-+++ b/abd\n-@@ -0,0 +1 @@\n-+öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt push\n File series fully applied, ends at patch mode\n % guilt push -a\n@@ -289,76 +84,6 @@ r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n r 37d588cc39848368810e88332bd03b083f2ce3ac  .git/refs/patches/master/add\n r ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba  .git/refs/patches/master/mode\n r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9  .git/refs/patches/master/remove\n-% git log -p\n-commit ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch mode\n-\n-diff --git a/def b/def\n-old mode 100644\n-new mode 100755\n-\n-commit ffb7faa126a6d91bcdd44a494f76b96dd860b8b9\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch remove\n-\n-diff --git a/abd b/abd\n-deleted file mode 100644\n-index fd3896d..0000000\n---- a/abd\n-+++ /dev/null\n-@@ -1 +0,0 @@\n--öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 37d588cc39848368810e88332bd03b083f2ce3ac\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch add\n-\n-diff --git a/abd b/abd\n-new file mode 100644\n-index 0000000..fd3896d\n---- /dev/null\n-+++ b/abd\n-@@ -0,0 +1 @@\n-+öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt pop --all\n All patches popped.\n % guilt push\n@@ -376,36 +101,6 @@ f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n-% git log -p\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt pop --all\n All patches popped.\n % guilt push\n@@ -423,36 +118,6 @@ f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n-% git log -p\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt pop --all\n All patches popped.\n % guilt push\n@@ -470,36 +135,6 @@ f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n-% git log -p\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt pop --all\n All patches popped.\n % guilt push\n@@ -517,36 +152,6 @@ f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n-% git log -p\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt pop --all\n All patches popped.\n % guilt push\n@@ -564,36 +169,6 @@ f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n-% git log -p\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt push\n Applying patch..add\n Patch applied.\n@@ -610,51 +185,6 @@ f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n r 37d588cc39848368810e88332bd03b083f2ce3ac  .git/refs/patches/master/add\n-% git log -p\n-commit 37d588cc39848368810e88332bd03b083f2ce3ac\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch add\n-\n-diff --git a/abd b/abd\n-new file mode 100644\n-index 0000000..fd3896d\n---- /dev/null\n-+++ b/abd\n-@@ -0,0 +1 @@\n-+öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt push\n Applying patch..remove\n Patch applied.\n@@ -672,66 +202,6 @@ f f322f08d907e3737a4321b0ec90bc545f71af7cf  .git/patches/master/status\n r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n r 37d588cc39848368810e88332bd03b083f2ce3ac  .git/refs/patches/master/add\n r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9  .git/refs/patches/master/remove\n-% git log -p\n-commit ffb7faa126a6d91bcdd44a494f76b96dd860b8b9\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch remove\n-\n-diff --git a/abd b/abd\n-deleted file mode 100644\n-index fd3896d..0000000\n---- a/abd\n-+++ /dev/null\n-@@ -1 +0,0 @@\n--öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 37d588cc39848368810e88332bd03b083f2ce3ac\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch add\n-\n-diff --git a/abd b/abd\n-new file mode 100644\n-index 0000000..fd3896d\n---- /dev/null\n-+++ b/abd\n-@@ -0,0 +1 @@\n-+öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt push\n Applying patch..mode\n Patch applied.\n@@ -750,76 +220,6 @@ r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n r 37d588cc39848368810e88332bd03b083f2ce3ac  .git/refs/patches/master/add\n r ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba  .git/refs/patches/master/mode\n r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9  .git/refs/patches/master/remove\n-% git log -p\n-commit ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch mode\n-\n-diff --git a/def b/def\n-old mode 100644\n-new mode 100755\n-\n-commit ffb7faa126a6d91bcdd44a494f76b96dd860b8b9\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch remove\n-\n-diff --git a/abd b/abd\n-deleted file mode 100644\n-index fd3896d..0000000\n---- a/abd\n-+++ /dev/null\n-@@ -1 +0,0 @@\n--öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 37d588cc39848368810e88332bd03b083f2ce3ac\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch add\n-\n-diff --git a/abd b/abd\n-new file mode 100644\n-index 0000000..fd3896d\n---- /dev/null\n-+++ b/abd\n-@@ -0,0 +1 @@\n-+öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt pop --all\n All patches popped.\n % guilt push -n -2\n@@ -835,22 +235,6 @@ f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/status\n-% git log -p\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt pop --all\n No patches applied.\n % guilt push -n -1\n@@ -866,22 +250,6 @@ f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/status\n-% git log -p\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt pop --all\n No patches applied.\n % guilt push -n 0\n@@ -897,22 +265,6 @@ f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/status\n-% git log -p\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt pop --all\n No patches applied.\n % guilt push -n 1\n@@ -930,36 +282,6 @@ f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n-% git log -p\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt pop --all\n All patches popped.\n % guilt push -n 2\n@@ -980,51 +302,6 @@ f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n r 37d588cc39848368810e88332bd03b083f2ce3ac  .git/refs/patches/master/add\n-% git log -p\n-commit 37d588cc39848368810e88332bd03b083f2ce3ac\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch add\n-\n-diff --git a/abd b/abd\n-new file mode 100644\n-index 0000000..fd3896d\n---- /dev/null\n-+++ b/abd\n-@@ -0,0 +1 @@\n-+öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt pop --all\n All patches popped.\n % guilt push -n 3\n@@ -1048,66 +325,6 @@ f f322f08d907e3737a4321b0ec90bc545f71af7cf  .git/patches/master/status\n r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n r 37d588cc39848368810e88332bd03b083f2ce3ac  .git/refs/patches/master/add\n r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9  .git/refs/patches/master/remove\n-% git log -p\n-commit ffb7faa126a6d91bcdd44a494f76b96dd860b8b9\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch remove\n-\n-diff --git a/abd b/abd\n-deleted file mode 100644\n-index fd3896d..0000000\n---- a/abd\n-+++ /dev/null\n-@@ -1 +0,0 @@\n--öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 37d588cc39848368810e88332bd03b083f2ce3ac\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch add\n-\n-diff --git a/abd b/abd\n-new file mode 100644\n-index 0000000..fd3896d\n---- /dev/null\n-+++ b/abd\n-@@ -0,0 +1 @@\n-+öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt pop --all\n All patches popped.\n % guilt push -n 4\n@@ -1134,76 +351,6 @@ r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n r 37d588cc39848368810e88332bd03b083f2ce3ac  .git/refs/patches/master/add\n r ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba  .git/refs/patches/master/mode\n r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9  .git/refs/patches/master/remove\n-% git log -p\n-commit ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch mode\n-\n-diff --git a/def b/def\n-old mode 100644\n-new mode 100755\n-\n-commit ffb7faa126a6d91bcdd44a494f76b96dd860b8b9\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch remove\n-\n-diff --git a/abd b/abd\n-deleted file mode 100644\n-index fd3896d..0000000\n---- a/abd\n-+++ /dev/null\n-@@ -1 +0,0 @@\n--öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 37d588cc39848368810e88332bd03b083f2ce3ac\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch add\n-\n-diff --git a/abd b/abd\n-new file mode 100644\n-index 0000000..fd3896d\n---- /dev/null\n-+++ b/abd\n-@@ -0,0 +1 @@\n-+öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt pop --all\n All patches popped.\n % list_files\n@@ -1236,28 +383,6 @@ f d15a1d2d34493f790c78ddacb8815b0b9536ee2b  .git/patches/master/series\n f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty.patch\n f e90b964f01cbef60bbe00c38c55d9ea86618a66a  .git/patches/master/status\n r c7a139f532a43c3c8b0e068cac04f8f6af0f94e1  .git/refs/patches/master/empty.patch\n-% git log -p\n-commit c7a139f532a43c3c8b0e068cac04f8f6af0f94e1\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch empty.patch\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % git config guilt.diffstat true\n % guilt refresh\n Patch empty.patch refreshed\n@@ -1280,28 +405,6 @@ f d15a1d2d34493f790c78ddacb8815b0b9536ee2b  .git/patches/master/series\n f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty.patch~\n f e90b964f01cbef60bbe00c38c55d9ea86618a66a  .git/patches/master/status\n r c7a139f532a43c3c8b0e068cac04f8f6af0f94e1  .git/refs/patches/master/empty.patch\n-% git log -p\n-commit c7a139f532a43c3c8b0e068cac04f8f6af0f94e1\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch empty.patch\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % git config guilt.diffstat false\n % guilt pop\n All patches popped.\n@@ -1322,35 +425,6 @@ f d15a1d2d34493f790c78ddacb8815b0b9536ee2b  .git/patches/master/series\n f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/empty.patch~\n f e90b964f01cbef60bbe00c38c55d9ea86618a66a  .git/patches/master/status\n r 8ed27228b117c0c88abf3d586bcc43c68e975cea  .git/refs/patches/master/empty.patch\n-% git log -p\n-commit 8ed27228b117c0c88abf3d586bcc43c68e975cea\n-Author: Per Cederqvist <ceder@lysator.liu.se>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    Fix a bug.\n-    \n-    This commit fixes a serious bug.\n-    \n-    FIXME:\n-        - add a test case\n-        - track down the bug\n-        - actually fix it\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % git config guilt.diffstat true\n % guilt refresh\n Patch empty.patch refreshed\n@@ -1373,35 +447,6 @@ f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n f d15a1d2d34493f790c78ddacb8815b0b9536ee2b  .git/patches/master/series\n f e90b964f01cbef60bbe00c38c55d9ea86618a66a  .git/patches/master/status\n r 8ed27228b117c0c88abf3d586bcc43c68e975cea  .git/refs/patches/master/empty.patch\n-% git log -p\n-commit 8ed27228b117c0c88abf3d586bcc43c68e975cea\n-Author: Per Cederqvist <ceder@lysator.liu.se>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    Fix a bug.\n-    \n-    This commit fixes a serious bug.\n-    \n-    FIXME:\n-        - add a test case\n-        - track down the bug\n-        - actually fix it\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % git config guilt.diffstat false\n % guilt refresh\n Patch empty.patch refreshed\n@@ -1424,35 +469,6 @@ f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n f d15a1d2d34493f790c78ddacb8815b0b9536ee2b  .git/patches/master/series\n f e90b964f01cbef60bbe00c38c55d9ea86618a66a  .git/patches/master/status\n r 8ed27228b117c0c88abf3d586bcc43c68e975cea  .git/refs/patches/master/empty.patch\n-% git log -p\n-commit 8ed27228b117c0c88abf3d586bcc43c68e975cea\n-Author: Per Cederqvist <ceder@lysator.liu.se>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    Fix a bug.\n-    \n-    This commit fixes a serious bug.\n-    \n-    FIXME:\n-        - add a test case\n-        - track down the bug\n-        - actually fix it\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt delete empty.patch\n Cannot delete an applied patch\n % guilt pop -a\n@@ -1470,19 +486,3 @@ f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/status\n-% git log -p\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\ndiff --git a/regression/t-020.sh b/regression/t-020.sh\nindex 3f70c26..2f2aa10 100755\n--- a/regression/t-020.sh\n+++ b/regression/t-020.sh\n@@ -21,8 +21,6 @@ guilt series | while read n ; do\n \tcmd guilt push\n \n \tcmd list_files\n-\n-\tcmd git log -p\n done\n \n #\n@@ -34,8 +32,6 @@ cmd guilt push -a\n \n cmd list_files\n \n-cmd git log -p\n-\n #\n # pop all\n #\n@@ -49,8 +45,6 @@ guilt series | while read n ; do\n \n \tcmd list_files\n \n-\tcmd git log -p\n-\n \tcmd guilt pop --all\n done\n \n@@ -61,8 +55,6 @@ guilt series | while read n ; do\n \tcmd guilt push $t\n \n \tcmd list_files\n-\n-\tcmd git log -p\n done\n \n #\n@@ -80,8 +72,6 @@ for n in `_seq -2 $npatches`; do\n \n \tcmd list_files\n \n-\tcmd git log -p\n-\n \tcmd guilt pop --all\n done\n \n@@ -91,14 +81,12 @@ cmd list_files\n cmd guilt new empty.patch\n fixup_time_info empty.patch\n cmd list_files\n-cmd git log -p\n \n # Ensure we can push the empty patch even when guilt.diffstat is true.\n cmd git config guilt.diffstat true\n cmd guilt refresh\n fixup_time_info empty.patch\n cmd list_files\n-cmd git log -p\n cmd git config guilt.diffstat false\n \n # Let the patch have a commit message, but no data.\n@@ -117,7 +105,6 @@ EOF\n \n fixup_time_info empty.patch\n cmd list_files\n-cmd git log -p\n \n # And once more, with an empty diffstat.\n \n@@ -125,20 +112,17 @@ cmd git config guilt.diffstat true\n cmd guilt refresh\n fixup_time_info empty.patch\n cmd list_files\n-cmd git log -p\n \n # Restore the diffstat setting and remove the empty patch.\n cmd git config guilt.diffstat false\n cmd guilt refresh\n fixup_time_info empty.patch\n cmd list_files\n-cmd git log -p\n # (Cannot delete an applied patch)\n shouldfail guilt delete empty.patch\n cmd guilt pop -a\n cmd guilt delete -f empty.patch\n cmd list_files\n-cmd git log -p\n \n # FIXME:\n #   --all\ndiff --git a/regression/t-021.out b/regression/t-021.out\nindex 58be12f..32dae17 100644\n--- a/regression/t-021.out\n+++ b/regression/t-021.out\n@@ -8,76 +8,21 @@ Applying patch..remove\n Patch applied.\n Applying patch..mode\n Patch applied.\n-% git log -p\n-commit ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch mode\n-\n-diff --git a/def b/def\n-old mode 100644\n-new mode 100755\n-\n-commit ffb7faa126a6d91bcdd44a494f76b96dd860b8b9\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch remove\n-\n-diff --git a/abd b/abd\n-deleted file mode 100644\n-index fd3896d..0000000\n---- a/abd\n-+++ /dev/null\n-@@ -1 +0,0 @@\n--öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 37d588cc39848368810e88332bd03b083f2ce3ac\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch add\n-\n-diff --git a/abd b/abd\n-new file mode 100644\n-index 0000000..fd3896d\n---- /dev/null\n-+++ b/abd\n-@@ -0,0 +1 @@\n-+öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n+% list_files\n+d .git/patches\n+d .git/patches/master\n+d .git/refs/patches\n+d .git/refs/patches/master\n+f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n+f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n+f 71596bf71b72c2717e1aee378aabefbfa19ab7c8  .git/patches/master/status\n+f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n+f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n+f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n+r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n+r 37d588cc39848368810e88332bd03b083f2ce3ac  .git/refs/patches/master/add\n+r ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba  .git/refs/patches/master/mode\n+r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9  .git/refs/patches/master/remove\n % guilt pop\n Now at remove.\n % list_files\n@@ -94,66 +39,6 @@ f f322f08d907e3737a4321b0ec90bc545f71af7cf  .git/patches/master/status\n r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n r 37d588cc39848368810e88332bd03b083f2ce3ac  .git/refs/patches/master/add\n r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9  .git/refs/patches/master/remove\n-% git log -p\n-commit ffb7faa126a6d91bcdd44a494f76b96dd860b8b9\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch remove\n-\n-diff --git a/abd b/abd\n-deleted file mode 100644\n-index fd3896d..0000000\n---- a/abd\n-+++ /dev/null\n-@@ -1 +0,0 @@\n--öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 37d588cc39848368810e88332bd03b083f2ce3ac\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch add\n-\n-diff --git a/abd b/abd\n-new file mode 100644\n-index 0000000..fd3896d\n---- /dev/null\n-+++ b/abd\n-@@ -0,0 +1 @@\n-+öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt pop\n Now at add.\n % list_files\n@@ -169,51 +54,6 @@ f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n r 37d588cc39848368810e88332bd03b083f2ce3ac  .git/refs/patches/master/add\n-% git log -p\n-commit 37d588cc39848368810e88332bd03b083f2ce3ac\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch add\n-\n-diff --git a/abd b/abd\n-new file mode 100644\n-index 0000000..fd3896d\n---- /dev/null\n-+++ b/abd\n-@@ -0,0 +1 @@\n-+öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt pop\n Now at modify.\n % list_files\n@@ -228,36 +68,6 @@ f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n-% git log -p\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt pop\n All patches popped.\n % list_files\n@@ -271,22 +81,6 @@ f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/status\n-% git log -p\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt pop\n No patches applied.\n % guilt push --all\n@@ -314,66 +108,6 @@ f f322f08d907e3737a4321b0ec90bc545f71af7cf  .git/patches/master/status\n r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n r 37d588cc39848368810e88332bd03b083f2ce3ac  .git/refs/patches/master/add\n r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9  .git/refs/patches/master/remove\n-% git log -p\n-commit ffb7faa126a6d91bcdd44a494f76b96dd860b8b9\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch remove\n-\n-diff --git a/abd b/abd\n-deleted file mode 100644\n-index fd3896d..0000000\n---- a/abd\n-+++ /dev/null\n-@@ -1 +0,0 @@\n--öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 37d588cc39848368810e88332bd03b083f2ce3ac\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch add\n-\n-diff --git a/abd b/abd\n-new file mode 100644\n-index 0000000..fd3896d\n---- /dev/null\n-+++ b/abd\n-@@ -0,0 +1 @@\n-+öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt push --all\n Applying patch..mode\n Patch applied.\n@@ -392,51 +126,6 @@ f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n r 37d588cc39848368810e88332bd03b083f2ce3ac  .git/refs/patches/master/add\n-% git log -p\n-commit 37d588cc39848368810e88332bd03b083f2ce3ac\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch add\n-\n-diff --git a/abd b/abd\n-new file mode 100644\n-index 0000000..fd3896d\n---- /dev/null\n-+++ b/abd\n-@@ -0,0 +1 @@\n-+öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt push --all\n Applying patch..remove\n Patch applied.\n@@ -456,36 +145,6 @@ f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n-% git log -p\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt push --all\n Applying patch..add\n Patch applied.\n@@ -506,22 +165,6 @@ f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/status\n-% git log -p\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt push --all\n Applying patch..modify\n Patch applied.\n@@ -547,66 +190,6 @@ f f322f08d907e3737a4321b0ec90bc545f71af7cf  .git/patches/master/status\n r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n r 37d588cc39848368810e88332bd03b083f2ce3ac  .git/refs/patches/master/add\n r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9  .git/refs/patches/master/remove\n-% git log -p\n-commit ffb7faa126a6d91bcdd44a494f76b96dd860b8b9\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch remove\n-\n-diff --git a/abd b/abd\n-deleted file mode 100644\n-index fd3896d..0000000\n---- a/abd\n-+++ /dev/null\n-@@ -1 +0,0 @@\n--öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 37d588cc39848368810e88332bd03b083f2ce3ac\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch add\n-\n-diff --git a/abd b/abd\n-new file mode 100644\n-index 0000000..fd3896d\n---- /dev/null\n-+++ b/abd\n-@@ -0,0 +1 @@\n-+öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt pop\n Now at add.\n % list_files\n@@ -622,51 +205,6 @@ f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n r 37d588cc39848368810e88332bd03b083f2ce3ac  .git/refs/patches/master/add\n-% git log -p\n-commit 37d588cc39848368810e88332bd03b083f2ce3ac\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch add\n-\n-diff --git a/abd b/abd\n-new file mode 100644\n-index 0000000..fd3896d\n---- /dev/null\n-+++ b/abd\n-@@ -0,0 +1 @@\n-+öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt pop\n Now at modify.\n % list_files\n@@ -681,36 +219,6 @@ f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n-% git log -p\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt pop\n All patches popped.\n % list_files\n@@ -724,22 +232,6 @@ f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/status\n-% git log -p\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt push --all\n Applying patch..modify\n Patch applied.\n@@ -766,76 +258,6 @@ r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n r 37d588cc39848368810e88332bd03b083f2ce3ac  .git/refs/patches/master/add\n r ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba  .git/refs/patches/master/mode\n r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9  .git/refs/patches/master/remove\n-% git log -p\n-commit ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch mode\n-\n-diff --git a/def b/def\n-old mode 100644\n-new mode 100755\n-\n-commit ffb7faa126a6d91bcdd44a494f76b96dd860b8b9\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch remove\n-\n-diff --git a/abd b/abd\n-deleted file mode 100644\n-index fd3896d..0000000\n---- a/abd\n-+++ /dev/null\n-@@ -1 +0,0 @@\n--öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 37d588cc39848368810e88332bd03b083f2ce3ac\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch add\n-\n-diff --git a/abd b/abd\n-new file mode 100644\n-index 0000000..fd3896d\n---- /dev/null\n-+++ b/abd\n-@@ -0,0 +1 @@\n-+öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt push --all\n File series fully applied, ends at patch mode\n % guilt pop -n -1\n@@ -855,76 +277,6 @@ r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n r 37d588cc39848368810e88332bd03b083f2ce3ac  .git/refs/patches/master/add\n r ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba  .git/refs/patches/master/mode\n r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9  .git/refs/patches/master/remove\n-% git log -p\n-commit ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch mode\n-\n-diff --git a/def b/def\n-old mode 100644\n-new mode 100755\n-\n-commit ffb7faa126a6d91bcdd44a494f76b96dd860b8b9\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch remove\n-\n-diff --git a/abd b/abd\n-deleted file mode 100644\n-index fd3896d..0000000\n---- a/abd\n-+++ /dev/null\n-@@ -1 +0,0 @@\n--öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 37d588cc39848368810e88332bd03b083f2ce3ac\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch add\n-\n-diff --git a/abd b/abd\n-new file mode 100644\n-index 0000000..fd3896d\n---- /dev/null\n-+++ b/abd\n-@@ -0,0 +1 @@\n-+öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt push --all\n File series fully applied, ends at patch mode\n % guilt pop -n 0\n@@ -944,76 +296,6 @@ r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n r 37d588cc39848368810e88332bd03b083f2ce3ac  .git/refs/patches/master/add\n r ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba  .git/refs/patches/master/mode\n r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9  .git/refs/patches/master/remove\n-% git log -p\n-commit ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch mode\n-\n-diff --git a/def b/def\n-old mode 100644\n-new mode 100755\n-\n-commit ffb7faa126a6d91bcdd44a494f76b96dd860b8b9\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch remove\n-\n-diff --git a/abd b/abd\n-deleted file mode 100644\n-index fd3896d..0000000\n---- a/abd\n-+++ /dev/null\n-@@ -1 +0,0 @@\n--öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 37d588cc39848368810e88332bd03b083f2ce3ac\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch add\n-\n-diff --git a/abd b/abd\n-new file mode 100644\n-index 0000000..fd3896d\n---- /dev/null\n-+++ b/abd\n-@@ -0,0 +1 @@\n-+öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt push --all\n File series fully applied, ends at patch mode\n % guilt pop -n 1\n@@ -1032,66 +314,6 @@ f f322f08d907e3737a4321b0ec90bc545f71af7cf  .git/patches/master/status\n r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n r 37d588cc39848368810e88332bd03b083f2ce3ac  .git/refs/patches/master/add\n r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9  .git/refs/patches/master/remove\n-% git log -p\n-commit ffb7faa126a6d91bcdd44a494f76b96dd860b8b9\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch remove\n-\n-diff --git a/abd b/abd\n-deleted file mode 100644\n-index fd3896d..0000000\n---- a/abd\n-+++ /dev/null\n-@@ -1 +0,0 @@\n--öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 37d588cc39848368810e88332bd03b083f2ce3ac\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch add\n-\n-diff --git a/abd b/abd\n-new file mode 100644\n-index 0000000..fd3896d\n---- /dev/null\n-+++ b/abd\n-@@ -0,0 +1 @@\n-+öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt push --all\n Applying patch..mode\n Patch applied.\n@@ -1110,51 +332,6 @@ f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n r 37d588cc39848368810e88332bd03b083f2ce3ac  .git/refs/patches/master/add\n-% git log -p\n-commit 37d588cc39848368810e88332bd03b083f2ce3ac\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch add\n-\n-diff --git a/abd b/abd\n-new file mode 100644\n-index 0000000..fd3896d\n---- /dev/null\n-+++ b/abd\n-@@ -0,0 +1 @@\n-+öu\u001bØ\u0014½\u0004á\u001aZâñeÏÈE£\u0006\u001fWÀV¼/\u0003U?Ú<|\u0013\u0012¢@6¤8'H¸1G_Í§*·\u0012ðRÒ¤\nªÂ~·\n-\\ No newline at end of file\n-\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt push --all\n Applying patch..remove\n Patch applied.\n@@ -1174,36 +351,6 @@ f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n r 33633e7a1aa31972f125878baf7807be57b1672d  .git/refs/patches/master/modify\n-% git log -p\n-commit 33633e7a1aa31972f125878baf7807be57b1672d\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    patch modify\n-\n-diff --git a/def b/def\n-index 8baef1b..7d69c2f 100644\n---- a/def\n-+++ b/def\n-@@ -1 +1,2 @@\n- abc\n-+asjhfksad\n-\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt push --all\n Applying patch..add\n Patch applied.\n@@ -1224,22 +371,6 @@ f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n f bacb4aad8a55fe4e7aa58a9ae169990bb764069f  .git/patches/master/series\n f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/status\n-% git log -p\n-commit d4850419ccc1146c7169f500725ce504b9774ed0\n-Author: Author Name <author@email>\n-Date:   Mon Jan 1 00:00:00 2007 +0000\n-\n-    initial\n-    \n-    Signed-off-by: Commiter Name <commiter@email>\n-\n-diff --git a/def b/def\n-new file mode 100644\n-index 0000000..8baef1b\n---- /dev/null\n-+++ b/def\n-@@ -0,0 +1 @@\n-+abc\n % guilt push --all\n Applying patch..modify\n Patch applied.\ndiff --git a/regression/t-021.sh b/regression/t-021.sh\nindex e0d2dc1..2873234 100755\n--- a/regression/t-021.sh\n+++ b/regression/t-021.sh\n@@ -9,7 +9,7 @@ cmd setup_repo\n \n cmd guilt push --all\n \n-cmd git log -p\n+cmd list_files\n \n #\n # incremental pop by 1\n@@ -18,8 +18,6 @@ guilt series | _tac | while read n ; do\n \tcmd guilt pop\n \n \tcmd list_files\n-\n-\tcmd git log -p\n done\n \n #\n@@ -41,8 +39,6 @@ guilt series | _tac | while read n ; do\n \n \tcmd list_files\n \n-\tcmd git log -p\n-\n \tcmd guilt push --all\n done\n \n@@ -53,8 +49,6 @@ guilt series | _tac | while read n ; do\n \tcmd guilt pop $t\n \n \tcmd list_files\n-\n-\tcmd git log -p\n done\n \n #\n@@ -72,8 +66,6 @@ for n in `_seq -2 $npatches`; do\n \n \tcmd list_files\n \n-\tcmd git log -p\n-\n \tcmd guilt push --all\n done\n \n-- \n1.8.3.1\n"},{"id":"242128","messageId":"1400450409-30998-33-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 32/33] Improved doc and tests for guilt header.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T22:00:08Z","receivedAt":"2014-05-18T22:00:08Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"---\n Documentation/guilt-header.txt | 5 ++++-\n regression/t-028.out           | 9 +++++++++\n regression/t-028.sh            | 3 +++\n 3 files changed, 16 insertions(+), 1 deletion(-)\n\ndiff --git a/Documentation/guilt-header.txt b/Documentation/guilt-header.txt\nindex 870bfaf..71b2e66 100644\n--- a/Documentation/guilt-header.txt\n+++ b/Documentation/guilt-header.txt\n@@ -18,7 +18,10 @@ Prints either the topmost patch's header or the header of a specified patch.\n -E::\n \tOpen the raw patch in an editor, instead of printing it.\n <patchname>::\n-\tName of the patch.\n+\tName of the patch. If a patch with exactly this name exists,\n+\tuse it. Otherwise, treat the name as a regexp; if the regexp\n+\tmatches a single patch, use it. Otherwise, list all matching\n+\tpatch names to stderr and fail.\n \n Author\n ------\ndiff --git a/regression/t-028.out b/regression/t-028.out\nindex ea72a3a..39ac900 100644\n--- a/regression/t-028.out\n+++ b/regression/t-028.out\n@@ -56,3 +56,12 @@ Patch non-existant is not in the series\n   remove\n   mode\n   patch-with-some-desc\n+% guilt header de\n+de does not uniquely identify a patch. Did you mean any of these?\n+  mode\n+  patch-with-some-desc\n+% guilt header des\n+blah blah blah\n+\n+Signed-off-by: Commiter Name <commiter@email>\n+\ndiff --git a/regression/t-028.sh b/regression/t-028.sh\nindex 2ce0378..cd3088c 100755\n--- a/regression/t-028.sh\n+++ b/regression/t-028.sh\n@@ -35,4 +35,7 @@ shouldfail guilt header non-existant\n # patch name is a regexp that just happens to match an existing patch.\n shouldfail guilt header '.*'\n \n+shouldfail guilt header de\n+cmd guilt header des\n+\n # FIXME: how do we check that -e works?\n-- \n1.8.3.1\n"},{"id":"242129","messageId":"1400450409-30998-34-git-send-email-cederp@opera.com","threadId":"36691","inReplyTo":"1400450409-30998-1-git-send-email-cederp@opera.com","subject":"[GUILT v4 33/33] Document the exit status of guilt push and guilt pop.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2014-05-18T22:00:09Z","receivedAt":"2014-05-18T22:00:09Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"---\n Documentation/guilt-pop.txt  | 3 +++\n Documentation/guilt-push.txt | 3 +++\n 2 files changed, 6 insertions(+)\n\ndiff --git a/Documentation/guilt-pop.txt b/Documentation/guilt-pop.txt\nindex 36fea9e..b0b89cc 100644\n--- a/Documentation/guilt-pop.txt\n+++ b/Documentation/guilt-pop.txt\n@@ -26,6 +26,9 @@ OPTIONS\n \n If no patchname is given, pop the top-most patch.\n \n+Exit with a non-zero exit status if requested to pop more patches\n+than there are on the stack.\n+\n Author\n ------\n Written by Josef \"Jeff\" Sipek <jeffpc@josefsipek.net>\ndiff --git a/Documentation/guilt-push.txt b/Documentation/guilt-push.txt\nindex 6ee86b9..6439f21 100644\n--- a/Documentation/guilt-push.txt\n+++ b/Documentation/guilt-push.txt\n@@ -26,6 +26,9 @@ OPTIONS\n \n If no patchname is given, push the next patch in the series onto the tree.\n \n+Exit with a non-zero exit status if requested to push more patches\n+than there are in the series.\n+\n Author\n ------\n Written by Josef \"Jeff\" Sipek <jeffpc@josefsipek.net>\n-- \n1.8.3.1\n"},{"id":"255095","messageId":"20150122135602.GA101460@meili.jeffnet.31bits.net","threadId":"36691","inReplyTo":"1400450409-30998-33-git-send-email-cederp@opera.com","subject":"Re: [GUILT v4 32/33] Improved doc and tests for guilt header.","fromName":"Jeff Sipek","fromEmail":"jeffpc@josefsipek.net","sentAt":"2015-01-22T13:56:02Z","receivedAt":"2015-01-22T13:56:02Z","isPatch":false,"sender":{"key":"jeffpc@josefsipek.net","avatar":null},"body":"Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n\n\nOn Mon, May 19, 2014 at 12:00:08AM +0200, Per Cederqvist wrote:\n> ---\n>  Documentation/guilt-header.txt | 5 ++++-\n>  regression/t-028.out           | 9 +++++++++\n>  regression/t-028.sh            | 3 +++\n>  3 files changed, 16 insertions(+), 1 deletion(-)\n> \n> diff --git a/Documentation/guilt-header.txt b/Documentation/guilt-header.txt\n> index 870bfaf..71b2e66 100644\n> --- a/Documentation/guilt-header.txt\n> +++ b/Documentation/guilt-header.txt\n> @@ -18,7 +18,10 @@ Prints either the topmost patch's header or the header of a specified patch.\n>  -E::\n>  \tOpen the raw patch in an editor, instead of printing it.\n>  <patchname>::\n> -\tName of the patch.\n> +\tName of the patch. If a patch with exactly this name exists,\n> +\tuse it. Otherwise, treat the name as a regexp; if the regexp\n> +\tmatches a single patch, use it. Otherwise, list all matching\n> +\tpatch names to stderr and fail.\n>  \n>  Author\n>  ------\n> diff --git a/regression/t-028.out b/regression/t-028.out\n> index ea72a3a..39ac900 100644\n> --- a/regression/t-028.out\n> +++ b/regression/t-028.out\n> @@ -56,3 +56,12 @@ Patch non-existant is not in the series\n>    remove\n>    mode\n>    patch-with-some-desc\n> +% guilt header de\n> +de does not uniquely identify a patch. Did you mean any of these?\n> +  mode\n> +  patch-with-some-desc\n> +% guilt header des\n> +blah blah blah\n> +\n> +Signed-off-by: Commiter Name <commiter@email>\n> +\n> diff --git a/regression/t-028.sh b/regression/t-028.sh\n> index 2ce0378..cd3088c 100755\n> --- a/regression/t-028.sh\n> +++ b/regression/t-028.sh\n> @@ -35,4 +35,7 @@ shouldfail guilt header non-existant\n>  # patch name is a regexp that just happens to match an existing patch.\n>  shouldfail guilt header '.*'\n>  \n> +shouldfail guilt header de\n> +cmd guilt header des\n> +\n>  # FIXME: how do we check that -e works?\n> -- \n> 1.8.3.1\n> \n\n-- \nYou measure democracy by the freedom it gives its dissidents, not the\nfreedom it gives its assimilated conformists.\n\t\t- Abbie Hoffman\n"},{"id":"255096","messageId":"20150122141545.GB101460@meili.jeffnet.31bits.net","threadId":"36691","inReplyTo":"1400450409-30998-16-git-send-email-cederp@opera.com","subject":"Re: [GUILT v4 15/33] Produce legal patch names in guilt-import-commit.","fromName":"Jeff Sipek","fromEmail":"jeffpc@josefsipek.net","sentAt":"2015-01-22T14:15:45Z","receivedAt":"2015-01-22T14:15:45Z","isPatch":false,"sender":{"key":"jeffpc@josefsipek.net","avatar":null},"body":"I just tried to run the regression suite on my OpenIndiana laptop and I got\nthis failure.\n\n034: --- t-034.out\t2015-01-22 14:02:23.634515474 +0000\n+++ /tmp/guilt.log.14878\t2015-01-22 14:03:54.258790788 +0000\n@@ -83,7 +83,7 @@\n [master aedb74f] @\n  Author: Author Name <author@email>\n  1 file changed, 1 insertion(+)\n-% create_commit a Backslash\\is\\forbidden.\n+% create_commit a Backslash\\is\n                               orbidden.\n [master 0a46f8f] Backslash\\is\\forbidden.\n  Author: Author Name <author@email>\n  1 file changed, 1 insertion(+)\nTest failed!\n\nTest:\t\t034\nLog file:\t/tmp/guilt.log.14878\nRepo dir:\t\"/tmp/guilt reg.12106\"\n\nmake[1]: *** [all] Error 1\n\n\nIt's obviously the \"cmd\" command printing that's busted.  The following change\nmakes the test suite pass.  Does it work for you?  (If so, I'll commit it after\npulling your whole series.)\n\nThanks,\n\nJeff.\n\n\ndiff --git a/regression/scaffold b/regression/scaffold\nindex 97cff4e..593e9da 100644\n--- a/regression/scaffold\n+++ b/regression/scaffold\n@@ -50,7 +50,7 @@ function filter_dd\n # usage: cmd <cmd>..\n function cmd\n {\n-\techo \"% $@\"\n+\tprintf \"%% %s\\n\" \"$*\"\n \tif ! (\n \t\texec 3>&1\n \t\trv=`((\"$@\" 2>&1; echo $? >&4) | replace_path >&3 ) 4>&1`\n\nOn Sun, May 18, 2014 at 11:59:51PM +0200, Per Cederqvist wrote:\n> Try harder to create patch names that adhere to the rules in\n> git-check-ref-format(1) when deriving a patch name from the commit\n> message.  Verify that the derived name using \"git check-ref-format\",\n> and as a final fallback simply use the patch name \"x\" (to ensure that\n> the code is future-proof in case new rules are added in the future).\n> \n> Always append a \".patch\" suffix to the patch name.\n> \n> Added test cases.\n> \n> Signed-off-by: Per Cederqvist <cederp@opera.com>\n> Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n> ---\n>  guilt-import-commit  |  20 +-\n>  regression/t-034.out | 567 +++++++++++++++++++++++++++++++++++++++++++++++++++\n>  regression/t-034.sh  |  71 +++++++\n>  3 files changed, 656 insertions(+), 2 deletions(-)\n>  create mode 100644 regression/t-034.out\n>  create mode 100755 regression/t-034.sh\n> \n> diff --git a/guilt-import-commit b/guilt-import-commit\n> index f14647c..6260c56 100755\n> --- a/guilt-import-commit\n> +++ b/guilt-import-commit\n> @@ -28,19 +28,35 @@ disp \"Current head: `git rev-parse \\`git_branch\\``\" >&2\n>  for rev in `git rev-list $rhash`; do\n>  \ts=`git log --pretty=oneline -1 $rev | cut -c 42-`\n>  \n> +\t# Try to convert the first line of the commit message to a\n> +\t# valid patch name.\n>  \tfname=`echo $s | sed -e \"s/&/and/g\" -e \"s/[ :]/_/g\" -e \"s,[/\\\\],-,g\" \\\n>  \t\t\t-e \"s/['\\\\[{}]//g\" -e 's/]//g' -e 's/\\*/-/g' \\\n> -\t\t\t-e 's/\\?/-/g' | tr A-Z a-z`\n> +\t\t\t-e 's/\\?/-/g' -e 's/\\.\\.\\.*/./g' -e 's/^\\.//' \\\n> +\t\t\t-e 's/\\.patch$//' -e 's/\\.$//' | tr A-Z a-z`\n> +\n> +\tif ! valid_patchname \"$fname\"; then\n> +\t\t# Try harder to make it a legal commit name by\n> +\t\t# removing all but a few safe characters.\n> +\t\tfname=`echo $fname|tr -d -c _a-zA-Z0-9---/\\\\n`\n> +\tfi\n> +\tif ! valid_patchname \"$fname\"; then\n> +\t\t# If we failed to derive a legal patch name, use the\n> +\t\t# name \"x\".  (If this happens, we likely have to\n> +\t\t# append a suffix to make the name unique.)\n> +\t\tfname=x\n> +\tfi\n>  \n>  \tdisp \"Converting `echo $rev | cut -c 1-8` as $fname\"\n>  \n>  \tmangle_prefix=1\n>  \tfname_base=$fname\n> -\twhile [ -f \"$GUILT_DIR/$branch/$fname\" ]; do\n> +\twhile [ -f \"$GUILT_DIR/$branch/$fname.patch\" ]; do\n>  \t\tfname=\"$fname_base-$mangle_prefix\"\n>  \t        mangle_prefix=`expr $mangle_prefix + 1`\n>  \t\tdisp \"Patch under that name exists...trying '$fname'\"\n>  \tdone\n> +\tfname=\"$fname\".patch\n>  \n>  \t(\n>  \t\tdo_make_header $rev\n> diff --git a/regression/t-034.out b/regression/t-034.out\n> new file mode 100644\n> index 0000000..7bc9459\n> --- /dev/null\n> +++ b/regression/t-034.out\n> @@ -0,0 +1,567 @@\n> +% setup_git_repo\n> +% git tag base\n> +% create_commit a The sequence /. is forbidden.\n> +[master eebb76e] The sequence /. is forbidden.\n> + Author: Author Name <author@email>\n> + 1 file changed, 1 insertion(+)\n> + create mode 100644 a\n> +% create_commit a The sequence .lock/ is forbidden.\n> +[master 45e81b5] The sequence .lock/ is forbidden.\n> + Author: Author Name <author@email>\n> + 1 file changed, 1 insertion(+)\n> +% create_commit a A/component/may/not/end/in/foo.lock\n> +[master bbf3f59] A/component/may/not/end/in/foo.lock\n> + Author: Author Name <author@email>\n> + 1 file changed, 1 insertion(+)\n> +% create_commit a Two consecutive dots (..) is forbidden.\n> +[master 1535e67] Two consecutive dots (..) is forbidden.\n> + Author: Author Name <author@email>\n> + 1 file changed, 1 insertion(+)\n> +% create_commit a Check/multiple/../dots/...../foo..patch\n> +[master 48eb60c] Check/multiple/../dots/...../foo..patch\n> + Author: Author Name <author@email>\n> + 1 file changed, 1 insertion(+)\n> +% create_commit a Space is forbidden.\n> +[master 10dea83] Space is forbidden.\n> + Author: Author Name <author@email>\n> + 1 file changed, 1 insertion(+)\n> +% create_commit a Tilde~is~forbidden.\n> +[master 70a83b7] Tilde~is~forbidden.\n> + Author: Author Name <author@email>\n> + 1 file changed, 1 insertion(+)\n> +% create_commit a Caret^is^forbidden.\n> +[master ee6ef2c] Caret^is^forbidden.\n> + Author: Author Name <author@email>\n> + 1 file changed, 1 insertion(+)\n> +% create_commit a Colon:is:forbidden.\n> +[master c077fe2] Colon:is:forbidden.\n> + Author: Author Name <author@email>\n> + 1 file changed, 1 insertion(+)\n> +% create_commit a Delisforbidden.\n> +[master 589ee30] Delisforbidden.\n> + Author: Author Name <author@email>\n> + 1 file changed, 1 insertion(+)\n> +% git branch some-branch\n> +% git tag some-tag\n> +% create_commit a Ctrl\u0001is\u0002forbidden.\n> +[master e63cdde] Ctrl\u0001is\u0002forbidden.\n> + Author: Author Name <author@email>\n> + 1 file changed, 1 insertion(+)\n> +% create_commit a CR\n> is\n> also\n> forbidden.\n> +[master 21ad093] CR\n> is\n> also\n> forbidden.\n> + Author: Author Name <author@email>\n> + 1 file changed, 1 insertion(+)\n> +% create_commit a Question-mark?is?forbidden.\n> +[master be2fa9b] Question-mark?is?forbidden.\n> + Author: Author Name <author@email>\n> + 1 file changed, 1 insertion(+)\n> +% create_commit a Asterisk*is*forbidden.\n> +[master af7b50f] Asterisk*is*forbidden.\n> + Author: Author Name <author@email>\n> + 1 file changed, 1 insertion(+)\n> +% create_commit a Open[bracket[is[forbidden.\n> +[master 689f618] Open[bracket[is[forbidden.\n> + Author: Author Name <author@email>\n> + 1 file changed, 1 insertion(+)\n> +% create_commit a Multiple/slashes//are//forbidden.\n> +[master 6e7d52a] Multiple/slashes//are//forbidden.\n> + Author: Author Name <author@email>\n> + 1 file changed, 1 insertion(+)\n> +% create_commit a Cannot/end/in/slash/\n> +[master 95bb6cd] Cannot/end/in/slash/\n> + Author: Author Name <author@email>\n> + 1 file changed, 1 insertion(+)\n> +% create_commit a Cannot end in ..\n> +[master 106e8e5] Cannot end in ..\n> + Author: Author Name <author@email>\n> + 1 file changed, 1 insertion(+)\n> +% create_commit a Cannot@{have@{the@{sequence@{at-brace.\n> +[master 30187ed] Cannot@{have@{the@{sequence@{at-brace.\n> + Author: Author Name <author@email>\n> + 1 file changed, 1 insertion(+)\n> +% create_commit a @\n> +[master aedb74f] @\n> + Author: Author Name <author@email>\n> + 1 file changed, 1 insertion(+)\n> +% create_commit a Backslash\\is\\forbidden.\n> +[master 0a46f8f] Backslash\\is\\forbidden.\n> + Author: Author Name <author@email>\n> + 1 file changed, 1 insertion(+)\n> +% create_commit a Can/have/embedded/single/slashes\n> +[master 2a8b188] Can/have/embedded/single/slashes\n> + Author: Author Name <author@email>\n> + 1 file changed, 1 insertion(+)\n> +% git log\n> +commit 2a8b1889aa5066193bac978e6bf5073ffcfa6541\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Can/have/embedded/single/slashes\n> +\n> +commit 0a46f8fa7c8c5a6f1039f842fe5cbd21d3a2a2a6\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Backslash\\is\\forbidden.\n> +\n> +commit aedb74fd8388282fd7af50cb191a7f62bfc45eb5\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    @\n> +\n> +commit 30187ed0f47d12df9cedcbb846647d0d52130c12\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Cannot@{have@{the@{sequence@{at-brace.\n> +\n> +commit 106e8e5a8cceec7297af97376ca5f93506643d0b\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Cannot end in ..\n> +\n> +commit 95bb6cd7edf7b1e634a1e7d02c8faa99e39cbbf2\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Cannot/end/in/slash/\n> +\n> +commit 6e7d52a7dacc684225c11b4edd2bac25fb52bd9b\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Multiple/slashes//are//forbidden.\n> +\n> +commit 689f618085195775d204898254154b8bb50897a5\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Open[bracket[is[forbidden.\n> +\n> +commit af7b50f93854bc5f46de5a389c1f3dea081eae2f\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Asterisk*is*forbidden.\n> +\n> +commit be2fa9b5c5788dc05c4036f1b8197a1d33169610\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Question-mark?is?forbidden.\n> +\n> +commit 21ad093a0c1b4a96285180a3d7b99a4045ef9202\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    CR\n> is\n> also\n> forbidden.\n> +\n> +commit e63cdde7a1c90b66d7d411683528200f3f067d5f\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Ctrl\u0001is\u0002forbidden.\n> +\n> +commit 589ee305a82aacf155529e75cbc84e661c37c83d\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Delisforbidden.\n> +\n> +commit c077fe203fd18036fb00b56eec1763673d1769c6\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Colon:is:forbidden.\n> +\n> +commit ee6ef2cc9dd5525409300377b013c0d9734bd931\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Caret^is^forbidden.\n> +\n> +commit 70a83b705a2602a9493aba7f8f22e7abd13adc63\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Tilde~is~forbidden.\n> +\n> +commit 10dea8380135f4d10cd10324e13da659261ceda3\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Space is forbidden.\n> +\n> +commit 48eb60cddaefdaac5f78655f9028a9da741a18d1\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Check/multiple/../dots/...../foo..patch\n> +\n> +commit 1535e67718949abf72f843685a1672ebfe4bd21f\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Two consecutive dots (..) is forbidden.\n> +\n> +commit bbf3f5926e11d97b08cdb6e833c9deb603453d1b\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    A/component/may/not/end/in/foo.lock\n> +\n> +commit 45e81b5163ec3ed656b058ac3fd95b8986824e0f\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    The sequence .lock/ is forbidden.\n> +\n> +commit eebb76e96913d2dc78aef5f233fadc74af770b3b\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    The sequence /. is forbidden.\n> +\n> +commit d4850419ccc1146c7169f500725ce504b9774ed0\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    initial\n> +    \n> +    Signed-off-by: Commiter Name <commiter@email>\n> +% guilt init\n> +% guilt import-commit base..HEAD\n> +About to begin conversion...\n> +Current head: 2a8b1889aa5066193bac978e6bf5073ffcfa6541\n> +Converting 2a8b1889 as can-have-embedded-single-slashes\n> +Converting 0a46f8fa as backslash-isorbidden\n> +Converting aedb74fd as x\n> +Converting 30187ed0 as cannot@have@the@sequence@at-brace\n> +Converting 106e8e5a as cannot_end_in_\n> +Converting 95bb6cd7 as cannot-end-in-slash-\n> +Converting 6e7d52a7 as multiple-slashes--are--forbidden\n> +Converting 689f6180 as openbracketisforbidden\n> +Converting af7b50f9 as asterisk-is-forbidden\n> +Converting be2fa9b5 as question-mark-is-forbidden\n> +Converting 21ad093a as crisalsoforbidden\n> +Converting e63cdde7 as ctrlisforbidden\n> +Converting 589ee305 as delisforbidden\n> +Converting c077fe20 as colon_is_forbidden\n> +Converting ee6ef2cc as caretisforbidden\n> +Converting 70a83b70 as tildeisforbidden\n> +Converting 10dea838 as space_is_forbidden\n> +Converting 48eb60cd as check-multiple-.-dots-.-foo\n> +Converting 1535e677 as two_consecutive_dots_(.)_is_forbidden\n> +Converting bbf3f592 as a-component-may-not-end-in-foolock\n> +Converting 45e81b51 as the_sequence_.lock-_is_forbidden\n> +Converting eebb76e9 as the_sequence_-._is_forbidden\n> +Done.\n> +Current head: d4850419ccc1146c7169f500725ce504b9774ed0\n> +% guilt push -a\n> +Applying patch..the_sequence_-._is_forbidden.patch\n> +Patch applied.\n> +Applying patch..the_sequence_.lock-_is_forbidden.patch\n> +Patch applied.\n> +Applying patch..a-component-may-not-end-in-foolock.patch\n> +Patch applied.\n> +Applying patch..two_consecutive_dots_(.)_is_forbidden.patch\n> +Patch applied.\n> +Applying patch..check-multiple-.-dots-.-foo.patch\n> +Patch applied.\n> +Applying patch..space_is_forbidden.patch\n> +Patch applied.\n> +Applying patch..tildeisforbidden.patch\n> +Patch applied.\n> +Applying patch..caretisforbidden.patch\n> +Patch applied.\n> +Applying patch..colon_is_forbidden.patch\n> +Patch applied.\n> +Applying patch..delisforbidden.patch\n> +Patch applied.\n> +Applying patch..ctrlisforbidden.patch\n> +Patch applied.\n> +Applying patch..crisalsoforbidden.patch\n> +Patch applied.\n> +Applying patch..question-mark-is-forbidden.patch\n> +Patch applied.\n> +Applying patch..asterisk-is-forbidden.patch\n> +Patch applied.\n> +Applying patch..openbracketisforbidden.patch\n> +Patch applied.\n> +Applying patch..multiple-slashes--are--forbidden.patch\n> +Patch applied.\n> +Applying patch..cannot-end-in-slash-.patch\n> +Patch applied.\n> +Applying patch..cannot_end_in_.patch\n> +Patch applied.\n> +Applying patch..cannot@have@the@sequence@at-brace.patch\n> +Patch applied.\n> +Applying patch..x.patch\n> +Patch applied.\n> +Applying patch..backslash-isorbidden.patch\n> +Patch applied.\n> +Applying patch..can-have-embedded-single-slashes.patch\n> +Patch applied.\n> +% git log --decorate\n> +commit 434e07cacdd8e7eb4723e67cb2d100b3a4121a3a (HEAD, refs/patches/master/can-have-embedded-single-slashes.patch, guilt/master)\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Can/have/embedded/single/slashes\n> +\n> +commit 7c3ffa4f940c862e9f11f5d4a5ae421f7a8d3141 (refs/patches/master/backslash-isorbidden.patch)\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Backslash\\is\\forbidden.\n> +\n> +commit ea46f435d4d8f3c5349dce1aabc1a39fbf7ef803 (refs/patches/master/x.patch)\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    @\n> +\n> +commit a275ed5d7f10ea88c986852ee95a7d5a61663b5f (refs/patches/master/cannot@have@the@sequence@at-brace.patch)\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Cannot@{have@{the@{sequence@{at-brace.\n> +\n> +commit f091fee39457e64ebd35410c1cf95e6613816a54 (refs/patches/master/cannot_end_in_.patch)\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Cannot end in ..\n> +\n> +commit 025672497aff5c910c8ff86aaedc662f14c2f4ad (refs/patches/master/cannot-end-in-slash-.patch)\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Cannot/end/in/slash/\n> +\n> +commit f13e243c7c56f39422567a431bccceec8b789596 (refs/patches/master/multiple-slashes--are--forbidden.patch)\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Multiple/slashes//are//forbidden.\n> +\n> +commit edef5e925083d445f71c170d3293fac9619bc7a2 (refs/patches/master/openbracketisforbidden.patch)\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Open[bracket[is[forbidden.\n> +\n> +commit 1626a11d979a1e9e775c766484172212277153df (refs/patches/master/asterisk-is-forbidden.patch)\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Asterisk*is*forbidden.\n> +\n> +commit 74df14ab3a0ec9a0382998fbf167ebb1b0a36c6a (refs/patches/master/question-mark-is-forbidden.patch)\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Question-mark?is?forbidden.\n> +\n> +commit ec46429125abdb0c5ac2b46cc399bdcd7cfc73fd (refs/patches/master/crisalsoforbidden.patch)\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    CR\n> is\n> also\n> forbidden.\n> +\n> +commit 01524f9921af2a041cc88c068f76baa39e436cb2 (refs/patches/master/ctrlisforbidden.patch)\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Ctrl\u0001is\u0002forbidden.\n> +\n> +commit 9fc9677b61880f9159838e89f714893e0a2fcafb (refs/patches/master/delisforbidden.patch)\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Delisforbidden.\n> +\n> +commit 10433fd7206b7f79aabb4da514710d93c8deed4a (refs/patches/master/colon_is_forbidden.patch)\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Colon:is:forbidden.\n> +\n> +commit fb1edb753c97ec865ceea316420b1df586caaa2b (refs/patches/master/caretisforbidden.patch)\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Caret^is^forbidden.\n> +\n> +commit 3a0d5ccef0359004fcaa9cee98fbd6a2c4432e74 (refs/patches/master/tildeisforbidden.patch)\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Tilde~is~forbidden.\n> +\n> +commit ea22c3b49c448dba8d7eaa6b805f9f1bc83fbedc (refs/patches/master/space_is_forbidden.patch)\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Space is forbidden.\n> +\n> +commit db6ea8252440b04811344336f510a5469b2ddab0 (refs/patches/master/check-multiple-.-dots-.-foo.patch)\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Check/multiple/../dots/...../foo..patch\n> +\n> +commit fe07105cd62660f4440ad24b9fc7dfdd9e71d764 (refs/patches/master/two_consecutive_dots_(.)_is_forbidden.patch)\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Two consecutive dots (..) is forbidden.\n> +\n> +commit 96a3e92c4df85f52362ce4f6d31983c462db9ae9 (refs/patches/master/a-component-may-not-end-in-foolock.patch)\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    A/component/may/not/end/in/foo.lock\n> +\n> +commit ee4f0f96dfc9c94f5410c1e6414f9004325a37fc (refs/patches/master/the_sequence_.lock-_is_forbidden.patch)\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    The sequence .lock/ is forbidden.\n> +\n> +commit fdcb23c3072209bea3d9e0a2594132b936c5347e (refs/patches/master/the_sequence_-._is_forbidden.patch)\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    The sequence /. is forbidden.\n> +\n> +commit d4850419ccc1146c7169f500725ce504b9774ed0 (tag: base, master)\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    initial\n> +    \n> +    Signed-off-by: Commiter Name <commiter@email>\n> +% git log --decorate some-branch\n> +commit 589ee305a82aacf155529e75cbc84e661c37c83d (tag: some-tag, some-branch)\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Delisforbidden.\n> +\n> +commit c077fe203fd18036fb00b56eec1763673d1769c6\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Colon:is:forbidden.\n> +\n> +commit ee6ef2cc9dd5525409300377b013c0d9734bd931\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Caret^is^forbidden.\n> +\n> +commit 70a83b705a2602a9493aba7f8f22e7abd13adc63\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Tilde~is~forbidden.\n> +\n> +commit 10dea8380135f4d10cd10324e13da659261ceda3\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Space is forbidden.\n> +\n> +commit 48eb60cddaefdaac5f78655f9028a9da741a18d1\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Check/multiple/../dots/...../foo..patch\n> +\n> +commit 1535e67718949abf72f843685a1672ebfe4bd21f\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    Two consecutive dots (..) is forbidden.\n> +\n> +commit bbf3f5926e11d97b08cdb6e833c9deb603453d1b\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    A/component/may/not/end/in/foo.lock\n> +\n> +commit 45e81b5163ec3ed656b058ac3fd95b8986824e0f\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    The sequence .lock/ is forbidden.\n> +\n> +commit eebb76e96913d2dc78aef5f233fadc74af770b3b\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    The sequence /. is forbidden.\n> +\n> +commit d4850419ccc1146c7169f500725ce504b9774ed0 (tag: base, master)\n> +Author: Author Name <author@email>\n> +Date:   Mon Jan 1 00:00:00 2007 +0000\n> +\n> +    initial\n> +    \n> +    Signed-off-by: Commiter Name <commiter@email>\n> +% list_files\n> +d .git/patches\n> +d .git/patches/master\n> +d .git/refs/patches\n> +d .git/refs/patches/master\n> +f 06beca7069b9e576bd431f65d13862ed5d3e2a0f  .git/patches/master/ctrlisforbidden.patch\n> +f 08267ec6783ea9d1adae55b275198f7594764ed0  .git/patches/master/series\n> +f 08267ec6783ea9d1adae55b275198f7594764ed0  .git/patches/master/status\n> +f 09b7e9be44ae5ec3a4bb30f5ee9d4ebc2c042f64  .git/patches/master/two_consecutive_dots_(.)_is_forbidden.patch\n> +f 0b971c9a17aeca2319c93d700ffd98acc2a93451  .git/patches/master/question-mark-is-forbidden.patch\n> +f 2b8392f63d61efc12add554555adae30883993cc  .git/patches/master/cannot-end-in-slash-.patch\n> +f 2cd7c9ad392e071be03c051c6793e9b1e31d33c4  .git/patches/master/can-have-embedded-single-slashes.patch\n> +f 3136e448a4c820f6d2642f9d894c4087d3d109ab  .git/patches/master/cannot_end_in_.patch\n> +f 34e07c584032df137f19bdb66d93f316f00a5ac8  .git/patches/master/tildeisforbidden.patch\n> +f 49bab499826b63deb2bd704629d60c7268c57aee  .git/patches/master/the_sequence_-._is_forbidden.patch\n> +f 5bcddb8ccb6e6e5e8a61e9e56cb2e0f70cbab2f5  .git/patches/master/cannot@have@the@sequence@at-brace.patch\n> +f 637b982fe14a240de181ae63226b27e0c406b3dc  .git/patches/master/asterisk-is-forbidden.patch\n> +f 698f8a7d41a64e3b6be1a3eba86574078b22a5f3  .git/patches/master/backslash-isorbidden.patch\n> +f 7b103c3c7ae298cd2334f6f49da48bae1424f77b  .git/patches/master/crisalsoforbidden.patch\n> +f 9b810b8c63779c51d2e7f61ab59cd49835041563  .git/patches/master/x.patch\n> +f a22958d9ae9976fd7b2b5a9d0bcd44bf7ad9b08a  .git/patches/master/caretisforbidden.patch\n> +f ab325bf5a432937fc6f231d3e8a773a62d53952b  .git/patches/master/multiple-slashes--are--forbidden.patch\n> +f cb9cffbd4465bddee266c20ccebd14eb687eaa89  .git/patches/master/delisforbidden.patch\n> +f d0885a1a1fdee0fd1e4fedce3f7acd3100540bc4  .git/patches/master/openbracketisforbidden.patch\n> +f d2903523fb66a346596eabbdd1bda4e52b266440  .git/patches/master/check-multiple-.-dots-.-foo.patch\n> +f dfc11f76394059909671af036598c5fbe33001ba  .git/patches/master/space_is_forbidden.patch\n> +f e47474c52d6c893f36d0457f885a6dd1267742bb  .git/patches/master/colon_is_forbidden.patch\n> +f e7a5f8912592d9891e6159f5827c8b4f372cc406  .git/patches/master/the_sequence_.lock-_is_forbidden.patch\n> +f edfaa5e06bd662ae1f6a642834324fd9b849bbd9  .git/patches/master/a-component-may-not-end-in-foolock.patch\n> +r 01524f9921af2a041cc88c068f76baa39e436cb2  .git/refs/patches/master/ctrlisforbidden.patch\n> +r 025672497aff5c910c8ff86aaedc662f14c2f4ad  .git/refs/patches/master/cannot-end-in-slash-.patch\n> +r 10433fd7206b7f79aabb4da514710d93c8deed4a  .git/refs/patches/master/colon_is_forbidden.patch\n> +r 1626a11d979a1e9e775c766484172212277153df  .git/refs/patches/master/asterisk-is-forbidden.patch\n> +r 3a0d5ccef0359004fcaa9cee98fbd6a2c4432e74  .git/refs/patches/master/tildeisforbidden.patch\n> +r 434e07cacdd8e7eb4723e67cb2d100b3a4121a3a  .git/refs/patches/master/can-have-embedded-single-slashes.patch\n> +r 74df14ab3a0ec9a0382998fbf167ebb1b0a36c6a  .git/refs/patches/master/question-mark-is-forbidden.patch\n> +r 7c3ffa4f940c862e9f11f5d4a5ae421f7a8d3141  .git/refs/patches/master/backslash-isorbidden.patch\n> +r 96a3e92c4df85f52362ce4f6d31983c462db9ae9  .git/refs/patches/master/a-component-may-not-end-in-foolock.patch\n> +r 9fc9677b61880f9159838e89f714893e0a2fcafb  .git/refs/patches/master/delisforbidden.patch\n> +r a275ed5d7f10ea88c986852ee95a7d5a61663b5f  .git/refs/patches/master/cannot@have@the@sequence@at-brace.patch\n> +r db6ea8252440b04811344336f510a5469b2ddab0  .git/refs/patches/master/check-multiple-.-dots-.-foo.patch\n> +r ea22c3b49c448dba8d7eaa6b805f9f1bc83fbedc  .git/refs/patches/master/space_is_forbidden.patch\n> +r ea46f435d4d8f3c5349dce1aabc1a39fbf7ef803  .git/refs/patches/master/x.patch\n> +r ec46429125abdb0c5ac2b46cc399bdcd7cfc73fd  .git/refs/patches/master/crisalsoforbidden.patch\n> +r edef5e925083d445f71c170d3293fac9619bc7a2  .git/refs/patches/master/openbracketisforbidden.patch\n> +r ee4f0f96dfc9c94f5410c1e6414f9004325a37fc  .git/refs/patches/master/the_sequence_.lock-_is_forbidden.patch\n> +r f091fee39457e64ebd35410c1cf95e6613816a54  .git/refs/patches/master/cannot_end_in_.patch\n> +r f13e243c7c56f39422567a431bccceec8b789596  .git/refs/patches/master/multiple-slashes--are--forbidden.patch\n> +r fb1edb753c97ec865ceea316420b1df586caaa2b  .git/refs/patches/master/caretisforbidden.patch\n> +r fdcb23c3072209bea3d9e0a2594132b936c5347e  .git/refs/patches/master/the_sequence_-._is_forbidden.patch\n> +r fe07105cd62660f4440ad24b9fc7dfdd9e71d764  .git/refs/patches/master/two_consecutive_dots_(.)_is_forbidden.patch\n> +% guilt pop -a\n> +All patches popped.\n> diff --git a/regression/t-034.sh b/regression/t-034.sh\n> new file mode 100755\n> index 0000000..f41f958\n> --- /dev/null\n> +++ b/regression/t-034.sh\n> @@ -0,0 +1,71 @@\n> +#!/bin/bash\n> +#\n> +# Test import-commit\n> +#\n> +\n> +function create_commit\n> +{\n> +\techo $1 >> $1 &&\n> +\t\tgit add $1 &&\n> +\t\tgit commit -m\"$2\"\n> +}\n> +\n> +source \"$REG_DIR/scaffold\"\n> +\n> +b()\n> +{\n> +\tprintf \"%b\" \"$1\"\n> +}\n> +\n> +cmd setup_git_repo\n> +\n> +cmd git tag base\n> +\n> +# Create a series of commits whose first line of the commit message\n> +# each violates one of the rules in get-check-ref-format(1).\n> +\n> +cmd create_commit a \"The sequence /. is forbidden.\"\n> +cmd create_commit a \"The sequence .lock/ is forbidden.\"\n> +cmd create_commit a \"A/component/may/not/end/in/foo.lock\"\n> +cmd create_commit a \"Two consecutive dots (..) is forbidden.\"\n> +cmd create_commit a \"Check/multiple/../dots/...../foo..patch\"\n> +cmd create_commit a \"Space is forbidden.\"\n> +cmd create_commit a \"Tilde~is~forbidden.\"\n> +cmd create_commit a \"Caret^is^forbidden.\"\n> +cmd create_commit a \"Colon:is:forbidden.\"\n> +cmd create_commit a `b 'Del\\177is\\177forbidden.'`\n> +# Create a branch and a tag from the current commit, to ensure that\n> +# doing so does not affect how the commit is imported.\n> +cmd git branch some-branch\n> +cmd git tag some-tag\n> +cmd create_commit a `b 'Ctrl\\001is\\002forbidden.'`\n> +cmd create_commit a `b 'CR\\ris\\ralso\\rforbidden.'`\n> +cmd create_commit a \"Question-mark?is?forbidden.\"\n> +cmd create_commit a \"Asterisk*is*forbidden.\"\n> +cmd create_commit a \"Open[bracket[is[forbidden.\"\n> +cmd create_commit a \"Multiple/slashes//are//forbidden.\"\n> +cmd create_commit a \"Cannot/end/in/slash/\"\n> +cmd create_commit a \"Cannot end in ..\"\n> +cmd create_commit a \"Cannot@{have@{the@{sequence@{at-brace.\"\n> +cmd create_commit a \"@\"\n> +cmd create_commit a \"Backslash\\\\is\\\\forbidden.\"\n> +\n> +# Slash is sometimes allowed; this is not problematic.\n> +cmd create_commit a \"Can/have/embedded/single/slashes\"\n> +\n> +cmd git log\n> +\n> +# Import all the commits to guilt.\n> +cmd guilt init\n> +cmd guilt import-commit base..HEAD\n> +\n> +for patch in .git/patches/master/*.patch; do\n> +\ttouch -a -m -t \"$TOUCH_DATE\" \"$patch\"\n> +done\n> +\n> +# If push and pop works, the names we created are good.\n> +cmd guilt push -a\n> +cmd git log --decorate\n> +cmd git log --decorate some-branch\n> +cmd list_files\n> +cmd guilt pop -a\n> -- \n> 1.8.3.1\n> \n\n-- \nC is quirky, flawed, and an enormous success.\n\t\t- Dennis M. Ritchie.\n"},{"id":"255097","messageId":"20150122141851.GC101460@meili.jeffnet.31bits.net","threadId":"36691","inReplyTo":"1400450409-30998-15-git-send-email-cederp@opera.com","subject":"Re: [GUILT v4 14/33] Use \"git check-ref-format\" to validate patch names.","fromName":"Jeff Sipek","fromEmail":"jeffpc@josefsipek.net","sentAt":"2015-01-22T14:18:52Z","receivedAt":"2015-01-22T14:18:52Z","isPatch":false,"sender":{"key":"jeffpc@josefsipek.net","avatar":null},"body":"Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n\nOn Sun, May 18, 2014 at 11:59:50PM +0200, Per Cederqvist wrote:\n> The valid_patchname now lets \"git check-ref-format\" do its job instead\n> of trying (and failing) to implement the same rules.  See\n> git-check-ref-format(1) for a list of the rules.  Re-implement rules\n> added to \"git check-ref-format\" after Git 1.5.0, so that guilt rejects\n> the same names no matter what version of Git we are using (but\n> versions prior to 1.5.0 are not supported).\n> \n> Refer to the git-check-ref-format(1) man page in the error messages\n> produced when valid_patchname indicates that the name is bad.\n> \n> Added testcases that breaks most of the rules in that man-page.\n> \n> Signed-off-by: Per Cederqvist <cederp@opera.com>\n> ---\n>  guilt                |  46 +++++-\n>  guilt-fork           |   2 +-\n>  guilt-import         |   2 +-\n>  guilt-new            |   2 +-\n>  regression/t-025.out | 426 +++++++++++++++++++++++++++++++++++++++++++++++++--\n>  regression/t-025.sh  |  12 +-\n>  regression/t-032.out |   4 +-\n>  7 files changed, 474 insertions(+), 20 deletions(-)\n> \n> diff --git a/guilt b/guilt\n> index 3fc524e..9567a78 100755\n> --- a/guilt\n> +++ b/guilt\n> @@ -132,14 +132,50 @@ fi\n>  # usage: valid_patchname <patchname>\n>  valid_patchname()\n>  {\n> +\t# Once we only support Git 1.7.8 and newer, the command below\n> +\t# could be replaced with:\n> +\t#\n> +\t#     git check-ref-format --allow-onelevel \"$1\"\n> +\t#\n> +\t# Instead, we arbitrarily prepend one level.  The result\n> +\t# should be the same, and this is portable to all existing\n> +\t# versions of Git.\n> +\tgit check-ref-format a/\"$1\"\n> +\tif [ $? -ne 0 ]; then\n> +\t\treturn 1\n> +\tfi\n> +\n> +\t# We want to reject all names that Git 2.0.0 rejects.  In case\n> +\t# we are running an older version, we explicitly check some\n> +\t# cases that were added to Git after version 1.5.0.  This code\n> +\t# aims to support Git version 1.5.0 and newer.\n> +\n> +\t# Git 1.7.6.4 and newer rejects the DEL character.\n> +\tif [ `echo \"$1\"|tr -d '\\177'` != \"$1\" ]; then\n> +\t\treturn 1\n> +\tfi\n> +\n> +\t# Git 1.7.8 and newer rejects refs that start or end with\n> +\t# slash or contain multiple adjacent slashes.\n>  \tcase \"$1\" in\n> -\t\t/*|./*|../*|*/./*|*/../*|*/.|*/..|*/|*\\ *|*\\\t*)\n> +\t\t/*|*/|*//*)\n>  \t\t\treturn 1;;\n> -\t\t*:*)\n> -\t\t\treturn 1;;\n> -\t\t*)\n> -\t\t\treturn 0;;\n>  \tesac\n> +\n> +\t# Git 1.7.8 and newer rejects refname components that end in\n> +\t# .lock.\n> +\tcase \"$1\" in\n> +\t\t*.lock/*|*.lock)\n> +\t\t\treturn 1;;\n> +\tesac\n> +\n> +\t# Git 1.8.5 and newer rejects refnames that are made up of the\n> +\t# single character \"@\".\n> +\tif [ \"$1\" = \"@\" ]; then\n> +\t\treturn 1\n> +\tfi\n> +\n> +\treturn 0\n>  }\n>  \n>  get_branch()\n> diff --git a/guilt-fork b/guilt-fork\n> index a85d391..6447e55 100755\n> --- a/guilt-fork\n> +++ b/guilt-fork\n> @@ -37,7 +37,7 @@ else\n>  fi\n>  \n>  if ! valid_patchname \"$newpatch\"; then\n> -\tdie \"The specified patch name contains invalid characters (:).\"\n> +\tdie \"The specified patch name is invalid according to git-check-ref-format(1).\"\n>  fi\n>  \n>  if [ -e \"$GUILT_DIR/$branch/$newpatch\" ]; then\n> diff --git a/guilt-import b/guilt-import\n> index 3e9b3bb..928e325 100755\n> --- a/guilt-import\n> +++ b/guilt-import\n> @@ -40,7 +40,7 @@ if [ -e \"$GUILT_DIR/$branch/$newname\" ]; then\n>  fi\n>  \n>  if ! valid_patchname \"$newname\"; then\n> -\tdie \"The specified patch name contains invalid characters (:).\"\n> +\tdie \"The specified patch name is invalid according to git-check-ref-format(1).\"\n>  fi\n>  \n>  # create any directories as needed\n> diff --git a/guilt-new b/guilt-new\n> index 9528438..9f7fa44 100755\n> --- a/guilt-new\n> +++ b/guilt-new\n> @@ -64,7 +64,7 @@ fi\n>  \n>  if ! valid_patchname \"$patch\"; then\n>  \tdisp \"Patchname is invalid.\" >&2\n> -\tdie \"it cannot begin with '/', './' or '../', or contain /./, /../, or whitespace\"\n> +\tdie \"It must follow the rules in git-check-ref-format(1).\"\n>  fi\n>  \n>  # create any directories as needed\n> diff --git a/regression/t-025.out b/regression/t-025.out\n> index 7811ab1..01bc406 100644\n> --- a/regression/t-025.out\n> +++ b/regression/t-025.out\n> @@ -141,7 +141,7 @@ f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n>  r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n>  % guilt new white space\n>  Patchname is invalid.\n> -it cannot begin with '/', './' or '../', or contain /./, /../, or whitespace\n> +It must follow the rules in git-check-ref-format(1).\n>  % list_files\n>  d .git/patches\n>  d .git/patches/master\n> @@ -211,7 +211,7 @@ f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n>  r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n>  % guilt new /abc\n>  Patchname is invalid.\n> -it cannot begin with '/', './' or '../', or contain /./, /../, or whitespace\n> +It must follow the rules in git-check-ref-format(1).\n>  % list_files\n>  d .git/patches\n>  d .git/patches/master\n> @@ -235,7 +235,7 @@ f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n>  r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n>  % guilt new ./blah\n>  Patchname is invalid.\n> -it cannot begin with '/', './' or '../', or contain /./, /../, or whitespace\n> +It must follow the rules in git-check-ref-format(1).\n>  % list_files\n>  d .git/patches\n>  d .git/patches/master\n> @@ -259,7 +259,7 @@ f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n>  r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n>  % guilt new ../blah\n>  Patchname is invalid.\n> -it cannot begin with '/', './' or '../', or contain /./, /../, or whitespace\n> +It must follow the rules in git-check-ref-format(1).\n>  % list_files\n>  d .git/patches\n>  d .git/patches/master\n> @@ -283,7 +283,7 @@ f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n>  r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n>  % guilt new abc/./blah\n>  Patchname is invalid.\n> -it cannot begin with '/', './' or '../', or contain /./, /../, or whitespace\n> +It must follow the rules in git-check-ref-format(1).\n>  % list_files\n>  d .git/patches\n>  d .git/patches/master\n> @@ -307,7 +307,7 @@ f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n>  r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n>  % guilt new abc/../blah\n>  Patchname is invalid.\n> -it cannot begin with '/', './' or '../', or contain /./, /../, or whitespace\n> +It must follow the rules in git-check-ref-format(1).\n>  % list_files\n>  d .git/patches\n>  d .git/patches/master\n> @@ -331,7 +331,7 @@ f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n>  r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n>  % guilt new abc/.\n>  Patchname is invalid.\n> -it cannot begin with '/', './' or '../', or contain /./, /../, or whitespace\n> +It must follow the rules in git-check-ref-format(1).\n>  % list_files\n>  d .git/patches\n>  d .git/patches/master\n> @@ -355,7 +355,7 @@ f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n>  r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n>  % guilt new abc/..\n>  Patchname is invalid.\n> -it cannot begin with '/', './' or '../', or contain /./, /../, or whitespace\n> +It must follow the rules in git-check-ref-format(1).\n>  % list_files\n>  d .git/patches\n>  d .git/patches/master\n> @@ -379,7 +379,415 @@ f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n>  r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n>  % guilt new abc/\n>  Patchname is invalid.\n> -it cannot begin with '/', './' or '../', or contain /./, /../, or whitespace\n> +It must follow the rules in git-check-ref-format(1).\n> +% list_files\n> +d .git/patches\n> +d .git/patches/master\n> +d .git/patches/master/dir\n> +d .git/patches/master/dir/subdir\n> +d .git/refs/patches\n> +d .git/refs/patches/master\n> +d .git/refs/patches/master/dir\n> +d .git/refs/patches/master/dir/subdir\n> +f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n> +f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n> +f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n> +f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n> +f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n> +f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n> +r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n> +% guilt new abc.lock\n> +Patchname is invalid.\n> +It must follow the rules in git-check-ref-format(1).\n> +% list_files\n> +d .git/patches\n> +d .git/patches/master\n> +d .git/patches/master/dir\n> +d .git/patches/master/dir/subdir\n> +d .git/refs/patches\n> +d .git/refs/patches/master\n> +d .git/refs/patches/master/dir\n> +d .git/refs/patches/master/dir/subdir\n> +f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n> +f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n> +f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n> +f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n> +f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n> +f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n> +r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n> +% guilt new a/b.lock/c\n> +Patchname is invalid.\n> +It must follow the rules in git-check-ref-format(1).\n> +% list_files\n> +d .git/patches\n> +d .git/patches/master\n> +d .git/patches/master/dir\n> +d .git/patches/master/dir/subdir\n> +d .git/refs/patches\n> +d .git/refs/patches/master\n> +d .git/refs/patches/master/dir\n> +d .git/refs/patches/master/dir/subdir\n> +f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n> +f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n> +f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n> +f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n> +f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n> +f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n> +r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n> +% guilt new cr\n> +Patchname is invalid.\n> +It must follow the rules in git-check-ref-format(1).\n> +% list_files\n> +d .git/patches\n> +d .git/patches/master\n> +d .git/patches/master/dir\n> +d .git/patches/master/dir/subdir\n> +d .git/refs/patches\n> +d .git/refs/patches/master\n> +d .git/refs/patches/master/dir\n> +d .git/refs/patches/master/dir/subdir\n> +f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n> +f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n> +f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n> +f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n> +f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n> +f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n> +r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n> +% guilt new ctrl-a\u0001\n> +Patchname is invalid.\n> +It must follow the rules in git-check-ref-format(1).\n> +% list_files\n> +d .git/patches\n> +d .git/patches/master\n> +d .git/patches/master/dir\n> +d .git/patches/master/dir/subdir\n> +d .git/refs/patches\n> +d .git/refs/patches/master\n> +d .git/refs/patches/master/dir\n> +d .git/refs/patches/master/dir/subdir\n> +f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n> +f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n> +f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n> +f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n> +f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n> +f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n> +r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n> +% guilt new formfeed\f\n> +Patchname is invalid.\n> +It must follow the rules in git-check-ref-format(1).\n> +% list_files\n> +d .git/patches\n> +d .git/patches/master\n> +d .git/patches/master/dir\n> +d .git/patches/master/dir/subdir\n> +d .git/refs/patches\n> +d .git/refs/patches/master\n> +d .git/refs/patches/master/dir\n> +d .git/refs/patches/master/dir/subdir\n> +f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n> +f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n> +f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n> +f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n> +f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n> +f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n> +r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n> +% guilt new del\n> +Patchname is invalid.\n> +It must follow the rules in git-check-ref-format(1).\n> +% list_files\n> +d .git/patches\n> +d .git/patches/master\n> +d .git/patches/master/dir\n> +d .git/patches/master/dir/subdir\n> +d .git/refs/patches\n> +d .git/refs/patches/master\n> +d .git/refs/patches/master/dir\n> +d .git/refs/patches/master/dir/subdir\n> +f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n> +f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n> +f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n> +f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n> +f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n> +f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n> +r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n> +% guilt new tilde~\n> +Patchname is invalid.\n> +It must follow the rules in git-check-ref-format(1).\n> +% list_files\n> +d .git/patches\n> +d .git/patches/master\n> +d .git/patches/master/dir\n> +d .git/patches/master/dir/subdir\n> +d .git/refs/patches\n> +d .git/refs/patches/master\n> +d .git/refs/patches/master/dir\n> +d .git/refs/patches/master/dir/subdir\n> +f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n> +f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n> +f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n> +f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n> +f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n> +f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n> +r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n> +% guilt new caret^\n> +Patchname is invalid.\n> +It must follow the rules in git-check-ref-format(1).\n> +% list_files\n> +d .git/patches\n> +d .git/patches/master\n> +d .git/patches/master/dir\n> +d .git/patches/master/dir/subdir\n> +d .git/refs/patches\n> +d .git/refs/patches/master\n> +d .git/refs/patches/master/dir\n> +d .git/refs/patches/master/dir/subdir\n> +f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n> +f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n> +f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n> +f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n> +f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n> +f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n> +r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n> +% guilt new colon:\n> +Patchname is invalid.\n> +It must follow the rules in git-check-ref-format(1).\n> +% list_files\n> +d .git/patches\n> +d .git/patches/master\n> +d .git/patches/master/dir\n> +d .git/patches/master/dir/subdir\n> +d .git/refs/patches\n> +d .git/refs/patches/master\n> +d .git/refs/patches/master/dir\n> +d .git/refs/patches/master/dir/subdir\n> +f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n> +f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n> +f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n> +f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n> +f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n> +f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n> +r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n> +% guilt new questionmark?\n> +Patchname is invalid.\n> +It must follow the rules in git-check-ref-format(1).\n> +% list_files\n> +d .git/patches\n> +d .git/patches/master\n> +d .git/patches/master/dir\n> +d .git/patches/master/dir/subdir\n> +d .git/refs/patches\n> +d .git/refs/patches/master\n> +d .git/refs/patches/master/dir\n> +d .git/refs/patches/master/dir/subdir\n> +f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n> +f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n> +f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n> +f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n> +f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n> +f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n> +r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n> +% guilt new asterisk*\n> +Patchname is invalid.\n> +It must follow the rules in git-check-ref-format(1).\n> +% list_files\n> +d .git/patches\n> +d .git/patches/master\n> +d .git/patches/master/dir\n> +d .git/patches/master/dir/subdir\n> +d .git/refs/patches\n> +d .git/refs/patches/master\n> +d .git/refs/patches/master/dir\n> +d .git/refs/patches/master/dir/subdir\n> +f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n> +f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n> +f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n> +f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n> +f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n> +f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n> +r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n> +% guilt new open[bracket\n> +Patchname is invalid.\n> +It must follow the rules in git-check-ref-format(1).\n> +% list_files\n> +d .git/patches\n> +d .git/patches/master\n> +d .git/patches/master/dir\n> +d .git/patches/master/dir/subdir\n> +d .git/refs/patches\n> +d .git/refs/patches/master\n> +d .git/refs/patches/master/dir\n> +d .git/refs/patches/master/dir/subdir\n> +f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n> +f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n> +f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n> +f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n> +f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n> +f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n> +r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n> +% guilt new consecutive//slashes\n> +Patchname is invalid.\n> +It must follow the rules in git-check-ref-format(1).\n> +% list_files\n> +d .git/patches\n> +d .git/patches/master\n> +d .git/patches/master/dir\n> +d .git/patches/master/dir/subdir\n> +d .git/refs/patches\n> +d .git/refs/patches/master\n> +d .git/refs/patches/master/dir\n> +d .git/refs/patches/master/dir/subdir\n> +f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n> +f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n> +f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n> +f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n> +f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n> +f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n> +r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n> +% guilt new trailing-dot.\n> +Patchname is invalid.\n> +It must follow the rules in git-check-ref-format(1).\n> +% list_files\n> +d .git/patches\n> +d .git/patches/master\n> +d .git/patches/master/dir\n> +d .git/patches/master/dir/subdir\n> +d .git/refs/patches\n> +d .git/refs/patches/master\n> +d .git/refs/patches/master/dir\n> +d .git/refs/patches/master/dir/subdir\n> +f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n> +f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n> +f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n> +f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n> +f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n> +f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n> +r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n> +% guilt new bad@{seq\n> +Patchname is invalid.\n> +It must follow the rules in git-check-ref-format(1).\n> +% list_files\n> +d .git/patches\n> +d .git/patches/master\n> +d .git/patches/master/dir\n> +d .git/patches/master/dir/subdir\n> +d .git/refs/patches\n> +d .git/refs/patches/master\n> +d .git/refs/patches/master/dir\n> +d .git/refs/patches/master/dir/subdir\n> +f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n> +f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n> +f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n> +f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n> +f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n> +f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n> +r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n> +% guilt new @\n> +Patchname is invalid.\n> +It must follow the rules in git-check-ref-format(1).\n> +% list_files\n> +d .git/patches\n> +d .git/patches/master\n> +d .git/patches/master/dir\n> +d .git/patches/master/dir/subdir\n> +d .git/refs/patches\n> +d .git/refs/patches/master\n> +d .git/refs/patches/master/dir\n> +d .git/refs/patches/master/dir/subdir\n> +f 1ef04b4f4149870b3f06b5f99b9d9fc260cebc67  .git/patches/master/series\n> +f 22930c6d1f1938f298a4fca51c57e4b47171db21  .git/patches/master/mode\n> +f 413390f3906f16f30b054a4fb86c1e014b964504  .git/patches/master/remove\n> +f 7ce0ecd062afe46bf743d0d63dbe79e18774fe03  .git/patches/master/status\n> +f 9c18cc7abe6b87f18503714a80a677b4094eb457  .git/patches/master/add\n> +f bc9ab2e0f5db99d483961e956e814d963f0309f8  .git/patches/master/modify\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/append\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/dir/subdir/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/file\n> +f da39a3ee5e6b4b0d3255bfef95601890afd80709  .git/patches/master/prepend\n> +r acdeef96ee30eb34bbbf65d11de5cf7da4b5fee8  .git/refs/patches/master/prepend\n> +% guilt new backslash\\\n> +Patchname is invalid.\n> +It must follow the rules in git-check-ref-format(1).\n>  % list_files\n>  d .git/patches\n>  d .git/patches/master\n> diff --git a/regression/t-025.sh b/regression/t-025.sh\n> index 985fed4..8c439fc 100755\n> --- a/regression/t-025.sh\n> +++ b/regression/t-025.sh\n> @@ -43,7 +43,17 @@ shouldfail guilt new \"white space\"\n>  \n>  cmd list_files\n>  \n> -for pname in prepend mode /abc ./blah ../blah abc/./blah abc/../blah abc/. abc/.. abc/ ; do\n> +b()\n> +{\n> +    printf \"%b\" \"$1\"\n> +}\n> +\n> +for pname in prepend mode /abc ./blah ../blah abc/./blah abc/../blah abc/. \\\n> +\tabc/.. abc/ abc.lock a/b.lock/c `b 'cr\\r'` `b 'ctrl-a\\001'` \\\n> +\t`b 'formfeed\\f'` `b 'del\\177'` \"tilde~\" \"caret^\" \"colon:\" \\\n> +\t\"questionmark?\" \"asterisk*\" \"open[bracket\" \"consecutive//slashes\" \\\n> +\t\"trailing-dot.\" \"bad@{seq\" \"@\" \"backslash\\\\\"\n> +do\n>  \tshouldfail guilt new \"$pname\"\n>  \n>  \tcmd list_files\n> diff --git a/regression/t-032.out b/regression/t-032.out\n> index 53f0370..4e65db0 100644\n> --- a/regression/t-032.out\n> +++ b/regression/t-032.out\n> @@ -1,7 +1,7 @@\n>  % setup_repo\n>  % touch foo foo:baz\n>  % guilt import -P foo:bar foo\n> -The specified patch name contains invalid characters (:).\n> +The specified patch name is invalid according to git-check-ref-format(1).\n>  % guilt import -P foo:bar foo2\n>  Specified file does not exist.\n>  % guilt import -P foo foo2\n> @@ -15,4 +15,4 @@ Already tracking a patch under that name.\n>  Already tracking a patch under that name.\n>  % guilt import -P foo,bar foo\n>  % guilt import foo:baz\n> -The specified patch name contains invalid characters (:).\n> +The specified patch name is invalid according to git-check-ref-format(1).\n> -- \n> 1.8.3.1\n> \n\n-- \nWhat is the difference between Mechanical Engineers and Civil Engineers?\nMechanical Engineers build weapons, Civil Engineers build targets.\n"},{"id":"255098","messageId":"20150122142746.GD101460@meili.jeffnet.31bits.net","threadId":"36691","inReplyTo":"1400450409-30998-10-git-send-email-cederp@opera.com","subject":"Re: [GUILT v4 09/33] Test suite: properly check the exit status of commands.","fromName":"Jeff Sipek","fromEmail":"jeffpc@josefsipek.net","sentAt":"2015-01-22T14:27:46Z","receivedAt":"2015-01-22T14:27:46Z","isPatch":false,"sender":{"key":"jeffpc@josefsipek.net","avatar":null},"body":"On Sun, May 18, 2014 at 11:59:45PM +0200, Per Cederqvist wrote:\n> The \"cmd\" and \"shouldfail\" functions checked the exit status of the\n> replace_path function instead of the actual command that was running.\n> (The $? construct checks the exit status of the last command in a\n> pipeline, not the first command.)\n> \n> Print an explicit error message if a command that should fail actually\n> succeeds.\n\nThis is a god idea.\n\nThe patch still looks good.\n\nSigned-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n\n\n> Updated t-032.sh, which used \"shouldfail\" instead of \"cmd\" in one\n> place.  (The comment in the script makes it clear that the command is\n> expected to succeed.)\n> \n> Signed-off-by: Per Cederqvist <cederp@opera.com>\n> ---\n>  regression/scaffold | 23 ++++++++++++++++-------\n>  regression/t-032.sh |  2 +-\n>  2 files changed, 17 insertions(+), 8 deletions(-)\n> \n> diff --git a/regression/scaffold b/regression/scaffold\n> index 5c8b73e..2e04c83 100644\n> --- a/regression/scaffold\n> +++ b/regression/scaffold\n> @@ -51,19 +51,28 @@ function filter_dd\n>  function cmd\n>  {\n>  \techo \"% $@\"\n> -\t\"$@\" 2>&1 | replace_path && return 0\n> -\treturn 1\n> +\tif ! (\n> +\t\texec 3>&1\n> +\t\trv=`((\"$@\" 2>&1; echo $? >&4) | replace_path >&3 ) 4>&1`\n> +\t\texit $rv\n> +\t) ; then\n> +\t\techo \"% FAIL: The above command should succeed but failed.\"\n> +\t\texit 1\n> +\tfi\n>  }\n>  \n>  # usage: shouldfail <cmd>..\n>  function shouldfail\n>  {\n>  \techo \"% $@\"\n> -\t(\n> -\t\t\"$@\" 2>&1 || return 0\n> -\t\treturn 1\n> -\t) | replace_path\n> -\treturn $?\n> +\tif (\n> +\t\texec 3>&1\n> +\t\trv=`((\"$@\" 2>&1; echo $? >&4) | replace_path >&3 ) 4>&1`\n> +\t\texit $rv\n> +\t) ; then\n> +\t\techo \"% FAIL: The above command should fail but succeeded.\"\n> +\t\texit 1\n> +\tfi\n>  }\n>  \n>  # usage: list_files\n> diff --git a/regression/t-032.sh b/regression/t-032.sh\n> index b1d5f19..bba401e 100755\n> --- a/regression/t-032.sh\n> +++ b/regression/t-032.sh\n> @@ -28,7 +28,7 @@ shouldfail guilt import -P foo3 foo\n>  cmd guilt import -P foo2 foo\n>  \n>  # ok\n> -shouldfail guilt import foo\n> +cmd guilt import foo\n>  \n>  # duplicate patch name (implicit)\n>  shouldfail guilt import foo\n> -- \n> 1.8.3.1\n> \n\n-- \nIntellectuals solve problems; geniuses prevent them\n\t\t- Albert Einstein\n"},{"id":"255099","messageId":"20150122143148.GE101460@meili.jeffnet.31bits.net","threadId":"36691","inReplyTo":"1400450409-30998-34-git-send-email-cederp@opera.com","subject":"Re: [GUILT v4 33/33] Document the exit status of guilt push and guilt pop.","fromName":"Jeff Sipek","fromEmail":"jeffpc@josefsipek.net","sentAt":"2015-01-22T14:31:49Z","receivedAt":"2015-01-22T14:31:49Z","isPatch":false,"sender":{"key":"jeffpc@josefsipek.net","avatar":null},"body":"Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n\n\nOk, I think this is all of the patches.  I'll wait for you to tell me if the\ncmd() echo to printf change breaks anything for you.  If not, I'll pull your\nseries (via git), tag a 0.36-rc1, and push the whole thing to repo.or.cz. :)\n\nSorry for making this take so long :(\n\nJeff.\n\nOn Mon, May 19, 2014 at 12:00:09AM +0200, Per Cederqvist wrote:\n> ---\n>  Documentation/guilt-pop.txt  | 3 +++\n>  Documentation/guilt-push.txt | 3 +++\n>  2 files changed, 6 insertions(+)\n> \n> diff --git a/Documentation/guilt-pop.txt b/Documentation/guilt-pop.txt\n> index 36fea9e..b0b89cc 100644\n> --- a/Documentation/guilt-pop.txt\n> +++ b/Documentation/guilt-pop.txt\n> @@ -26,6 +26,9 @@ OPTIONS\n>  \n>  If no patchname is given, pop the top-most patch.\n>  \n> +Exit with a non-zero exit status if requested to pop more patches\n> +than there are on the stack.\n> +\n>  Author\n>  ------\n>  Written by Josef \"Jeff\" Sipek <jeffpc@josefsipek.net>\n> diff --git a/Documentation/guilt-push.txt b/Documentation/guilt-push.txt\n> index 6ee86b9..6439f21 100644\n> --- a/Documentation/guilt-push.txt\n> +++ b/Documentation/guilt-push.txt\n> @@ -26,6 +26,9 @@ OPTIONS\n>  \n>  If no patchname is given, push the next patch in the series onto the tree.\n>  \n> +Exit with a non-zero exit status if requested to push more patches\n> +than there are in the series.\n> +\n>  Author\n>  ------\n>  Written by Josef \"Jeff\" Sipek <jeffpc@josefsipek.net>\n> -- \n> 1.8.3.1\n> \n\n-- \nComputer Science is no more about computers than astronomy is about\ntelescopes.\n\t\t- Edsger Dijkstra\n"},{"id":"255104","messageId":"CAP=KgsTjLT5xqy0G1vc9RFa85gpAxtOfGcT+KuqVro7QHXaLrw@mail.gmail.com","threadId":"36691","inReplyTo":"20150122141545.GB101460@meili.jeffnet.31bits.net","subject":"Re: [GUILT v4 15/33] Produce legal patch names in guilt-import-commit.","fromName":"Per Cederqvist","fromEmail":"cederp@opera.com","sentAt":"2015-01-22T15:50:51Z","receivedAt":"2015-01-22T15:50:51Z","isPatch":false,"sender":{"key":"cederp@opera.com","avatar":"https://gravatar.com/avatar/008fe28caedea0ba34042cd5157705267934f4ba7a9b29fb248ae18ec5b3055e?d=mp&s=160"},"body":"Replacing echo with printf as in your patch works fine for me.\n\nI've applied Signed-off-by lines from you for the latest commits,\nrebased it on top of your current master commit, and pushed\nthe series to the oslo-2014-v5 branch of git://repo.or.cz/guilt/ceder.git\n\n    /ceder\n\nOn Thu, Jan 22, 2015 at 3:15 PM, Jeff Sipek <jeffpc@josefsipek.net> wrote:\n> I just tried to run the regression suite on my OpenIndiana laptop and I got\n> this failure.\n>\n> 034: --- t-034.out      2015-01-22 14:02:23.634515474 +0000\n> +++ /tmp/guilt.log.14878        2015-01-22 14:03:54.258790788 +0000\n> @@ -83,7 +83,7 @@\n>  [master aedb74f] @\n>   Author: Author Name <author@email>\n>   1 file changed, 1 insertion(+)\n> -% create_commit a Backslash\\is\\forbidden.\n> +% create_commit a Backslash\\is\n>                                orbidden.\n>  [master 0a46f8f] Backslash\\is\\forbidden.\n>   Author: Author Name <author@email>\n>   1 file changed, 1 insertion(+)\n> Test failed!\n>\n> Test:           034\n> Log file:       /tmp/guilt.log.14878\n> Repo dir:       \"/tmp/guilt reg.12106\"\n>\n> make[1]: *** [all] Error 1\n>\n>\n> It's obviously the \"cmd\" command printing that's busted.  The following change\n> makes the test suite pass.  Does it work for you?  (If so, I'll commit it after\n> pulling your whole series.)\n>\n> Thanks,\n>\n> Jeff.\n>\n>\n> diff --git a/regression/scaffold b/regression/scaffold\n> index 97cff4e..593e9da 100644\n> --- a/regression/scaffold\n> +++ b/regression/scaffold\n> @@ -50,7 +50,7 @@ function filter_dd\n>  # usage: cmd <cmd>..\n>  function cmd\n>  {\n> -       echo \"% $@\"\n> +       printf \"%% %s\\n\" \"$*\"\n>         if ! (\n>                 exec 3>&1\n>                 rv=`((\"$@\" 2>&1; echo $? >&4) | replace_path >&3 ) 4>&1`\n>\n> On Sun, May 18, 2014 at 11:59:51PM +0200, Per Cederqvist wrote:\n>> Try harder to create patch names that adhere to the rules in\n>> git-check-ref-format(1) when deriving a patch name from the commit\n>> message.  Verify that the derived name using \"git check-ref-format\",\n>> and as a final fallback simply use the patch name \"x\" (to ensure that\n>> the code is future-proof in case new rules are added in the future).\n>>\n>> Always append a \".patch\" suffix to the patch name.\n>>\n>> Added test cases.\n>>\n>> Signed-off-by: Per Cederqvist <cederp@opera.com>\n>> Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>\n>> ---\n>>  guilt-import-commit  |  20 +-\n>>  regression/t-034.out | 567 +++++++++++++++++++++++++++++++++++++++++++++++++++\n>>  regression/t-034.sh  |  71 +++++++\n>>  3 files changed, 656 insertions(+), 2 deletions(-)\n>>  create mode 100644 regression/t-034.out\n>>  create mode 100755 regression/t-034.sh\n>>\n>> diff --git a/guilt-import-commit b/guilt-import-commit\n>> index f14647c..6260c56 100755\n>> --- a/guilt-import-commit\n>> +++ b/guilt-import-commit\n>> @@ -28,19 +28,35 @@ disp \"Current head: `git rev-parse \\`git_branch\\``\" >&2\n>>  for rev in `git rev-list $rhash`; do\n>>       s=`git log --pretty=oneline -1 $rev | cut -c 42-`\n>>\n>> +     # Try to convert the first line of the commit message to a\n>> +     # valid patch name.\n>>       fname=`echo $s | sed -e \"s/&/and/g\" -e \"s/[ :]/_/g\" -e \"s,[/\\\\],-,g\" \\\n>>                       -e \"s/['\\\\[{}]//g\" -e 's/]//g' -e 's/\\*/-/g' \\\n>> -                     -e 's/\\?/-/g' | tr A-Z a-z`\n>> +                     -e 's/\\?/-/g' -e 's/\\.\\.\\.*/./g' -e 's/^\\.//' \\\n>> +                     -e 's/\\.patch$//' -e 's/\\.$//' | tr A-Z a-z`\n>> +\n>> +     if ! valid_patchname \"$fname\"; then\n>> +             # Try harder to make it a legal commit name by\n>> +             # removing all but a few safe characters.\n>> +             fname=`echo $fname|tr -d -c _a-zA-Z0-9---/\\\\n`\n>> +     fi\n>> +     if ! valid_patchname \"$fname\"; then\n>> +             # If we failed to derive a legal patch name, use the\n>> +             # name \"x\".  (If this happens, we likely have to\n>> +             # append a suffix to make the name unique.)\n>> +             fname=x\n>> +     fi\n>>\n>>       disp \"Converting `echo $rev | cut -c 1-8` as $fname\"\n>>\n>>       mangle_prefix=1\n>>       fname_base=$fname\n>> -     while [ -f \"$GUILT_DIR/$branch/$fname\" ]; do\n>> +     while [ -f \"$GUILT_DIR/$branch/$fname.patch\" ]; do\n>>               fname=\"$fname_base-$mangle_prefix\"\n>>               mangle_prefix=`expr $mangle_prefix + 1`\n>>               disp \"Patch under that name exists...trying '$fname'\"\n>>       done\n>> +     fname=\"$fname\".patch\n>>\n>>       (\n>>               do_make_header $rev\n>> diff --git a/regression/t-034.out b/regression/t-034.out\n>> new file mode 100644\n>> index 0000000..7bc9459\n>> --- /dev/null\n>> +++ b/regression/t-034.out\n>> @@ -0,0 +1,567 @@\n>> +% setup_git_repo\n>> +% git tag base\n>> +% create_commit a The sequence /. is forbidden.\n>> +[master eebb76e] The sequence /. is forbidden.\n>> + Author: Author Name <author@email>\n>> + 1 file changed, 1 insertion(+)\n>> + create mode 100644 a\n>> +% create_commit a The sequence .lock/ is forbidden.\n>> +[master 45e81b5] The sequence .lock/ is forbidden.\n>> + Author: Author Name <author@email>\n>> + 1 file changed, 1 insertion(+)\n>> +% create_commit a A/component/may/not/end/in/foo.lock\n>> +[master bbf3f59] A/component/may/not/end/in/foo.lock\n>> + Author: Author Name <author@email>\n>> + 1 file changed, 1 insertion(+)\n>> +% create_commit a Two consecutive dots (..) is forbidden.\n>> +[master 1535e67] Two consecutive dots (..) is forbidden.\n>> + Author: Author Name <author@email>\n>> + 1 file changed, 1 insertion(+)\n>> +% create_commit a Check/multiple/../dots/...../foo..patch\n>> +[master 48eb60c] Check/multiple/../dots/...../foo..patch\n>> + Author: Author Name <author@email>\n>> + 1 file changed, 1 insertion(+)\n>> +% create_commit a Space is forbidden.\n>> +[master 10dea83] Space is forbidden.\n>> + Author: Author Name <author@email>\n>> + 1 file changed, 1 insertion(+)\n>> +% create_commit a Tilde~is~forbidden.\n>> +[master 70a83b7] Tilde~is~forbidden.\n>> + Author: Author Name <author@email>\n>> + 1 file changed, 1 insertion(+)\n>> +% create_commit a Caret^is^forbidden.\n>> +[master ee6ef2c] Caret^is^forbidden.\n>> + Author: Author Name <author@email>\n>> + 1 file changed, 1 insertion(+)\n>> +% create_commit a Colon:is:forbidden.\n>> +[master c077fe2] Colon:is:forbidden.\n>> + Author: Author Name <author@email>\n>> + 1 file changed, 1 insertion(+)\n>> +% create_commit a Del is forbidden.\n>> +[master 589ee30] Del is forbidden.\n>> + Author: Author Name <author@email>\n>> + 1 file changed, 1 insertion(+)\n>> +% git branch some-branch\n>> +% git tag some-tag\n>> +% create_commit a Ctrl is forbidden.\n>> +[master e63cdde] Ctrl is forbidden.\n>> + Author: Author Name <author@email>\n>> + 1 file changed, 1 insertion(+)\n>> +% create_commit a CR\n>> is\n>> also\n>> forbidden.\n>> +[master 21ad093] CR\n>> is\n>> also\n>> forbidden.\n>> + Author: Author Name <author@email>\n>> + 1 file changed, 1 insertion(+)\n>> +% create_commit a Question-mark?is?forbidden.\n>> +[master be2fa9b] Question-mark?is?forbidden.\n>> + Author: Author Name <author@email>\n>> + 1 file changed, 1 insertion(+)\n>> +% create_commit a Asterisk*is*forbidden.\n>> +[master af7b50f] Asterisk*is*forbidden.\n>> + Author: Author Name <author@email>\n>> + 1 file changed, 1 insertion(+)\n>> +% create_commit a Open[bracket[is[forbidden.\n>> +[master 689f618] Open[bracket[is[forbidden.\n>> + Author: Author Name <author@email>\n>> + 1 file changed, 1 insertion(+)\n>> +% create_commit a Multiple/slashes//are//forbidden.\n>> +[master 6e7d52a] Multiple/slashes//are//forbidden.\n>> + Author: Author Name <author@email>\n>> + 1 file changed, 1 insertion(+)\n>> +% create_commit a Cannot/end/in/slash/\n>> +[master 95bb6cd] Cannot/end/in/slash/\n>> + Author: Author Name <author@email>\n>> + 1 file changed, 1 insertion(+)\n>> +% create_commit a Cannot end in ..\n>> +[master 106e8e5] Cannot end in ..\n>> + Author: Author Name <author@email>\n>> + 1 file changed, 1 insertion(+)\n>> +% create_commit a Cannot@{have@{the@{sequence@{at-brace.\n>> +[master 30187ed] Cannot@{have@{the@{sequence@{at-brace.\n>> + Author: Author Name <author@email>\n>> + 1 file changed, 1 insertion(+)\n>> +% create_commit a @\n>> +[master aedb74f] @\n>> + Author: Author Name <author@email>\n>> + 1 file changed, 1 insertion(+)\n>> +% create_commit a Backslash\\is\\forbidden.\n>> +[master 0a46f8f] Backslash\\is\\forbidden.\n>> + Author: Author Name <author@email>\n>> + 1 file changed, 1 insertion(+)\n>> +% create_commit a Can/have/embedded/single/slashes\n>> +[master 2a8b188] Can/have/embedded/single/slashes\n>> + Author: Author Name <author@email>\n>> + 1 file changed, 1 insertion(+)\n>> +% git log\n>> +commit 2a8b1889aa5066193bac978e6bf5073ffcfa6541\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Can/have/embedded/single/slashes\n>> +\n>> +commit 0a46f8fa7c8c5a6f1039f842fe5cbd21d3a2a2a6\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Backslash\\is\\forbidden.\n>> +\n>> +commit aedb74fd8388282fd7af50cb191a7f62bfc45eb5\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    @\n>> +\n>> +commit 30187ed0f47d12df9cedcbb846647d0d52130c12\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Cannot@{have@{the@{sequence@{at-brace.\n>> +\n>> +commit 106e8e5a8cceec7297af97376ca5f93506643d0b\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Cannot end in ..\n>> +\n>> +commit 95bb6cd7edf7b1e634a1e7d02c8faa99e39cbbf2\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Cannot/end/in/slash/\n>> +\n>> +commit 6e7d52a7dacc684225c11b4edd2bac25fb52bd9b\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Multiple/slashes//are//forbidden.\n>> +\n>> +commit 689f618085195775d204898254154b8bb50897a5\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Open[bracket[is[forbidden.\n>> +\n>> +commit af7b50f93854bc5f46de5a389c1f3dea081eae2f\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Asterisk*is*forbidden.\n>> +\n>> +commit be2fa9b5c5788dc05c4036f1b8197a1d33169610\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Question-mark?is?forbidden.\n>> +\n>> +commit 21ad093a0c1b4a96285180a3d7b99a4045ef9202\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    CR\n>> is\n>> also\n>> forbidden.\n>> +\n>> +commit e63cdde7a1c90b66d7d411683528200f3f067d5f\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Ctrl is forbidden.\n>> +\n>> +commit 589ee305a82aacf155529e75cbc84e661c37c83d\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Del is forbidden.\n>> +\n>> +commit c077fe203fd18036fb00b56eec1763673d1769c6\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Colon:is:forbidden.\n>> +\n>> +commit ee6ef2cc9dd5525409300377b013c0d9734bd931\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Caret^is^forbidden.\n>> +\n>> +commit 70a83b705a2602a9493aba7f8f22e7abd13adc63\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Tilde~is~forbidden.\n>> +\n>> +commit 10dea8380135f4d10cd10324e13da659261ceda3\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Space is forbidden.\n>> +\n>> +commit 48eb60cddaefdaac5f78655f9028a9da741a18d1\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Check/multiple/../dots/...../foo..patch\n>> +\n>> +commit 1535e67718949abf72f843685a1672ebfe4bd21f\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Two consecutive dots (..) is forbidden.\n>> +\n>> +commit bbf3f5926e11d97b08cdb6e833c9deb603453d1b\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    A/component/may/not/end/in/foo.lock\n>> +\n>> +commit 45e81b5163ec3ed656b058ac3fd95b8986824e0f\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    The sequence .lock/ is forbidden.\n>> +\n>> +commit eebb76e96913d2dc78aef5f233fadc74af770b3b\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    The sequence /. is forbidden.\n>> +\n>> +commit d4850419ccc1146c7169f500725ce504b9774ed0\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    initial\n>> +\n>> +    Signed-off-by: Commiter Name <commiter@email>\n>> +% guilt init\n>> +% guilt import-commit base..HEAD\n>> +About to begin conversion...\n>> +Current head: 2a8b1889aa5066193bac978e6bf5073ffcfa6541\n>> +Converting 2a8b1889 as can-have-embedded-single-slashes\n>> +Converting 0a46f8fa as backslash-isorbidden\n>> +Converting aedb74fd as x\n>> +Converting 30187ed0 as cannot@have@the@sequence@at-brace\n>> +Converting 106e8e5a as cannot_end_in_\n>> +Converting 95bb6cd7 as cannot-end-in-slash-\n>> +Converting 6e7d52a7 as multiple-slashes--are--forbidden\n>> +Converting 689f6180 as openbracketisforbidden\n>> +Converting af7b50f9 as asterisk-is-forbidden\n>> +Converting be2fa9b5 as question-mark-is-forbidden\n>> +Converting 21ad093a as crisalsoforbidden\n>> +Converting e63cdde7 as ctrlisforbidden\n>> +Converting 589ee305 as delisforbidden\n>> +Converting c077fe20 as colon_is_forbidden\n>> +Converting ee6ef2cc as caretisforbidden\n>> +Converting 70a83b70 as tildeisforbidden\n>> +Converting 10dea838 as space_is_forbidden\n>> +Converting 48eb60cd as check-multiple-.-dots-.-foo\n>> +Converting 1535e677 as two_consecutive_dots_(.)_is_forbidden\n>> +Converting bbf3f592 as a-component-may-not-end-in-foolock\n>> +Converting 45e81b51 as the_sequence_.lock-_is_forbidden\n>> +Converting eebb76e9 as the_sequence_-._is_forbidden\n>> +Done.\n>> +Current head: d4850419ccc1146c7169f500725ce504b9774ed0\n>> +% guilt push -a\n>> +Applying patch..the_sequence_-._is_forbidden.patch\n>> +Patch applied.\n>> +Applying patch..the_sequence_.lock-_is_forbidden.patch\n>> +Patch applied.\n>> +Applying patch..a-component-may-not-end-in-foolock.patch\n>> +Patch applied.\n>> +Applying patch..two_consecutive_dots_(.)_is_forbidden.patch\n>> +Patch applied.\n>> +Applying patch..check-multiple-.-dots-.-foo.patch\n>> +Patch applied.\n>> +Applying patch..space_is_forbidden.patch\n>> +Patch applied.\n>> +Applying patch..tildeisforbidden.patch\n>> +Patch applied.\n>> +Applying patch..caretisforbidden.patch\n>> +Patch applied.\n>> +Applying patch..colon_is_forbidden.patch\n>> +Patch applied.\n>> +Applying patch..delisforbidden.patch\n>> +Patch applied.\n>> +Applying patch..ctrlisforbidden.patch\n>> +Patch applied.\n>> +Applying patch..crisalsoforbidden.patch\n>> +Patch applied.\n>> +Applying patch..question-mark-is-forbidden.patch\n>> +Patch applied.\n>> +Applying patch..asterisk-is-forbidden.patch\n>> +Patch applied.\n>> +Applying patch..openbracketisforbidden.patch\n>> +Patch applied.\n>> +Applying patch..multiple-slashes--are--forbidden.patch\n>> +Patch applied.\n>> +Applying patch..cannot-end-in-slash-.patch\n>> +Patch applied.\n>> +Applying patch..cannot_end_in_.patch\n>> +Patch applied.\n>> +Applying patch..cannot@have@the@sequence@at-brace.patch\n>> +Patch applied.\n>> +Applying patch..x.patch\n>> +Patch applied.\n>> +Applying patch..backslash-isorbidden.patch\n>> +Patch applied.\n>> +Applying patch..can-have-embedded-single-slashes.patch\n>> +Patch applied.\n>> +% git log --decorate\n>> +commit 434e07cacdd8e7eb4723e67cb2d100b3a4121a3a (HEAD, refs/patches/master/can-have-embedded-single-slashes.patch, guilt/master)\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Can/have/embedded/single/slashes\n>> +\n>> +commit 7c3ffa4f940c862e9f11f5d4a5ae421f7a8d3141 (refs/patches/master/backslash-isorbidden.patch)\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Backslash\\is\\forbidden.\n>> +\n>> +commit ea46f435d4d8f3c5349dce1aabc1a39fbf7ef803 (refs/patches/master/x.patch)\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    @\n>> +\n>> +commit a275ed5d7f10ea88c986852ee95a7d5a61663b5f (refs/patches/master/cannot@have@the@sequence@at-brace.patch)\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Cannot@{have@{the@{sequence@{at-brace.\n>> +\n>> +commit f091fee39457e64ebd35410c1cf95e6613816a54 (refs/patches/master/cannot_end_in_.patch)\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Cannot end in ..\n>> +\n>> +commit 025672497aff5c910c8ff86aaedc662f14c2f4ad (refs/patches/master/cannot-end-in-slash-.patch)\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Cannot/end/in/slash/\n>> +\n>> +commit f13e243c7c56f39422567a431bccceec8b789596 (refs/patches/master/multiple-slashes--are--forbidden.patch)\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Multiple/slashes//are//forbidden.\n>> +\n>> +commit edef5e925083d445f71c170d3293fac9619bc7a2 (refs/patches/master/openbracketisforbidden.patch)\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Open[bracket[is[forbidden.\n>> +\n>> +commit 1626a11d979a1e9e775c766484172212277153df (refs/patches/master/asterisk-is-forbidden.patch)\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Asterisk*is*forbidden.\n>> +\n>> +commit 74df14ab3a0ec9a0382998fbf167ebb1b0a36c6a (refs/patches/master/question-mark-is-forbidden.patch)\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Question-mark?is?forbidden.\n>> +\n>> +commit ec46429125abdb0c5ac2b46cc399bdcd7cfc73fd (refs/patches/master/crisalsoforbidden.patch)\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    CR\n>> is\n>> also\n>> forbidden.\n>> +\n>> +commit 01524f9921af2a041cc88c068f76baa39e436cb2 (refs/patches/master/ctrlisforbidden.patch)\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Ctrl is forbidden.\n>> +\n>> +commit 9fc9677b61880f9159838e89f714893e0a2fcafb (refs/patches/master/delisforbidden.patch)\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Del is forbidden.\n>> +\n>> +commit 10433fd7206b7f79aabb4da514710d93c8deed4a (refs/patches/master/colon_is_forbidden.patch)\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Colon:is:forbidden.\n>> +\n>> +commit fb1edb753c97ec865ceea316420b1df586caaa2b (refs/patches/master/caretisforbidden.patch)\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Caret^is^forbidden.\n>> +\n>> +commit 3a0d5ccef0359004fcaa9cee98fbd6a2c4432e74 (refs/patches/master/tildeisforbidden.patch)\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Tilde~is~forbidden.\n>> +\n>> +commit ea22c3b49c448dba8d7eaa6b805f9f1bc83fbedc (refs/patches/master/space_is_forbidden.patch)\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Space is forbidden.\n>> +\n>> +commit db6ea8252440b04811344336f510a5469b2ddab0 (refs/patches/master/check-multiple-.-dots-.-foo.patch)\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Check/multiple/../dots/...../foo..patch\n>> +\n>> +commit fe07105cd62660f4440ad24b9fc7dfdd9e71d764 (refs/patches/master/two_consecutive_dots_(.)_is_forbidden.patch)\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Two consecutive dots (..) is forbidden.\n>> +\n>> +commit 96a3e92c4df85f52362ce4f6d31983c462db9ae9 (refs/patches/master/a-component-may-not-end-in-foolock.patch)\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    A/component/may/not/end/in/foo.lock\n>> +\n>> +commit ee4f0f96dfc9c94f5410c1e6414f9004325a37fc (refs/patches/master/the_sequence_.lock-_is_forbidden.patch)\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    The sequence .lock/ is forbidden.\n>> +\n>> +commit fdcb23c3072209bea3d9e0a2594132b936c5347e (refs/patches/master/the_sequence_-._is_forbidden.patch)\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    The sequence /. is forbidden.\n>> +\n>> +commit d4850419ccc1146c7169f500725ce504b9774ed0 (tag: base, master)\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    initial\n>> +\n>> +    Signed-off-by: Commiter Name <commiter@email>\n>> +% git log --decorate some-branch\n>> +commit 589ee305a82aacf155529e75cbc84e661c37c83d (tag: some-tag, some-branch)\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Del is forbidden.\n>> +\n>> +commit c077fe203fd18036fb00b56eec1763673d1769c6\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Colon:is:forbidden.\n>> +\n>> +commit ee6ef2cc9dd5525409300377b013c0d9734bd931\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Caret^is^forbidden.\n>> +\n>> +commit 70a83b705a2602a9493aba7f8f22e7abd13adc63\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Tilde~is~forbidden.\n>> +\n>> +commit 10dea8380135f4d10cd10324e13da659261ceda3\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Space is forbidden.\n>> +\n>> +commit 48eb60cddaefdaac5f78655f9028a9da741a18d1\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Check/multiple/../dots/...../foo..patch\n>> +\n>> +commit 1535e67718949abf72f843685a1672ebfe4bd21f\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    Two consecutive dots (..) is forbidden.\n>> +\n>> +commit bbf3f5926e11d97b08cdb6e833c9deb603453d1b\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    A/component/may/not/end/in/foo.lock\n>> +\n>> +commit 45e81b5163ec3ed656b058ac3fd95b8986824e0f\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    The sequence .lock/ is forbidden.\n>> +\n>> +commit eebb76e96913d2dc78aef5f233fadc74af770b3b\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    The sequence /. is forbidden.\n>> +\n>> +commit d4850419ccc1146c7169f500725ce504b9774ed0 (tag: base, master)\n>> +Author: Author Name <author@email>\n>> +Date:   Mon Jan 1 00:00:00 2007 +0000\n>> +\n>> +    initial\n>> +\n>> +    Signed-off-by: Commiter Name <commiter@email>\n>> +% list_files\n>> +d .git/patches\n>> +d .git/patches/master\n>> +d .git/refs/patches\n>> +d .git/refs/patches/master\n>> +f 06beca7069b9e576bd431f65d13862ed5d3e2a0f  .git/patches/master/ctrlisforbidden.patch\n>> +f 08267ec6783ea9d1adae55b275198f7594764ed0  .git/patches/master/series\n>> +f 08267ec6783ea9d1adae55b275198f7594764ed0  .git/patches/master/status\n>> +f 09b7e9be44ae5ec3a4bb30f5ee9d4ebc2c042f64  .git/patches/master/two_consecutive_dots_(.)_is_forbidden.patch\n>> +f 0b971c9a17aeca2319c93d700ffd98acc2a93451  .git/patches/master/question-mark-is-forbidden.patch\n>> +f 2b8392f63d61efc12add554555adae30883993cc  .git/patches/master/cannot-end-in-slash-.patch\n>> +f 2cd7c9ad392e071be03c051c6793e9b1e31d33c4  .git/patches/master/can-have-embedded-single-slashes.patch\n>> +f 3136e448a4c820f6d2642f9d894c4087d3d109ab  .git/patches/master/cannot_end_in_.patch\n>> +f 34e07c584032df137f19bdb66d93f316f00a5ac8  .git/patches/master/tildeisforbidden.patch\n>> +f 49bab499826b63deb2bd704629d60c7268c57aee  .git/patches/master/the_sequence_-._is_forbidden.patch\n>> +f 5bcddb8ccb6e6e5e8a61e9e56cb2e0f70cbab2f5  .git/patches/master/cannot@have@the@sequence@at-brace.patch\n>> +f 637b982fe14a240de181ae63226b27e0c406b3dc  .git/patches/master/asterisk-is-forbidden.patch\n>> +f 698f8a7d41a64e3b6be1a3eba86574078b22a5f3  .git/patches/master/backslash-isorbidden.patch\n>> +f 7b103c3c7ae298cd2334f6f49da48bae1424f77b  .git/patches/master/crisalsoforbidden.patch\n>> +f 9b810b8c63779c51d2e7f61ab59cd49835041563  .git/patches/master/x.patch\n>> +f a22958d9ae9976fd7b2b5a9d0bcd44bf7ad9b08a  .git/patches/master/caretisforbidden.patch\n>> +f ab325bf5a432937fc6f231d3e8a773a62d53952b  .git/patches/master/multiple-slashes--are--forbidden.patch\n>> +f cb9cffbd4465bddee266c20ccebd14eb687eaa89  .git/patches/master/delisforbidden.patch\n>> +f d0885a1a1fdee0fd1e4fedce3f7acd3100540bc4  .git/patches/master/openbracketisforbidden.patch\n>> +f d2903523fb66a346596eabbdd1bda4e52b266440  .git/patches/master/check-multiple-.-dots-.-foo.patch\n>> +f dfc11f76394059909671af036598c5fbe33001ba  .git/patches/master/space_is_forbidden.patch\n>> +f e47474c52d6c893f36d0457f885a6dd1267742bb  .git/patches/master/colon_is_forbidden.patch\n>> +f e7a5f8912592d9891e6159f5827c8b4f372cc406  .git/patches/master/the_sequence_.lock-_is_forbidden.patch\n>> +f edfaa5e06bd662ae1f6a642834324fd9b849bbd9  .git/patches/master/a-component-may-not-end-in-foolock.patch\n>> +r 01524f9921af2a041cc88c068f76baa39e436cb2  .git/refs/patches/master/ctrlisforbidden.patch\n>> +r 025672497aff5c910c8ff86aaedc662f14c2f4ad  .git/refs/patches/master/cannot-end-in-slash-.patch\n>> +r 10433fd7206b7f79aabb4da514710d93c8deed4a  .git/refs/patches/master/colon_is_forbidden.patch\n>> +r 1626a11d979a1e9e775c766484172212277153df  .git/refs/patches/master/asterisk-is-forbidden.patch\n>> +r 3a0d5ccef0359004fcaa9cee98fbd6a2c4432e74  .git/refs/patches/master/tildeisforbidden.patch\n>> +r 434e07cacdd8e7eb4723e67cb2d100b3a4121a3a  .git/refs/patches/master/can-have-embedded-single-slashes.patch\n>> +r 74df14ab3a0ec9a0382998fbf167ebb1b0a36c6a  .git/refs/patches/master/question-mark-is-forbidden.patch\n>> +r 7c3ffa4f940c862e9f11f5d4a5ae421f7a8d3141  .git/refs/patches/master/backslash-isorbidden.patch\n>> +r 96a3e92c4df85f52362ce4f6d31983c462db9ae9  .git/refs/patches/master/a-component-may-not-end-in-foolock.patch\n>> +r 9fc9677b61880f9159838e89f714893e0a2fcafb  .git/refs/patches/master/delisforbidden.patch\n>> +r a275ed5d7f10ea88c986852ee95a7d5a61663b5f  .git/refs/patches/master/cannot@have@the@sequence@at-brace.patch\n>> +r db6ea8252440b04811344336f510a5469b2ddab0  .git/refs/patches/master/check-multiple-.-dots-.-foo.patch\n>> +r ea22c3b49c448dba8d7eaa6b805f9f1bc83fbedc  .git/refs/patches/master/space_is_forbidden.patch\n>> +r ea46f435d4d8f3c5349dce1aabc1a39fbf7ef803  .git/refs/patches/master/x.patch\n>> +r ec46429125abdb0c5ac2b46cc399bdcd7cfc73fd  .git/refs/patches/master/crisalsoforbidden.patch\n>> +r edef5e925083d445f71c170d3293fac9619bc7a2  .git/refs/patches/master/openbracketisforbidden.patch\n>> +r ee4f0f96dfc9c94f5410c1e6414f9004325a37fc  .git/refs/patches/master/the_sequence_.lock-_is_forbidden.patch\n>> +r f091fee39457e64ebd35410c1cf95e6613816a54  .git/refs/patches/master/cannot_end_in_.patch\n>> +r f13e243c7c56f39422567a431bccceec8b789596  .git/refs/patches/master/multiple-slashes--are--forbidden.patch\n>> +r fb1edb753c97ec865ceea316420b1df586caaa2b  .git/refs/patches/master/caretisforbidden.patch\n>> +r fdcb23c3072209bea3d9e0a2594132b936c5347e  .git/refs/patches/master/the_sequence_-._is_forbidden.patch\n>> +r fe07105cd62660f4440ad24b9fc7dfdd9e71d764  .git/refs/patches/master/two_consecutive_dots_(.)_is_forbidden.patch\n>> +% guilt pop -a\n>> +All patches popped.\n>> diff --git a/regression/t-034.sh b/regression/t-034.sh\n>> new file mode 100755\n>> index 0000000..f41f958\n>> --- /dev/null\n>> +++ b/regression/t-034.sh\n>> @@ -0,0 +1,71 @@\n>> +#!/bin/bash\n>> +#\n>> +# Test import-commit\n>> +#\n>> +\n>> +function create_commit\n>> +{\n>> +     echo $1 >> $1 &&\n>> +             git add $1 &&\n>> +             git commit -m\"$2\"\n>> +}\n>> +\n>> +source \"$REG_DIR/scaffold\"\n>> +\n>> +b()\n>> +{\n>> +     printf \"%b\" \"$1\"\n>> +}\n>> +\n>> +cmd setup_git_repo\n>> +\n>> +cmd git tag base\n>> +\n>> +# Create a series of commits whose first line of the commit message\n>> +# each violates one of the rules in get-check-ref-format(1).\n>> +\n>> +cmd create_commit a \"The sequence /. is forbidden.\"\n>> +cmd create_commit a \"The sequence .lock/ is forbidden.\"\n>> +cmd create_commit a \"A/component/may/not/end/in/foo.lock\"\n>> +cmd create_commit a \"Two consecutive dots (..) is forbidden.\"\n>> +cmd create_commit a \"Check/multiple/../dots/...../foo..patch\"\n>> +cmd create_commit a \"Space is forbidden.\"\n>> +cmd create_commit a \"Tilde~is~forbidden.\"\n>> +cmd create_commit a \"Caret^is^forbidden.\"\n>> +cmd create_commit a \"Colon:is:forbidden.\"\n>> +cmd create_commit a `b 'Del\\177is\\177forbidden.'`\n>> +# Create a branch and a tag from the current commit, to ensure that\n>> +# doing so does not affect how the commit is imported.\n>> +cmd git branch some-branch\n>> +cmd git tag some-tag\n>> +cmd create_commit a `b 'Ctrl\\001is\\002forbidden.'`\n>> +cmd create_commit a `b 'CR\\ris\\ralso\\rforbidden.'`\n>> +cmd create_commit a \"Question-mark?is?forbidden.\"\n>> +cmd create_commit a \"Asterisk*is*forbidden.\"\n>> +cmd create_commit a \"Open[bracket[is[forbidden.\"\n>> +cmd create_commit a \"Multiple/slashes//are//forbidden.\"\n>> +cmd create_commit a \"Cannot/end/in/slash/\"\n>> +cmd create_commit a \"Cannot end in ..\"\n>> +cmd create_commit a \"Cannot@{have@{the@{sequence@{at-brace.\"\n>> +cmd create_commit a \"@\"\n>> +cmd create_commit a \"Backslash\\\\is\\\\forbidden.\"\n>> +\n>> +# Slash is sometimes allowed; this is not problematic.\n>> +cmd create_commit a \"Can/have/embedded/single/slashes\"\n>> +\n>> +cmd git log\n>> +\n>> +# Import all the commits to guilt.\n>> +cmd guilt init\n>> +cmd guilt import-commit base..HEAD\n>> +\n>> +for patch in .git/patches/master/*.patch; do\n>> +     touch -a -m -t \"$TOUCH_DATE\" \"$patch\"\n>> +done\n>> +\n>> +# If push and pop works, the names we created are good.\n>> +cmd guilt push -a\n>> +cmd git log --decorate\n>> +cmd git log --decorate some-branch\n>> +cmd list_files\n>> +cmd guilt pop -a\n>> --\n>> 1.8.3.1\n>>\n>\n> --\n> C is quirky, flawed, and an enormous success.\n>                 - Dennis M. Ritchie.\n"}]}