This series is the result of René nerd-sniping me with the claim that we could "easily" teach count-objects to print out the list of alternates in: http://public-inbox.org/git/c27dc1a4-3c7a-2866-d9d8-f5d3eb161650@xxxxxx/ My real goal is just patch 17, which is needed for the quarantine series in that thread. But along the way there were quite a few opportunities for cleanups along with a few minor bugfixes (in patches 7 and 18), and I think the count-objects change in patch 16 is a nice general debugging tool. The rest of it is "just" cleanup, but I'll note that it clears up some hairy allocation code. These were bits that I noticed in my big allocation-cleanup series last year, but were too nasty to fit any of the more general fixes. I think the end result is much better. The number of patches is a little intimidating, but I tried hard to break the refactoring down into a sequence of obviously-correct steps. You can be the judge of my success. [01/18]: t5613: drop reachable_via function [02/18]: t5613: drop test_valid_repo function [03/18]: t5613: use test_must_fail [04/18]: t5613: whitespace/style cleanups [05/18]: t5613: do not chdir in main process [06/18]: t5613: clarify "too deep" recursion tests [07/18]: link_alt_odb_entry: handle normalize_path errors [08/18]: link_alt_odb_entry: refactor string handling [09/18]: alternates: provide helper for adding to alternates list [10/18]: alternates: provide helper for allocating alternate [11/18]: alternates: encapsulate alt->base munging [12/18]: alternates: use a separate scratch space [13/18]: fill_sha1_file: write "boring" characters [14/18]: alternates: store scratch buffer as strbuf [15/18]: fill_sha1_file: write into a strbuf [16/18]: count-objects: report alternates via verbose mode [17/18]: sha1_file: always allow relative paths to alternates [18/18]: alternates: use fspathcmp to detect duplicates Documentation/git-count-objects.txt | 5 + builtin/count-objects.c | 12 +++ builtin/fsck.c | 10 +- builtin/submodule--helper.c | 11 +- cache.h | 36 ++++++- sha1_file.c | 179 ++++++++++++++++++-------------- sha1_name.c | 17 +-- strbuf.c | 20 ++++ strbuf.h | 8 ++ submodule.c | 23 +--- t/t5613-info-alternate.sh | 202 ++++++++++++++++++++---------------- transport.c | 4 +- 12 files changed, 305 insertions(+), 222 deletions(-)