Index: git-crup |
=================================================================== |
--- git-crup (revision 149648) |
+++ git-crup (working copy) |
@@ -1,4 +1,4 @@ |
-#!/bin/sh |
+#!/bin/bash |
# Copyright (c) 2012 The Chromium Authors. All rights reserved. |
# Use of this source code is governed by a BSD-style license that can be |
# found in the LICENSE file. |
@@ -13,6 +13,12 @@ |
pull_args= |
hooks=yes |
+if ( echo test | xargs --max-lines=1 true 2>/dev/null ); then |
+ max_lines="--max-lines=1" |
+else |
+ max_lines="-L 1" |
+fi |
+ |
usage() { |
cat <<EOF 1>&2 |
Usage: git-crup [-n|--dry-run] [--fetch] [-j|--jobs [jobs]] |
@@ -25,30 +31,32 @@ |
cd "$1" |
$ECHO git $pull $pull_args origin |
$ECHO git submodule sync |
- if ( echo test | xargs --max-lines=1 true 2>/dev/null ); then |
- max_lines="--max-lines=1" |
- else |
- max_lines="-L 1" |
- fi |
- if ( echo test | xargs -P "$j" true 2>/dev/null ) |
- then |
+ if test "$xargs_parallel" = "yes"; then |
git ls-files -s | grep ^160000 | awk '{print $4}' | |
xargs $max_lines -P "$j" $ECHO git submodule update --init |
else |
- echo "Warn: parallel execution is not supported on this platform." |
$ECHO git submodule update --init |
fi ) |
} |
while test $# -ne 0; do |
case "$1" in |
+ -j[0-9]*) |
+ j=$(echo "$1" | cut -c3-) |
+ ;; |
+ --jobs=[0-9]*) |
+ j=$(echo "$1" | cut -c8-) |
+ ;; |
-j|--jobs) |
- if test -n "$2"; then |
- j="$2" |
- shift |
- else |
- j=0 |
- fi |
+ case "$2" in |
+ ''|-*) |
+ j=0 |
+ ;; |
+ *) |
+ j="$2" |
+ shift |
+ ;; |
+ esac |
;; |
-n|--dry-run) |
ECHO=echo |
@@ -82,6 +90,15 @@ |
exit 1 |
fi |
+if ( echo test test | xargs -P 2 true 2>/dev/null ); then |
+ xargs_parallel=yes |
+else |
+ if test "$j" != "1"; then |
+ echo "Warning: parallel execution is not supported on this platform." 1>&2 |
+ fi |
+ xargs_parallel=no |
+fi |
+ |
ls -d */.git | |
while read gitdir; do |
parallel_update `dirname $gitdir` |