From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS31976 209.132.180.0/23 X-Spam-Status: No, score=-3.3 required=3.0 tests=AWL,BAYES_00,BODY_8BITS, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by dcvr.yhbt.net (Postfix) with ESMTP id 58C101F453 for ; Wed, 6 Feb 2019 21:11:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727181AbfBFVLk (ORCPT ); Wed, 6 Feb 2019 16:11:40 -0500 Received: from mail-wr1-f65.google.com ([209.85.221.65]:34888 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726852AbfBFVLj (ORCPT ); Wed, 6 Feb 2019 16:11:39 -0500 Received: by mail-wr1-f65.google.com with SMTP id z18so8462489wrh.2 for ; Wed, 06 Feb 2019 13:11:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:openpgp:autocrypt:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=Nd5Yv4vlMEvQXnnNi4dKbBtsEGE2tKg8EdSs5kwyGsc=; b=fsjOPTMNbJ6NTVzdNbu/Q81XiLGZIGJgqWoLBzdId0pRFyH4KMcvszN/2TbI1O+rme gbrsFg7AyjFiyX9nYNH/GUzmYhP5ncSi7V+2g60Vd+ymn8T0msU49Lp1T0EA1hSOKlrH 09Gt/SDZTCikpRwDyuYMIyNgnbmCHa+vV77gOoXTUFxH+T45SONM5XfD6MLYRkrBG8We By76GdWPESOX3BJFoa9ZjuXpHYooUCUmyW0qzv8Yfy0daLnMFPfHheNb9UNoCDnDgF9q rDL/OaCHg1JrEEhQ+IDZ3OEOWKoIJcNsQNp7mO3mRnBqAiYcVP1bQHgBT6cznvB5Cm1z xW2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:openpgp:autocrypt :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=Nd5Yv4vlMEvQXnnNi4dKbBtsEGE2tKg8EdSs5kwyGsc=; b=AYLCo6PHJ0T4AsXbEiMS/NlK1eXua5O4yD5eWnZDY8W72Nr+FzDYhXIIaGUEnJ8WvL uMbsm86YJjk4zj1DkbxcpIq92vnP/JbAEEEp1B/0vAPOOzTFGThfmCfzuMESiFHXUbbi 8ibREK0UdUEWlvFQoq4RJMxRXTRA3u45lrosKCOslNW7I7UgtCw0Zw1KynPB4jmthXHo Bm358RcjQa9+0Q5QZ9wZBa3PKp5R6rSqG1ffFpKfdJ4IdyXnEsOAI5MZu0pLyDOyBsaU bI3eGjUgZHyjOe8O3AkxAOkW3J9QAZT8XsKh5dJ6pU1uvX1wGABUIidyTZLpmlA55WOx bgnQ== X-Gm-Message-State: AHQUAublxn2KxTnXuSYtkgMoyALAq2LfBanvLMWNAIdTNkIcX3ScVmlQ lyR/g7nUeNVGlVGEnnjZDb4= X-Google-Smtp-Source: AHgI3IaXxSqNZ3qHyZxzViLtVf+r7hmnqxScadk9bIt40j5/61qYoloOE52pEWoj3dwDaV0c6FgpGQ== X-Received: by 2002:adf:fbc8:: with SMTP id d8mr9285258wrs.318.1549487496175; Wed, 06 Feb 2019 13:11:36 -0800 (PST) Received: from [192.168.0.104] (atoulouse-658-1-40-252.w86-221.abo.wanadoo.fr. [86.221.119.252]) by smtp.gmail.com with ESMTPSA id y138sm27725859wmc.16.2019.02.06.13.11.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 06 Feb 2019 13:11:35 -0800 (PST) Subject: Re: [PATCH v6 14/16] rebase-interactive: rewrite edit_todo_list() to handle the initial edit To: phillip.wood@dunelm.org.uk, Git Mailing List Cc: Johannes Schindelin , Junio C Hamano References: <20190123205821.27459-1-alban.gruin@gmail.com> <20190129150159.10588-1-alban.gruin@gmail.com> <20190129150159.10588-15-alban.gruin@gmail.com> From: Alban Gruin Openpgp: preference=signencrypt Autocrypt: addr=alban.gruin@gmail.com; prefer-encrypt=mutual; keydata= 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 Message-ID: <571e5823-32a0-930c-909d-bb18a3b70a71@gmail.com> Date: Wed, 6 Feb 2019 22:11:30 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.3.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: fr-FR Content-Transfer-Encoding: 8bit Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Hi Phillip, I’ve just reread this message and have a couple of additionnal comments. Le 01/02/2019 à 12:03, Phillip Wood a écrit : > Hi Alban > > This looks good apart from some missing error handling. > > On 29/01/2019 15:01, Alban Gruin wrote: >> edit_todo_list() is changed to work on a todo_list, and to handle the >> initial edition of the todo list (ie. making a backup of the todo >> list). >> >> It does not check for dropped commits yet, as todo_list_check() does not >> take the commits that have already been processed by the rebase (ie. the >> todo list is edited in the middle of a rebase session). >> >> Signed-off-by: Alban Gruin >> --- >>   builtin/rebase--interactive.c | 24 +++++++++++++++++- >>   rebase-interactive.c          | 48 ++++++++++++++++++----------------- >>   rebase-interactive.h          |  4 ++- >>   sequencer.c                   |  3 +-- >>   sequencer.h                   |  1 + >>   5 files changed, 53 insertions(+), 27 deletions(-) >> >> diff --git a/builtin/rebase--interactive.c >> b/builtin/rebase--interactive.c >> index 2dbf8fc08b..645ac587f7 100644 >> --- a/builtin/rebase--interactive.c >> +++ b/builtin/rebase--interactive.c >> @@ -13,6 +13,28 @@ static GIT_PATH_FUNC(path_state_dir, "rebase-merge/") >>   static GIT_PATH_FUNC(path_squash_onto, "rebase-merge/squash-onto") >>   static GIT_PATH_FUNC(path_interactive, "rebase-merge/interactive") >>   +static int edit_todo_file(unsigned flags) >> +{ >> +    const char *todo_file = rebase_path_todo(); >> +    struct todo_list todo_list = TODO_LIST_INIT, >> +        new_todo = TODO_LIST_INIT; >> + >> +    if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0) >> +        return error_errno(_("could not read '%s'."), todo_file); >> + >> +    strbuf_stripspace(&todo_list.buf, 1); >> +    if (!edit_todo_list(the_repository, &todo_list, >> +                &new_todo, NULL, NULL, flags) && >> +        todo_list_write_to_file(the_repository, &new_todo, todo_file, >> NULL, NULL, >> +                    -1, flags & ~(TODO_LIST_SHORTEN_IDS)) < 0) >> +        return error_errno(_("could not write '%s'"), todo_file); > > If edit_todo_list() fails then the function returns 0. I think you need > to do > > if (edit_todo_list() || todo_list_write_file()) >     return error... > > todo_list_write_file() forwards the return value of write_message() > which is 0/-1 so there is no need for the '< 0' > With your proposed condition, if edit_todo_list() fails, the error "could not write '%s'" will be shown, if I’m not mistaken. But in my version, if edit_todo_list() fails, the return value is 0. Perhaps I should write something like this instead: int res = 0; … res = edit_todo_list(); if (!res && todo_list_write_to_file()) return error; … return res; >> + >> +    todo_list_release(&todo_list); >> +    todo_list_release(&new_todo); >> + >> +    return 0; >> +} >> + >>   static int get_revision_ranges(const char *upstream, const char *onto, >>                      const char **head_hash, >>                      char **revisions, char **shortrevisions) >> @@ -242,7 +264,7 @@ int cmd_rebase__interactive(int argc, const char >> **argv, const char *prefix) >>           break; >>       } >>       case EDIT_TODO: >> -        ret = edit_todo_list(the_repository, flags); >> +        ret = edit_todo_file(flags); >>           break; >>       case SHOW_CURRENT_PATCH: { >>           struct child_process cmd = CHILD_PROCESS_INIT; >> diff --git a/rebase-interactive.c b/rebase-interactive.c >> index 807f8370db..3301efbe52 100644 >> --- a/rebase-interactive.c >> +++ b/rebase-interactive.c >> @@ -87,35 +87,37 @@ void append_todo_help(unsigned keep_empty, int >> command_count, >>       } >>   } >>   -int edit_todo_list(struct repository *r, unsigned flags) >> +int edit_todo_list(struct repository *r, struct todo_list *todo_list, >> +           struct todo_list *new_todo, const char *shortrevisions, >> +           const char *shortonto, unsigned flags) >>   { >>       const char *todo_file = rebase_path_todo(); >> -    struct todo_list todo_list = TODO_LIST_INIT; >> -    int res = 0; >> - >> -    if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0) >> -        return error_errno(_("could not read '%s'."), todo_file); >> - >> -    strbuf_stripspace(&todo_list.buf, 1); >> -    todo_list_parse_insn_buffer(r, todo_list.buf.buf, &todo_list); >> -    if (todo_list_write_to_file(r, &todo_list, todo_file, NULL, NULL, >> -1, >> -                    flags | TODO_LIST_SHORTEN_IDS | >> TODO_LIST_APPEND_TODO_HELP)) { >> -        todo_list_release(&todo_list); >> -        return -1; >> +    unsigned initial = shortrevisions && shortonto; >> + >> +    if (initial) { >> +        todo_list_write_to_file(r, todo_list, todo_file, >> shortrevisions, shortonto, >> +                    -1, flags | TODO_LIST_SHORTEN_IDS | >> TODO_LIST_APPEND_TODO_HELP); > > This has lost the error handling when we cannot write the file > >> + >> +        if (copy_file(rebase_path_todo_backup(), todo_file, 0666)) >> +            return error(_("could not copy '%s' to '%s'."), todo_file, >> +                     rebase_path_todo_backup()); >> +    } else { >> +        todo_list_parse_insn_buffer(r, todo_list->buf.buf, todo_list); >> +        todo_list_write_to_file(r, todo_list, todo_file, NULL, NULL, -1, >> +                    flags | TODO_LIST_SHORTEN_IDS | >> TODO_LIST_APPEND_TODO_HELP); > > error handling again > I agree for todo_list_write_to_file(), but todo_list_parse_insn_buffer() already shows an error, and here it should not return -- we want to edit the todo list to remove an error, but git would fail because the todo list has an error. -- Alban