From: Karsten Blees <karsten.blees@gmail.com>
To: Shawn Pearce <spearce@spearce.org>, Git List <git@vger.kernel.org>
Subject: [PATCH] git-gui: make gc warning threshold match 'git gc --auto'
Date: Wed, 06 Aug 2014 20:51:01 +0200 [thread overview]
Message-ID: <53E27915.9040305@gmail.com> (raw)
The number of loose objects at which git-gui shows a gc warning has
historically been hardcoded to ~2000, or ~200 on Windows. The warning can
only be disabled completely via gui.gcwarning=false.
Especially on Windows, the hardcoded threshold is so ridiculously low that
git-gui often complains even immediately after gc (due to loose objects
only referenced by the reflog).
'git gc --auto' uses a much bigger threshold to check if gc is necessary.
Additionally, the value can be configured via gc.auto (default 6700).
There's no special case for Windows.
Change git-gui so that it only warns if 'git gc --auto' would also do an
automatic gc, i.e.:
- calculate the threshold from the gc.auto setting (default 6700,
disabled if <= 0)
- check directory .git/objects/17
We still check four directories (14-17) if gc.auto is very small, to get a
better estimate.
Signed-off-by: Karsten Blees <blees@dcon.de>
---
git-gui/lib/database.tcl | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/git-gui/lib/database.tcl b/git-gui/lib/database.tcl
index 1f187ed..212b195 100644
--- a/git-gui/lib/database.tcl
+++ b/git-gui/lib/database.tcl
@@ -89,19 +89,26 @@ proc do_fsck_objects {} {
}
proc hint_gc {} {
+ global repo_config
+ set auto_gc $repo_config(gc.auto)
+ if {$auto_gc eq {}} {
+ set auto_gc 6700
+ } elseif {$auto_gc <= 0} {
+ return
+ }
+
set ndirs 1
- set limit 8
- if {[is_Windows]} {
+ set limit [expr {($auto_gc + 255) / 256}]
+ if {$limit < 4} {
set ndirs 4
- set limit 1
}
set count [llength [glob \
-nocomplain \
-- \
- [gitdir objects 4\[0-[expr {$ndirs-1}]\]/*]]]
+ [gitdir objects 1\[[expr {8-$ndirs}]-7\]/*]]]
- if {$count >= $limit * $ndirs} {
+ if {$count > $limit * $ndirs} {
set objects_current [expr {$count * 256/$ndirs}]
if {[ask_popup \
[mc "This repository currently has approximately %i loose objects.
--
2.0.3.921.ga7e731a.dirty
next reply other threads:[~2014-08-06 18:51 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-06 18:51 Karsten Blees [this message]
2014-08-10 10:40 ` [PATCH] git-gui: make gc warning threshold match 'git gc --auto' Pat Thoyts
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53E27915.9040305@gmail.com \
--to=karsten.blees@gmail.com \
--cc=git@vger.kernel.org \
--cc=spearce@spearce.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.