git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] git gc --auto: defer on battery

From
Björn Steinbrink <b.steinbrink@gmx.de>
Date
Mar 30, 2008, 23:55 UTC
Message-ID
<20080330235513.GA23259@atjola.homenet>
In-Reply-To
<20080330233916.GU11666@genesis>
On 2008.03.31 01:39:16 +0200, Miklos Vajna wrote:
Show 21 quoted lines
> 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. :)

Oh, oops, I didn't meant to say that you should remove the /proc/* checks, just that they'll probably break in the future and that the new location needs to be added. Those running older kernels should probably not be excluded ;-)

Björn
Show 77 quoted lines
> 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;
>  }
>  
Previous: Miklos VajnaNext: Linus Torvalds
Message 4 of 27 in “git gc --auto: defer on battery”
  1. git gc --auto: defer on batteryMiklos Vajna, Mar 30, 2008
  2. Björn SteinbrinkMar 30, 2008
  3. git gc --auto: defer on batteryMiklos Vajna, Mar 30, 2008
  4. Björn SteinbrinkMar 30, 2008
  5. Linus TorvaldsMar 30, 2008
  6. Björn SteinbrinkMar 31, 2008
  7. Junio C HamanoMar 31, 2008
  8. Linus TorvaldsMar 31, 2008
  9. Björn SteinbrinkMar 31, 2008
  10. fetchmail (Re: [PATCH] git gc --auto: defer on battery)Linus Torvalds, Mar 31, 2008
  11. commit: resurrect "gc --auto" at the endJohannes Schindelin, Apr 2, 2008
  12. Johannes SchindelinMay 14, 2008
  13. Junio C HamanoMay 14, 2008
  14. Johannes SchindelinMay 14, 2008
  15. Holger SchurigMay 15, 2008
  16. 0/4 add pre-auto-gc hook for git-gc --autoMiklos Vajna, Mar 31, 2008
  17. 1/4 git-gc --auto: add pre-auto-gc hookMiklos Vajna, Mar 31, 2008
  18. 2/4 git-gc: add a --no-verify option to bypass the pre-auto-gc hookMiklos Vajna, Mar 31, 2008
  19. 3/4 Documentation/hooks: add pre-auto-gc hookMiklos Vajna, Mar 31, 2008
  20. 4/4 templates: add an example pre-auto-gc hookMiklos Vajna, Mar 31, 2008
  21. Brian GernhardtMar 31, 2008
  22. Joey HessMar 31, 2008
  23. Johannes SchindelinMar 30, 2008
  24. Miklos VajnaMar 30, 2008
  25. Brandon CaseyMar 31, 2008
  26. Miklos VajnaMar 31, 2008
  27. Brandon CaseyMar 31, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.