contrib / stats / git-common-hashon commit merge-recursive: Remember to free generated unique path names (3d6b8e8)
   1#!/bin/sh
   2
   3# This script displays the distribution of longest common hash prefixes.
   4# This can be used to determine the minimum prefix length to use
   5# for object names to be unique.
   6
   7git rev-list --objects --all | sort | perl -lne '
   8  substr($_, 40) = "";
   9  # uncomment next line for a distribution of bits instead of hex chars
  10  # $_ = unpack("B*",pack("H*",$_));
  11  if (defined $p) {
  12    ($p ^ $_) =~ /^(\0*)/;
  13    $common = length $1;
  14    if (defined $pcommon) {
  15      $count[$pcommon > $common ? $pcommon : $common]++;
  16    } else {
  17      $count[$common]++; # first item
  18    }
  19  }
  20  $p = $_;
  21  $pcommon = $common;
  22  END {
  23    $count[$common]++; # last item
  24    print "$_: $count[$_]" for 0..$#count;
  25  }
  26'