Merge branch 'mh/ref-remove-empty-directory'
authorJunio C Hamano <gitster@pobox.com>
Mon, 27 Feb 2017 21:57:12 +0000 (13:57 -0800)
committerJunio C Hamano <gitster@pobox.com>
Mon, 27 Feb 2017 21:57:12 +0000 (13:57 -0800)
Deletion of a branch "foo/bar" could remove .git/refs/heads/foo
once there no longer is any other branch whose name begins with
"foo/", but we didn't do so so far. Now we do.

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

1  2 
cache.h
refs/files-backend.c
refs/refs-internal.h
sha1_file.c
t/t1400-update-ref.sh
t/t5505-remote.sh
diff --cc cache.h
Simple merge
index c041d4ba21a8fe70eb6d8277358e7e3f29a69bfb,c426575fe9d4832dc101c08ff86964f129f3a94b..21e116d4e620b9de77def18bf89054399477cf62
@@@ -2828,17 -2816,17 +2816,17 @@@ static int log_ref_write_fd(int fd, con
        return 0;
  }
  
- static int log_ref_write_1(const char *refname, const unsigned char *old_sha1,
-                          const unsigned char *new_sha1, const char *msg,
-                          struct strbuf *logfile, int flags,
-                          struct strbuf *err)
+ int files_log_ref_write(const char *refname, const unsigned char *old_sha1,
+                       const unsigned char *new_sha1, const char *msg,
+                       int flags, struct strbuf *err)
  {
-       int logfd, result, oflags = O_APPEND | O_WRONLY;
+       int logfd, result;
  
 -      if (log_all_ref_updates < 0)
 -              log_all_ref_updates = !is_bare_repository();
 +      if (log_all_ref_updates == LOG_REFS_UNSET)
 +              log_all_ref_updates = is_bare_repository() ? LOG_REFS_NONE : LOG_REFS_NORMAL;
  
-       result = log_ref_setup(refname, logfile, err, flags & REF_FORCE_CREATE_REFLOG);
+       result = log_ref_setup(refname, flags & REF_FORCE_CREATE_REFLOG,
+                              &logfd, err);
  
        if (result)
                return result;
Simple merge
diff --cc sha1_file.c
Simple merge
Simple merge
Simple merge