Subject: [PATCH v2 00/25] Prepare to separate out a packed_ref_store

From: Michael Haggerty <[email-masked]>
Date: Mon, 22 May 2017 16:17:30 +0200

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-masked]/
[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