# [PATCH] Make git-add -i accept ranges like 7-

3 messages from 2008-07-14 to 2008-07-14. Participants: Ciaran McCreesh, Junio C Hamano.
Thread: https://gitlist.dev/t/14449

## Ciaran McCreesh, 2008-07-14 18:06

Subject: [PATCH] Make git-add -i accept ranges like 7-
Message-ID: <1216058784-32584-1-git-send-email-ciaran.mccreesh@googlemail.com>
URL: https://gitlist.dev/e/1216058784-32584-1-git-send-email-ciaran.mccreesh%40googlemail.com

```
git-add -i ranges expect number-number. But for the supremely lazy, typing in
that second number when selecting "from patch 7 to the end" is wasted effort.
So treat an empty second number in a range as "until the last item".

Signed-off-by: Ciaran McCreesh <ciaran.mccreesh@googlemail.com>
---
 Documentation/git-add.txt |    5 +++--
 git-add--interactive.perl |    6 +++---
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/Documentation/git-add.txt b/Documentation/git-add.txt
index 46dd56c..3558905 100644
--- a/Documentation/git-add.txt
+++ b/Documentation/git-add.txt
@@ -187,8 +187,9 @@ update::
    "Update>>".  When the prompt ends with double '>>', you can
    make more than one selection, concatenated with whitespace or
    comma.  Also you can say ranges.  E.g. "2-5 7,9" to choose
-   2,3,4,5,7,9 from the list.  You can say '*' to choose
-   everything.
+   2,3,4,5,7,9 from the list.  If the second number in a range is
+   omitted, all remaining patches are taken.  E.g. "7-" to choose
+   7,8,9 from the list.  You can say '*' to choose everything.
 +
 What you chose are then highlighted with '*',
 like this:
diff --git a/git-add--interactive.perl b/git-add--interactive.perl
index 801d7c0..72a8858 100755
--- a/git-add--interactive.perl
+++ b/git-add--interactive.perl
@@ -406,9 +406,9 @@ sub list_and_choose {
 			if ($choice =~ s/^-//) {
 				$choose = 0;
 			}
-			# A range can be specified like 5-7
-			if ($choice =~ /^(\d+)-(\d+)$/) {
-				($bottom, $top) = ($1, $2);
+			# A range can be specified like 5-7 or 5-.
+			if ($choice =~ /^(\d*)-(\d*)$/) {
+				($bottom, $top) = ($1, length($2) ? $2 : 1 + @stuff);
 			}
 			elsif ($choice =~ /^\d+$/) {
 				$bottom = $top = $choice;
-- 
1.5.6.2

```

## Junio C Hamano, 2008-07-14 18:15

Subject: Re: [PATCH] Make git-add -i accept ranges like 7-
Message-ID: <7vfxqcgwni.fsf@gitster.siamese.dyndns.org>
URL: https://gitlist.dev/e/7vfxqcgwni.fsf%40gitster.siamese.dyndns.org
In-Reply-To: <1216058784-32584-1-git-send-email-ciaran.mccreesh@googlemail.com>

```
Ciaran McCreesh <ciaran.mccreesh@googlemail.com> writes:

> git-add -i ranges expect number-number. But for the supremely lazy, typing in
> that second number when selecting "from patch 7 to the end" is wasted effort.
> So treat an empty second number in a range as "until the last item".

You didn't describe why you changed the first regexp from \d+ to \d*,
which would allow "-9" as a valid input as well.

But in that case $bottom will become an empty string.  Don't you need to
adjust the users of this data in the codepaths that follow this part?  I
didn't check.

> diff --git a/git-add--interactive.perl b/git-add--interactive.perl
> index 801d7c0..72a8858 100755
> --- a/git-add--interactive.perl
> +++ b/git-add--interactive.perl
> @@ -406,9 +406,9 @@ sub list_and_choose {
>  			if ($choice =~ s/^-//) {
>  				$choose = 0;
>  			}
> -			# A range can be specified like 5-7
> -			if ($choice =~ /^(\d+)-(\d+)$/) {
> -				($bottom, $top) = ($1, $2);
> +			# A range can be specified like 5-7 or 5-.
> +			if ($choice =~ /^(\d*)-(\d*)$/) {
> +				($bottom, $top) = ($1, length($2) ? $2 : 1 + @stuff);
>  			}
>  			elsif ($choice =~ /^\d+$/) {
>  				$bottom = $top = $choice;
> -- 
> 1.5.6.2

```

## Ciaran McCreesh, 2008-07-14 18:29

Subject: [PATCH,v2] Make git-add -i accept ranges like 7-
Message-ID: <1216060177-8757-1-git-send-email-ciaran.mccreesh@googlemail.com>
URL: https://gitlist.dev/e/1216060177-8757-1-git-send-email-ciaran.mccreesh%40googlemail.com
In-Reply-To: <7vfxqcgwni.fsf@gitster.siamese.dyndns.org>

```
git-add -i ranges expect number-number. But for the supremely lazy, typing in
that second number when selecting "from patch 7 to the end" is wasted effort.
So treat an empty second number in a range as "until the last item".

Signed-off-by: Ciaran McCreesh <ciaran.mccreesh@googlemail.com>
---
Oops, my bad.

Attempt 2 changes the regex to require a number in the first half of the range.
I was planning to allow for -7, meaning 'up to 7', but this collides with - at
the start being used to unchoose things. There's not much point adding a
special thing for 'from the start' though, since '1' is only one character to
type.

 Documentation/git-add.txt |    5 +++--
 git-add--interactive.perl |    6 +++---
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/Documentation/git-add.txt b/Documentation/git-add.txt
index 46dd56c..3558905 100644
--- a/Documentation/git-add.txt
+++ b/Documentation/git-add.txt
@@ -187,8 +187,9 @@ update::
    "Update>>".  When the prompt ends with double '>>', you can
    make more than one selection, concatenated with whitespace or
    comma.  Also you can say ranges.  E.g. "2-5 7,9" to choose
-   2,3,4,5,7,9 from the list.  You can say '*' to choose
-   everything.
+   2,3,4,5,7,9 from the list.  If the second number in a range is
+   omitted, all remaining patches are taken.  E.g. "7-" to choose
+   7,8,9 from the list.  You can say '*' to choose everything.
 +
 What you chose are then highlighted with '*',
 like this:
diff --git a/git-add--interactive.perl b/git-add--interactive.perl
index 801d7c0..a6a5c52 100755
--- a/git-add--interactive.perl
+++ b/git-add--interactive.perl
@@ -406,9 +406,9 @@ sub list_and_choose {
 			if ($choice =~ s/^-//) {
 				$choose = 0;
 			}
-			# A range can be specified like 5-7
-			if ($choice =~ /^(\d+)-(\d+)$/) {
-				($bottom, $top) = ($1, $2);
+			# A range can be specified like 5-7 or 5-.
+			if ($choice =~ /^(\d+)-(\d*)$/) {
+				($bottom, $top) = ($1, length($2) ? $2 : 1 + @stuff);
 			}
 			elsif ($choice =~ /^\d+$/) {
 				$bottom = $top = $choice;
-- 
1.5.6.2

```
