Re: [PATCH] rebase--merge: fix --skip with two conflicts in a row

2014-06-16 Thread Junio C Hamano
brian m. carlson sand...@crustytoothpaste.net writes:

 If git rebase --merge encountered a conflict, --skip would not work if the
 next commit also conflicted.  The msgnum file would never be updated with
 the new patch number, so no patch would actually be skipped, resulting in an
 inescapable loop.

 Update the msgnum file's value as the first thing in call_merge.  This also
 avoids an Already applied message when skipping a commit.  There is no
 visible change for the other contexts in which call_merge is invoked, as the
 msgnum file's value remains unchanged in those situations.

 Signed-off-by: brian m. carlson sand...@crustytoothpaste.net
 ---

Sounds good to me.  Thanks.

  git-rebase--merge.sh|  5 +++--
  t/t3402-rebase-merge.sh | 15 +++
  2 files changed, 18 insertions(+), 2 deletions(-)

 diff --git a/git-rebase--merge.sh b/git-rebase--merge.sh
 index 6d77b3c..d3fb67d 100644
 --- a/git-rebase--merge.sh
 +++ b/git-rebase--merge.sh
 @@ -53,11 +53,12 @@ continue_merge () {
  }
  
  call_merge () {
 - cmt=$(cat $state_dir/cmt.$1)
 + msgnum=$1
 + echo $msgnum $state_dir/msgnum
 + cmt=$(cat $state_dir/cmt.$msgnum)
   echo $cmt  $state_dir/current
   hd=$(git rev-parse --verify HEAD)
   cmt_name=$(git symbolic-ref HEAD 2 /dev/null || echo HEAD)
 - msgnum=$(cat $state_dir/msgnum)
   eval GITHEAD_$cmt='${cmt_name##refs/heads/}~$(($end - $msgnum))'
   eval GITHEAD_$hd='$onto_name'
   export GITHEAD_$cmt GITHEAD_$hd
 diff --git a/t/t3402-rebase-merge.sh b/t/t3402-rebase-merge.sh
 index be8c1d5..5a27ec9 100755
 --- a/t/t3402-rebase-merge.sh
 +++ b/t/t3402-rebase-merge.sh
 @@ -33,6 +33,7 @@ test_expect_success setup '
   tr [a-z] [A-Z] original newfile 
   git add newfile 
   git commit -a -mside edits further. 
 + git branch second-side 
  
   tr [a-m] [A-M] original newfile 
   rm -f original 
 @@ -41,6 +42,7 @@ test_expect_success setup '
   git branch test-rebase side 
   git branch test-rebase-pick side 
   git branch test-reference-pick side 
 + git branch test-conflicts side 
   git checkout -b test-merge side
  '
  
 @@ -138,4 +140,17 @@ test_expect_success 'rebase -s funny -Xopt' '
   test -f funny.was.run
  '
  
 +test_expect_success 'rebase --skip works with two conflicts in a row' '
 + git checkout second-side  
 + tr [A-Z] [a-z] newfile tmp 
 + mv tmp newfile 
 + git commit -a -medit conflicting with side 
 + tr [d-f] [D-F] newfile tmp 
 + mv tmp newfile 
 + git commit -a -manother edit conflicting with side 
 + test_must_fail git rebase --merge test-conflicts 
 + test_must_fail git rebase --skip 
 + git rebase --skip
 +'
 +
  test_done
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] rebase--merge: fix --skip with two conflicts in a row

2014-06-15 Thread brian m. carlson
If git rebase --merge encountered a conflict, --skip would not work if the
next commit also conflicted.  The msgnum file would never be updated with
the new patch number, so no patch would actually be skipped, resulting in an
inescapable loop.

Update the msgnum file's value as the first thing in call_merge.  This also
avoids an Already applied message when skipping a commit.  There is no
visible change for the other contexts in which call_merge is invoked, as the
msgnum file's value remains unchanged in those situations.

Signed-off-by: brian m. carlson sand...@crustytoothpaste.net
---
 git-rebase--merge.sh|  5 +++--
 t/t3402-rebase-merge.sh | 15 +++
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/git-rebase--merge.sh b/git-rebase--merge.sh
index 6d77b3c..d3fb67d 100644
--- a/git-rebase--merge.sh
+++ b/git-rebase--merge.sh
@@ -53,11 +53,12 @@ continue_merge () {
 }
 
 call_merge () {
-   cmt=$(cat $state_dir/cmt.$1)
+   msgnum=$1
+   echo $msgnum $state_dir/msgnum
+   cmt=$(cat $state_dir/cmt.$msgnum)
echo $cmt  $state_dir/current
hd=$(git rev-parse --verify HEAD)
cmt_name=$(git symbolic-ref HEAD 2 /dev/null || echo HEAD)
-   msgnum=$(cat $state_dir/msgnum)
eval GITHEAD_$cmt='${cmt_name##refs/heads/}~$(($end - $msgnum))'
eval GITHEAD_$hd='$onto_name'
export GITHEAD_$cmt GITHEAD_$hd
diff --git a/t/t3402-rebase-merge.sh b/t/t3402-rebase-merge.sh
index be8c1d5..5a27ec9 100755
--- a/t/t3402-rebase-merge.sh
+++ b/t/t3402-rebase-merge.sh
@@ -33,6 +33,7 @@ test_expect_success setup '
tr [a-z] [A-Z] original newfile 
git add newfile 
git commit -a -mside edits further. 
+   git branch second-side 
 
tr [a-m] [A-M] original newfile 
rm -f original 
@@ -41,6 +42,7 @@ test_expect_success setup '
git branch test-rebase side 
git branch test-rebase-pick side 
git branch test-reference-pick side 
+   git branch test-conflicts side 
git checkout -b test-merge side
 '
 
@@ -138,4 +140,17 @@ test_expect_success 'rebase -s funny -Xopt' '
test -f funny.was.run
 '
 
+test_expect_success 'rebase --skip works with two conflicts in a row' '
+   git checkout second-side  
+   tr [A-Z] [a-z] newfile tmp 
+   mv tmp newfile 
+   git commit -a -medit conflicting with side 
+   tr [d-f] [D-F] newfile tmp 
+   mv tmp newfile 
+   git commit -a -manother edit conflicting with side 
+   test_must_fail git rebase --merge test-conflicts 
+   test_must_fail git rebase --skip 
+   git rebase --skip
+'
+
 test_done
-- 
2.0.0

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html