threads / discuss / 40020

Error pushing new branch: value too great for base (error token is...

Subject: Error pushing new branch: value too great for base (error token is...

## tl;dr

6 messages between Aug 5, 2015 and Aug 11, 2015.

replies: 5people: 3as markdown or json

Gaurav Chhabra· Aug 5, 2015, 17:32 UTC · lore
I had written the following code to check whether a push is for branch deletion:
#!/bin/bash
NULL="0000000000000000000000000000000000000000"
while read old_sha new_sha refname ; do
    echo "Stdin: [$old_sha] [$new_sha] [$refname]"
    if [[ "$new_sha" -eq "$NULL" ]]; then   # Line 17
        echo "Skipping checks..."
        continue
    fi
    ...
    ...
    ...
done

While it works fine for branch deletion, i noticed that if i create a branch and push it to remote, i get the following error due to the above-mentioned code:

$ git push origin rel-a Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 407 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) remote: Stdin: [0000000000000000000000000000000000000000] [9226289d2416af4cb7365d7aaa5e382bdb3d9a89] [refs/heads/rel-a] remote: remote: hooks/pre-receive: line 17: [[: 9226289d2416af4cb7365d7aaa5e382bdb3d9a89: value too great for base (error token is "922628 9d2416af4cb7365d7aaa5e382bdb3d9a89")

Although the new branch gets pushed to remote but i'm not sure why i'm getting this error and how can i fix it. I checked online and i get few links where folks had similar issue but in each such case, the error token was 08 or 09. I still tried the suggestion of using "10#" in front of my $new_sha variable but to no avail.

Any suggestions?
Eric Sunshine· Aug 5, 2015, 17:53 UTC · re: Gaurav Chhabra · lore

Re: Error pushing new branch: value too great for base (error token is...

On Wed, Aug 5, 2015 at 1:32 PM, Gaurav Chhabra <varuag.chhabra@gmail.com> wrote:
Show 21 quoted lines
> I had written the following code to check whether a push is for branch deletion:
>
> #!/bin/bash
>
> NULL="0000000000000000000000000000000000000000"
>     if [[ "$new_sha" -eq "$NULL" ]]; then   # Line 17
> remote: Stdin: [0000000000000000000000000000000000000000]
> [9226289d2416af4cb7365d7aaa5e382bdb3d9a89] [refs/heads/rel-a]
> remote:
> remote: hooks/pre-receive: line 17: [[:
> 9226289d2416af4cb7365d7aaa5e382bdb3d9a89: value too great for base
> (error token is "922628
> 9d2416af4cb7365d7aaa5e382bdb3d9a89")
>
> Although the new branch gets pushed to remote but i'm not sure why i'm
> getting this error and how can i fix it. I checked online and i get
> few links where folks had similar issue but in each such case, the
> error token was 08 or 09. I still tried the suggestion of using "10#"
> in front of my $new_sha variable but to no avail.
>
> Any suggestions?

Yes, try using the string comparison '=' operator rather than the numeric comparison operator '-eq'.

    if [[ "$new_sha" = "$NULL" ]]; then
Gaurav Chhabra· Aug 10, 2015, 09:54 UTC · lore

Re: Error pushing new branch: value too great for base (error token is...

Apologies for the delay in reply! I tried your suggestion and it works. Thanks! :)

I'm curious why integer comparison is throwing error. Shouldn't i be comparing numbers with numeric operator?

On Mon, Aug 10, 2015 at 3:23 PM, Gaurav Chhabra <varuag.chhabra@gmail.com> wrote:

Show 41 quoted lines
> Apologies for the delay in reply! I tried your suggestion and it works.
> Thanks! :)
>
> I'm curious why integer comparison is throwing error. Shouldn't i be
> comparing numbers with numeric operator?
>
>
> On Wed, Aug 5, 2015 at 11:23 PM, Eric Sunshine <sunshine@sunshineco.com>
> wrote:
>>
>> On Wed, Aug 5, 2015 at 1:32 PM, Gaurav Chhabra <varuag.chhabra@gmail.com>
>> wrote:
>> > I had written the following code to check whether a push is for branch
>> > deletion:
>> >
>> > #!/bin/bash
>> >
>> > NULL="0000000000000000000000000000000000000000"
>> >     if [[ "$new_sha" -eq "$NULL" ]]; then   # Line 17
>> > remote: Stdin: [0000000000000000000000000000000000000000]
>> > [9226289d2416af4cb7365d7aaa5e382bdb3d9a89] [refs/heads/rel-a]
>> > remote:
>> > remote: hooks/pre-receive: line 17: [[:
>> > 9226289d2416af4cb7365d7aaa5e382bdb3d9a89: value too great for base
>> > (error token is "922628
>> > 9d2416af4cb7365d7aaa5e382bdb3d9a89")
>> >
>> > Although the new branch gets pushed to remote but i'm not sure why i'm
>> > getting this error and how can i fix it. I checked online and i get
>> > few links where folks had similar issue but in each such case, the
>> > error token was 08 or 09. I still tried the suggestion of using "10#"
>> > in front of my $new_sha variable but to no avail.
>> >
>> > Any suggestions?
>>
>> Yes, try using the string comparison '=' operator rather than the
>> numeric comparison operator '-eq'.
>>
>>     if [[ "$new_sha" = "$NULL" ]]; then
>
>
Jacob Keller· Aug 10, 2015, 22:29 UTC · re: Gaurav Chhabra · lore

Re: Error pushing new branch: value too great for base (error token is...

On Mon, Aug 10, 2015 at 2:54 AM, Gaurav Chhabra <varuag.chhabra@gmail.com> wrote:

Show 6 quoted lines
> Apologies for the delay in reply! I tried your suggestion and it
> works. Thanks! :)
>
> I'm curious why integer comparison is throwing error. Shouldn't i be
> comparing numbers with numeric operator?
>

Yes, but shell doesn't treat hex numbers as numbers. So it will work only if the string is a decimal number.

Regards, Jake

Eric Sunshine· Aug 10, 2015, 22:47 UTC · re: Jacob Keller · lore

Re: Error pushing new branch: value too great for base (error token is...

On Mon, Aug 10, 2015 at 6:29 PM, Jacob Keller <jacob.keller@gmail.com> wrote:
Show 10 quoted lines
> On Mon, Aug 10, 2015 at 2:54 AM, Gaurav Chhabra
> <varuag.chhabra@gmail.com> wrote:
>> Apologies for the delay in reply! I tried your suggestion and it
>> works. Thanks! :)
>>
>> I'm curious why integer comparison is throwing error. Shouldn't i be
>> comparing numbers with numeric operator?
>
> Yes, but shell doesn't treat hex numbers as numbers. So it will work
> only if the string is a decimal number.

This particular case deserves a bit more explanation. The expression in question was this:

    if [[ "$new_sha" -eq "$NULL" ]]; then
where 'new_sha' was 9226289d2416af4cb7365d7aaa5e382bdb3d9a89.

In Bash, inside the [[ .. ]], it did attempt evaluating the SHA1 as a *decimal* number, however, when it encountered the "d", it complained that it was outside the allowed range of decimal digits ("0"..."9"). Had the SHA1 been prefixed by a "0x", the [[...]] context would have dealt with it just fine.

Outside the [[...]] context, arguments to -eq do need to be base-10 integers.

Nevertheless, a SHA1 is effective an opaque value. There's little, if anything, to be gained by treating it as a numeric quantity, hence string '=' makes more sense than numeric '-eq'.

Gaurav Chhabra· Aug 11, 2015, 06:30 UTC · re: Eric Sunshine · lore

Re: Error pushing new branch: value too great for base (error token is...

Thanks for the detailed explanation Eric! That really helped clear my doubts. Also tried with "0x" and it's working fine however, as suggested by you, i will use '='

Thanks again! :)
On Tue, Aug 11, 2015 at 4:17 AM, Eric Sunshine <sunshine@sunshineco.com> wrote:
Show 30 quoted lines
> On Mon, Aug 10, 2015 at 6:29 PM, Jacob Keller <jacob.keller@gmail.com> wrote:
>> On Mon, Aug 10, 2015 at 2:54 AM, Gaurav Chhabra
>> <varuag.chhabra@gmail.com> wrote:
>>> Apologies for the delay in reply! I tried your suggestion and it
>>> works. Thanks! :)
>>>
>>> I'm curious why integer comparison is throwing error. Shouldn't i be
>>> comparing numbers with numeric operator?
>>
>> Yes, but shell doesn't treat hex numbers as numbers. So it will work
>> only if the string is a decimal number.
>
> This particular case deserves a bit more explanation. The expression
> in question was this:
>
>     if [[ "$new_sha" -eq "$NULL" ]]; then
>
> where 'new_sha' was 9226289d2416af4cb7365d7aaa5e382bdb3d9a89.
>
> In Bash, inside the [[ .. ]], it did attempt evaluating the SHA1 as a
> *decimal* number, however, when it encountered the "d", it complained
> that it was outside the allowed range of decimal digits ("0"..."9").
> Had the SHA1 been prefixed by a "0x", the [[...]] context would have
> dealt with it just fine.
>
> Outside the [[...]] context, arguments to -eq do need to be base-10 integers.
>
> Nevertheless, a SHA1 is effective an opaque value. There's little, if
> anything, to be gained by treating it as a numeric quantity, hence
> string '=' makes more sense than numeric '-eq'.

← back to recent threads