# [PATCH] sequencer: remove unreachable exit condition in pick_commits()

5 messages from 2023-09-03 to 2023-09-13. Participants: Oswald Buddenhagen, Phillip Wood, Junio C Hamano.
Thread: https://gitlist.dev/t/60189

## Oswald Buddenhagen, 2023-09-03 15:11

Subject: [PATCH] sequencer: remove unreachable exit condition in pick_commits()
Message-ID: <20230903151132.739151-1-oswald.buddenhagen@gmx.de>
URL: https://gitlist.dev/e/20230903151132.739151-1-oswald.buddenhagen%40gmx.de

```
This was introduced by 56dc3ab04 ("sequencer (rebase -i): implement the
'edit' command", 2017-01-02), and was pointless from the get-go, as the
command causes an early return.

Signed-off-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>

---
this remains valid after phillip's pending series, through it becomes
marginally harder to prove (c.f. "sequencer: factor out part of
pick_commits()").

Cc: Johannes Schindelin <johannes.schindelin@gmx.de>
Cc: Phillip Wood <phillip.wood123@gmail.com>
---
 sequencer.c | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/sequencer.c b/sequencer.c
index a66dcf8ab2..99e9c520ca 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -4832,10 +4832,6 @@ static int pick_commits(struct repository *r,
 		struct strbuf head_ref = STRBUF_INIT, buf = STRBUF_INIT;
 		struct stat st;
 
-		/* Stopped in the middle, as planned? */
-		if (todo_list->current < todo_list->nr)
-			return 0;
-
 		if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
 				starts_with(head_ref.buf, "refs/")) {
 			const char *msg;
-- 
2.40.0.152.g15d061e6df


```

## Phillip Wood, 2023-09-12 10:18

Subject: Re: [PATCH] sequencer: remove unreachable exit condition in pick_commits()
Message-ID: <ddf8dc95-6583-4257-b48a-0115f59950ef@gmail.com>
URL: https://gitlist.dev/e/ddf8dc95-6583-4257-b48a-0115f59950ef%40gmail.com
In-Reply-To: <20230903151132.739151-1-oswald.buddenhagen@gmx.de>

```
Hi Oswald

On 03/09/2023 16:11, Oswald Buddenhagen wrote:
> This was introduced by 56dc3ab04 ("sequencer (rebase -i): implement the
> 'edit' command", 2017-01-02), and was pointless from the get-go, as the
> command causes an early return.

While I agree this code is unreachable, just because it was unused when 
it was added does not mean it is unused now. It would be helpful for the 
commit message to explain that there are no "break" or "goto" statements 
in the loop body and therefore this code is only reachable when the loop 
terminates because todo_list->current == todo_list->nr

Best Wishes

Phillip

> Signed-off-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
> 
> ---
> this remains valid after phillip's pending series, through it becomes
> marginally harder to prove (c.f. "sequencer: factor out part of
> pick_commits()").
> 
> Cc: Johannes Schindelin <johannes.schindelin@gmx.de>
> Cc: Phillip Wood <phillip.wood123@gmail.com>
> ---
>   sequencer.c | 4 ----
>   1 file changed, 4 deletions(-)
> 
> diff --git a/sequencer.c b/sequencer.c
> index a66dcf8ab2..99e9c520ca 100644
> --- a/sequencer.c
> +++ b/sequencer.c
> @@ -4832,10 +4832,6 @@ static int pick_commits(struct repository *r,
>   		struct strbuf head_ref = STRBUF_INIT, buf = STRBUF_INIT;
>   		struct stat st;
>   
> -		/* Stopped in the middle, as planned? */
> -		if (todo_list->current < todo_list->nr)
> -			return 0;
> -
>   		if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
>   				starts_with(head_ref.buf, "refs/")) {
>   			const char *msg;



```

## Oswald Buddenhagen, 2023-09-12 10:55

Subject: [PATCH v2] sequencer: remove unreachable exit condition in pick_commits()
Message-ID: <20230912105541.272917-1-oswald.buddenhagen@gmx.de>
URL: https://gitlist.dev/e/20230912105541.272917-1-oswald.buddenhagen%40gmx.de
In-Reply-To: <ddf8dc95-6583-4257-b48a-0115f59950ef@gmail.com>

```
This was introduced by 56dc3ab04 ("sequencer (rebase -i): implement the
'edit' command", 2017-01-02), and was pointless from the get-go: all
early exits from the loop above are returns, so todo_list->current ==
todo_list->nr is an invariant after the loop.

Signed-off-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>

---
v2:
- improved commit message

Cc: Johannes Schindelin <johannes.schindelin@gmx.de>
Cc: Phillip Wood <phillip.wood123@gmail.com>
Cc: Junio C Hamano <gitster@pobox.com>
---
 sequencer.c | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/sequencer.c b/sequencer.c
index a66dcf8ab2..99e9c520ca 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -4832,10 +4832,6 @@ static int pick_commits(struct repository *r,
 		struct strbuf head_ref = STRBUF_INIT, buf = STRBUF_INIT;
 		struct stat st;
 
-		/* Stopped in the middle, as planned? */
-		if (todo_list->current < todo_list->nr)
-			return 0;
-
 		if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
 				starts_with(head_ref.buf, "refs/")) {
 			const char *msg;
-- 
2.42.0.419.g70bf8a5751


```

## Phillip Wood, 2023-09-12 13:27

Subject: Re: [PATCH v2] sequencer: remove unreachable exit condition in pick_commits()
Message-ID: <7ede7c26-9029-4e4b-81a3-f992eff74124@gmail.com>
URL: https://gitlist.dev/e/7ede7c26-9029-4e4b-81a3-f992eff74124%40gmail.com
In-Reply-To: <20230912105541.272917-1-oswald.buddenhagen@gmx.de>

```
On 12/09/2023 11:55, Oswald Buddenhagen wrote:
> This was introduced by 56dc3ab04 ("sequencer (rebase -i): implement the
> 'edit' command", 2017-01-02), and was pointless from the get-go: all
> early exits from the loop above are returns, so todo_list->current ==
> todo_list->nr is an invariant after the loop.
> 
> Signed-off-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>

Thanks for updating the commit message, I think it is clearer now

Best Wishes

Phillip

> ---
> v2:
> - improved commit message
> 
> Cc: Johannes Schindelin <johannes.schindelin@gmx.de>
> Cc: Phillip Wood <phillip.wood123@gmail.com>
> Cc: Junio C Hamano <gitster@pobox.com>
> ---
>   sequencer.c | 4 ----
>   1 file changed, 4 deletions(-)
> 
> diff --git a/sequencer.c b/sequencer.c
> index a66dcf8ab2..99e9c520ca 100644
> --- a/sequencer.c
> +++ b/sequencer.c
> @@ -4832,10 +4832,6 @@ static int pick_commits(struct repository *r,
>   		struct strbuf head_ref = STRBUF_INIT, buf = STRBUF_INIT;
>   		struct stat st;
>   
> -		/* Stopped in the middle, as planned? */
> -		if (todo_list->current < todo_list->nr)
> -			return 0;
> -
>   		if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
>   				starts_with(head_ref.buf, "refs/")) {
>   			const char *msg;


```

## Junio C Hamano, 2023-09-13 00:32

Subject: Re: [PATCH v2] sequencer: remove unreachable exit condition in pick_commits()
Message-ID: <xmqqwmwukj4f.fsf@gitster.g>
URL: https://gitlist.dev/e/xmqqwmwukj4f.fsf%40gitster.g
In-Reply-To: <7ede7c26-9029-4e4b-81a3-f992eff74124@gmail.com>

```
Phillip Wood <phillip.wood123@gmail.com> writes:

> On 12/09/2023 11:55, Oswald Buddenhagen wrote:
>> This was introduced by 56dc3ab04 ("sequencer (rebase -i): implement the
>> 'edit' command", 2017-01-02), and was pointless from the get-go: all
>> early exits from the loop above are returns, so todo_list->current ==
>> todo_list->nr is an invariant after the loop.
>> Signed-off-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
>
> Thanks for updating the commit message, I think it is clearer now

Thanks, both.  Queued.

```
