Re: [PATCH 15/15] refs.c: add an err argument to pack_refs
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Oct 30, 2014, 19:57 UTC
- Message-ID
- <xmqqr3xpuy8c.fsf@gitster.dls.corp.google.com>
- In-Reply-To
- <1413923820-14457-16-git-send-email-sahlberg@google.com>
Ronnie Sahlberg <sahlberg@google.com> writes:
Show 62 quoted lines
> diff --git a/builtin/pack-refs.c b/builtin/pack-refs.c
> index b20b1ec..299768e 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 7fb0d6c..a5e1eff 100644
> --- a/refs.c
> +++ b/refs.c
> @@ -2588,16 +2588,15 @@ 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);
>
> diff --git a/refs.h b/refs.h
> index f3e08f5..be16c08 100644
> --- a/refs.h
> +++ b/refs.h
> @@ -130,8 +130,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 *);Makes sense. Thanks.