[PATCH 5/5] refs.c: add an err argument to pack_refs
From: Ronnie Sahlberg <hidden>
Date: 2016-06-15 23:02:06
Subsystem:
the rest · Maintainer:
Linus Torvalds
Signed-off-by: Ronnie Sahlberg <redacted> --- builtin/pack-refs.c | 8 +++++++- refs.c | 13 ++++++------- refs.h | 3 ++- 3 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/builtin/pack-refs.c b/builtin/pack-refs.c
index b20b1ec..da5d46a 100644
--- a/builtin/pack-refs.c
+++ b/builtin/pack-refs.c@@ -10,6 +10,7 @@ static char const * const pack_refs_usage[] = { int cmd_pack_refs(int argc, const char **argv, const char *prefix) { unsigned int flags = PACK_REFS_PRUNE; + struct strbuf err = STRBUF_INIT; struct option opts[] = { OPT_BIT(0, "all", &flags, N_("pack everything"), PACK_REFS_ALL), OPT_BIT(0, "prune", &flags, N_("prune loose refs (default)"), PACK_REFS_PRUNE),
@@ -17,5 +18,10 @@ int cmd_pack_refs(int argc, const char **argv, const char *prefix) }; if (parse_options(argc, argv, prefix, opts, pack_refs_usage, 0)) usage_with_options(pack_refs_usage, opts); - return pack_refs(flags); + if (pack_refs(flags, &err)) { + error("%s", err.buf); + strbuf_release(&err); + return 1; + } + return 0; }
diff --git a/refs.c b/refs.c
index 19e73f3..5875c29 100644
--- a/refs.c
+++ b/refs.c@@ -2328,7 +2328,7 @@ static int commit_packed_refs(struct strbuf *err) strbuf_addf(err, "error writing packed-refs. %s", strerror(errno)); return -1; - } + } data.fd = packed_ref_cache->lock->fd; data.err = err;
@@ -2482,24 +2482,23 @@ static void prune_refs(struct ref_to_prune *r) } } -int pack_refs(unsigned int flags) +int pack_refs(unsigned int flags, struct strbuf *err) { struct pack_refs_cb_data cbdata; - struct strbuf err = STRBUF_INIT; memset(&cbdata, 0, sizeof(cbdata)); cbdata.flags = flags; - if (lock_packed_refs(&err)) - die("%s", err.buf); + if (lock_packed_refs(err)) + return -1; cbdata.packed_refs = get_packed_refs(&ref_cache); do_for_each_entry_in_dir(get_loose_refs(&ref_cache), 0, pack_if_possible_fn, &cbdata); - if (commit_packed_refs(&err)) - die("%s", err.buf); + if (commit_packed_refs(err)) + return -1; prune_refs(cbdata.ref_to_prune); return 0;
diff --git a/refs.h b/refs.h
index dee9a98..1a98e27 100644
--- a/refs.h
+++ b/refs.h@@ -122,8 +122,9 @@ extern void warn_dangling_symrefs(FILE *fp, const char *msg_fmt, const struct st /* * Write a packed-refs file for the current repository. * flags: Combination of the above PACK_REFS_* flags. + * Returns 0 on success and fills in err on failure. */ -int pack_refs(unsigned int flags); +int pack_refs(unsigned int flags, struct strbuf *err); extern int ref_exists(const char *);
--
2.0.1.523.g70700c9