Subject: [PATCH v4 00/23] Delete directories left empty after ref deletion

From: Michael Haggerty <[email-masked]>
Date: Fri, 6 Jan 2017 17:22:20 +0100

This is v4 of this patch series. Thanks to Peff, Junio, Jake, and
Philip for their feedback about v3. I believe I have addressed all of
the comments about v1 [1], v2 [2], and v3 [3].

Changes since v3:

* Insert a new first patch correcting the docstring of
  `refname_is_safe()`.

* In "raceproof_create_file(): new function", tweak a comment for
  clarity as suggested by Peff.

* In "log_ref_setup(): separate code for create vs non-create", add a
  semicolon to an otherwise empty code block as requested by Junio.

* Drop the patch "try_remove_empty_parents(): don't accommodate
  consecutive slashes", for reasons discussed on the ML [4].

Michael

[1] http://public-inbox.org/git/[email-masked]/T/#u
[2] http://public-inbox.org/git/[email-masked]/T/#u
[3] http://public-inbox.org/git/[email-masked]/T/#u
[4] http://public-inbox.org/git/[email-masked]/
and surrounding thread.

Michael Haggerty (23):
  files_rename_ref(): tidy up whitespace
  refname_is_safe(): correct docstring
  t5505: use "for-each-ref" to test for the non-existence of references
  safe_create_leading_directories_const(): preserve errno
  safe_create_leading_directories(): set errno on SCLD_EXISTS
  raceproof_create_file(): new function
  lock_ref_sha1_basic(): inline constant
  lock_ref_sha1_basic(): use raceproof_create_file()
  rename_tmp_log(): use raceproof_create_file()
  rename_tmp_log(): improve error reporting
  log_ref_write(): inline function
  log_ref_setup(): separate code for create vs non-create
  log_ref_setup(): improve robustness against races
  log_ref_setup(): pass the open file descriptor back to the caller
  log_ref_write_1(): don't depend on logfile argument
  log_ref_setup(): manage the name of the reflog file internally
  log_ref_write_1(): inline function
  delete_ref_loose(): derive loose reference path from lock
  delete_ref_loose(): inline function
  try_remove_empty_parents(): rename parameter "name" -> "refname"
  try_remove_empty_parents(): don't trash argument contents
  try_remove_empty_parents(): teach to remove parents of reflogs, too
  files_transaction_commit(): clean up empty directories

 cache.h               |  48 ++++++-
 refs/files-backend.c  | 371 +++++++++++++++++++++++++-------------------------
 refs/refs-internal.h  |  22 ++-
 sha1_file.c           |  76 ++++++++++-
 t/t1400-update-ref.sh |  27 ++++
 t/t5505-remote.sh     |   2 +-
 6 files changed, 351 insertions(+), 195 deletions(-)

-- 
2.9.3