threads / patch / 3125

patchgit-count-objects --all support

Subject: [PATCH] git-count-objects --all support

## tl;dr

5 messages between Jan 22, 2006 and Jan 22, 2006. Diffs are folded; open one to read it.

replies: 4people: 2as markdown or json

Petr Baudis· Jan 22, 2006, 02:27 UTC · lore

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(-)
Show changes to 2 files +42 −8

Documentation/git-count-objects.txt, git-count-objects.sh

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· Jan 22, 2006, 02:49 UTC · re: Petr Baudis · lore

Re: [PATCH] git-count-objects --all support

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· Jan 22, 2006, 03:02 UTC · re: Junio C Hamano · lore

Re: [PATCH] git-count-objects --all support

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...

Show 9 quoted lines
> 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· Jan 22, 2006, 03:48 UTC · re: Petr Baudis · lore

Re: [PATCH] git-count-objects --all support

Petr Baudis <pasky@suse.cz> writes:
Show 5 quoted lines
>> 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.

Junio C Hamano· Jan 22, 2006, 03:03 UTC · re: Junio C Hamano · lore

Re: [PATCH] git-count-objects --all support

Junio C Hamano <junkio@cox.net> writes:
Show 6 quoted lines
> 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.

← back to recent threads