From: Pat Thoyts <patthoyts@users.sourceforge.net>
To: Karsten Blees <karsten.blees@gmail.com>
Cc: Shawn Pearce <spearce@spearce.org>, Git List <git@vger.kernel.org>
Subject: Re: [PATCH] git-gui: make gc warning threshold match 'git gc --auto'
Date: Sun, 10 Aug 2014 11:40:03 +0100 [thread overview]
Message-ID: <8738d4aarg.fsf@red.patthoyts.tk> (raw)
In-Reply-To: <53E27915.9040305@gmail.com> (Karsten Blees's message of "Wed, 06 Aug 2014 20:51:01 +0200")
Karsten Blees <karsten.blees@gmail.com> writes:
>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.
Applying this to git-gui I get an error raised
can't read "repo_config(gc.auto)": no such element in array
which occurs because I've never set this config variable and it is not
present in the default_config array which is used to initialize repo_config.
The following should solve this by moving where we ser the default:
>From bdb136cbcb2a3fc0e3441f852e4bf4525ee4cf99 Mon Sep 17 00:00:00 2001
From: Pat Thoyts <patthoyts@users.sourceforge.net>
Date: Sun, 10 Aug 2014 11:36:47 +0100
Subject: [PATCH] git-gui: initialize the default value for gc.auto in case it
is unset.
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
---
git-gui.sh | 1 +
lib/database.tcl | 4 +---
2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/git-gui.sh b/git-gui.sh
index b186329..ee9c47b 100755
--- a/git-gui.sh
+++ b/git-gui.sh
@@ -880,6 +880,7 @@ proc apply_config {} {
}
set default_config(branch.autosetupmerge) true
+set default_config(gc.auto) 6700
set default_config(merge.tool) {}
set default_config(mergetool.keepbackup) true
set default_config(merge.diffstat) true
diff --git a/lib/database.tcl b/lib/database.tcl
index 212b195..d9ba323 100644
--- a/lib/database.tcl
+++ b/lib/database.tcl
@@ -91,9 +91,7 @@ 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} {
+ if {$auto_gc <= 0} {
return
}
--
Pat Thoyts http://www.patthoyts.tk/
PGP fingerprint 2C 6E 98 07 2C 59 C8 97 10 CE 11 E6 04 E0 B9 DD
prev parent reply other threads:[~2014-08-10 10:46 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-06 18:51 [PATCH] git-gui: make gc warning threshold match 'git gc --auto' Karsten Blees
2014-08-10 10:40 ` Pat Thoyts [this message]
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=8738d4aarg.fsf@red.patthoyts.tk \
--to=patthoyts@users.sourceforge.net \
--cc=git@vger.kernel.org \
--cc=karsten.blees@gmail.com \
--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.