Re: [PATCH 8/8] git-gc --auto: run "repack -A -d -l" as necessary.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On Mon, 17 Sep 2007, Junio C Hamano wrote:

> diff --git a/builtin-gc.c b/builtin-gc.c
> index 34ce35b..a82f6be 100644
> --- a/builtin-gc.c
> +++ b/builtin-gc.c
> @@ -78,6 +83,9 @@ static int too_many_loose_objects(void)
>  	int num_loose = 0;
>  	int needed = 0;
>  
> +	if (gc_auto_threshold <= 0)
> +		return 0;
> +

Heh, patch 6/8 explicitely moved this check out of the function.

> @@ -100,21 +108,58 @@ static int too_many_loose_objects(void)
>  	return needed;
>  }
>  
> +static int too_many_packs(void)
> +{
> +	struct packed_git *p;
> +	int cnt;
> +
> +	if (gc_auto_pack_limit <= 0)
> +		return 0;
> +
> +	for (cnt = 0, p = packed_git; p; p = p->next) {
> +		char *suffix;
> +		int keep;
> +		if (!p->pack_local)
> +			continue;
> +		suffix = p->pack_name + strlen(p->pack_name) - 5;

I suspect that you need something like

		int len;
		len = strlen(p->pack_name);
		if (len < 5)
			continue;

before this.

> +		if (memcmp(suffix, ".pack", 6))
> +			continue;
> +		memcpy(suffix, ".keep", 6);
> +		keep = access(p->pack_name, F_OK) && (errno == ENOENT);
> +		memcpy(suffix, ".pack", 6);

Heh.  Took me some looking around to see why this is allowed...

>  static int need_to_gc(void)
>  {
>  	int ac = 0;
>  
>  	/*
> -	 * Setting gc.auto to 0 or negative can disable the
> -	 * automatic gc
> +	 * Setting gc.auto and gc.autopacklimit to 0 or negative can
> +	 * disable the automatic gc.
>  	 */
> -	if (gc_auto_threshold <= 0)
> -		return 0;
> -
> -	if (!too_many_loose_objects())
> +	if (gc_auto_threshold <= 0 && gc_auto_pack_limit <= 0)
>  		return 0;
>  
> +	/*
> +	 * If there are too many loose objects, but not too many
> +	 * packs, we run "repack -d -l".  If there are too many packs,
> +	 * we run "repack -A -d -l".  Otherwise we tell the caller
> +	 * there is no need.
> +	 */
>  	argv_repack[ac++] = "repack";
> +	if (too_many_packs())
> +		argv_repack[ac++] = "-A";
> +	if (!too_many_loose_objects() && ac == 1)
> +		return 0;

Why not

	else if (!too_many_loose_objects())
		return 0;

Hmm?

Ciao,
Dscho

-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux