diff --git a/git-crup b/git-crup index 6222fc9e1..f57d3a7b5 100755 --- a/git-crup +++ b/git-crup @@ -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=pull 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 <&2 Usage: git-crup [-n|--dry-run] [--fetch] [-j|--jobs [jobs]] @@ -25,30 +31,32 @@ parallel_update() { 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 @@ if test "$PWD" = "/"; then 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`