提交 88520cad 编写于 作者: C Clemens Buchacher 提交者: Shawn O. Pearce

git-gui: search 4 directories to improve statistic of gc hint

On Windows, git-gui suggests running the garbage collector if it finds
1 or more files in .git/objects/42 (as opposed to 8 files on other
platforms). The probability of that happening if the repo contains
about 100 loose objects is 32%. The probability for the same to happen
when searching 4 directories is only 8%, which is bit more reasonable.

Also remove $objects_limit from the message, because we already know
that we are above (or close to) that limit. Telling the user about
that number does not really give him any useful information.

The following octave script shows the probability for at least m*q
objects to be found in q subdirectories of .git/objects if n is the
total number of objects.

q = 4;
m = [1 2 8];
n = 0:10:2000;

P = zeros(length(n), length(m));
for k = 1:length(n)
        P(k, :) = 1-binocdf(q*m-1, n(k), q/(256-q));
end
plot(n, P);

n \ q   1       4
50      18%     1%
100     32%     8%
200     54%     39%
500     86%     96%
Signed-off-by: NClemens Buchacher <drizzd@aon.at>
Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
上级 c0d15329
......@@ -89,27 +89,26 @@ proc do_fsck_objects {} {
}
proc hint_gc {} {
set object_limit 8
set ndirs 1
set limit 8
if {[is_Windows]} {
set object_limit 1
set ndirs 4
set limit 1
}
set objects_current [llength [glob \
-directory [gitdir objects 42] \
set count [llength [glob \
-nocomplain \
-tails \
-- \
*]]
[gitdir objects 4\[0-[expr {$ndirs-1}]\]/*]]]
if {$objects_current >= $object_limit} {
set objects_current [expr {$objects_current * 250}]
set object_limit [expr {$object_limit * 250}]
if {$count >= $limit * $ndirs} {
set objects_current [expr {$count * 256/$ndirs}]
if {[ask_popup \
[mc "This repository currently has approximately %i loose objects.
To maintain optimal performance it is strongly recommended that you compress the database when more than %i loose objects exist.
To maintain optimal performance it is strongly recommended that you compress the database.
Compress the database now?" $objects_current $object_limit]] eq yes} {
Compress the database now?" $objects_current]] eq yes} {
do_gc
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册