[PATCH v2 00/33] Yet more preparation for reference backends
- From
Michael Haggerty <mhagger@alum.mit.edu>
- Date
- May 6, 2016, 16:13 UTC
- Message-ID
- <cover.1462550456.git.mhagger@alum.mit.edu>
Thanks to David, Junio, and Peff for their comments on v1 of this patch series [1]. I think I have addressed all of the points that were brought up. Plus I fixed a pre-existing bug that I noticed myself while adding some more tests; see the first bullet point below for more information.
Changes between v1 and v2:
* Prefixed the patch series with three new patches that demonstrate and fix some bugs in reference resolution that I noticed while inspecting this series:
* "t1404: demonstrate a bug resolving references" -- this
demonstrates a bug that has existed since at least 2.5.0.
* "read_raw_ref(): don't get confused by an empty directory"
* "commit_ref(): if there is an empty dir in the way, delete it"* Added a patch "read_raw_ref(): move docstring to header file".
* "ref_transaction_create(): disallow recursive pruning": Add a comment that `REF_ISPRUNING` must only be used with `REF_NODEREF`.
* "refs: don't dereference on rename": explain why we can't pass an `old_sha1` argument to `delete_ref()`. Inline `resolve_flags` constant to make the code more transparent.
* "add_update(): initialize the whole ref_update": move some more checks from `ref_transaction_update()` to `add_update()`.
* "refs: resolve symbolic refs first": * Remove unused `deleting` parameter from `lock_raw_ref()` * Fix a comment, add another.
* "lock_ref_sha1_basic(): only handle REF_NODEREF mode": initialize `ref_name` only once, as its value can be reused.
This patch series is also available from my GitHub repo [2] as branch "split-under-lock".
[1] http://thread.gmane.org/gmane.comp.version-control.git/292772 [2] https://github.com/mhagger/git
David Turner (2): refs: allow log-only updates refs: don't dereference on rename
Michael Haggerty (31): t1404: demonstrate a bug resolving references commit_ref(): if there is an empty dir in the way, delete it read_raw_ref(): don't get confused by an empty directory safe_create_leading_directories(): improve docstring remove_dir_recursively(): add docstring refname_is_safe(): use skip_prefix() refname_is_safe(): don't allow the empty string refname_is_safe(): insist that the refname already be normalized commit_ref_update(): write error message to *err, not stderr rename_ref(): remove unneeded local variable ref_transaction_commit(): remove local variable n read_raw_ref(): rename flags argument to type read_raw_ref(): clear *type at start of function read_raw_ref(): rename symref argument to referent read_raw_ref(): improve docstring read_raw_ref(): move docstring to header file lock_ref_sha1_basic(): remove unneeded local variable refs: make error messages more consistent ref_transaction_create(): disallow recursive pruning ref_transaction_commit(): correctly report close_ref() failure delete_branches(): use resolve_refdup() verify_refname_available(): adjust constness in declaration add_update(): initialize the whole ref_update lock_ref_for_update(): new function unlock_ref(): move definition higher in the file ref_transaction_update(): check refname_is_safe() at a minimum refs: resolve symbolic refs first lock_ref_for_update(): don't re-read non-symbolic references lock_ref_for_update(): don't resolve symrefs commit_ref_update(): remove the flags parameter lock_ref_sha1_basic(): only handle REF_NODEREF mode
builtin/branch.c | 19 +- cache.h | 5 + dir.h | 23 + refs.c | 96 ++-- refs/files-backend.c | 909 ++++++++++++++++++++++++++++--------- refs/refs-internal.h | 95 +++- t/t1400-update-ref.sh | 41 +- t/t1404-update-ref-df-conflicts.sh | 76 +++- t/t1430-bad-ref-name.sh | 2 +- t/t3200-branch.sh | 9 + 10 files changed, 1013 insertions(+), 262 deletions(-)
-- 2.8.1