Re: [RFC] Cache negative delta pairs
- From
Junio C Hamano <junkio@cox.net>
- Date
- Jun 29, 2006, 21:26 UTC
- Message-ID
- <7vbqsbpsaa.fsf@assigned-by-dhcp.cox.net>
- In-Reply-To
- <Pine.LNX.4.64.0606291616480.1213@localhost.localdomain>
Nicolas Pitre <nico@cam.org> writes:
Show 5 quoted lines
> The negative delta cache concept is certainly attractive even for normal > repositories, especially for public servers, since when used in > conjonction with delta reuse it makes the creation of a pack basically > free. So I think this idea really has merits, as long as the cache > remains small.
Yes, I agree it is very attractive.
One thing to watch out for is that we probably would not want to let git-daemon write into public repositories. Which means that use of negative cache should be strict "opt-in".
- "$GIT_DIR/delta-cache" is read but not necessarily is written back when it exists; git-daemon uses it that way.
- The owner of the repository shouldn't have to tell the tool to update the negative cache every time repack happens.
Which suggests that pack-objects.c can learn an option that tells it to call delta_cache_save(), and we use it in git-repack, perhaps like this:
diff --git a/git-repack.sh b/git-repack.sh index 640ad8d..b07ed9b 100755 --- a/git-repack.sh +++ b/git-repack.sh @@ -44,7 +44,7 @@ case ",$all_into_one," in esac pack_objects="$pack_objects $local $quiet $no_reuse_delta$extra" name=$(git-rev-list --objects --all $rev_list 2>&1 | - git-pack-objects --non-empty $pack_objects .tmp-pack) || + git-pack-objects --update-delta-cache --non-empty $pack_objects .tmp-pack) || exit 1 if [ -z "$name" ]; then echo Nothing new to pack. diff --git a/pack-objects.c b/pack-objects.c index bed2497..46b9775 100644 --- a/pack-objects.c +++ b/pack-objects.c ... @@ -1342,5 +1350,7 @@ int main(int argc, char **argv) if (progress) fprintf(stderr, "Total %d, written %d (delta %d), reused %d (delta %d)\n", nr_result, written, written_delta, reused, reused_delta); + if (update_delta_cache) + delta_cache_save(); return 0; }