| OLD | NEW |
| 1 #!/bin/bash | 1 #!/bin/bash |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 # A convenience script to largely replicate the behavior of `gclient sync` in a | 6 # A convenience script to largely replicate the behavior of `gclient sync` in a |
| 7 # submodule-based checkout. Fetches latest commits for top-level solutions; | 7 # submodule-based checkout. Fetches latest commits for top-level solutions; |
| 8 # updates submodules; and runs post-sync hooks. | 8 # updates submodules; and runs post-sync hooks. |
| 9 | 9 |
| 10 j=10 | 10 export GIT_MERGE_AUTOEDIT=0 |
| 11 |
| 11 ECHO= | 12 ECHO= |
| 12 pull=pull | 13 pull=pull |
| 13 pull_args= | 14 pull_args= |
| 14 hooks=yes | 15 hooks=yes |
| 16 j=10 |
| 17 crup_runner="crup-runner.sh" |
| 18 |
| 19 kernel_name=$(uname -s) |
| 20 if [ "${kernel_name:0:5}" = "MINGW" -o "${kernel_name:0:6}" = "CYGWIN" ]; then |
| 21 GIT_EXE=git.exe |
| 22 else |
| 23 GIT_EXE=git |
| 24 fi |
| 25 export GIT_EXE |
| 15 | 26 |
| 16 if ( echo test | xargs --max-lines=1 true 2>/dev/null ); then | 27 if ( echo test | xargs --max-lines=1 true 2>/dev/null ); then |
| 17 max_lines="--max-lines=1" | 28 max_lines="--max-lines=1" |
| 18 else | 29 else |
| 19 max_lines="-L 1" | 30 max_lines="-L 1" |
| 20 fi | 31 fi |
| 21 | 32 |
| 33 if ( echo test | xargs -I bar true 2>/dev/null ); then |
| 34 replace_arg="-I replace_arg" |
| 35 else |
| 36 replace_arg="-ireplace_arg" |
| 37 fi |
| 38 |
| 22 usage() { | 39 usage() { |
| 23 cat <<EOF 1>&2 | 40 cat <<EOF |
| 24 Usage: git-crup [-n|--dry-run] [--fetch] [-j|--jobs [jobs]] | 41 Usage: git-crup [-n|--dry-run] [--fetch] [-j|--jobs [jobs]] |
| 25 [--no-hooks] [<args to git-pull or git-fetch>] | 42 [--no-hooks] [<args to git-pull or git-fetch>] |
| 26 EOF | 43 EOF |
| 27 } | 44 } |
| 28 | 45 |
| 29 parallel_update() { | 46 serial_update() { |
| 30 ( echo Entering "$1" | 47 ( cd "$1" |
| 31 cd "$1" | 48 $GIT_EXE $pull $pull_args -q origin | sed "s/^/[$1] /g" |
| 32 $ECHO git $pull $pull_args origin | 49 if [ $? -ne 0 ]; then |
| 33 $ECHO git submodule sync | 50 return $? |
| 34 if test "$xargs_parallel" = "yes"; then | 51 fi |
| 35 git ls-files -s | grep ^160000 | awk '{print $4}' | | 52 $GIT_EXE submodule --quiet sync |
| 36 xargs $max_lines -P "$j" $ECHO git submodule update --init | 53 $GIT_EXE ls-files -s | grep ^160000 | awk '{print $4}' | |
| 37 else | 54 while read submod; do |
| 38 $ECHO git submodule update --init | 55 $GIT_EXE submodule update --init "$submod" | sed "s|^|[$1/$submod] |g" |
| 39 fi ) | 56 done |
| 57 ) |
| 40 } | 58 } |
| 41 | 59 |
| 42 while test $# -ne 0; do | 60 while test $# -ne 0; do |
| 43 case "$1" in | 61 case "$1" in |
| 44 -j[0-9]*) | 62 -j[0-9]*) |
| 45 j=$(echo "$1" | cut -c3-) | 63 j=$(echo "$1" | cut -c3-) |
| 46 ;; | 64 ;; |
| 47 --jobs=[0-9]*) | 65 --jobs=[0-9]*) |
| 48 j=$(echo "$1" | cut -c8-) | 66 j=$(echo "$1" | cut -c8-) |
| 49 ;; | 67 ;; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 61 -n|--dry-run) | 79 -n|--dry-run) |
| 62 ECHO=echo | 80 ECHO=echo |
| 63 ;; | 81 ;; |
| 64 -h|--help) | 82 -h|--help) |
| 65 usage | 83 usage |
| 66 exit 0 | 84 exit 0 |
| 67 ;; | 85 ;; |
| 68 --fetch) | 86 --fetch) |
| 69 pull=fetch | 87 pull=fetch |
| 70 ;; | 88 ;; |
| 71 --no-hooks) | 89 --no-hooks|--nohooks) |
| 72 hooks=no | 90 hooks=no |
| 73 ;; | 91 ;; |
| 74 *) | 92 *) |
| 75 pull_args="$pull_args $1" | 93 pull_args="$pull_args $1" |
| 76 break | 94 break |
| 77 ;; | 95 ;; |
| 78 esac | 96 esac |
| 79 shift | 97 shift |
| 80 done | 98 done |
| 81 | 99 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 92 | 110 |
| 93 if ( echo test test | xargs -P 2 true 2>/dev/null ); then | 111 if ( echo test test | xargs -P 2 true 2>/dev/null ); then |
| 94 xargs_parallel=yes | 112 xargs_parallel=yes |
| 95 else | 113 else |
| 96 if test "$j" != "1"; then | 114 if test "$j" != "1"; then |
| 97 echo "Warning: parallel execution is not supported on this platform." 1>&2 | 115 echo "Warning: parallel execution is not supported on this platform." 1>&2 |
| 98 fi | 116 fi |
| 99 xargs_parallel=no | 117 xargs_parallel=no |
| 100 fi | 118 fi |
| 101 | 119 |
| 102 ls -d */.git | | 120 set -o pipefail |
| 103 while read gitdir; do | |
| 104 parallel_update `dirname $gitdir` | |
| 105 done | |
| 106 | 121 |
| 107 gclient_spec="solutions=[{'name':'src','url':None,'deps_file':'.DEPS.git'}]" | 122 if test "$xargs_parallel" = "yes"; then |
| 108 test "$hooks" = "yes" && gclient runhooks --spec="$gclient_spec" | 123 ( ls -d */.git | sed 's/\/\.git$//' | |
| 124 xargs $max_lines $replace_arg -P "$j" \ |
| 125 "$crup_runner" replace_arg $GIT_EXE $pull $pull_args -q origin | |
| 126 xargs $max_lines -P "$j" "$crup_runner" ) |
| 127 else |
| 128 ls -d */.git | |
| 129 while read gitdir; do |
| 130 serial_update "${gitdir%%/.git}" |
| 131 done |
| 132 fi |
| 133 |
| 134 status=$? |
| 135 |
| 136 if [ "$hooks" = "yes" -a "$status" -eq 0 ]; then |
| 137 gclient_spec="solutions=[{'name':'src','url':None,'deps_file':'.DEPS.git'}]" |
| 138 gclient runhooks --spec="$gclient_spec" |
| 139 status=$? |
| 140 fi |
| 141 |
| 142 echo |
| 143 exit $status |
| OLD | NEW |