[pkg-perl-tools] 03/04: gc: add -p option, running 'git gc' via 'parallel', utilising all available CPUs

Damyan Ivanov dmn at moszumanska.debian.org
Sun Dec 3 21:32:29 UTC 2017


This is an automated email from the git hooks/post-receive script.

dmn pushed a commit to branch master
in repository pkg-perl-tools.

commit f7d42753a52ffa2ff4f45c698f762f815f9bb285
Author: Damyan Ivanov <dmn at debian.org>
Date:   Sun Dec 3 21:31:12 2017 +0000

    gc: add -p option, running 'git gc' via 'parallel', utilising all available CPUs
---
 debian/control |  1 +
 scripts/gc     | 70 +++++++++++++++++++++++++++++++++++-----------------------
 2 files changed, 43 insertions(+), 28 deletions(-)

diff --git a/debian/control b/debian/control
index e5a0a8a..d56f35b 100644
--- a/debian/control
+++ b/debian/control
@@ -82,6 +82,7 @@ Suggests: bc,
           cdbs,
           duck,
           moreutils,
+          parallel,
           perl-depends,
           python,
           python-launchpadlib
diff --git a/scripts/gc b/scripts/gc
index 1601ab4..d7fca6f 100755
--- a/scripts/gc
+++ b/scripts/gc
@@ -13,8 +13,9 @@ usage() {
 STATS=
 VERBOSE=
 HAVE_BC=
+PARALLEL=
 
-while getopts vsh opt; do
+while getopts vshp opt; do
     case $opt in
         h) usage;;
         s) STATS=1
@@ -24,6 +25,13 @@ while getopts vsh opt; do
                echo "W: 'bc' not available, stats will use byte units" >&2
            fi
         ;;
+        p)
+            if which parallel > /dev/null ; then
+                PARALLEL=1
+            else
+                echo "W: 'parallel' not available, wil run sequentially" >&2
+            fi
+        ;;
         v) VERBOSE=1;;
         ?) usage;;
     esac
@@ -37,7 +45,7 @@ cd "${DPT_PACKAGES:?}"
 
 if [ -n "$HAVE_BC" ]; then
     calc() {
-        ( echo "scale=1"; echo "$@" ) | bc
+        ( echo "scale=1"; echo "$@" ) | LC_ALL=C bc
     }
 else
     calc() {
@@ -65,38 +73,44 @@ human() {
     fi
 }
 
-TOTAL_BEFORE=0
-TOTAL_AFTER=0
-for d in `find . -maxdepth 1 -type d`; do
-    [ -d "$d/.git" ] || continue
+if [ -n "$STATS" ]; then
+    TOTAL_BEFORE=$(find . -maxdepth 2 -type d -name .git -print0 | du -sbP --total --files0-from=- | tail -1 | cut -f1)
+fi
 
-    if [ -n "$VERBOSE" ]; then
-        echo -n "`basename $d`"
-    fi
-    if [ -n "$STATS" ]; then
-        BEFORE=`du -sbP $d/.git | cut -f1`
-        TOTAL_BEFORE=$(( $TOTAL_BEFORE + $BEFORE ))
-    fi
-    GIT_DIR="$d/.git" git gc --quiet
-    if [ -n "$STATS" ]; then
-        AFTER=`du -sbP $d/.git | cut -f1`
-        TOTAL_AFTER=$(( $TOTAL_AFTER + $AFTER ))
-    fi
-    if [ -n "$VERBOSE" ]; then
-        echo -n " done."
+if [ -n "$PARALLEL" ]; then
+    find . -maxdepth 2 -type d -name .git | \
+        parallel --will-cite sh -c "GIT_DIR='{}' git gc --quiet"
+else
+    for d in `find . -maxdepth 1 -type d`; do
+        [ -d "$d/.git" ] || continue
+
+        if [ -n "$VERBOSE" ]; then
+            echo -n "`basename $d`"
+        fi
         if [ -n "$STATS" ]; then
-            printf " %s -> %s (-%s, %0.1f%%)"  \
-                `human $BEFORE` `human $AFTER` \
-                `human $(( $BEFORE - $AFTER ))` \
-                `calc "100*($BEFORE-$AFTER)/$BEFORE"`
+            BEFORE=`du -sbP $d/.git | cut -f1`
         fi
-        echo
-    fi
-done
+        GIT_DIR="$d/.git" git gc --quiet
+        if [ -n "$STATS" ]; then
+            AFTER=`du -sbP $d/.git | cut -f1`
+        fi
+        if [ -n "$VERBOSE" ]; then
+            echo -n " done."
+            if [ -n "$STATS" ]; then
+                printf " %s -> %s (-%s, %0.1f%%)"  \
+                    `human $BEFORE` `human $AFTER` \
+                    `human $(( $BEFORE - $AFTER ))` \
+                    `calc "100*($BEFORE-$AFTER)/$BEFORE"`
+            fi
+            echo
+        fi
+    done
+fi
 
 if [ -n "$STATS" ]; then
+    TOTAL_AFTER=$(find . -maxdepth 2 -type d -name .git -print0 | du -sbP --total --files0-from=- | tail -1 | cut -f1)
     GAIN=$(( $TOTAL_BEFORE - $TOTAL_AFTER ))
-    printf "Total disk usage: %s -> %s (-%s, %0.1f%%)"  \
+    printf "Total disk usage: %s -> %s (-%s, %0.1f%%)\n"  \
         `human $TOTAL_BEFORE` `human $TOTAL_AFTER` \
         `human $GAIN` \
         `calc "100*($GAIN)/$TOTAL_BEFORE"`

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/pkg-perl-tools.git



More information about the Pkg-perl-cvs-commits mailing list