DORMANTno replies

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

From: Petr Baudis <hidden>
Date: 2016-06-15 22:42:17
Subsystem: documentation, the rest · Maintainers: Jonathan Corbet, Linus Torvalds

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

 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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help