From: Junio C Hamano <gitster@pobox.com>
To: Thomas Gummerer <t.gummerer@gmail.com>
Cc: git@vger.kernel.org, "Joel Teichroeb" <joel@teichroeb.net>,
"Johannes Schindelin" <Johannes.Schindelin@gmx.de>,
"Jeff King" <peff@peff.net>,
"Martin Ågren" <martin.agren@gmail.com>
Subject: Re: [PATCH v3 1/3] factor out refresh_and_write_cache function
Date: Thu, 05 Sep 2019 15:00:34 -0700 [thread overview]
Message-ID: <xmqqwoemo131.fsf@gitster-ct.c.googlers.com> (raw)
In-Reply-To: <20190903191041.10470-2-t.gummerer@gmail.com> (Thomas Gummerer's message of "Tue, 3 Sep 2019 20:10:39 +0100")
Thomas Gummerer <t.gummerer@gmail.com> writes:
> Getting the lock for the index, refreshing it and then writing it is a
> pattern that happens more than once throughout the codebase, and isn't
> trivial to get right. Factor out the refresh_and_write_cache function
> from builtin/am.c to read-cache.c, so it can be re-used in other
> places in a subsequent commit.
>
> Note that we return different error codes for failing to refresh the
> cache, and failing to write the index. The current caller only cares
> about failing to write the index. However for other callers we're
> going to convert in subsequent patches we will need this distinction.
>
> Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
> ---
> builtin/am.c | 16 ++--------------
> cache.h | 16 ++++++++++++++++
> read-cache.c | 19 +++++++++++++++++++
> 3 files changed, 37 insertions(+), 14 deletions(-)
I think this goes in the right direction, but obviously conflicts
with what Dscho wants to do in the builtin-add-i series, and needs
to be reconciled by working better together.
For now, I'll eject builtin-add-i and queue this for a few days to
give it a bit more exposure, but after that requeue builtin-add-i
and discard these three patches. By that time, hopefully you two
would have a rerolled version of this one and builtin-add-i that
agree what kind of refresh-and-write-index behaviour they both want.
The differences I see that need reconciling are:
- builtin-add-i seems to allow 'gentle' and allow returning an
error when we cannot open the index for writing by passing false
to 'gentle'; this feature is not used yet, though.
- This version allows to pass pathspec, seen and header_msg, while
the one in builtin-add-i cannot limit the part of the index
getting refreshed with pathspec. It wouldn't be a brain surgery
to use this version and adjust the caller (there only is one) in
the builtin-add-i topic.
- This version does not write the index back when refresh_index()
returns non-zero, but the one in builtin-add-i ignores the
returned value. I think, as a performance measure, it probably
is a better idea to write it back, even when the function returns
non-zero (the local variable's name is has_errors, but having an
entry in the index that does not get refreshed is *not* an error;
e.g. an unmerged entry is a normal thing in the index, and as
long as we refreshed other entries while having an unmerged and
unrefreshable entry, we are making progress that is worth writing
out).
Thanks.
> +int repo_refresh_and_write_index(struct repository *repo,
> + unsigned int refresh_flags,
> + unsigned int write_flags,
> + const struct pathspec *pathspec,
> + char *seen, const char *header_msg)
> +{
> + struct lock_file lock_file = LOCK_INIT;
> +
> + repo_hold_locked_index(repo, &lock_file, LOCK_DIE_ON_ERROR);
> + if (refresh_index(repo->index, refresh_flags, pathspec, seen, header_msg)) {
> + rollback_lock_file(&lock_file);
> + return 1;
> + }
> + if (write_locked_index(repo->index, &lock_file, COMMIT_LOCK | write_flags))
> + return -1;
> + return 0;
> +}
> +
> +
> int refresh_index(struct index_state *istate, unsigned int flags,
> const struct pathspec *pathspec,
> char *seen, const char *header_msg)
next prev parent reply other threads:[~2019-09-05 22:00 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-27 10:14 [PATCH 0/3] make sure stash refreshes the index properly Thomas Gummerer
2019-08-27 10:14 ` [PATCH 1/3] factor out refresh_and_write_cache function Thomas Gummerer
2019-08-28 15:49 ` Martin Ågren
2019-08-29 17:59 ` Thomas Gummerer
2019-08-27 10:14 ` [PATCH 2/3] merge: use refresh_and_write_cache Thomas Gummerer
2019-08-28 15:52 ` Martin Ågren
2019-08-29 18:00 ` Thomas Gummerer
2019-08-27 10:14 ` [PATCH 3/3] stash: make sure to write refreshed cache Thomas Gummerer
2019-08-29 18:27 ` [PATCH v2 0/3] make sure stash refreshes the index properly Thomas Gummerer
2019-08-29 18:27 ` [PATCH v2 1/3] factor out refresh_and_write_cache function Thomas Gummerer
2019-08-30 15:07 ` Martin Ågren
2019-08-30 17:06 ` Junio C Hamano
2019-09-02 17:15 ` Thomas Gummerer
2019-09-03 17:43 ` Junio C Hamano
2019-08-29 18:27 ` [PATCH v2 2/3] merge: use refresh_and_write_cache Thomas Gummerer
2019-08-29 18:27 ` [PATCH v2 3/3] stash: make sure to write refreshed cache Thomas Gummerer
2019-09-03 19:10 ` [PATCH v3 0/3] make sure stash refreshes the index properly Thomas Gummerer
2019-09-03 19:10 ` [PATCH v3 1/3] factor out refresh_and_write_cache function Thomas Gummerer
2019-09-05 22:00 ` Junio C Hamano [this message]
2019-09-06 14:18 ` Thomas Gummerer
2019-09-11 10:57 ` Johannes Schindelin
2019-09-11 17:52 ` Thomas Gummerer
2019-09-12 16:46 ` Junio C Hamano
2019-09-03 19:10 ` [PATCH v3 2/3] merge: use refresh_and_write_cache Thomas Gummerer
2019-09-03 19:10 ` [PATCH v3 3/3] stash: make sure to write refreshed cache Thomas Gummerer
2019-09-11 18:20 ` [PATCH v4 0/3] make sure stash refreshes the index properly Thomas Gummerer
2019-09-11 18:20 ` [PATCH v4 1/3] factor out refresh_and_write_cache function Thomas Gummerer
2019-09-11 18:20 ` [PATCH v4 2/3] merge: use refresh_and_write_cache Thomas Gummerer
2019-09-11 18:20 ` [PATCH v4 3/3] stash: make sure to write refreshed cache Thomas Gummerer
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=xmqqwoemo131.fsf@gitster-ct.c.googlers.com \
--to=gitster@pobox.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=joel@teichroeb.net \
--cc=martin.agren@gmail.com \
--cc=peff@peff.net \
--cc=t.gummerer@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.