Johannes Schindelin <johannes.schinde...@gmx.de> writes:

> Instead of dying there, let the caller high up in the callchain
> notice the error and handle it (by dying, still).
>
> The only callers of checkout_fast_forward_to(), cmd_merge(),
> pull_into_void(), cmd_pull() and sequencer's fast_forward_to(),
> already check the return value and handle it appropriately. With this
> step, we make it notice an error return from this function.
>
> So this is a safe conversion to make checkout_fast_forward_to()
> callable from new callers that want it not to die, without changing
> the external behaviour of anything existing.
>
> Signed-off-by: Johannes Schindelin <johannes.schinde...@gmx.de>
> ---

I'll retitle this to

    sequencer: lib'ify chckout_fast_forward()

and checkout_fast_forward_to() in the second paragraph to match the
reality.  Other than that, the above analysis matches what I see in
the code and the libification done here looks correct.

Thanks.

>  merge.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/merge.c b/merge.c
> index 5db7d56..23866c9 100644
> --- a/merge.c
> +++ b/merge.c
> @@ -57,7 +57,8 @@ int checkout_fast_forward(const unsigned char *head,
>  
>       refresh_cache(REFRESH_QUIET);
>  
> -     hold_locked_index(lock_file, 1);
> +     if (hold_locked_index(lock_file, 0) < 0)
> +             return -1;
>  
>       memset(&trees, 0, sizeof(trees));
>       memset(&opts, 0, sizeof(opts));
> @@ -90,7 +91,9 @@ int checkout_fast_forward(const unsigned char *head,
>       }
>       if (unpack_trees(nr_trees, t, &opts))
>               return -1;
> -     if (write_locked_index(&the_index, lock_file, COMMIT_LOCK))
> -             die(_("unable to write new index file"));
> +     if (write_locked_index(&the_index, lock_file, COMMIT_LOCK)) {
> +             rollback_lock_file(lock_file);
> +             return error(_("unable to write new index file"));
> +     }
>       return 0;
>  }

Reply via email to