Re: [PATCH 1/2] am: handle stray $dotest directory

2013-06-16 Thread Ramkumar Ramachandra
Ramkumar Ramachandra wrote:
 Can you tell me how to get shell-script-mode to indent the
 case statement properly? (I used the default indentation)

Never mind; I figured it out:

(setq sh-indent-for-case-label 0)
(setq sh-indent-for-case-alt '+)

Maybe we should dump the relevant parts of my .emacs somewhere in-tree?
--
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


Re: [PATCH 1/2] am: handle stray $dotest directory

2013-06-15 Thread Ramkumar Ramachandra
Junio C Hamano wrote:
 I _think_ the new check you added may be too loose.

Yep, I totally forgot about the case when git-am.sh is called from an
existing script.  In that case, it is upto the caller to handle
whatever stray directories; we have no business meddling with that.

 A fix-up may look like this.

No, don't leak autostash detail.

Just change that condition to

  if test -d $dotest  test -z $rebasing

and we're done.  I'll send in a re-roll.
--
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


Re: [PATCH 1/2] am: handle stray $dotest directory

2013-06-14 Thread Junio C Hamano
Ramkumar Ramachandra artag...@gmail.com writes:

 The following bug has been observed:

   $ git am  # no input file
   ^C
   $ git am --abort
   Resolve operation not in progress, we are not resuming.

 This happens because the following test fails:

   test -d $dotest  test -f $dotest/last  test -f $dotest/next

 and the codepath for an am in-progress is not executed.  It falls back
 to the codepath that treats this as a fresh execution.  Before
 rr/rebase-autostash, this condition was

   test -d $dotest

 It would incorrectly execute the normal am --abort codepath:

   git read-tree --reset -u HEAD ORIG_HEAD
   git reset ORIG_HEAD

 by incorrectly assuming that an am is in progress (i.e. ORIG_HEAD
 etc. was written during the previous execution).

 Notice that

   $ git am
   ^C

 executes nothing of significance, is equivalent to

   $ mkdir .git/rebase-apply

 Therefore, the correct solution is to treat .git/rebase-apply as a
 stray directory and remove it on --abort in the fresh-execution
 codepath.

 While at it, tell the user to run git am --abort to get rid of the
 stray $dotest directory, if she attempts anything else.

 Reported-by: Junio C Hamano gits...@pobox.com
 Signed-off-by: Ramkumar Ramachandra artag...@gmail.com
 ---
  git-am.sh | 14 ++
  t/t4150-am.sh |  6 ++
  2 files changed, 20 insertions(+)

 diff --git a/git-am.sh b/git-am.sh
 index 1cf3d1d..37ee18b 100755
 --- a/git-am.sh
 +++ b/git-am.sh
 @@ -506,6 +506,20 @@ then
   esac
   rm -f $dotest/dirtyindex
  else
 + # Possible stray $dotest directory
 + if test -d $dotest; then
 + case $skip,$resolved,$abort in
 + ,,t)
 + rm -fr $dotest
 + exit 0
 + ;;
 + *)
 + die $(eval_gettext Stray $dotest directory found.
 +Use \git am --abort\ to remove it.)
 + ;;
 + esac

These two case arms are indented one level too deep (will locally
touch up).

 + fi
 +
   # Make sure we are not given --skip, --resolved, nor --abort
   test $skip$resolved$abort =  ||
   die $(gettext Resolve operation not in progress, we are not 
 resuming.)
 diff --git a/t/t4150-am.sh b/t/t4150-am.sh
 index 12f6b02..6c2cc3e 100755
 --- a/t/t4150-am.sh
 +++ b/t/t4150-am.sh
 @@ -363,6 +363,12 @@ test_expect_success 'am --skip works' '
   test_cmp expected another
  '
  
 +test_expect_success 'am --abort removes a stray directory' '
 + mkdir .git/rebase-apply 
 + git am --abort 
 + test_path_is_missing .git/rebase-apply
 +'
 +
  test_expect_success 'am --resolved works' '
   echo goodbye expected 
   rm -fr .git/rebase-apply 
--
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


Re: [PATCH 1/2] am: handle stray $dotest directory

2013-06-14 Thread Junio C Hamano
Ramkumar Ramachandra artag...@gmail.com writes:

 + die $(eval_gettext Stray $dotest directory found.
 +Use \git am --abort\ to remove it.)

$dotest, or \$dotest?
--
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


Re: [PATCH 1/2] am: handle stray $dotest directory

2013-06-14 Thread Ramkumar Ramachandra
Junio C Hamano wrote:
 These two case arms are indented one level too deep (will locally
 touch up).

Thanks.  Can you tell me how to get shell-script-mode to indent the
case statement properly? (I used the default indentation)
--
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


Re: [PATCH 1/2] am: handle stray $dotest directory

2013-06-14 Thread Ramkumar Ramachandra
Junio C Hamano wrote:
 $dotest, or \$dotest?

Works fine for me like this.  Why do we escape the dollar in the other strings?
--
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


Re: [PATCH 1/2] am: handle stray $dotest directory

2013-06-14 Thread Junio C Hamano
Junio C Hamano gits...@pobox.com writes:

 +# Possible stray $dotest directory
 +if test -d $dotest; then
 +case $skip,$resolved,$abort in
 +,,t)
 +rm -fr $dotest
 +exit 0
 +;;
 +*)
 +die $(eval_gettext Stray $dotest directory found.
 +Use \git am --abort\ to remove it.)
 +;;
 +esac

 These two case arms are indented one level too deep (will locally
 touch up).

And then the message triggers at the second test in t3420 when
applied on top of 587947750bd7 (rebase: implement --[no-]autostash
and rebase.autostash, 2013-05-12) or 45acb7592825 (Merge branch
'rr/rebase-autostash', 2013-06-11).



--
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


Re: [PATCH 1/2] am: handle stray $dotest directory

2013-06-14 Thread Junio C Hamano
Ramkumar Ramachandra artag...@gmail.com writes:

 Junio C Hamano wrote:
 $dotest, or \$dotest?

 Works fine for me like this.  Why do we escape the dollar in the other 
 strings?

The reason would become clear once you think what string you are
feeding eval_gettext with if you do not escape.  The translators
translate a fixed string (possibly with placeholders) to a fixed
translated string (possibly with placeholders).

eval_gettext Stray $dotest directory found. ...

would allow the shell to expand $dotest before eval_gettext sees it,
which would mean the string is no longer a constant.

--
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


Re: [PATCH 1/2] am: handle stray $dotest directory

2013-06-14 Thread Junio C Hamano
Ramkumar Ramachandra artag...@gmail.com writes:

 Junio C Hamano wrote:
 And then the message triggers at the second test in t3420 when
 applied on top of 587947750bd7 (rebase: implement --[no-]autostash
 and rebase.autostash, 2013-05-12) or 45acb7592825 (Merge branch
 'rr/rebase-autostash', 2013-06-11).

 What was triggered?  (I didn't understand what you said)

The patch applied on top of either of these commits will *BREAK* the
second test in t3420.
--
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


Re: [PATCH 1/2] am: handle stray $dotest directory

2013-06-14 Thread Junio C Hamano
Ramkumar Ramachandra artag...@gmail.com writes:

 Junio C Hamano wrote:
 The reason would become clear once you think what string you are
 feeding eval_gettext with if you do not escape.  The translators
 translate a fixed string (possibly with placeholders) to a fixed
 translated string (possibly with placeholders).

 eval_gettext Stray $dotest directory found. ...

 would allow the shell to expand $dotest before eval_gettext sees it,
 which would mean the string is no longer a constant.

 Ah.  I was scratching my head wondering why $dotest needed to be
 translated (it's just a path).

Stray and directory found are to be translated.  You can have
infinite possibilities to $dotest that is computed at runtime, so
that should be kept as a variable, untranslated in the message
template.

--
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


Re: [PATCH 1/2] am: handle stray $dotest directory

2013-06-14 Thread Junio C Hamano
Junio C Hamano gits...@pobox.com writes:

 Ramkumar Ramachandra artag...@gmail.com writes:

 Junio C Hamano wrote:
 And then the message triggers at the second test in t3420 when
 applied on top of 587947750bd7 (rebase: implement --[no-]autostash
 and rebase.autostash, 2013-05-12) or 45acb7592825 (Merge branch
 'rr/rebase-autostash', 2013-06-11).

 What was triggered?  (I didn't understand what you said)

 The patch applied on top of either of these commits will *BREAK* the
 second test in t3420.

Here is how sh -x t3420-*.sh -i ends:

...
++ git rebase unrelated-onto-branch
Created autostash: cdca6ca
HEAD is now at 0c4d2f1 third commit
First, rewinding head to replay your work on top of it...
Stray /srv/project/git/git.git/t/trash
directory.t3420-rebase-autostash/.git/rebase-apply directory found.
Use git am --abort to remove it.
+ eval_ret=1
+ test -z t
+ test 1 = 0
+ test -n ''
+ test t = t
+ test -n ''
+ return 1
+ test_failure_ 'rebase: dirty worktree, non-conflicting rebase' '
...

I _think_ the new check you added may be too loose.

A fix-up may look like this.


 git-am.sh | 9 -
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/git-am.sh b/git-am.sh
index 37edfae..3f89cf6 100755
--- a/git-am.sh
+++ b/git-am.sh
@@ -505,9 +505,9 @@ then
exit ;;
esac
rm -f $dotest/dirtyindex
-else
-   # Possible stray $dotest directory
-   if test -d $dotest; then
+elif test -d $dotest  ! test -f $dotest/autostash
+then
+   # stray $dotest directory
case $skip,$resolved,$abort in
,,t)
rm -fr $dotest
@@ -518,8 +518,7 @@ else
 Use \git am --abort\ to remove it.)
;;
esac
-   fi
-
+else
# Make sure we are not given --skip, --resolved, nor --abort
test $skip$resolved$abort =  ||
die $(gettext Resolve operation not in progress, we are not 
resuming.)
--
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