From: Miklos Vajna <vmiklos@frugalware.org>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: [PATCH] git gc --auto: defer on battery
Date: Mon, 31 Mar 2008 01:14:08 +0200 [thread overview]
Message-ID: <20080330231408.GR11666@genesis> (raw)
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>
---
Idea is from e2fsprogs, such a repack may take a lot of time and usually
you don't have infinite time when you are on battery.. :)
If the patch looks OK, just it's too late for 1.5.5, then please let me
know and I'll resend after 1.5.5.
Thanks.
Documentation/git-gc.txt | 4 +++
builtin-gc.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 53 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..7beb046 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,45 @@ static int too_many_packs(void)
return gc_auto_pack_limit <= cnt;
}
+static int is_on_battery(void)
+{
+ FILE *fp;
+ DIR *dir;
+ char buf[256], state[256], path[256];
+ unsigned int ac = 0;
+ struct dirent* entry;
+
+ if (!defer_on_battery)
+ return 0;
+
+ if ((fp = fopen("/proc/apm", "r"))) {
+ if (fscanf(fp, "%s %s %s %x", buf, buf, buf, &ac) != 4)
+ ac = 1;
+ fclose(fp);
+ return ac != 1;
+ }
+ if((dir = opendir("/proc/acpi/ac_adapter"))) {
+ while ((entry = readdir(dir))) {
+ if (!strcmp(".", entry->d_name) || !strcmp("..",
+ entry->d_name))
+ continue;
+ snprintf(path, 255, "/proc/acpi/ac_adapter/%s/state",
+ entry->d_name);
+ if ((fp = fopen(path, "r"))) {
+ if (fscanf(fp, "%s %s", buf, state) != 2)
+ state[0] = '\0';
+ fclose(fp);
+ if (!strncmp(state, "off-line", 8)) {
+ closedir(dir);
+ return 1;
+ }
+ }
+ }
+ closedir(dir);
+ }
+ return 0;
+}
+
static int need_to_gc(void)
{
/*
@@ -176,6 +220,11 @@ static int need_to_gc(void)
append_option(argv_repack, "-A", MAX_ADD);
else if (!too_many_loose_objects())
return 0;
+
+ if(is_on_battery()) {
+ fprintf(stderr, "Auto packing deferred; on battery");
+ return 0;
+ }
return 1;
}
--
1.5.4.5
next reply other threads:[~2008-03-30 23:15 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-03-30 23:14 Miklos Vajna [this message]
2008-03-30 23:26 ` [PATCH] git gc --auto: defer on battery Björn Steinbrink
2008-03-30 23:39 ` Miklos Vajna
2008-03-30 23:55 ` Björn Steinbrink
2008-03-30 23:46 ` Linus Torvalds
2008-03-31 0:00 ` Björn Steinbrink
2008-03-31 2:06 ` Junio C Hamano
2008-03-31 15:02 ` Linus Torvalds
2008-03-31 16:43 ` Björn Steinbrink
2008-03-31 17:00 ` fetchmail (Re: [PATCH] git gc --auto: defer on battery) Linus Torvalds
2008-04-02 13:40 ` [PATCH] commit: resurrect "gc --auto" at the end Johannes Schindelin
2008-05-14 15:07 ` Johannes Schindelin
2008-05-14 18:13 ` Junio C Hamano
2008-05-14 18:40 ` Johannes Schindelin
2008-05-15 6:44 ` Holger Schurig
2008-03-31 9:35 ` [PATCH 0/4] add pre-auto-gc hook for git-gc --auto Miklos Vajna
2008-03-31 9:35 ` [PATCH 1/4] git-gc --auto: add pre-auto-gc hook Miklos Vajna
2008-03-31 9:36 ` [PATCH 2/4] git-gc: add a --no-verify option to bypass the " Miklos Vajna
2008-03-31 9:36 ` [PATCH 3/4] Documentation/hooks: add " Miklos Vajna
2008-03-31 9:37 ` [PATCH 4/4] templates: add an example " Miklos Vajna
2008-03-31 18:30 ` Brian Gernhardt
2008-03-31 18:08 ` [PATCH] git gc --auto: defer on battery Joey Hess
2008-03-30 23:41 ` Johannes Schindelin
2008-03-30 23:53 ` Miklos Vajna
2008-03-31 16:24 ` Brandon Casey
2008-03-31 17:38 ` Miklos Vajna
2008-03-31 18:31 ` Brandon Casey
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=20080330231408.GR11666@genesis \
--to=vmiklos@frugalware.org \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/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.