From: Michael Haggerty <mhagger@alum.mit.edu>
To: Junio C Hamano <gitster@pobox.com>
Cc: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>,
"Stefan Beller" <sbeller@google.com>, "Jeff King" <peff@peff.net>,
"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
"David Turner" <novalis@novalis.org>,
"Brandon Williams" <bmwill@google.com>,
"Johannes Sixt" <j6t@kdbg.org>,
git@vger.kernel.org, "Michael Haggerty" <mhagger@alum.mit.edu>
Subject: [PATCH v2 00/25] Prepare to separate out a packed_ref_store
Date: Mon, 22 May 2017 16:17:30 +0200 [thread overview]
Message-ID: <cover.1495460199.git.mhagger@alum.mit.edu> (raw)
This is the second iteration of a patch series that prepares the
ground for separating out a `packed_ref_store` and then for changing
`packed-refs` to be read using `mmap()`. Thanks to Peff, Junio,
Stefan, Brandon, and Johannes for their feedback about v1 [1]. I think
I have addressed all of your comments.
Changes since v1:
* Since v1, branch `bc/object-id` has been merged to `next`, and it
has lots of conflicts with these changes. So I rebased this branch
onto a merge of `master` and `bc/object-id`. (I hope this makes
Junio's job easier.) This unfortunately causes a bit of tbdiff noise
between v1 and v2.
* Patch [01/25]: in t3600, register the `test_when_finished` command
before executing `chmod a-w`.
* Patch [04/25] (new patch): convert a few `die("internal error: ...")`
to `die("BUG: ...")`.
* Patch [05/25]: Use `strlen()` rather than `memchr()` to check the
trim length, and `die()` rather than skipping if it is longer than
the reference name.
* Patch [08/25]: Name the log message arguments `msg` for consistency
with existing code.
* Patch [10/25]: Rename the new member from `packlock` to
`packed_refs_lock`.
* Patch [13/25] (new patch): Move the check for valid
`transaction->state` from `files_transaction_commit()` to
`ref_transaction_commit()`.
* Patch [14/25]:
* Add more sanity checks of `transaction->state`.
* Don't add `ref_transaction_finish()` to the public API. Instead,
teach `ref_transaction_commit()` to do the right thing whether or
not `ref_transaction_prepare()` has been called.
* Add and improve docstrings.
* Allow `ref_transaction_abort()` to be called even before
`ref_transaction_prepare()` (in which case it just calls
`ref_transaction_free()`).
* Lots of improvements to commit messages and comments, mostly to
clarify points that reviewers asked about.
These changes (along with the merge commit that they are based on) are
also available as branch `packed-ref-store-prep` in my GitHub fork
[2]. If you'd like to see a preview of the rest of the changes (which
works but is not yet polished), checkout the `mmap-packed-refs` branch
from the same place.
Michael
[1] http://public-inbox.org/git/cover.1495014840.git.mhagger@alum.mit.edu/
[2] https://github.com/mhagger/git
Jeff King (1):
ref-filter: limit traversal to prefix
Michael Haggerty (24):
t3600: clean up permissions test properly
refs.h: clarify docstring for the ref_transaction_update()-related fns
ref_iterator_begin_fn(): fix docstring
files-backend: use `die("BUG: ...")`, not `die("internal error: ...")`
prefix_ref_iterator: don't trim too much
refs_ref_iterator_begin(): don't check prefixes redundantly
refs: use `size_t` indexes when iterating over ref transaction updates
ref_store: take a `msg` parameter when deleting references
lockfile: add a new method, is_lock_file_locked()
files-backend: move `lock` member to `files_ref_store`
files_ref_store: put the packed files lock directly in this struct
files_transaction_cleanup(): new helper function
ref_transaction_commit(): check for valid `transaction->state`
ref_transaction_prepare(): new optional step for reference updates
ref_update_reject_duplicates(): expose function to whole refs module
ref_update_reject_duplicates(): use `size_t` rather than `int`
ref_update_reject_duplicates(): add a sanity check
should_pack_ref(): new function, extracted from `files_pack_refs()`
get_packed_ref_cache(): assume "packed-refs" won't change while locked
read_packed_refs(): do more of the work of reading packed refs
read_packed_refs(): report unexpected fopen() failures
refs_ref_iterator_begin(): handle `GIT_REF_PARANOIA`
create_ref_entry(): remove `check_name` option
cache_ref_iterator_begin(): avoid priming unneeded directories
builtin/fetch.c | 2 +-
builtin/remote.c | 4 +-
lockfile.h | 8 ++
ref-filter.c | 64 ++++++++-
refs.c | 135 ++++++++++++++++--
refs.h | 149 +++++++++++++++-----
refs/files-backend.c | 302 +++++++++++++++++++++++++----------------
refs/iterator.c | 18 ++-
refs/ref-cache.c | 100 ++++++++++++--
refs/ref-cache.h | 6 +-
refs/refs-internal.h | 62 +++++++--
t/helper/test-ref-store.c | 3 +-
t/t1405-main-ref-store.sh | 2 +-
t/t1406-submodule-ref-store.sh | 2 +-
t/t3600-rm.sh | 4 +-
15 files changed, 658 insertions(+), 203 deletions(-)
--
2.11.0
next reply other threads:[~2017-05-22 14:18 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-22 14:17 Michael Haggerty [this message]
2017-05-22 14:17 ` [PATCH v2 01/25] t3600: clean up permissions test properly Michael Haggerty
2017-05-22 14:17 ` [PATCH v2 02/25] refs.h: clarify docstring for the ref_transaction_update()-related fns Michael Haggerty
2017-05-22 14:17 ` [PATCH v2 03/25] ref_iterator_begin_fn(): fix docstring Michael Haggerty
2017-05-22 14:17 ` [PATCH v2 04/25] files-backend: use `die("BUG: ...")`, not `die("internal error: ...")` Michael Haggerty
2017-05-22 14:17 ` [PATCH v2 05/25] prefix_ref_iterator: don't trim too much Michael Haggerty
2017-05-22 14:17 ` [PATCH v2 06/25] refs_ref_iterator_begin(): don't check prefixes redundantly Michael Haggerty
2017-05-22 14:17 ` [PATCH v2 07/25] refs: use `size_t` indexes when iterating over ref transaction updates Michael Haggerty
2017-05-22 14:17 ` [PATCH v2 08/25] ref_store: take a `msg` parameter when deleting references Michael Haggerty
2017-05-22 14:17 ` [PATCH v2 09/25] lockfile: add a new method, is_lock_file_locked() Michael Haggerty
2017-05-22 14:17 ` [PATCH v2 10/25] files-backend: move `lock` member to `files_ref_store` Michael Haggerty
2017-05-22 14:17 ` [PATCH v2 11/25] files_ref_store: put the packed files lock directly in this struct Michael Haggerty
2017-05-22 14:17 ` [PATCH v2 12/25] files_transaction_cleanup(): new helper function Michael Haggerty
2017-05-22 14:17 ` [PATCH v2 13/25] ref_transaction_commit(): check for valid `transaction->state` Michael Haggerty
2017-05-22 14:17 ` [PATCH v2 14/25] ref_transaction_prepare(): new optional step for reference updates Michael Haggerty
2017-05-22 14:17 ` [PATCH v2 15/25] ref_update_reject_duplicates(): expose function to whole refs module Michael Haggerty
2017-05-22 14:17 ` [PATCH v2 16/25] ref_update_reject_duplicates(): use `size_t` rather than `int` Michael Haggerty
2017-05-22 14:17 ` [PATCH v2 17/25] ref_update_reject_duplicates(): add a sanity check Michael Haggerty
2017-05-22 14:17 ` [PATCH v2 18/25] should_pack_ref(): new function, extracted from `files_pack_refs()` Michael Haggerty
2017-05-22 14:17 ` [PATCH v2 19/25] get_packed_ref_cache(): assume "packed-refs" won't change while locked Michael Haggerty
2017-05-22 14:17 ` [PATCH v2 20/25] read_packed_refs(): do more of the work of reading packed refs Michael Haggerty
2017-05-22 14:17 ` [PATCH v2 21/25] read_packed_refs(): report unexpected fopen() failures Michael Haggerty
2017-05-22 14:17 ` [PATCH v2 22/25] refs_ref_iterator_begin(): handle `GIT_REF_PARANOIA` Michael Haggerty
2017-05-22 14:17 ` [PATCH v2 23/25] create_ref_entry(): remove `check_name` option Michael Haggerty
2017-05-22 14:17 ` [PATCH v2 24/25] ref-filter: limit traversal to prefix Michael Haggerty
2017-05-22 14:17 ` [PATCH v2 25/25] cache_ref_iterator_begin(): avoid priming unneeded directories Michael Haggerty
2017-05-23 19:45 ` Jeff King
2017-05-24 7:17 ` Michael Haggerty
2017-05-24 7:21 ` Junio C Hamano
2017-05-22 21:51 ` [PATCH v2 00/25] Prepare to separate out a packed_ref_store Stefan Beller
2017-05-24 2:45 ` Junio C Hamano
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=cover.1495460199.git.mhagger@alum.mit.edu \
--to=mhagger@alum.mit.edu \
--cc=avarab@gmail.com \
--cc=bmwill@google.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=j6t@kdbg.org \
--cc=novalis@novalis.org \
--cc=pclouds@gmail.com \
--cc=peff@peff.net \
--cc=sbeller@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).