From: Jonathan Nieder <jrnieder@gmail.com>
To: Ramkumar Ramachandra <artagnon@gmail.com>
Cc: Git List <git@vger.kernel.org>,
Junio C Hamano <gitster@pobox.com>,
Daniel Barkalow <barkalow@iabervon.org>,
Christian Couder <christian.couder@gmail.com>
Subject: Re: [RFC PATCH] cache-tree: Teach write_cache_as_tree to discard_cache
Date: Fri, 20 May 2011 13:07:45 -0500 [thread overview]
Message-ID: <20110520180745.GC17177@elie> (raw)
In-Reply-To: <1305880223-7542-1-git-send-email-artagnon@gmail.com>
Hi,
Ramkumar Ramachandra wrote:
> If the read_cache() call succeeds, the function must call
> discard_cache() before returning to the caller.
>
> Suggested-by: Jonathan Nieder <jrnieder@gmail.com>
Sorry, I was unclear. What I meant is this: currently all three
callers to write_cache_as_tree() call die() or exit() if it fails.
When a new caller wants to carry on after failure, that requires some
careful thinking about what the state should be when it resumes.
Toward that end, your patch "[PATCH 1/8] revert: Improve error
handling by..." included
> - if (write_cache_as_tree(head, 0, NULL))
> - die (_("Your index file is unmerged."));
> + if (write_cache_as_tree(head, 0, NULL)) {
> + discard_cache();
but it doesn't feel right. Why after trying to write-tree do we undo
the _reading_ of a tree? It seemed strange.
So let's think carefully about what the state should be after
write-tree fails. Does it discard_cache() to make valgrind happier?
Or do we keep the in-core index cached for use in later operations?
Whichever is the right choice would be likely to apply equally well to
"git cherry-pick" and other write_cache_as_tree callers.
I foolishly did not ask "do you really want to discard_cache() here?"
and instead said something to the effect of "if you are going to
discard_cache(), won't that apply equally to all callers?", while the
former is a better question. Of course this would all be easier if we
had an example to think about that cared about the index state on
error one way or another.
If I understand correctly, the sequencer does not care about the state
at all, and just wants to write a few files under .git and print a
message. It could do that just as well by keeping the die() and
setting up a die handler.
prev parent reply other threads:[~2011-05-20 18:07 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-20 7:16 Better error-handling around revert Ramkumar Ramachandra
2011-05-20 7:28 ` Ramkumar Ramachandra
2011-05-21 3:47 ` Christian Couder
2011-05-20 8:30 ` [RFC PATCH] cache-tree: Teach write_cache_as_tree to discard_cache Ramkumar Ramachandra
2011-05-20 8:30 ` [RFC PATCH] revert: Use assert to catch inherent program bugs Ramkumar Ramachandra
2011-05-20 17:03 ` Junio C Hamano
2011-05-20 18:35 ` Jonathan Nieder
2011-05-20 8:30 ` [RFC PATCH] wrapper: Introduce xclose to restart close on EINTR Ramkumar Ramachandra
2011-05-20 19:05 ` Jonathan Nieder
2011-05-20 16:56 ` [RFC PATCH] cache-tree: Teach write_cache_as_tree to discard_cache Junio C Hamano
2011-05-20 18:07 ` Jonathan Nieder [this message]
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=20110520180745.GC17177@elie \
--to=jrnieder@gmail.com \
--cc=artagnon@gmail.com \
--cc=barkalow@iabervon.org \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.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.