git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [PATCH] t1503: Fix arithmetic expansion syntax error when using dash
@ 2010-09-21 17:45 Ramsay Jones
  2010-09-22 19:15 ` Re*: " Junio C Hamano
  0 siblings, 1 reply; 7+ messages in thread
From: Ramsay Jones @ 2010-09-21 17:45 UTC (permalink / raw
  To: Junio C Hamano; +Cc: GIT Mailing-list, jon.seymour


On systems which have dash as /bin/sh, such as Ubuntu, the final
test (master@{n} for various n) fails with a syntax error while
processing an arithmetic expansion. The syntax error is caused by
using a bare name ('N') as a variable reference in the expression.

In order to avoid the syntax error, we spell the variable reference
as '$N' rather than simply 'N'.

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
---
 t/t1503-rev-parse-verify.sh |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/t/t1503-rev-parse-verify.sh b/t/t1503-rev-parse-verify.sh
index 100f857..813cc1b 100755
--- a/t/t1503-rev-parse-verify.sh
+++ b/t/t1503-rev-parse-verify.sh
@@ -106,8 +106,8 @@ test_expect_success 'use --default' '
 
 test_expect_success 'master@{n} for various n' '
 	N=$(git reflog | wc -l) &&
-	Nm1=$((N-1)) &&
-	Np1=$((N+1)) &&
+	Nm1=$(($N-1)) &&
+	Np1=$(($N+1)) &&
 	git rev-parse --verify master@{0} &&
 	git rev-parse --verify master@{1} &&
 	git rev-parse --verify master@{$Nm1} &&
-- 
1.7.3

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re*: [PATCH] t1503: Fix arithmetic expansion syntax error when using dash
  2010-09-21 17:45 [PATCH] t1503: Fix arithmetic expansion syntax error when using dash Ramsay Jones
@ 2010-09-22 19:15 ` Junio C Hamano
  2010-09-22 21:38   ` Jon Seymour
  2010-09-25 17:08   ` Ramsay Jones
  0 siblings, 2 replies; 7+ messages in thread
From: Junio C Hamano @ 2010-09-22 19:15 UTC (permalink / raw
  To: Ramsay Jones; +Cc: GIT Mailing-list, jon.seymour

Ramsay Jones <ramsay@ramsay1.demon.co.uk> writes:

> On systems which have dash as /bin/sh, such as Ubuntu, the final
> test (master@{n} for various n) fails with a syntax error while
> processing an arithmetic expansion. The syntax error is caused by
> using a bare name ('N') as a variable reference in the expression.
>
> In order to avoid the syntax error, we spell the variable reference
> as '$N' rather than simply 'N'.
>
> Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>

Thanks.

POSIX wants shells to support both "N" and "$N" and requires them to yield
the same answer to $((N)) and $(($N)), but we should aim for portability
in a case like this, especially when the price we pay to do so is so
small, i.e. a few extra dollars.

By the way, on my box, I get this:

    $ ls l /bin/dash
    -rwxr-xr-x 1 root root 104024 2008-08-26 02:36 /bin/dash*
    $ dpkg -l dash | grep '^ii'
    ii  dash              0.5.4-12          POSIX-compliant shell
    $ /bin/dash -c 'N=20 ; echo $(( N + 3 ))'
    23

I just left it vague by saying "e.g. older dash" in below, but we may want
to be more precise in the documentation.

-- >8 --
CodingGuidelines: spell Arithmetic Expansion with $(($var))

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 Documentation/CodingGuidelines |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/Documentation/CodingGuidelines b/Documentation/CodingGuidelines
index b8bf618..2cdd76f 100644
--- a/Documentation/CodingGuidelines
+++ b/Documentation/CodingGuidelines
@@ -43,6 +43,10 @@ For shell scripts specifically (not exhaustive):
 
  - We use Arithmetic Expansion $(( ... )).
 
+ - Inside Arithmetic Expansion, spell shell variables with $ in front
+   of them, as some shells do not grok $((x)) while accepting $(($x))
+   just fine (e.g. older dash).
+
  - No "Substring Expansion" ${parameter:offset:length}.
 
  - No shell arrays.

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: Re*: [PATCH] t1503: Fix arithmetic expansion syntax error when using dash
  2010-09-22 19:15 ` Re*: " Junio C Hamano
@ 2010-09-22 21:38   ` Jon Seymour
  2010-09-25 17:08   ` Ramsay Jones
  1 sibling, 0 replies; 7+ messages in thread
From: Jon Seymour @ 2010-09-22 21:38 UTC (permalink / raw
  To: Junio C Hamano; +Cc: Ramsay Jones, GIT Mailing-list

Ack. Thanks for the info and corrections.

jon.

On 23/09/2010, at 5:15, Junio C Hamano <gitster@pobox.com> wrote:

> Ramsay Jones <ramsay@ramsay1.demon.co.uk> writes:
> 
>> On systems which have dash as /bin/sh, such as Ubuntu, the final
>> test (master@{n} for various n) fails with a syntax error while
>> processing an arithmetic expansion. The syntax error is caused by
>> using a bare name ('N') as a variable reference in the expression.
>> 
>> In order to avoid the syntax error, we spell the variable reference
>> as '$N' rather than simply 'N'.
>> 
>> Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
> 
> Thanks.
> 
> POSIX wants shells to support both "N" and "$N" and requires them to yield
> the same answer to $((N)) and $(($N)), but we should aim for portability
> in a case like this, especially when the price we pay to do so is so
> small, i.e. a few extra dollars.
> 
> By the way, on my box, I get this:
> 
>    $ ls l /bin/dash
>    -rwxr-xr-x 1 root root 104024 2008-08-26 02:36 /bin/dash*
>    $ dpkg -l dash | grep '^ii'
>    ii  dash              0.5.4-12          POSIX-compliant shell
>    $ /bin/dash -c 'N=20 ; echo $(( N + 3 ))'
>    23
> 
> I just left it vague by saying "e.g. older dash" in below, but we may want
> to be more precise in the documentation.
> 
> -- >8 --
> CodingGuidelines: spell Arithmetic Expansion with $(($var))
> 
> Signed-off-by: Junio C Hamano <gitster@pobox.com>
> ---
> Documentation/CodingGuidelines |    4 ++++
> 1 files changed, 4 insertions(+), 0 deletions(-)
> 
> diff --git a/Documentation/CodingGuidelines b/Documentation/CodingGuidelines
> index b8bf618..2cdd76f 100644
> --- a/Documentation/CodingGuidelines
> +++ b/Documentation/CodingGuidelines
> @@ -43,6 +43,10 @@ For shell scripts specifically (not exhaustive):
> 
>  - We use Arithmetic Expansion $(( ... )).
> 
> + - Inside Arithmetic Expansion, spell shell variables with $ in front
> +   of them, as some shells do not grok $((x)) while accepting $(($x))
> +   just fine (e.g. older dash).
> +
>  - No "Substring Expansion" ${parameter:offset:length}.
> 
>  - No shell arrays.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Re*: [PATCH] t1503: Fix arithmetic expansion syntax error when using dash
  2010-09-22 19:15 ` Re*: " Junio C Hamano
  2010-09-22 21:38   ` Jon Seymour
@ 2010-09-25 17:08   ` Ramsay Jones
  2010-09-25 17:24     ` Ævar Arnfjörð Bjarmason
  2010-09-25 17:58     ` Junio C Hamano
  1 sibling, 2 replies; 7+ messages in thread
From: Ramsay Jones @ 2010-09-25 17:08 UTC (permalink / raw
  To: Junio C Hamano; +Cc: GIT Mailing-list, jon.seymour

Junio C Hamano wrote:
> POSIX wants shells to support both "N" and "$N" and requires them to yield
> the same answer to $((N)) and $(($N)), but we should aim for portability
> in a case like this, especially when the price we pay to do so is so
> small, i.e. a few extra dollars.

Indeed

> By the way, on my box, I get this:
> 
>     $ ls l /bin/dash
>     -rwxr-xr-x 1 root root 104024 2008-08-26 02:36 /bin/dash*
>     $ dpkg -l dash | grep '^ii'
>     ii  dash              0.5.4-12          POSIX-compliant shell
>     $ /bin/dash -c 'N=20 ; echo $(( N + 3 ))'
>     23

Ah, yes, I should have checked for this... particularly since I now
vaguely remember reading that this had been "fixed"... *blush*
Sorry about that.

For the record, on my system I get:

    $ ls -l /bin/dash
    -rwxr-xr-x 1 root root 80500 2007-03-05 06:00 /bin/dash*
    $ dpkg -l dash | grep '^ii'
    ii  dash           0.5.3-5ubuntu2 The Debian Almquist Shell
    $ /bin/dash -c 'N=20; echo $(( N + 3 ))'
    /bin/dash: arith: syntax error: " N + 3 "

> I just left it vague by saying "e.g. older dash" in below, but we may want
> to be more precise in the documentation.

I found a bug report:

    http://bugs.launchpad.net/ubuntu/+source/dash/+bug/92189

which had a post against it which implied that this was fixed in
version 0.5.4-3. I went over to packages.debian.org to read the
ChangeLog for this version, but I could not conclude anything
from that text. :(

Do we need to be more precise?

Should I re-work the commit message and re-submit?

ATB,
Ramsay Jones

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Re*: [PATCH] t1503: Fix arithmetic expansion syntax error when using dash
  2010-09-25 17:08   ` Ramsay Jones
@ 2010-09-25 17:24     ` Ævar Arnfjörð Bjarmason
  2010-09-29 19:57       ` Ramsay Jones
  2010-09-25 17:58     ` Junio C Hamano
  1 sibling, 1 reply; 7+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2010-09-25 17:24 UTC (permalink / raw
  To: Ramsay Jones; +Cc: Junio C Hamano, GIT Mailing-list, jon.seymour

On Sat, Sep 25, 2010 at 17:08, Ramsay Jones <ramsay@ramsay1.demon.co.uk> wrote:
> Junio C Hamano wrote:
>> POSIX wants shells to support both "N" and "$N" and requires them to yield
>> the same answer to $((N)) and $(($N)), but we should aim for portability
>> in a case like this, especially when the price we pay to do so is so
>> small, i.e. a few extra dollars.
>
> Indeed
>
>> By the way, on my box, I get this:
>>
>>     $ ls l /bin/dash
>>     -rwxr-xr-x 1 root root 104024 2008-08-26 02:36 /bin/dash*
>>     $ dpkg -l dash | grep '^ii'
>>     ii  dash              0.5.4-12          POSIX-compliant shell
>>     $ /bin/dash -c 'N=20 ; echo $(( N + 3 ))'
>>     23
>
> Ah, yes, I should have checked for this... particularly since I now
> vaguely remember reading that this had been "fixed"... *blush*
> Sorry about that.
>
> For the record, on my system I get:
>
>    $ ls -l /bin/dash
>    -rwxr-xr-x 1 root root 80500 2007-03-05 06:00 /bin/dash*
>    $ dpkg -l dash | grep '^ii'
>    ii  dash           0.5.3-5ubuntu2 The Debian Almquist Shell
>    $ /bin/dash -c 'N=20; echo $(( N + 3 ))'
>    /bin/dash: arith: syntax error: " N + 3 "
>
>> I just left it vague by saying "e.g. older dash" in below, but we may want
>> to be more precise in the documentation.
>
> I found a bug report:
>
>    http://bugs.launchpad.net/ubuntu/+source/dash/+bug/92189
>
> which had a post against it which implied that this was fixed in
> version 0.5.4-3. I went over to packages.debian.org to read the
> ChangeLog for this version, but I could not conclude anything
> from that text. :(
>
> Do we need to be more precise?

If you want to spend the effort to track it down that would be
great. There's a dash git repository on kernel.org you can probably
bisect:

    http://git.kernel.org/?p=utils/dash/dash.git;a=summary

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Re*: [PATCH] t1503: Fix arithmetic expansion syntax error when using dash
  2010-09-25 17:08   ` Ramsay Jones
  2010-09-25 17:24     ` Ævar Arnfjörð Bjarmason
@ 2010-09-25 17:58     ` Junio C Hamano
  1 sibling, 0 replies; 7+ messages in thread
From: Junio C Hamano @ 2010-09-25 17:58 UTC (permalink / raw
  To: Ramsay Jones; +Cc: GIT Mailing-list, jon.seymour

Ramsay Jones <ramsay@ramsay1.demon.co.uk> writes:

> Junio C Hamano wrote:
>> POSIX wants shells to support both "N" and "$N" and requires them to yield
>> the same answer to $((N)) and $(($N)), but we should aim for portability
>> in a case like this, especially when the price we pay to do so is so
>> small, i.e. a few extra dollars.
>
> Indeed
>
>> By the way, on my box, I get this:
>> 
>>     $ ls l /bin/dash
>>     -rwxr-xr-x 1 root root 104024 2008-08-26 02:36 /bin/dash*
>>     $ dpkg -l dash | grep '^ii'
>>     ii  dash              0.5.4-12          POSIX-compliant shell
>>     $ /bin/dash -c 'N=20 ; echo $(( N + 3 ))'
>>     23
>
> Ah, yes, I should have checked for this... particularly since I now
> vaguely remember reading that this had been "fixed"... *blush*
> Sorry about that.
>
> For the record, on my system I get:
>
>     $ ls -l /bin/dash
>     -rwxr-xr-x 1 root root 80500 2007-03-05 06:00 /bin/dash*
>     $ dpkg -l dash | grep '^ii'
>     ii  dash           0.5.3-5ubuntu2 The Debian Almquist Shell
>     $ /bin/dash -c 'N=20; echo $(( N + 3 ))'
>     /bin/dash: arith: syntax error: " N + 3 "
>
>> I just left it vague by saying "e.g. older dash" in below, but we may want
>> to be more precise in the documentation.
>
> I found a bug report:
>
>     http://bugs.launchpad.net/ubuntu/+source/dash/+bug/92189
>
> which had a post against it which implied that this was fixed in
> version 0.5.4-3. I went over to packages.debian.org to read the
> ChangeLog for this version, but I could not conclude anything
> from that text. :(
>
> Do we need to be more precise?
>
> Should I re-work the commit message and re-submit?

I don't think so; we now know that dash 0.5.3 or older may have this
problem and that is clear enough for our purpose.

Thanks.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Re*: [PATCH] t1503: Fix arithmetic expansion syntax error when using dash
  2010-09-25 17:24     ` Ævar Arnfjörð Bjarmason
@ 2010-09-29 19:57       ` Ramsay Jones
  0 siblings, 0 replies; 7+ messages in thread
From: Ramsay Jones @ 2010-09-29 19:57 UTC (permalink / raw
  To: Ævar Arnfjörð Bjarmason
  Cc: Junio C Hamano, GIT Mailing-list, jon.seymour

Ævar Arnfjörð Bjarmason wrote:
> On Sat, Sep 25, 2010 at 17:08, Ramsay Jones <ramsay@ramsay1.demon.co.uk> wrote:
>> Junio C Hamano wrote:
>>> I just left it vague by saying "e.g. older dash" in below, but we may want
>>> to be more precise in the documentation.
>> I found a bug report:
>>
>>    http://bugs.launchpad.net/ubuntu/+source/dash/+bug/92189
>>
>> which had a post against it which implied that this was fixed in
>> version 0.5.4-3. I went over to packages.debian.org to read the
>> ChangeLog for this version, but I could not conclude anything
>> from that text. :(
>>
>> Do we need to be more precise?
> 
> If you want to spend the effort to track it down that would be
> great. There's a dash git repository on kernel.org you can probably
> bisect:
> 
>     http://git.kernel.org/?p=utils/dash/dash.git;a=summary

I don't think we need to be more precise here, but just for the
giggle, I cloned the dash repository to take a quick look.

It was actually very easy to spot the commit that adds the missing
capability; I fired up gitk and (starting from v0.5.3) just scanned
the commits "upward" until I found the culprit ;-) Having said that,
I would not have found it just by reading the commit message; I had
to read the "patch" text to discover the "fix", which I suppose
could have been an unintended side effect! :-D

BTW the answer is: commit f6e3b2f8a59922405f42c8bc283e0f5546c25d0e
or, if you prefer:

    $ git describe --tags f6e3b2f8
    v0.5.4-26-gf6e3b2f

[But this does not help too much in identifying the downstream
version(s) from, say, the debian project.]

I decided to actually perform a git-bisect to confirm that I had
actually found the correct commit. I used a script (see below) to
build and test dash, so that I could use "git bisect run ./test.sh"
to find it automatically. (The script may seem to return backward
results, but we need to consider a version that *does* support the
extended syntax to be a *bad* commit for the purposes of bisect! ;-) )

A transcript of the git-bisect run is given below.

ATB,
Ramsay Jones

$ git tag -l
v0.5.2
v0.5.3
v0.5.4
v0.5.5
v0.5.5.1
v0.5.6
v0.5.6.1

$ cat -n test.sh
     1	#!/bin/sh
     2	
     3	make clean >/dev/null 2>&1
     4	make >make-out 2>&1 || { echo CANNOT BUILD; exit 125; }
     5	
     6	if src/dash -c 'N=20; echo $(( N + 3))'
     7	then
     8		echo "--- works OK => BAD ---"
     9		exit 1;
    10	else
    11		echo "--- syntax error => GOOD ---"
    12		exit 0;
    13	fi

$ git bisect start v0.5.5 v0.5.3
Bisecting: 41 revisions left to test after this (roughly 5 steps)
[aa82f69dea2f2d5fe4337dfb12cea54fabdab175] [BUILTIN] Use intmax_t arithmetic in test

$ git bisect run ./test.sh
running ./test.sh
src/dash: arith: syntax error: " N + 3"
--- syntax error => GOOD ---
Bisecting: 20 revisions left to test after this (roughly 4 steps)
[f0f930d60cd62f5fe5ba28460b43f333e8062b94] [CD] Restored non-glibc getcwd support
running ./test.sh
23
--- works OK => BAD ---
Bisecting: 10 revisions left to test after this (roughly 3 steps)
[d39c8628b8594c29d234427ba07a12538ab36f41] [PARSER] Fix here-doc corruption
running ./test.sh
23
--- works OK => BAD ---
Bisecting: 4 revisions left to test after this (roughly 2 steps)
[7454c1e3b90f51a49e563323db38bafa50776533] [BUILTIN] Use setvarint to set OPTIND
running ./test.sh
23
--- works OK => BAD ---
Bisecting: 2 revisions left to test after this (roughly 1 step)
[f6e3b2f8a59922405f42c8bc283e0f5546c25d0e] [ARITH] Add assignment and intmax_t support
running ./test.sh
23
--- works OK => BAD ---
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[3df3edd13389ae768010bfacee5612346b413e38] [PARSER] Report substition errors at expansion time
running ./test.sh
src/dash: arith: syntax error: " N + 3"
--- syntax error => GOOD ---
f6e3b2f8a59922405f42c8bc283e0f5546c25d0e is the first bad commit
commit f6e3b2f8a59922405f42c8bc283e0f5546c25d0e
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Thu Oct 11 22:36:28 2007 +0800

    [ARITH] Add assignment and intmax_t support
    
    This patch adds assignment operator support in arithmetic expansions.  It
    also changes the type used to intmax_t.

:100644 100644 69ba464a3219d6979aa1150c15e279d3adf423ac 895c6072294f13f2a434c52752dc839afd412c0b M	ChangeLog
:040000 040000 6640114c4a8d35cbcfaf6fa44b888195270a3ae1 06a80af3e532959cddd422f921e66cb679fc8760 M	src
bisect run success

$ git describe --tags f6e3b2f8
v0.5.4-26-gf6e3b2f

$ 

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2010-09-30 17:14 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-09-21 17:45 [PATCH] t1503: Fix arithmetic expansion syntax error when using dash Ramsay Jones
2010-09-22 19:15 ` Re*: " Junio C Hamano
2010-09-22 21:38   ` Jon Seymour
2010-09-25 17:08   ` Ramsay Jones
2010-09-25 17:24     ` Ævar Arnfjörð Bjarmason
2010-09-29 19:57       ` Ramsay Jones
2010-09-25 17:58     ` Junio C Hamano

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).