This is v3 of the series. I think I have addressed all of the feedback from v1 [1] and v2 [2]. Thanks to Stefan, Junio, and Peff for their feedback about v2. There are three significant changes since v2: * Add a patch delete_refs(): bail early if the packed-refs file cannot be rewritten that changes delete_refs() to bail early if repack_without_refs() fails. See the log message for the explanation. * Add a patch prune_refs(): use delete_refs() that changes "git fetch --prune" to use delete_refs() as well. This is analogous to the existing patch prune_remote(): use delete_refs() (Both of these changes remove quadratic behavior that can be extremely expensive in repositories with many packed refs.) * Append four more commits that change how delete_ref() interprets its `old_sha1` parameter, to make it consistent with ref_transaction_delete() and friends: check_branch_commit(): make first parameter const update_ref(): don't read old reference value before delete cmd_update_ref(): make logic more straightforward delete_ref(): use the usual convention for old_sha1 This change was suggested by Junio [3]. The last change is good for consistency, but less important than expected in the real world. The reason is that the convention of ref_transaction_delete() is that passing NULL_SHA1 as old_sha1 is a bug (because why would somebody delete a reference that he knows not to exist?) So we don't really gain a useful third case, though we do gain a consistency check that might be useful someday. However, if you don't like this change, the last four commits can be dropped (actually, commits N-3 through N-1 are marginally useful cleanups anyway so probably only the last commit should be dropped in this case). Other, minor changes since v2: * Improve the commit message of "delete_refs(): make error message more generic". * Better explain the change to error output caused by "prune_remote(): use delete_refs()" in that commit's log message. * Split the "add names for function parameters" changes into a separate patch. * Fix how die() is invoked in "initial_ref_transaction_commit(): function for initial ref creation" and remove some superfluous braces. This series is also available from my GitHub account [4] as branch "init-delete-refs-api". [1] http://thread.gmane.org/gmane.comp.version-control.git/271017 [2] http://thread.gmane.org/gmane.comp.version-control.git/271552 [3] http://article.gmane.org/gmane.comp.version-control.git/271697 [4] https://github.com/mhagger/git Michael Haggerty (19): delete_ref(): move declaration to refs.h remove_branches(): remove temporary delete_ref(): handle special case more explicitly delete_refs(): new function for the refs API delete_refs(): make error message more generic delete_refs(): bail early if the packed-refs file cannot be rewritten prune_remote(): use delete_refs() prune_refs(): use delete_refs() repack_without_refs(): make function private initial_ref_transaction_commit(): function for initial ref creation refs: remove some functions from the module's public interface initial_ref_transaction_commit(): check for duplicate refs initial_ref_transaction_commit(): check for ref D/F conflicts refs: move the remaining ref module declarations to refs.h refs.h: add some parameter names to function declarations check_branch_commit(): make first parameter const update_ref(): don't read old reference value before delete cmd_update_ref(): make logic more straightforward delete_ref(): use the usual convention for old_sha1 archive.c | 1 + builtin/blame.c | 1 + builtin/branch.c | 5 +- builtin/clone.c | 18 ++++- builtin/fast-export.c | 1 + builtin/fetch.c | 25 ++++-- builtin/fmt-merge-msg.c | 1 + builtin/init-db.c | 1 + builtin/log.c | 1 + builtin/remote.c | 33 +------- builtin/update-ref.c | 21 ++++- cache.h | 68 ---------------- fast-import.c | 6 +- refs.c | 182 ++++++++++++++++++++++++++++++++++++++--- refs.h | 211 +++++++++++++++++++++++++++++++----------------- remote-testsvn.c | 1 + 16 files changed, 371 insertions(+), 205 deletions(-) -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe git" in