Skip to content

Prepare to separate out a packed_ref_store

Michael Haggerty git 2 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v2 Latest25 patches 5 repliesIn review
  2. v123 patches 49 repliesSuperseded

Changes in v2 from the cover letter

* 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.

Patches in v2 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/25t3600: clean up permissions test properlyt/t3600-rm.sh+2 -20 replies
2/25refs.h: clarify docstring for the ref_transaction_update()-related fnsrefs.h+13 -00 replies
3/25ref_iterator_begin_fn(): fix docstringrefs/refs-internal.h+4 -30 replies
4/25files-backend: use `die("BUG: ...")`, not `die("internal error: ...")`refs/files-backend.c+4 -40 replies
5/25prefix_ref_iterator: don't trim too muchrefs/iterator.c+17 -10 replies
6/25refs_ref_iterator_begin(): don't check prefixes redundantlyrefs.c+7 -10 replies
7/25refs: use `size_t` indexes when iterating over ref transaction updatesrefs.c refs/files-backend.c+5 -30 replies
8/25ref_store: take a `msg` parameter when deleting referencesbuiltin/fetch.c builtin/remote.c refs.c +6 more+23 -190 replies
9/25lockfile: add a new method, is_lock_file_locked()lockfile.h+8 -00 replies
10/25files-backend: move `lock` member to `files_ref_store`refs/files-backend.c+17 -190 replies
11/25files_ref_store: put the packed files lock directly in this structrefs/files-backend.c+11 -180 replies
12/25files_transaction_cleanup(): new helper functionrefs/files-backend.c+24 -90 replies
13/25ref_transaction_commit(): check for valid `transaction->state`refs.c refs/files-backend.c+12 -30 replies
14/25ref_transaction_prepare(): new optional step for reference updatesrefs.c refs.h refs/files-backend.c +1 more+253 -530 replies
15/25ref_update_reject_duplicates(): expose function to whole refs modulerefs.c refs/files-backend.c refs/refs-internal.h+25 -170 replies
16/25ref_update_reject_duplicates(): use `size_t` rather than `int`refs.c+1 -10 replies
17/25ref_update_reject_duplicates(): add a sanity checkrefs.c+8 -20 replies
18/25should_pack_ref(): new function, extracted from `files_pack_refs()`refs/files-backend.c+28 -140 replies
19/25get_packed_ref_cache(): assume "packed-refs" won't change while lockedrefs/files-backend.c+11 -50 replies
20/25read_packed_refs(): do more of the work of reading packed refsrefs/files-backend.c refs/ref-cache.h+26 -170 replies
21/25read_packed_refs(): report unexpected fopen() failuresrefs/files-backend.c+12 -20 replies
22/25refs_ref_iterator_begin(): handle `GIT_REF_PARANOIA`refs.c refs/files-backend.c+9 -70 replies
23/25create_ref_entry(): remove `check_name` optionrefs/files-backend.c refs/ref-cache.c refs/ref-cache.h+10 -110 replies
24/25ref-filter: limit traversal to prefixref-filter.c+63 -10 replies
25/25cache_ref_iterator_begin(): avoid priming unneeded directoriesrefs/ref-cache.c+84 -103 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v2 yet.

Read the v2 thread

Cover letter [PATCH v2 00/25] Prepare to separate out a packed_ref_store

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/[email protected]/
[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(-)
Signature · 1 line
2.11.0