All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Haggerty <mhagger@alum.mit.edu>
To: David Turner <dturner@twopensource.com>,
	git@vger.kernel.org, j6t@kdbg.org
Cc: Ronnie Sahlberg <sahlberg@google.com>
Subject: Re: [PATCH v8 1/7] refs.c: add err arguments to reflog functions
Date: Tue, 21 Jul 2015 06:17:16 -0700	[thread overview]
Message-ID: <55AE465C.6000905@alum.mit.edu> (raw)
In-Reply-To: <1436482260-28088-2-git-send-email-dturner@twopensource.com>

On 07/09/2015 03:50 PM, David Turner wrote:
> Add an err argument to log_ref_setup that can explain the reason
> for a failure. This then eliminates the need to manage errno through
> this function since we can just add strerror(errno) to the err string
> when meaningful. No callers relied on errno from this function for
> anything else than the error message.
> 
> Also add err arguments to private functions write_ref_to_lockfile,
> log_ref_write_1, commit_ref_update. This again eliminates the need to
> manage errno in these functions.
> 
> Some error messages are slightly reordered.
> 
> Update of a patch by Ronnie Sahlberg.
> 
> Signed-off-by: Ronnie Sahlberg <sahlberg@google.com>
> Signed-off-by: David Turner <dturner@twopensource.com>
> ---
>  builtin/checkout.c |   8 ++--
>  refs.c             | 127 +++++++++++++++++++++++++++++++----------------------
>  refs.h             |   4 +-
>  3 files changed, 81 insertions(+), 58 deletions(-)
> 
> diff --git a/builtin/checkout.c b/builtin/checkout.c
> index c018ab3..93f63d3 100644
> --- a/builtin/checkout.c
> +++ b/builtin/checkout.c
> @@ -624,16 +624,18 @@ static void update_refs_for_switch(const struct checkout_opts *opts,
>  				struct strbuf log_file = STRBUF_INIT;
>  				int ret;
>  				const char *ref_name;
> +				struct strbuf err = STRBUF_INIT;
>  
>  				ref_name = mkpath("refs/heads/%s", opts->new_orphan_branch);
>  				temp = log_all_ref_updates;
>  				log_all_ref_updates = 1;
> -				ret = log_ref_setup(ref_name, &log_file);
> +				ret = log_ref_setup(ref_name, &log_file, &err);
>  				log_all_ref_updates = temp;
>  				strbuf_release(&log_file);
>  				if (ret) {
> -					fprintf(stderr, _("Can not do reflog for '%s'\n"),
> -					    opts->new_orphan_branch);
> +					fprintf(stderr, _("Can not do reflog for '%s'. %s\n"),
> +						opts->new_orphan_branch, err.buf);

Our usual pattern for chaining error messages is

    $problem: $reason

In this patch (and maybe later patches too? I haven't checked yet) I see

    $problem. $reason

and also

    $problem. '$reason'

I think it would be good to use the first pattern consistently.

> +					strbuf_release(&err);
>  					return;
>  				}
>  			}
> diff --git a/refs.c b/refs.c
> index fb568d7..03e7505 100644
> --- a/refs.c
> +++ b/refs.c
> [...]
> @@ -3247,25 +3247,28 @@ int is_branch(const char *refname)
>  
>  /*
>   * Write sha1 into the open lockfile, then close the lockfile. On
> - * errors, rollback the lockfile and set errno to reflect the problem.
> + * errors, rollback the lockfile, fill in *err and
> + * return -1.
>   */
>  static int write_ref_to_lockfile(struct ref_lock *lock,
> -				 const unsigned char *sha1)
> +				 const unsigned char *sha1, struct strbuf *err)
>  {
>  	static char term = '\n';
>  	struct object *o;
>  
>  	o = parse_object(sha1);
>  	if (!o) {
> -		error("Trying to write ref %s with nonexistent object %s",
> -			lock->ref_name, sha1_to_hex(sha1));
> +		strbuf_addf(err,
> +			    "Trying to write ref %s with nonexistent object %s",
> +			    lock->ref_name, sha1_to_hex(sha1));
>  		unlock_ref(lock);
>  		errno = EINVAL;

Is it intentional that this function is still setting errno (here and a
few lines farther down)? I'm guessing that this is no longer needed,
though I haven't audited the callers.

>  		return -1;
>  	}
>  	if (o->type != OBJ_COMMIT && is_branch(lock->ref_name)) {
> -		error("Trying to write non-commit object %s to branch %s",
> -			sha1_to_hex(sha1), lock->ref_name);
> +		strbuf_addf(err,
> +			    "Trying to write non-commit object %s to branch %s",
> +			    sha1_to_hex(sha1), lock->ref_name);
>  		unlock_ref(lock);
>  		errno = EINVAL;
>  		return -1;
> [...]

Michael

-- 
Michael Haggerty
mhagger@alum.mit.edu

  reply	other threads:[~2015-07-21 13:17 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-09 22:50 [PATCH v8 0/7] ref backend preamble David Turner
2015-07-09 22:50 ` [PATCH v8 1/7] refs.c: add err arguments to reflog functions David Turner
2015-07-21 13:17   ` Michael Haggerty [this message]
2015-07-09 22:50 ` [PATCH v8 2/7] refs: Break out check for reflog autocreation David Turner
2015-07-09 22:50 ` [PATCH v8 3/7] refs: new public ref function: safe_create_reflog David Turner
2015-07-09 22:50 ` [PATCH v8 4/7] git-reflog: add exists command David Turner
2015-07-21 13:27   ` Michael Haggerty
2015-07-09 22:50 ` [PATCH v8 5/7] refs: add REF_FORCE_CREATE_REFLOG flag David Turner
2015-07-09 22:50 ` [PATCH v8 6/7] update-ref and tag: add --create-reflog arg David Turner
2015-07-21 13:46   ` Michael Haggerty
2015-07-09 22:51 ` [PATCH v8 7/7] git-stash: use update-ref --create-reflog instead of creating files David Turner
2015-07-10 14:34 ` [PATCH v8 0/7] ref backend preamble Philip Oakley
2015-07-10 17:51   ` David Turner
2015-07-21 14:02 ` Michael Haggerty

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=55AE465C.6000905@alum.mit.edu \
    --to=mhagger@alum.mit.edu \
    --cc=dturner@twopensource.com \
    --cc=git@vger.kernel.org \
    --cc=j6t@kdbg.org \
    --cc=sahlberg@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.