From: Phillip Wood <phillip.w...@dunelm.org.uk>

Return an error rather than dying so that the sequencer can exit
cleanly once it starts committing without forking 'git commit'

Signed-off-by: Phillip Wood <phillip.w...@dunelm.org.uk>
---
 builtin/commit.c |  3 ++-
 sequencer.c      | 17 +++++++++++------
 sequencer.h      |  4 ++--
 3 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/builtin/commit.c b/builtin/commit.c
index 
b109feaca11e3e43b1a59dee1868244824eaf345..c924cbac9e0d55941e984b3cce3c1e565cd8cf3c
 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -1612,7 +1612,8 @@ int cmd_commit(int argc, const char **argv, const char 
*prefix)
                        flags |= SUMMARY_INITIAL_COMMIT;
                if (author_date_is_interesting())
                        flags |= SUMMARY_SHOW_AUTHOR_DATE;
-               print_commit_summary(prefix, &oid, flags);
+               if (print_commit_summary(prefix, &oid, flags))
+                       exit(128);
        }
 
        UNLEAK(err);
diff --git a/sequencer.c b/sequencer.c
index 
d4f77a5f24c89479a4a18c2b89a3cd4e7ba7ba6c..ae24405c23d021ed7916e5e2d9df6de27f867a2e
 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -875,8 +875,8 @@ static const char *implicit_ident_advice(void)
 
 }
 
-void print_commit_summary(const char *prefix, const struct object_id *oid,
-                         int flags)
+int print_commit_summary(const char *prefix, const struct object_id *oid,
+                        int flags)
 {
        struct rev_info rev;
        struct commit *commit;
@@ -885,12 +885,13 @@ void print_commit_summary(const char *prefix, const 
struct object_id *oid,
        struct pretty_print_context pctx = {0};
        struct strbuf author_ident = STRBUF_INIT;
        struct strbuf committer_ident = STRBUF_INIT;
+       int ret = 0;
 
        commit = lookup_commit(oid);
        if (!commit)
-               die(_("couldn't look up newly created commit"));
+               return error(_("couldn't look up newly created commit"));
        if (parse_commit(commit))
-               die(_("could not parse newly created commit"));
+               return error(_("could not parse newly created commit"));
 
        strbuf_addstr(&format, "format:%h] %s");
 
@@ -934,8 +935,10 @@ void print_commit_summary(const char *prefix, const struct 
object_id *oid,
        diff_setup_done(&rev.diffopt);
 
        head = resolve_ref_unsafe("HEAD", 0, NULL, NULL);
-       if (!head)
-               die_errno(_("unable to resolve HEAD after creating commit"));
+       if (!head) {
+               ret = error_errno(_("unable to resolve HEAD after creating 
commit"));
+               goto out;
+       }
        if (!strcmp(head, "HEAD"))
                head = _("detached HEAD");
        else
@@ -948,7 +951,9 @@ void print_commit_summary(const char *prefix, const struct 
object_id *oid,
                log_tree_commit(&rev, commit);
        }
 
+out:
        strbuf_release(&format);
+       return ret;
 }
 
 static int is_original_commit_empty(struct commit *commit)
diff --git a/sequencer.h b/sequencer.h
index 
c7989f93fcf08f979f5869cd4ec27f0dd0b88c82..0e3c2c9fd416349fb704a7ebc72c93a9b9a67703
 100644
--- a/sequencer.h
+++ b/sequencer.h
@@ -76,6 +76,6 @@ void commit_post_rewrite(const struct commit *current_head,
 
 #define SUMMARY_INITIAL_COMMIT   (1 << 0)
 #define SUMMARY_SHOW_AUTHOR_DATE (1 << 1)
-void print_commit_summary(const char *prefix, const struct object_id *oid,
-                         int flags);
+int print_commit_summary(const char *prefix, const struct object_id *oid,
+                        int flags);
 #endif
-- 
2.14.3

Reply via email to