All of lore.kernel.org
 help / color / mirror / Atom feed
From: Miklos Vajna <vmiklos@frugalware.org>
To: "Björn Steinbrink" <B.Steinbrink@gmx.de>
Cc: Junio C Hamano <gitster@pobox.com>, git@vger.kernel.org
Subject: [PATCH] git gc --auto: defer on battery
Date: Mon, 31 Mar 2008 01:39:16 +0200	[thread overview]
Message-ID: <20080330233916.GU11666@genesis> (raw)
In-Reply-To: <20080330232612.GA23063@atjola.homenet>

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:
> Hm, maybe move that check into need_to_gc instead? Seems a bit weird
> to
> lie about the status instead of just skipping the status check.

Right, I've moved the check to need_to_gc().

> The /proc stuff is already deprecated IIRC, the new file to check on
> Linux is /sys/class/power_supply/AC/online.

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

  reply	other threads:[~2008-03-30 23:40 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-30 23:14 [PATCH] git gc --auto: defer on battery Miklos Vajna
2008-03-30 23:26 ` Björn Steinbrink
2008-03-30 23:39   ` Miklos Vajna [this message]
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=20080330233916.GU11666@genesis \
    --to=vmiklos@frugalware.org \
    --cc=B.Steinbrink@gmx.de \
    --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.