I experimented with using a different hash algorithm (I am aware of existing "Git hash function transition plan", I just want to push things forward a bit) - and immediately hit a small issue - changing the size of object_id hash buffer leads to compilation issues and breaks graft-related tests. I am sending patch 1 only to show a modification, that I did to increase buffer size - it's not intended to be merged. Patch 2 fixes trivial compilation issue. Patches 3, 4, and 5 touch graft implementation to remove calculations using GIT_SHA1_*, that lead to broken tests. I replaced FLEX_ARRAY of object_id's representing parents with oid_array. New implementation should be more future-proof, I think. New implementation has tiny behaviour change: previously parents in graft line needed to be separated with single space - now any number of whitespace characters will do. Alternative implementation approaches ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Strbuf could be replaced with string_list with string_list_split_in_place instead of while loop in read_graft_line. I didn't implement it this way because I learned about string_list_split_in_place after finishing this implementation draft. Right now I'm not sure which approach is better. Another possibility is dropping graft feature altogether - that would mean removing code for parsing grafts and 'parent' field in the struct, but preserving the struct itself as a shallow clone marker. Grafts are a little-known feature with modern replacement, but this seems like bigger task and rather out of the scope of transition to the new hashing algorithm. I considered making function read_graft_line a static one and read_graft_file non-static, but read_graft_line is used in 'builtin/blame.c' in function read_ancestry, which is almost a copy of read_graft_file (difference of single boolean flag passed to register_commit_graft). Removal of this duplication may be worthwhile, but I think it's out of scope. Patryk Obara (5): cache: extend object_id size to sha3-256 sha1_file: fix hardcoded size in null_sha1 commit: replace the raw buffer with strbuf in read_graft_line commit: implement free_commit_graft commit: rewrite read_graft_line builtin/blame.c | 2 +- cache.h | 8 ++++++-- commit.c | 55 ++++++++++++++++++++++++++++++++----------------------- commit.h | 5 +++-- sha1_file.c | 2 +- shallow.c | 1 + 6 files changed, 44 insertions(+), 29 deletions(-) -- 2.9.5