Subject: Re: What's cooking in git.git (Jun 2016, #05; Thu, 16)

From: Michael Haggerty <[email-masked]>
Date: Sat, 18 Jun 2016 06:18:48 +0200

On 06/17/2016 05:20 AM, Junio C Hamano wrote:
> [...]
> * mh/ref-iterators (2016-06-03) 13 commits
>   (merged to 'next' on 2016-06-06 at c8e79dc)
>  + for_each_reflog(): reimplement using iterators
>  + dir_iterator: new API for iterating over a directory tree
>  + for_each_reflog(): don't abort for bad references
>  + do_for_each_ref(): reimplement using reference iteration
>  + refs: introduce an iterator interface
>  + ref_resolves_to_object(): new function
>  + entry_resolves_to_object(): rename function from ref_resolves_to_object()
>  + get_ref_cache(): only create an instance if there is a submodule
>  + remote rm: handle symbolic refs correctly
>  + delete_refs(): add a flags argument
>  + refs: use name "prefix" consistently
>  + do_for_each_ref(): move docstring to the header file
>  + refs: remove unnecessary "extern" keywords
>  (this branch is used by mh/ref-store; uses mh/split-under-lock; is tangled with mh/update-ref-errors.)
> 
>  The API to iterate over all the refs (i.e. for_each_ref(), etc.)
>  has been revamped.
> 
>  Will merge to 'master'.

It would be preferable (though not critical) to use the promised v3,
which I just sent [1]. This includes some minor improvements, described
here [2]. This is also available from my GitHub fork [3] as branch
"ref-iterators".

> * mh/split-under-lock (2016-05-13) 33 commits
>   (merged to 'next' on 2016-06-03 at 2e71330)
>  + lock_ref_sha1_basic(): only handle REF_NODEREF mode
>  + commit_ref_update(): remove the flags parameter
>  + lock_ref_for_update(): don't resolve symrefs
>  + lock_ref_for_update(): don't re-read non-symbolic references
>  + refs: resolve symbolic refs first
>  + ref_transaction_update(): check refname_is_safe() at a minimum
>  + unlock_ref(): move definition higher in the file
>  + lock_ref_for_update(): new function
>  + add_update(): initialize the whole ref_update
>  + verify_refname_available(): adjust constness in declaration
>  + refs: don't dereference on rename
>  + refs: allow log-only updates
>  + delete_branches(): use resolve_refdup()
>  + ref_transaction_commit(): correctly report close_ref() failure
>  + ref_transaction_create(): disallow recursive pruning
>  + refs: make error messages more consistent
>  + lock_ref_sha1_basic(): remove unneeded local variable
>  + read_raw_ref(): move docstring to header file
>  + read_raw_ref(): improve docstring
>  + read_raw_ref(): rename symref argument to referent
>  + read_raw_ref(): clear *type at start of function
>  + read_raw_ref(): rename flags argument to type
>  + ref_transaction_commit(): remove local variable n
>  + rename_ref(): remove unneeded local variable
>  + commit_ref_update(): write error message to *err, not stderr
>  + refname_is_safe(): insist that the refname already be normalized
>  + refname_is_safe(): don't allow the empty string
>  + refname_is_safe(): use skip_prefix()
>  + remove_dir_recursively(): add docstring
>  + safe_create_leading_directories(): improve docstring
>  + read_raw_ref(): don't get confused by an empty directory
>  + commit_ref(): if there is an empty dir in the way, delete it
>  + t1404: demonstrate a bug resolving references
>  (this branch is used by mh/ref-iterators, mh/ref-store and mh/update-ref-errors.)
> 
>  Further preparatory work on the refs API before the pluggable
>  backend series can land.
> 
>  Will merge to 'master'.

Please make sure to pick up the important bugfix discussed here [4],
which is integrated into branch "split-under-lock" on my GitHub fork [3].

Michael

[1] http://thread.gmane.org/gmane.comp.version-control.git/297625
[2]
http://thread.gmane.org/gmane.comp.version-control.git/296322/focus=296883
[3] https://github.com/mhagger/git
[4] http://article.gmane.org/gmane.comp.version-control.git/297174