26 lines
708 B
26 lines
708 B
#!/bin/sh |
|
|
|
# This script displays the distribution of longest common hash prefixes. |
|
# This can be used to determine the minimum prefix length to use |
|
# for object names to be unique. |
|
|
|
git rev-list --objects --all | sort | perl -lne ' |
|
substr($_, 40) = ""; |
|
# uncomment next line for a distribution of bits instead of hex chars |
|
# $_ = unpack("B*",pack("H*",$_)); |
|
if (defined $p) { |
|
($p ^ $_) =~ /^(\0*)/; |
|
$common = length $1; |
|
if (defined $pcommon) { |
|
$count[$pcommon > $common ? $pcommon : $common]++; |
|
} else { |
|
$count[$common]++; # first item |
|
} |
|
} |
|
$p = $_; |
|
$pcommon = $common; |
|
END { |
|
$count[$common]++; # last item |
|
print "$_: $count[$_]" for 0..$#count; |
|
} |
|
'
|
|
|