All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeff King <peff@peff.net>
To: "erik elfström" <erik.elfstrom@gmail.com>
Cc: Jonathan Nieder <jrnieder@gmail.com>,
	Git List <git@vger.kernel.org>,
	Junio C Hamano <gitster@pobox.com>
Subject: Re: [PATCH v5 1/5] setup: add gentle version of read_gitfile
Date: Tue, 28 Apr 2015 16:19:19 -0400	[thread overview]
Message-ID: <20150428201918.GA10902@peff.net> (raw)
In-Reply-To: <CAMpP7Nb3aiMoTjtPJNJPv38G54ZawS8B+NDX0x2iNe6FA-L+Lw@mail.gmail.com>

On Tue, Apr 28, 2015 at 10:07:43PM +0200, erik elfström wrote:

> On Tue, Apr 28, 2015 at 8:17 AM, Jeff King <peff@peff.net> wrote:
> >
> > There was a discussion not too long ago on strategies for returning
> > errors, and one of the suggestions was to return an "error strbuf"
> > rather than a code[1]. That's less flexible, as the caller can't react
> > differently based on the type of error. But for cases like this, where
> > the only fate for the code is to get converted back into a message,
> > it can reduce the boilerplate.
> >
> > What you have here is OK to me, and I don't want to hold up your patch
> > series in a flamewar about error-reporting techniques. But I think it's
> > an interesting case study.
> >
> > -Peff
> 
> Thanks. I haven't had time to look through that thread yet, I'll try
> to get to that later.
> 
> My initial reaction is a bit skeptical though. For this case we
> currently don't want any error reporting, the NULL return is
> sufficient and even allocating and sending in the int* is pure noise.
> Allocating and releasing a strbuf seems like a lot more overhead for
> this type of caller? The one other potential candidate caller for
> read_gitfile_gently that I have seen (clone.c:get_repo_path) don't
> want any error code or message either as far as i can tell.

I had envisioned that the strbuf would be optional. I.e., you would
have:

  /* like error(), but dump the message in a strbuf instead of stderr */
  int error_buf(struct strbuf *buf, const char *fmt, ...)
  {
	if (buf) {
		va_list ap;
		va_start(ap, fmt);
		strbuf_vaddf(buf, fmt, ap);
		va_end(ap);
	}
	return -1;
  }

and then in the error-reporting function:

  const char *read_gitfile_gently(const char *path, struct strbuf *err)
  {
	...
	fd = open(path, O_RDONLY);
	if (fd < 0) {
		error_buf(err, "unable to open %s: %s", path, strerror(errno));
		return NULL; /* or goto cleanup if necessary */
	}
  }

and then one caller can do:

  if (!read_gitfile_gently(path, NULL)) {
	/* we know there was an error, but we did not ask for details */
	...
  }

and the non-gentle read_gitfile() becomes:

  const char *read_gitfile(const char *path)
  {
	struct strbuf err = STRBUF_INIT;
	const char *ret = read_gitfile_gently(path, &err);
	if (!ret)
		die("%s", err.buf);
	/* no need to free err; if there was no error, nothing was written */
	return path;
  }

Note that the "return -1" from error_buf() is not useful here, but it
might be used as a shortcut in other situations (e.g., the same places
we call "return error()" now).

> Also if it turns out that we actually need to treat the "file too
> large" error differently in clean (as discussed in thread on the file
> size check) then we can no longer communicate that back using the
> strbuf interface.

Yeah, agreed. This system breaks down as soon as you need to
programatically know which error happened.

-Peff

  reply	other threads:[~2015-04-28 20:19 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-25  9:06 [PATCH v4 0/5] Improving performance of git clean Erik Elfström
2015-04-25  9:06 ` [PATCH v4 1/5] setup: add gentle version of read_gitfile Erik Elfström
2015-04-25 16:51   ` Junio C Hamano
2015-04-25 16:54     ` Junio C Hamano
2015-04-25  9:06 ` [PATCH v4 2/5] setup: sanity check file size in read_gitfile_gently Erik Elfström
2015-04-25 16:47   ` Junio C Hamano
2015-04-25 17:59     ` Erik Elfström
2015-04-26  4:29       ` Junio C Hamano
2015-04-26  6:49         ` [PATCH v5 0/5] Improving performance of git clean Erik Elfström
2015-04-26  6:49           ` [PATCH v5 1/5] setup: add gentle version of read_gitfile Erik Elfström
2015-04-28  6:17             ` Jeff King
2015-04-28 20:07               ` erik elfström
2015-04-28 20:19                 ` Jeff King [this message]
2015-04-28 20:34                   ` Jonathan Nieder
2015-04-28 20:36                     ` Jeff King
2015-04-28 20:42                       ` Jonathan Nieder
2015-04-28 20:48                         ` Jeff King
2015-04-28 21:06                           ` Jonathan Nieder
2015-04-28 23:34                           ` Junio C Hamano
2015-04-29 23:47             ` Stefan Beller
2015-04-30  1:35               ` Junio C Hamano
2015-04-26  6:49           ` [PATCH v5 2/5] setup: sanity check file size in read_gitfile_gently Erik Elfström
2015-04-28  6:02             ` Jeff King
2015-04-28  7:21               ` Windows path limites, was " Johannes Schindelin
2015-04-28 15:33                 ` Doug Kelly
2015-04-28 16:20                   ` Windows path limits, " Johannes Schindelin
2015-04-28 19:28               ` erik elfström
2015-04-29 15:42             ` Junio C Hamano
2015-04-26  6:49           ` [PATCH v5 3/5] t7300: add tests to document behavior of clean and nested git Erik Elfström
2015-04-26  6:49           ` [PATCH v5 4/5] p7300: add performance tests for clean Erik Elfström
2015-04-28  6:33             ` Jeff King
2015-04-28 19:36               ` erik elfström
2015-04-26  6:49           ` [PATCH v5 5/5] clean: improve performance when removing lots of directories Erik Elfström
2015-04-28  6:24             ` Jeff King
2015-04-28 20:31               ` erik elfström
2015-04-25  9:06 ` [PATCH v4 3/5] t7300: add tests to document behavior of clean and nested git Erik Elfström
2015-04-25  9:06 ` [PATCH v4 4/5] p7300: add performance tests for clean Erik Elfström
2015-04-25  9:06 ` [PATCH v4 5/5] clean: improve performance when removing lots of directories Erik Elfström

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=20150428201918.GA10902@peff.net \
    --to=peff@peff.net \
    --cc=erik.elfstrom@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jrnieder@gmail.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.