Here is the complete patch set. I have only moved the exported functions that operate with packfiles and their static helpers - for example, static functions like freshen_packed_object() that are used only by non-pack-specific functions are not moved. In the end, 3 functions needed to be made global. They are find_pack_entry(), mark_bad_packed_object(), and has_packed_and_bad(). Of the 3, find_pack_entry() is probably legitimately promoted. But I think that the latter two functions needing to be accessed from sha1_file.c points to a design that could be improved - they are only used when packed_object_info() detects corruption, and used for marking as bad and printing messages to the user respectively, which packed_object_info() should probably do itself. But I have not made this change in this patch set. (Other than the 3 functions above, there are some variables and functions that are temporarily made global, but reduced back to static when the wide scope is no longer needed.) Jonathan Tan (25): pack: move pack name-related functions pack: move static state variables pack: move pack_report() pack: move open_pack_index(), parse_pack_index() pack: move release_pack_memory() pack: move pack-closing functions pack: move use_pack() pack: move unuse_pack() pack: move add_packed_git() pack: move install_packed_git() pack: move {,re}prepare_packed_git and approximate_object_count pack: move unpack_object_header() pack: move get_size_from_delta() pack: move unpack_object_header() sha1_file: set whence in storage-specific info fn sha1_file: remove read_packed_sha1() pack: move packed_object_info(), unpack_entry() pack: move nth_packed_object_{sha1,oid} pack: move check_pack_index_ptr(), nth_packed_object_offset() pack: move find_pack_entry_one(), is_pack_valid() pack: move find_sha1_pack() pack: move find_pack_entry() and make it global pack: move has_sha1_pack() pack: move has_pack_index() pack: move for_each_packed_object() Makefile | 1 + builtin/am.c | 1 + builtin/cat-file.c | 1 + builtin/clone.c | 1 + builtin/count-objects.c | 1 + builtin/fetch.c | 1 + builtin/gc.c | 1 + builtin/merge.c | 1 + builtin/pack-redundant.c | 1 + builtin/prune-packed.c | 1 + cache.h | 122 +-- connected.c | 1 + diff.c | 1 + git-compat-util.h | 2 - http-backend.c | 1 + http-push.c | 1 + http-walker.c | 1 + pack.h | 137 +++ packfile.c | 1905 +++++++++++++++++++++++++++++++++++ path.c | 1 + reachable.c | 1 + revision.c | 1 + server-info.c | 1 + sha1_file.c | 2484 ++++++---------------------------------------- sha1_name.c | 1 + streaming.c | 1 + 26 files changed, 2350 insertions(+), 2321 deletions(-) create mode 100644 packfile.c -- 2.14.0.434.g98096fd7a8-goog