From mboxrd@z Thu Jan 1 00:00:00 1970 From: Per Cederqvist Subject: Re: [GUILT] [PATCH] Change git branch when patches are applied. Date: Wed, 02 May 2012 08:41:58 +0200 Message-ID: <4FA0D736.6080107@opera.com> References: <87pqap34c9.fsf@opera.com> <20120430150159.GC20761@poseidon.cudanet.local> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: git@vger.kernel.org, ceder@lysator.liu.se To: Jeff Sipek X-From: git-owner@vger.kernel.org Wed May 02 08:42:13 2012 Return-path: Envelope-to: gcvg-git-2@plane.gmane.org Received: from vger.kernel.org ([209.132.180.67]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1SPTGO-0007sd-Na for gcvg-git-2@plane.gmane.org; Wed, 02 May 2012 08:42:13 +0200 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751707Ab2EBGmH (ORCPT ); Wed, 2 May 2012 02:42:07 -0400 Received: from smtp.opera.com ([213.236.208.81]:48402 "EHLO smtp.opera.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750820Ab2EBGmF (ORCPT ); Wed, 2 May 2012 02:42:05 -0400 Received: from [10.30.1.61] (oslo.jvpn.opera.com [213.236.208.46]) (authenticated bits=0) by smtp.opera.com (8.14.3/8.14.3/Debian-5+lenny1) with ESMTP id q426fx48031533 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT); Wed, 2 May 2012 06:41:59 GMT User-Agent: Mozilla/5.0 (X11; Linux i686; rv:11.0) Gecko/20120412 Thunderbird/11.0.1 In-Reply-To: <20120430150159.GC20761@poseidon.cudanet.local> Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Archived-At: On 04/30/2012 05:02 PM, Jeff Sipek wrote: > On Mon, Apr 30, 2012 at 12:24:06PM +0200, Per Cederqvist wrote: >> Apply patches on a separate branch. The separate branch is >> automatically created when Guilt pushes something, and removed when no >> patches are applied. The name is formed by prepending "guilt/" to the >> original branch. >> >> This breaks the "upstream" relationship, so a mistaken "git push" >> while patches are applied will no longer mess up your upstream >> repository. >> >> Update the testsuite and documentation. >> >> Thanks to Junio C Hamano for suggesting this solution to my problem. > > This is a sizable patch that changes how Guilt operates. Part of me likes > it (I've accidentally git pushed at some point) and part of me doesn't like > forcing this on everyone. > > The obvious solution of course is to add a config option to force the > old-style branch names. From briefly looking at the change, it looks like > it should be pretty easily doable - just set old_style_prefix to true if the > config flag is set. I'll apply it locally, and use it for a while to see > how it works. > > Thanks, > > Jeff. That is a good idea. Actually, I think it makes sense to use the old-style branch names by default for one or two releases, because if you have share $HOME between several computers and don't upgrade guilt at the exact same time on all of them you might end up with a state where the old Guilt version cannot pop the applied patches. I have implemented this, and will post it here in a few days once I have tested it a bit more (and proof-read the commit message :-) ). I'm thinking about how to test this. Should we extend run-test so that it runs each test twice, with the setting on and off? And add supplemental files such as t-001.newbranch.out with the expected output with the new branch output? Or will that slow down "make test" too much? At the moment, I have created t-062.sh which is identical to t-061.sh, except that it uses the old-style branches. But I did modify some of the old tests, so we are probably not testing the old-style branch layout as much as we should. /ceder >> Signed-off-by: Per Cederqvist >> --- >> Documentation/guilt.7 | 4 + >> guilt | 52 +++++- >> guilt-branch | 12 +- >> guilt-commit | 7 + >> guilt-import-commit | 4 +- >> guilt-repair | 7 +- >> regression/scaffold | 3 +- >> regression/t-052.out | 24 +-- >> regression/t-052.sh | 7 +- >> regression/t-061.out | 468 +++++++++++++++++++++++++++++++++++++++++++++++++ >> regression/t-061.sh | 148 ++++++++++++++++ >> 11 files changed, 713 insertions(+), 23 deletions(-) >> create mode 100644 regression/t-061.out >> create mode 100755 regression/t-061.sh >> >> diff --git a/Documentation/guilt.7 b/Documentation/guilt.7 >> index 860e6d6..c3fdb3d 100644 >> --- a/Documentation/guilt.7 >> +++ b/Documentation/guilt.7 >> @@ -43,6 +43,10 @@ guards: This file contains any guards that should be applied to the series when >> series: This file contains a list of all the patch filenames relative to the per\-branch patch directory\&. Empty and commented out lines are ignored\&. >> >> status: This file contains the state of the stack\&. What patches are applied\&. >> +.SH "BRANCH USAGE" >> +When you have pushed a patch, Guilt automatically changes to a freshly created Git branch\&. The name of the new branch is formed by prepending \fBguilt/\fR to the name of the original branch\&. This is done so that you do not accidentally push a set of Guilt patches to a remote Git repository\&. Once you pop all patches Guilt automatically changes back to the original branch\&. >> + >> +This is mostly transparent\&. The only thing you need to remember is that if you use \fBgit checkout\fR to switch to a branch while you have Guilt patches applied, you should use \fBgit checkout guilt/BRANCH\fR instead of \fBgit checkout BRANCH\fR when you want to change back later. >> .SH "HOOKS" >> Any guilt operation may execute zero or more hook scripts which can be used to run any housekeeping commands or even abort the execution of the command\&. >> .SH "HOOKS DIRECTORY" >> diff --git a/guilt b/guilt >> index 7f6806e..5d619c5 100755 >> --- a/guilt >> +++ b/guilt >> @@ -408,9 +408,9 @@ head_check() >> return 0 ;; >> esac >> >> - if [ "`git rev-parse refs/heads/$branch`" != "`git rev-parse $1`" ]; then >> + if [ "`git rev-parse refs/heads/\`git_branch\``" != "`git rev-parse $1`" ]; then >> disp "Expected HEAD commit $1">&2 >> - disp " got `git rev-parse refs/heads/$branch`">&2 >> + disp " got `git rev-parse refs/heads/\`git_branch\``">&2 >> return 1 >> fi >> return 0 >> @@ -500,6 +500,11 @@ pop_many_patches() >> n=`expr $n - $2` >> head_n "$n"< "$applied"> "$applied.tmp" >> mv "$applied.tmp" "$applied" >> + if [ -z "`get_top 2>/dev/null`" ]&& [ "`git symbolic-ref HEAD`" = "refs/heads/$GUILT_PREFIX$branch" ]&& ! $old_style_prefix >> + then >> + git symbolic-ref HEAD refs/heads/$branch >> + git update-ref -d refs/heads/$GUILT_PREFIX$branch >> + fi >> ) >> } >> >> @@ -585,7 +590,13 @@ commit() >> # commit >> treeish=`git write-tree` >> commitish=`git commit-tree $treeish -p $2< "$TMP_MSG"` >> - git update-ref HEAD $commitish >> + if $old_style_prefix || git rev-parse --verify --quiet refs/heads/$GUILT_PREFIX$branch>/dev/null >> + then >> + git update-ref HEAD $commitish >> + else >> + git branch $GUILT_PREFIX$branch $commitish >> + git symbolic-ref HEAD refs/heads/$GUILT_PREFIX$branch >> + fi >> >> # mark patch as applied >> git update-ref "refs/patches/$branch/$pname" HEAD >> @@ -825,6 +836,9 @@ guilt_push_diff_context=1 >> # default diffstat value: true or false >> DIFFSTAT_DEFAULT="false" >> >> +# Prefix for guilt branches. >> +GUILT_PREFIX=guilt/ >> + >> # >> # Parse any part of .git/config that belongs to us >> # >> @@ -839,7 +853,28 @@ diffstat=`git config --bool guilt.diffstat` >> >> GUILT_DIR="$GIT_DIR/patches" >> >> -branch=`get_branch` >> +# To make it harder to accidentally do "git push" with a guilt patch >> +# applied, "guilt push" changes branch from e.g. "master" to >> +# "guilt/master". Set $git_branch to the full branch name, and >> +# $branch to the abbreviated name that the user sees most of the time. >> +# Note: old versions of guilt did not add the "guilt/" prefix. This >> +# code handles that case as well. The prefix will be added when you >> +# have no patches applied and do a "guilt push". >> +raw_git_branch=`get_branch` >> +branch=`echo "$raw_git_branch" | sed -e 's,^'$GUILT_PREFIX',,'` >> + >> +git_branch() >> +{ >> + if $old_style_prefix >> + then >> + echo $branch >> + elif [ -z "`get_top 2>/dev/null`" ] >> + then >> + echo $branch >> + else >> + echo $GUILT_PREFIX$branch >> + fi >> +} >> >> # most of the time we want to verify that the repo's branch has been >> # initialized, but every once in a blue moon (e.g., we want to run guilt init), >> @@ -876,4 +911,13 @@ else >> die "Unsupported operating system: $UNAME_S" >> fi >> >> +if [ "$branch" = "$raw_git_branch" ]&& [ -n "`get_top 2>/dev/null`" ] >> +then >> + # This is for compat with old repositories that still have a >> + # pushed patch without the new-style branch prefix. >> + old_style_prefix=true >> +else >> + old_style_prefix=false >> +fi >> + >> _main "$@" >> diff --git a/guilt-branch b/guilt-branch >> index 909f740..4a1f53e 100755 >> --- a/guilt-branch >> +++ b/guilt-branch >> @@ -35,8 +35,16 @@ cat "$applied" | while read n; do >> `git rev-parse "refs/patches/$branch/$n"` "" >> done >> >> -git branch "$newbranch" >> -git checkout "$newbranch" >> +if $old_style_prefix || [ -z "`get_top 2>/dev/null`" ] >> +then >> + newgitbranch="$newbranch" >> +else >> + git update-ref "refs/heads/$newbranch" "refs/heads/$branch" "" >> + newgitbranch="$GUILT_PREFIX$newbranch" >> +fi >> + >> +git branch "$newgitbranch" >> +git checkout "$newgitbranch" >> >> mkdir -p "$GUILT_DIR/`dirname $newbranch`" >> >> diff --git a/guilt-commit b/guilt-commit >> index 4228be6..e425399 100755 >> --- a/guilt-commit >> +++ b/guilt-commit >> @@ -43,4 +43,11 @@ done >> sed -n -e "${pat_keep}" "$applied"> "$applied.tmp" >> mv "$applied.tmp" "$applied" >> >> +# if we removed the last patch, switch back to the base branch >> +if [ `wc -l< "$applied"` -eq 0 ]&& [ "`git symbolic-ref HEAD`" = "refs/heads/$GUILT_PREFIX$branch" ]&& ! $old_style_prefix >> +then >> + git update-ref refs/heads/$branch refs/heads/$GUILT_PREFIX$branch >> + git symbolic-ref HEAD refs/heads/$branch >> + git update-ref -d refs/heads/$GUILT_PREFIX$branch >> +fi >> } >> diff --git a/guilt-import-commit b/guilt-import-commit >> index 3045a5f..54c1de0 100755 >> --- a/guilt-import-commit >> +++ b/guilt-import-commit >> @@ -23,7 +23,7 @@ if ! must_commit_first; then >> fi >> >> disp "About to begin conversion...">&2 >> -disp "Current head: `cat $GIT_DIR/refs/heads/$branch`">&2 >> +disp "Current head: `cat $GIT_DIR/refs/heads/\`git_branch\``">&2 >> >> for rev in `git rev-list $rhash`; do >> s=`git log --pretty=oneline -1 $rev | cut -c 42-` >> @@ -68,6 +68,6 @@ for rev in `git rev-list $rhash`; do >> done >> >> disp "Done.">&2 >> -disp "Current head: `cat $GIT_DIR/refs/heads/$branch`">&2 >> +disp "Current head: `cat $GIT_DIR/refs/heads/\`git_branch\``">&2 >> >> } >> diff --git a/guilt-repair b/guilt-repair >> index 77ad223..c0bf3ed 100755 >> --- a/guilt-repair >> +++ b/guilt-repair >> @@ -84,6 +84,11 @@ repair_pushed() >> >> # blow away any commits >> git reset --hard "$newrev"> /dev/null >> + if [ "`git symbolic-ref HEAD`" = "refs/heads/$GUILT_PREFIX$branch" ]&& ! $old_style_prefix >> + then >> + git symbolic-ref HEAD refs/heads/$branch >> + git update-ref -d refs/heads/$GUILT_PREFIX$branch >> + fi >> >> # blow away the applied stack >> remove_patch_refs< "$applied" >> @@ -112,7 +117,7 @@ case "$1" in >> ;; >> esac >> >> -oldrev=`git show-ref -s "refs/heads/$branch"` >> +oldrev=`git show-ref -s "refs/heads/\`git_branch\`"` >> >> case "$repair" in >> full) >> diff --git a/regression/scaffold b/regression/scaffold >> index 8769058..b38a3f0 100644 >> --- a/regression/scaffold >> +++ b/regression/scaffold >> @@ -38,7 +38,8 @@ function replace_path >> -e "s,^Usage: guilt-,Usage: guilt ,g" \ >> -e "s,\.\.\. initial, initial,g" \ >> -e "s,^Already on\( branch\)\? [\"']\([^\"']*\)[\"']$,Already on \"\2\",g" \ >> - -e "s,^Switched to branch [\"']\([^\"']*\)[\"'],Switched to branch \"\1\",g" >> + -e "s,^Switched to branch [\"']\([^\"']*\)[\"'],Switched to branch \"\1\",g" \ >> + -e "\\,^Deleted branch guilt/.* (was .*).$,d" >> } >> >> function filter_dd >> diff --git a/regression/t-052.out b/regression/t-052.out >> index 3b4a629..8205f35 100644 >> --- a/regression/t-052.out >> +++ b/regression/t-052.out >> @@ -47,7 +47,7 @@ f da39a3ee5e6b4b0d3255bfef95601890afd80709 .git/patches/master/status >> Applying patch..modify >> Patch applied. >> % guilt branch br-modify >> -Switched to branch "br-modify" >> +Switched to branch "guilt/br-modify" >> % list_files >> d .git/patches >> d .git/patches/br- >> @@ -76,8 +76,8 @@ f bc9ab2e0f5db99d483961e956e814d963f0309f8 .git/patches/master/modify >> f da39a3ee5e6b4b0d3255bfef95601890afd80709 .git/patches/br-/status >> r 33633e7a1aa31972f125878baf7807be57b1672d .git/refs/patches/br-modify/modify >> r 33633e7a1aa31972f125878baf7807be57b1672d .git/refs/patches/master/modify >> -% git checkout master >> -Switched to branch "master" >> +% git checkout guilt/master >> +Switched to branch "guilt/master" >> % list_files >> d .git/patches >> d .git/patches/br- >> @@ -109,7 +109,7 @@ r 33633e7a1aa31972f125878baf7807be57b1672d .git/refs/patches/master/modify >> Applying patch..add >> Patch applied. >> % guilt branch br-add >> -Switched to branch "br-add" >> +Switched to branch "guilt/br-add" >> % list_files >> d .git/patches >> d .git/patches/br- >> @@ -149,8 +149,8 @@ r 33633e7a1aa31972f125878baf7807be57b1672d .git/refs/patches/br-modify/modify >> r 33633e7a1aa31972f125878baf7807be57b1672d .git/refs/patches/master/modify >> r 37d588cc39848368810e88332bd03b083f2ce3ac .git/refs/patches/br-add/add >> r 37d588cc39848368810e88332bd03b083f2ce3ac .git/refs/patches/master/add >> -% git checkout master >> -Switched to branch "master" >> +% git checkout guilt/master >> +Switched to branch "guilt/master" >> % list_files >> d .git/patches >> d .git/patches/br- >> @@ -193,7 +193,7 @@ r 37d588cc39848368810e88332bd03b083f2ce3ac .git/refs/patches/master/add >> Applying patch..remove >> Patch applied. >> % guilt branch br-remove >> -Switched to branch "br-remove" >> +Switched to branch "guilt/br-remove" >> % list_files >> d .git/patches >> d .git/patches/br- >> @@ -245,8 +245,8 @@ r 37d588cc39848368810e88332bd03b083f2ce3ac .git/refs/patches/br-remove/add >> r 37d588cc39848368810e88332bd03b083f2ce3ac .git/refs/patches/master/add >> r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 .git/refs/patches/br-remove/remove >> r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 .git/refs/patches/master/remove >> -% git checkout master >> -Switched to branch "master" >> +% git checkout guilt/master >> +Switched to branch "guilt/master" >> % list_files >> d .git/patches >> d .git/patches/br- >> @@ -301,7 +301,7 @@ r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 .git/refs/patches/master/remove >> Applying patch..mode >> Patch applied. >> % guilt branch br-mode >> -Switched to branch "br-mode" >> +Switched to branch "guilt/br-mode" >> % list_files >> d .git/patches >> d .git/patches/br- >> @@ -366,5 +366,5 @@ r ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba .git/refs/patches/master/mode >> r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 .git/refs/patches/br-mode/remove >> r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 .git/refs/patches/br-remove/remove >> r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 .git/refs/patches/master/remove >> -% git checkout master >> -Switched to branch "master" >> +% git checkout guilt/master >> +Switched to branch "guilt/master" >> diff --git a/regression/t-052.sh b/regression/t-052.sh >> index e9c1a59..05bc55b 100755 >> --- a/regression/t-052.sh >> +++ b/regression/t-052.sh >> @@ -12,5 +12,10 @@ for x in "" modify add remove mode ; do >> [ "$x" != "" ]&& guilt push "$x" >> cmd guilt branch br-$x >> cmd list_files >> - cmd git checkout master >> + if [ "$x" != "" ] >> + then >> + cmd git checkout guilt/master >> + else >> + cmd git checkout master >> + fi >> done >> diff --git a/regression/t-061.out b/regression/t-061.out >> new file mode 100644 >> index 0000000..8365236 >> --- /dev/null >> +++ b/regression/t-061.out >> @@ -0,0 +1,468 @@ >> +% setup_repo >> +% guilt push -a >> +Applying patch..modify >> +Patch applied. >> +Applying patch..add >> +Patch applied. >> +Applying patch..remove >> +Patch applied. >> +Applying patch..mode >> +Patch applied. >> +% list_files >> +d .git/patches >> +d .git/patches/master >> +d .git/refs/patches >> +d .git/refs/patches/master >> +f 22930c6d1f1938f298a4fca51c57e4b47171db21 .git/patches/master/mode >> +f 413390f3906f16f30b054a4fb86c1e014b964504 .git/patches/master/remove >> +f 71596bf71b72c2717e1aee378aabefbfa19ab7c8 .git/patches/master/status >> +f 9c18cc7abe6b87f18503714a80a677b4094eb457 .git/patches/master/add >> +f bacb4aad8a55fe4e7aa58a9ae169990bb764069f .git/patches/master/series >> +f bc9ab2e0f5db99d483961e956e814d963f0309f8 .git/patches/master/modify >> +r 33633e7a1aa31972f125878baf7807be57b1672d .git/refs/patches/master/modify >> +r 37d588cc39848368810e88332bd03b083f2ce3ac .git/refs/patches/master/add >> +r ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba .git/refs/patches/master/mode >> +r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 .git/refs/patches/master/remove >> +% git for-each-ref >> +ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit refs/heads/guilt/master >> +d4850419ccc1146c7169f500725ce504b9774ed0 commit refs/heads/master >> +37d588cc39848368810e88332bd03b083f2ce3ac commit refs/patches/master/add >> +ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit refs/patches/master/mode >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/patches/master/modify >> +ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit refs/patches/master/remove >> +% git update-ref refs/heads/master refs/heads/guilt/master >> +% git symbolic-ref HEAD refs/heads/master >> +% git update-ref -d refs/heads/guilt/master >> +% git for-each-ref >> +ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit refs/heads/master >> +37d588cc39848368810e88332bd03b083f2ce3ac commit refs/patches/master/add >> +ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit refs/patches/master/mode >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/patches/master/modify >> +ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit refs/patches/master/remove >> +% list_files >> +d .git/patches >> +d .git/patches/master >> +d .git/refs/patches >> +d .git/refs/patches/master >> +f 22930c6d1f1938f298a4fca51c57e4b47171db21 .git/patches/master/mode >> +f 413390f3906f16f30b054a4fb86c1e014b964504 .git/patches/master/remove >> +f 71596bf71b72c2717e1aee378aabefbfa19ab7c8 .git/patches/master/status >> +f 9c18cc7abe6b87f18503714a80a677b4094eb457 .git/patches/master/add >> +f bacb4aad8a55fe4e7aa58a9ae169990bb764069f .git/patches/master/series >> +f bc9ab2e0f5db99d483961e956e814d963f0309f8 .git/patches/master/modify >> +r 33633e7a1aa31972f125878baf7807be57b1672d .git/refs/patches/master/modify >> +r 37d588cc39848368810e88332bd03b083f2ce3ac .git/refs/patches/master/add >> +r ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba .git/refs/patches/master/mode >> +r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 .git/refs/patches/master/remove >> +% guilt pop >> +Now at remove. >> +% git for-each-ref >> +ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit refs/heads/master >> +37d588cc39848368810e88332bd03b083f2ce3ac commit refs/patches/master/add >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/patches/master/modify >> +ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit refs/patches/master/remove >> +% guilt push >> +Applying patch..mode >> +Patch applied. >> +% git for-each-ref >> +ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit refs/heads/master >> +37d588cc39848368810e88332bd03b083f2ce3ac commit refs/patches/master/add >> +ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit refs/patches/master/mode >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/patches/master/modify >> +ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit refs/patches/master/remove >> +% guilt pop >> +Now at remove. >> +% git for-each-ref >> +ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit refs/heads/master >> +37d588cc39848368810e88332bd03b083f2ce3ac commit refs/patches/master/add >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/patches/master/modify >> +ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit refs/patches/master/remove >> +% guilt pop >> +Now at add. >> +% git for-each-ref >> +37d588cc39848368810e88332bd03b083f2ce3ac commit refs/heads/master >> +37d588cc39848368810e88332bd03b083f2ce3ac commit refs/patches/master/add >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/patches/master/modify >> +% guilt push >> +Applying patch..remove >> +Patch applied. >> +% git for-each-ref >> +ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit refs/heads/master >> +37d588cc39848368810e88332bd03b083f2ce3ac commit refs/patches/master/add >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/patches/master/modify >> +ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit refs/patches/master/remove >> +% guilt pop >> +Now at add. >> +% git for-each-ref >> +37d588cc39848368810e88332bd03b083f2ce3ac commit refs/heads/master >> +37d588cc39848368810e88332bd03b083f2ce3ac commit refs/patches/master/add >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/patches/master/modify >> +% guilt pop >> +Now at modify. >> +% git for-each-ref >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/heads/master >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/patches/master/modify >> +% guilt push >> +Applying patch..add >> +Patch applied. >> +% git for-each-ref >> +37d588cc39848368810e88332bd03b083f2ce3ac commit refs/heads/master >> +37d588cc39848368810e88332bd03b083f2ce3ac commit refs/patches/master/add >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/patches/master/modify >> +% guilt pop >> +Now at modify. >> +% git for-each-ref >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/heads/master >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/patches/master/modify >> +% guilt pop >> +All patches popped. >> +% git for-each-ref >> +d4850419ccc1146c7169f500725ce504b9774ed0 commit refs/heads/master >> +% guilt push >> +Applying patch..modify >> +Patch applied. >> +% git for-each-ref >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/heads/guilt/master >> +d4850419ccc1146c7169f500725ce504b9774ed0 commit refs/heads/master >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/patches/master/modify >> +% guilt pop >> +All patches popped. >> +% git for-each-ref >> +d4850419ccc1146c7169f500725ce504b9774ed0 commit refs/heads/master >> +% guilt pop >> +No patches applied. >> +% git for-each-ref >> +d4850419ccc1146c7169f500725ce504b9774ed0 commit refs/heads/master >> +% guilt push >> +Applying patch..modify >> +Patch applied. >> +% git for-each-ref >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/heads/guilt/master >> +d4850419ccc1146c7169f500725ce504b9774ed0 commit refs/heads/master >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/patches/master/modify >> +% guilt pop >> +All patches popped. >> +% git for-each-ref >> +d4850419ccc1146c7169f500725ce504b9774ed0 commit refs/heads/master >> +% guilt push -a >> +Applying patch..modify >> +Patch applied. >> +Applying patch..add >> +Patch applied. >> +Applying patch..remove >> +Patch applied. >> +Applying patch..mode >> +Patch applied. >> +% git update-ref refs/heads/master refs/heads/guilt/master >> +% git symbolic-ref HEAD refs/heads/master >> +% git update-ref -d refs/heads/guilt/master >> +% git for-each-ref >> +ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit refs/heads/master >> +37d588cc39848368810e88332bd03b083f2ce3ac commit refs/patches/master/add >> +ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit refs/patches/master/mode >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/patches/master/modify >> +ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit refs/patches/master/remove >> +% guilt pop -a >> +All patches popped. >> +% git for-each-ref >> +d4850419ccc1146c7169f500725ce504b9774ed0 commit refs/heads/master >> +% guilt push add >> +Applying patch..modify >> +Patch applied. >> +Applying patch..add >> +Patch applied. >> +% git for-each-ref >> +37d588cc39848368810e88332bd03b083f2ce3ac commit refs/heads/guilt/master >> +d4850419ccc1146c7169f500725ce504b9774ed0 commit refs/heads/master >> +37d588cc39848368810e88332bd03b083f2ce3ac commit refs/patches/master/add >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/patches/master/modify >> +% git update-ref refs/heads/master refs/heads/guilt/master >> +% git symbolic-ref HEAD refs/heads/master >> +% git update-ref -d refs/heads/guilt/master >> +% guilt branch topic >> +Switched to branch "topic" >> +% git for-each-ref >> +37d588cc39848368810e88332bd03b083f2ce3ac commit refs/heads/master >> +37d588cc39848368810e88332bd03b083f2ce3ac commit refs/heads/topic >> +37d588cc39848368810e88332bd03b083f2ce3ac commit refs/patches/master/add >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/patches/master/modify >> +37d588cc39848368810e88332bd03b083f2ce3ac commit refs/patches/topic/add >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/patches/topic/modify >> +% guilt pop -a >> +All patches popped. >> +% guilt push >> +Applying patch..modify >> +Patch applied. >> +% git for-each-ref >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/heads/guilt/topic >> +37d588cc39848368810e88332bd03b083f2ce3ac commit refs/heads/master >> +d4850419ccc1146c7169f500725ce504b9774ed0 commit refs/heads/topic >> +37d588cc39848368810e88332bd03b083f2ce3ac commit refs/patches/master/add >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/patches/master/modify >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/patches/topic/modify >> +% guilt pop -a >> +All patches popped. >> +% git checkout master >> +Switched to branch "master" >> +% guilt pop -a >> +All patches popped. >> +% git branch -d topic >> +Deleted branch topic (was d485041). >> +% rm -r .git/patches/topic >> +% git for-each-ref >> +d4850419ccc1146c7169f500725ce504b9774ed0 commit refs/heads/master >> +% list_files >> +d .git/patches >> +d .git/patches/master >> +d .git/refs/patches >> +d .git/refs/patches/master >> +d .git/refs/patches/topic >> +f 22930c6d1f1938f298a4fca51c57e4b47171db21 .git/patches/master/mode >> +f 413390f3906f16f30b054a4fb86c1e014b964504 .git/patches/master/remove >> +f 9c18cc7abe6b87f18503714a80a677b4094eb457 .git/patches/master/add >> +f bacb4aad8a55fe4e7aa58a9ae169990bb764069f .git/patches/master/series >> +f bc9ab2e0f5db99d483961e956e814d963f0309f8 .git/patches/master/modify >> +f da39a3ee5e6b4b0d3255bfef95601890afd80709 .git/patches/master/status >> +% guilt push -a >> +Applying patch..modify >> +Patch applied. >> +Applying patch..add >> +Patch applied. >> +Applying patch..remove >> +Patch applied. >> +Applying patch..mode >> +Patch applied. >> +% git update-ref refs/heads/master refs/heads/guilt/master >> +% git symbolic-ref HEAD refs/heads/master >> +% git update-ref -d refs/heads/guilt/master >> +% guilt branch topic >> +Switched to branch "topic" >> +% git for-each-ref >> +ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit refs/heads/master >> +ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit refs/heads/topic >> +37d588cc39848368810e88332bd03b083f2ce3ac commit refs/patches/master/add >> +ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit refs/patches/master/mode >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/patches/master/modify >> +ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit refs/patches/master/remove >> +37d588cc39848368810e88332bd03b083f2ce3ac commit refs/patches/topic/add >> +ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit refs/patches/topic/mode >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/patches/topic/modify >> +ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit refs/patches/topic/remove >> +% guilt pop -a >> +All patches popped. >> +% git checkout master >> +Switched to branch "master" >> +% guilt pop -a >> +All patches popped. >> +% git branch -d topic >> +Deleted branch topic (was d485041). >> +% rm -r .git/patches/topic >> +% git for-each-ref >> +d4850419ccc1146c7169f500725ce504b9774ed0 commit refs/heads/master >> +% list_files >> +d .git/patches >> +d .git/patches/master >> +d .git/refs/patches >> +d .git/refs/patches/master >> +d .git/refs/patches/topic >> +f 22930c6d1f1938f298a4fca51c57e4b47171db21 .git/patches/master/mode >> +f 413390f3906f16f30b054a4fb86c1e014b964504 .git/patches/master/remove >> +f 9c18cc7abe6b87f18503714a80a677b4094eb457 .git/patches/master/add >> +f bacb4aad8a55fe4e7aa58a9ae169990bb764069f .git/patches/master/series >> +f bc9ab2e0f5db99d483961e956e814d963f0309f8 .git/patches/master/modify >> +f da39a3ee5e6b4b0d3255bfef95601890afd80709 .git/patches/master/status >> +% guilt branch topic >> +Switched to branch "topic" >> +% git for-each-ref >> +d4850419ccc1146c7169f500725ce504b9774ed0 commit refs/heads/master >> +d4850419ccc1146c7169f500725ce504b9774ed0 commit refs/heads/topic >> +% list_files >> +d .git/patches >> +d .git/patches/master >> +d .git/patches/topic >> +d .git/refs/patches >> +d .git/refs/patches/master >> +d .git/refs/patches/topic >> +f 22930c6d1f1938f298a4fca51c57e4b47171db21 .git/patches/master/mode >> +f 22930c6d1f1938f298a4fca51c57e4b47171db21 .git/patches/topic/mode >> +f 413390f3906f16f30b054a4fb86c1e014b964504 .git/patches/master/remove >> +f 413390f3906f16f30b054a4fb86c1e014b964504 .git/patches/topic/remove >> +f 9c18cc7abe6b87f18503714a80a677b4094eb457 .git/patches/master/add >> +f 9c18cc7abe6b87f18503714a80a677b4094eb457 .git/patches/topic/add >> +f bacb4aad8a55fe4e7aa58a9ae169990bb764069f .git/patches/master/series >> +f bacb4aad8a55fe4e7aa58a9ae169990bb764069f .git/patches/topic/series >> +f bc9ab2e0f5db99d483961e956e814d963f0309f8 .git/patches/master/modify >> +f bc9ab2e0f5db99d483961e956e814d963f0309f8 .git/patches/topic/modify >> +f da39a3ee5e6b4b0d3255bfef95601890afd80709 .git/patches/master/status >> +f da39a3ee5e6b4b0d3255bfef95601890afd80709 .git/patches/topic/status >> +% guilt pop -a >> +No patches applied. >> +% git checkout master >> +Switched to branch "master" >> +% guilt pop -a >> +No patches applied. >> +% git branch -d topic >> +Deleted branch topic (was d485041). >> +% rm -r .git/patches/topic >> +% git for-each-ref >> +d4850419ccc1146c7169f500725ce504b9774ed0 commit refs/heads/master >> +% list_files >> +d .git/patches >> +d .git/patches/master >> +d .git/refs/patches >> +d .git/refs/patches/master >> +d .git/refs/patches/topic >> +f 22930c6d1f1938f298a4fca51c57e4b47171db21 .git/patches/master/mode >> +f 413390f3906f16f30b054a4fb86c1e014b964504 .git/patches/master/remove >> +f 9c18cc7abe6b87f18503714a80a677b4094eb457 .git/patches/master/add >> +f bacb4aad8a55fe4e7aa58a9ae169990bb764069f .git/patches/master/series >> +f bc9ab2e0f5db99d483961e956e814d963f0309f8 .git/patches/master/modify >> +f da39a3ee5e6b4b0d3255bfef95601890afd80709 .git/patches/master/status >> +% guilt push -a >> +Applying patch..modify >> +Patch applied. >> +Applying patch..add >> +Patch applied. >> +Applying patch..remove >> +Patch applied. >> +Applying patch..mode >> +Patch applied. >> +% guilt branch topic >> +Switched to branch "guilt/topic" >> +% git for-each-ref >> +ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit refs/heads/guilt/master >> +ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit refs/heads/guilt/topic >> +d4850419ccc1146c7169f500725ce504b9774ed0 commit refs/heads/master >> +d4850419ccc1146c7169f500725ce504b9774ed0 commit refs/heads/topic >> +37d588cc39848368810e88332bd03b083f2ce3ac commit refs/patches/master/add >> +ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit refs/patches/master/mode >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/patches/master/modify >> +ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit refs/patches/master/remove >> +37d588cc39848368810e88332bd03b083f2ce3ac commit refs/patches/topic/add >> +ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit refs/patches/topic/mode >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/patches/topic/modify >> +ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit refs/patches/topic/remove >> +% list_files >> +d .git/patches >> +d .git/patches/master >> +d .git/patches/topic >> +d .git/refs/patches >> +d .git/refs/patches/master >> +d .git/refs/patches/topic >> +f 22930c6d1f1938f298a4fca51c57e4b47171db21 .git/patches/master/mode >> +f 22930c6d1f1938f298a4fca51c57e4b47171db21 .git/patches/topic/mode >> +f 413390f3906f16f30b054a4fb86c1e014b964504 .git/patches/master/remove >> +f 413390f3906f16f30b054a4fb86c1e014b964504 .git/patches/topic/remove >> +f 71596bf71b72c2717e1aee378aabefbfa19ab7c8 .git/patches/master/status >> +f 71596bf71b72c2717e1aee378aabefbfa19ab7c8 .git/patches/topic/status >> +f 9c18cc7abe6b87f18503714a80a677b4094eb457 .git/patches/master/add >> +f 9c18cc7abe6b87f18503714a80a677b4094eb457 .git/patches/topic/add >> +f bacb4aad8a55fe4e7aa58a9ae169990bb764069f .git/patches/master/series >> +f bacb4aad8a55fe4e7aa58a9ae169990bb764069f .git/patches/topic/series >> +f bc9ab2e0f5db99d483961e956e814d963f0309f8 .git/patches/master/modify >> +f bc9ab2e0f5db99d483961e956e814d963f0309f8 .git/patches/topic/modify >> +r 33633e7a1aa31972f125878baf7807be57b1672d .git/refs/patches/master/modify >> +r 33633e7a1aa31972f125878baf7807be57b1672d .git/refs/patches/topic/modify >> +r 37d588cc39848368810e88332bd03b083f2ce3ac .git/refs/patches/master/add >> +r 37d588cc39848368810e88332bd03b083f2ce3ac .git/refs/patches/topic/add >> +r ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba .git/refs/patches/master/mode >> +r ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba .git/refs/patches/topic/mode >> +r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 .git/refs/patches/master/remove >> +r ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 .git/refs/patches/topic/remove >> +% guilt pop -a >> +All patches popped. >> +% git for-each-ref >> +ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit refs/heads/guilt/master >> +d4850419ccc1146c7169f500725ce504b9774ed0 commit refs/heads/master >> +d4850419ccc1146c7169f500725ce504b9774ed0 commit refs/heads/topic >> +37d588cc39848368810e88332bd03b083f2ce3ac commit refs/patches/master/add >> +ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba commit refs/patches/master/mode >> +33633e7a1aa31972f125878baf7807be57b1672d commit refs/patches/master/modify >> +ffb7faa126a6d91bcdd44a494f76b96dd860b8b9 commit refs/patches/master/remove >> +% guilt pop -a >> +No patches applied. >> +ccd56089d1b5305a9d35617cb7f6f4b06ffa68ba >> +% git checkout guilt/master >> +Switched to branch "guilt/master" >> +% guilt pop -a >> +All patches popped. >> +% git branch -d topic >> +Deleted branch topic (was d485041). >> +% rm -r .git/patches/topic >> +% git for-each-ref >> +d4850419ccc1146c7169f500725ce504b9774ed0 commit refs/heads/master >> +% list_files >> +d .git/patches >> +d .git/patches/master >> +d .git/refs/patches >> +d .git/refs/patches/master >> +d .git/refs/patches/topic >> +f 22930c6d1f1938f298a4fca51c57e4b47171db21 .git/patches/master/mode >> +f 413390f3906f16f30b054a4fb86c1e014b964504 .git/patches/master/remove >> +f 9c18cc7abe6b87f18503714a80a677b4094eb457 .git/patches/master/add >> +f bacb4aad8a55fe4e7aa58a9ae169990bb764069f .git/patches/master/series >> +f bc9ab2e0f5db99d483961e956e814d963f0309f8 .git/patches/master/modify >> +f da39a3ee5e6b4b0d3255bfef95601890afd80709 .git/patches/master/status >> +% guilt new newpatch >> +% git for-each-ref --format=%(refname) >> +refs/heads/guilt/master >> +refs/heads/master >> +refs/patches/master/newpatch >> +% guilt pop >> +All patches popped. >> +% guilt push >> +Applying patch..newpatch >> +Patch applied. >> +% git for-each-ref >> +25465dc1687f3833ecbd4e8bca437e522d7026db commit refs/heads/guilt/master >> +d4850419ccc1146c7169f500725ce504b9774ed0 commit refs/heads/master >> +25465dc1687f3833ecbd4e8bca437e522d7026db commit refs/patches/master/newpatch >> +% git branch >> +* guilt/master >> + master >> +% guilt applied >> +newpatch >> +% guilt commit -a >> +% git for-each-ref >> +25465dc1687f3833ecbd4e8bca437e522d7026db commit refs/heads/master >> +% git branch >> +* master >> +% guilt push -a >> +Applying patch..modify >> +Patch applied. >> +Applying patch..add >> +Patch applied. >> +Applying patch..remove >> +Patch applied. >> +Applying patch..mode >> +Patch applied. >> +% guilt applied >> +modify >> +add >> +remove >> +mode >> +% git branch >> +* guilt/master >> + master >> +% git for-each-ref >> +fefbdcef61022d473838926619f31e030dd04fdc commit refs/heads/guilt/master >> +25465dc1687f3833ecbd4e8bca437e522d7026db commit refs/heads/master >> +5effcbeb303e8433935151d8c69f3bf63db1e8ef commit refs/patches/master/add >> +fefbdcef61022d473838926619f31e030dd04fdc commit refs/patches/master/mode >> +9509f22e2e627756d87b42432931c45955b74234 commit refs/patches/master/modify >> +9cbe2fc643b1a9e2179a8738f80424a1c2aa202d commit refs/patches/master/remove >> +% guilt commit -n 2 >> +% git for-each-ref >> +fefbdcef61022d473838926619f31e030dd04fdc commit refs/heads/guilt/master >> +25465dc1687f3833ecbd4e8bca437e522d7026db commit refs/heads/master >> +fefbdcef61022d473838926619f31e030dd04fdc commit refs/patches/master/mode >> +9cbe2fc643b1a9e2179a8738f80424a1c2aa202d commit refs/patches/master/remove >> +% git branch >> +* guilt/master >> + master >> +% guilt commit -n 2 >> +% git for-each-ref >> +fefbdcef61022d473838926619f31e030dd04fdc commit refs/heads/master >> +% git branch >> +* master >> +% guilt series >> diff --git a/regression/t-061.sh b/regression/t-061.sh >> new file mode 100755 >> index 0000000..1411baa >> --- /dev/null >> +++ b/regression/t-061.sh >> @@ -0,0 +1,148 @@ >> +#!/bin/bash >> +# >> +# Test the branch-switching upgrade code >> +# >> + >> +source $REG_DIR/scaffold >> + >> +old_style_branch() { >> + # Modify the refs so that it looks as if the patch series was applied >> + # by an old version of guilt. >> + cmd git update-ref refs/heads/$1 refs/heads/guilt/$1 >> + cmd git symbolic-ref HEAD refs/heads/$1 >> + cmd git update-ref -d refs/heads/guilt/$1 >> +} >> + >> +remove_topic() { >> + cmd guilt pop -a >> + if git rev-parse --verify --quiet guilt/master >> + then >> + cmd git checkout guilt/master >> + else >> + cmd git checkout master >> + fi >> + cmd guilt pop -a >> + cmd git branch -d $1 >> + cmd rm -r .git/patches/$1 >> + cmd git for-each-ref >> + cmd list_files >> +} >> + >> +function fixup_time_info >> +{ >> + touch -a -m -t "$TOUCH_DATE" ".git/patches/master/$1" >> +} >> + >> +cmd setup_repo >> + >> +cmd guilt push -a >> +cmd list_files >> +cmd git for-each-ref >> + >> +# Pop and push patches. Check that the repo is converted to new-style >> +# refs when no patches are applied and a patch is pushed. >> +old_style_branch master >> +cmd git for-each-ref >> + >> +cmd list_files >> + >> +for i in `seq 5` >> +do >> + cmd guilt pop >> + cmd git for-each-ref >> + cmd guilt push >> + cmd git for-each-ref >> + cmd guilt pop >> + cmd git for-each-ref >> +done >> + >> +# Check that "pop -a" does the right thing. >> +cmd guilt push -a >> + >> +old_style_branch master >> + >> +cmd git for-each-ref >> + >> +cmd guilt pop -a >> + >> +cmd git for-each-ref >> + >> +# Check that pushing two patches converts the repo to now-style (since >> +# it currently has no patches applied). >> +cmd guilt push add >> +cmd git for-each-ref >> + >> +# Check guilt branch with a few patches applied. >> +old_style_branch master >> +cmd guilt branch topic >> +cmd git for-each-ref >> + >> +# Check that the topic branch is converted to new-style. >> +cmd guilt pop -a >> +cmd guilt push >> +cmd git for-each-ref >> + >> +remove_topic topic >> + >> +# Check guilt branch with the full patch series applied. >> +cmd guilt push -a >> +old_style_branch master >> +cmd guilt branch topic >> +cmd git for-each-ref >> + >> +remove_topic topic >> + >> +# Check guilt branch with no patches applied. >> +# This gives us a new-style checkout. >> +cmd guilt branch topic >> +cmd git for-each-ref >> +cmd list_files >> + >> +remove_topic topic >> + >> +# Check guilt branch in a new-style directory with all patches >> +# applied. (Strictly speaking, this test should probably move to a >> +# file devoted to testing "guilt branch".) >> +cmd guilt push -a >> +cmd guilt branch topic >> +cmd git for-each-ref >> +cmd list_files >> +cmd guilt pop -a >> +cmd git for-each-ref >> + >> +remove_topic topic >> + >> +# Check that "guilt new" does the right thing when no patches are >> +# applied. (Strictly speaking, this test should maybe move to >> +# t-025.sh). >> + >> +cmd guilt new newpatch >> +cmd git for-each-ref '--format=%(refname)' >> +cmd guilt pop >> +fixup_time_info newpatch >> +cmd guilt push >> +cmd git for-each-ref >> + >> +# Check that "guilt commit" does the right thing when committing all >> +# applied patches. (Strictly speaking, this test should maybe move to >> +# t-030.sh). >> +cmd git branch >> +cmd guilt applied >> +cmd guilt commit -a >> +cmd git for-each-ref >> +cmd git branch >> + >> +# Check that "guilt commit" does the right thing when committing only >> +# a few of the applied patches. (Strictly speaking, this test should >> +# maybe move to t-030.sh). >> +cmd guilt push -a >> +cmd guilt applied >> +cmd git branch >> +cmd git for-each-ref >> +cmd guilt commit -n 2 >> +cmd git for-each-ref >> +cmd git branch >> +cmd guilt commit -n 2 >> +cmd git for-each-ref >> +cmd git branch >> +cmd guilt series >> -- >> 1.7.10 >> >