This patch modifies git gc --auto so that it will not always repack when
a user is on battery.
It introduces the new gc.deferonbattery configuration variable, which
defaults to true. If it's true and the user is on battery, it will not
run git gc --auto.
Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
---
On Mon, Mar 31, 2008 at 01:26:12AM +0200, Björn Steinbrink <B.Steinbrink@gmx.de> wrote:
Right, I've moved the check to need_to_gc().
And that makes the patch smaller as well. :)
Something like this?
Documentation/git-gc.txt | 4 ++++
builtin-gc.c | 24 ++++++++++++++++++++++++
2 files changed, 28 insertions(+), 0 deletions(-)
diff --git a/Documentation/git-gc.txt b/Documentation/git-gc.txt
index d424a4e..7d54148 100644
--- a/Documentation/git-gc.txt
+++ b/Documentation/git-gc.txt
@@ -104,6 +104,10 @@ The optional configuration variable 'gc.pruneExpire' controls how old
the unreferenced loose objects have to be before they are pruned. The
default is "2 weeks ago".
+The optional configuration variable 'gc.deferonbattery' determines if
+`git gc --auto` should be disabled if the system is running on battery.
+This defaults to true.
+
See Also
--------
linkgit:git-prune[1]
diff --git a/builtin-gc.c b/builtin-gc.c
index 8cef36f..512a357 100644
--- a/builtin-gc.c
+++ b/builtin-gc.c
@@ -23,6 +23,7 @@ static const char * const builtin_gc_usage[] = {
};
static int pack_refs = 1;
+static int defer_on_battery = 1;
static int aggressive_window = -1;
static int gc_auto_threshold = 6700;
static int gc_auto_pack_limit = 50;
@@ -67,6 +68,10 @@ static int gc_config(const char *var, const char *value)
prune_expire = xstrdup(value);
return 0;
}
+ if (!strcmp(var, "gc.deferonbattery")) {
+ defer_on_battery = git_config_bool(var, value);
+ return 0;
+ }
return git_default_config(var, value);
}
@@ -157,6 +162,20 @@ static int too_many_packs(void)
return gc_auto_pack_limit <= cnt;
}
+static int is_on_battery(void)
+{
+ FILE *fp;
+ unsigned int state = 1;
+
+ if ((fp = fopen("/sys/class/power_supply/AC/online", "r"))) {
+ if (fscanf(fp, "%d", &state) != 1)
+ state = 1;
+ fclose(fp);
+ return state != 1;
+ }
+ return 0;
+}
+
static int need_to_gc(void)
{
/*
@@ -176,6 +195,11 @@ static int need_to_gc(void)
append_option(argv_repack, "-A", MAX_ADD);
else if (!too_many_loose_objects())
return 0;
+
+ if(defer_on_battery && is_on_battery()) {
+ fprintf(stderr, "Auto packing deferred; on battery");
+ return 0;
+ }
return 1;
}
--
1.5.4.5
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html