# [PATCH] git-count-objects --all support

5 messages from 2006-01-22 to 2006-01-22. Participants: Petr Baudis, Junio C Hamano.
Thread: https://gitlist.dev/t/3125

## Petr Baudis, 2006-01-22 02:27

Subject: [PATCH] git-count-objects --all support
Message-ID: <20060122022718.16375.78611.stgit@machine.or.cz>
URL: https://gitlist.dev/e/20060122022718.16375.78611.stgit%40machine.or.cz

```
Having command called "git-count-objects" count only unpacked objects is
a little strange and confusing. This patch adds a warning if packs are
already present in the current repository, an --unpacked argument to
suppress the warning, and an --all argument to count even packed objects
(useful at least for statistics).

Signed-off-by: Petr Baudis <pasky@suse.cz>
---

 Documentation/git-count-objects.txt |    9 ++++----
 git-count-objects.sh                |   41 ++++++++++++++++++++++++++++++++---
 2 files changed, 42 insertions(+), 8 deletions(-)

diff --git a/Documentation/git-count-objects.txt b/Documentation/git-count-objects.txt
index 36888d9..105721b 100644
--- a/Documentation/git-count-objects.txt
+++ b/Documentation/git-count-objects.txt
@@ -3,16 +3,17 @@ git-count-objects(1)
 
 NAME
 ----
-git-count-objects - Reports on unpacked objects.
+git-count-objects - Reports on objects count.
 
 SYNOPSIS
 --------
-'git-count-objects'
+'git-count-objects' [--unpacked | --all]
 
 DESCRIPTION
 -----------
-This counts the number of unpacked object files and disk space consumed by
-them, to help you decide when it is a good time to repack.
+This counts the number of objects and disk space consumed by them.
+It by default counts only unpacked objects in order to help you decide
+when it is a good time to repack.
 
 Author
 ------
diff --git a/git-count-objects.sh b/git-count-objects.sh
index 40c58ef..986ff14 100755
--- a/git-count-objects.sh
+++ b/git-count-objects.sh
@@ -3,7 +3,8 @@
 # Copyright (c) 2005 Junio C Hamano
 #
 
-GIT_DIR=`git-rev-parse --git-dir` || exit $?
+USAGE='[--unpacked | --all]'
+. git-sh-setup
 
 dc </dev/null 2>/dev/null || {
 	# This is not a real DC at all -- it just knows how
@@ -20,12 +21,44 @@ dc </dev/null 2>/dev/null || {
 	}
 }
 
-echo $(find "$GIT_DIR/objects"/?? -type f -print 2>/dev/null | wc -l) objects, \
+all= unpacked=
+while case "$#" in 0) break;; esac
+do
+  case "$1" in
+  -a|--a|--al|--all)
+    all=t
+    shift ;;
+  -u|--u|--un|--unp|--unpa|--unpac|--unpack|--unpacke|--unpacked)
+    unpacked=t
+    shift ;;
+  *)
+    usage ;;
+  esac
+done
+
+has_packs=
+test -d "$GIT_DIR/objects/pack" && test -n "$(ls "$GIT_DIR/objects/pack")" &&
+	has_packs=objects/pack
+test -n "$has_packs" && test -z "$all" && test -z "$unpacked" &&
+	echo "Warning: Ignoring packed objects"
+test -z "$all" &&
+	has_packs=
+
+
+objcount=$(find "$GIT_DIR/objects"/?? -type f -print 2>/dev/null | wc -l)
+test -n "$has_packs" && for pack in "$GIT_DIR/objects/pack"/*.idx; do
+	objcount=$((objcount+$(git-pack-ls-objects <"$pack" 2>/dev/null | wc -l)))
+done
+
+echo $objcount objects, \
 $({
     echo 0
+
+    cd "$GIT_DIR"
     # "no-such" is to help Darwin folks by not using xargs -r.
-    find "$GIT_DIR/objects"/?? -type f -print 2>/dev/null |
-    xargs du -k "$GIT_DIR/objects/no-such" 2>/dev/null |
+    find objects/?? $has_packs -type f -print 2>/dev/null |
+    xargs du -k "objects/no-such" 2>/dev/null |
     sed -e 's/[ 	].*/ +/'
+
     echo p
 } | dc) kilobytes

```

## Junio C Hamano, 2006-01-22 02:49

Subject: Re: [PATCH] git-count-objects --all support
Message-ID: <7vslrhht8b.fsf@assigned-by-dhcp.cox.net>
URL: https://gitlist.dev/e/7vslrhht8b.fsf%40assigned-by-dhcp.cox.net
In-Reply-To: <20060122022718.16375.78611.stgit@machine.or.cz>

```
Petr Baudis <pasky@suse.cz> writes:

> Having command called "git-count-objects" count only unpacked objects is
> a little strange and confusing. This patch adds a warning if packs are
> already present in the current repository,

The point of counting objects is to see if it is time to repack,
so the warning is something I am quite hesitant to accept, even
with a suppression option.  The other way around is probably OK
("please warn me if I have packs"), but feels somewhat pointless.

The --all option might be a welcome addition, though.

```

## Petr Baudis, 2006-01-22 03:02

Subject: Re: [PATCH] git-count-objects --all support
Message-ID: <20060122030215.GT28365@pasky.or.cz>
URL: https://gitlist.dev/e/20060122030215.GT28365%40pasky.or.cz
In-Reply-To: <7vslrhht8b.fsf@assigned-by-dhcp.cox.net>

```
Dear diary, on Sun, Jan 22, 2006 at 03:49:40AM CET, I got a letter
where Junio C Hamano <junkio@cox.net> said that...
> Petr Baudis <pasky@suse.cz> writes:
> 
> > Having command called "git-count-objects" count only unpacked objects is
> > a little strange and confusing. This patch adds a warning if packs are
> > already present in the current repository,
> 
> The point of counting objects is to see if it is time to repack,
> so the warning is something I am quite hesitant to accept, even
> with a suppression option.

Then please change the command name - it is very confusing this way;
I've been "burnt" (well, no big deal but wrong numbers, but anyway...)
multiple times and I know others who were as well.

-- 
				Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
Of the 3 great composers Mozart tells us what it's like to be human,
Beethoven tells us what it's like to be Beethoven and Bach tells us
what it's like to be the universe.  -- Douglas Adams

```

## Junio C Hamano, 2006-01-22 03:03

Subject: Re: [PATCH] git-count-objects --all support
Message-ID: <7v7j8thsl4.fsf@assigned-by-dhcp.cox.net>
URL: https://gitlist.dev/e/7v7j8thsl4.fsf%40assigned-by-dhcp.cox.net
In-Reply-To: <7vslrhht8b.fsf@assigned-by-dhcp.cox.net>

```
Junio C Hamano <junkio@cox.net> writes:

> The point of counting objects is to see if it is time to repack,
> so the warning is something I am quite hesitant to accept, even
> with a suppression option.  The other way around is probably OK
> ("please warn me if I have packs"), but feels somewhat pointless.
>
> The --all option might be a welcome addition, though.

I think your patch counts the same object twice if it is packed
in more than one packs and/or it has a loose copy _and_ also in
a pack.  If it is a good thing or not is totally up to the
reason why we are counting.

We might be better off if we did this kind of additions by
building on fsck-objects.  For example, you could give a --stat
option that might say something like this:

	$ git fsck-objects --full --stat
        commit	 2488
        tree    43343
        blob   212234
        total  258065
	packed 184382
	loose   78115
        dups     4432

where "dups" is number of duplicated copies --- an object packed
in more than two packs, or appearing in a pack and also having a
loose copy.  I dunno.

```

## Junio C Hamano, 2006-01-22 03:48

Subject: Re: [PATCH] git-count-objects --all support
Message-ID: <7vd5ikhqik.fsf@assigned-by-dhcp.cox.net>
URL: https://gitlist.dev/e/7vd5ikhqik.fsf%40assigned-by-dhcp.cox.net
In-Reply-To: <20060122030215.GT28365@pasky.or.cz>

```
Petr Baudis <pasky@suse.cz> writes:

>> The point of counting objects is to see if it is time to repack,
>> so the warning is something I am quite hesitant to accept, even
>> with a suppression option.
>
> Then please change the command name - it is very confusing this way;

True.  count-loose-objects would have been a good name, if it
were named that way from the beginning.

```
