Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(173)

Unified Diff: crup-runner.sh

Issue 11709003: Another round of refactoring and optimizing. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools/
Patch Set: Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | git-crup » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: crup-runner.sh
===================================================================
--- crup-runner.sh (revision 174746)
+++ crup-runner.sh (working copy)
@@ -1,5 +1,60 @@
#!/bin/bash
+set_target_os () {
+ # Get the os we're building for. On first run, this will be unset.
+ target_os=$(git config target.os 2>/dev/null)
+ if [ -z "$target_os" ]; then
+ case $(uname -s) in
+ Linux) target_os=unix ;;
+ Darwin) target_os=mac ;;
+ CYGWIN*|MINGW*) target_os=win ;;
+ *)
+ echo "[$solution] *** No target.os set in .git/config, and I can't" 1>&2
+ echo "[$solution] *** figure it out from 'uname -s'" 1>&2
+ exit 1
+ ;;
+ esac
+ git config target.os "$target_os"
+ fi
+}
+
+update_submodule_url () {
+ # If the submodule's URL in .gitmodules has changed, propagate the new
+ # new URL down. This is the same as `git submodule sync`, but we do it
+ # this way because `git submodule sync` is absurdly slow.
+ new_url=$(git config -f .gitmodules "submodule.$1.url" 2>/dev/null)
+ old_url=$(git config "submodule.$1.url" 2>/dev/null)
+ if [ -n "$old_url" -a "$new_url" != "$old_url" ]; then
+ git config "submodule.$1.url" "$new_url"
+ if [ -e "$1"/.git ]; then
+ ( cd $submod && git config remote.origin.url "$new_url" )
+ fi
+ fi
+}
+
+process_submodule () {
+ # Check whether this submodule should be ignored or updated.
+ # If it's a new submodule, match the os specified in .gitmodules against
+ # the os specified in .git/config.
+ update_policy=$(git config --get "submodule.$1.update")
+ if [ -z "$update_policy" ]; then
+ submod_os=$(git config -f .gitmodules --get "submodule.$1.os")
+ if [ -n "$submod_os" -a \
+ "$submod_os" != "all" -a \
+ "${submod_os/${target_os}/}" = "${submod_os}" ]; then
+ update_policy=none
+ else
+ git submodule --quiet init "$1"
+ update_policy=checkout
+ fi
+ git config "submodule.$1.update" $update_policy
+ fi
+ if [ "$update_policy" != "none" ]; then
+ update_submodule_url "$1"
+ echo "$solution/$1"
+ fi
+}
+
if [ -z "$*" ]; then
exit 0
fi
@@ -7,9 +62,10 @@
dir="$1"
solution="${1%%/*}"
cd "$solution"
+
if [ "$solution" = "$1" ]; then
+ # Don't "pull" if checkout is not on a named branch
shift
- # Don't "pull" if checkout is not on a named branch
if test "$2" = "pull" && ( ! git symbolic-ref HEAD >/dev/null 2>/dev/null ); then
first_args="$1 fetch"
else
@@ -20,33 +76,18 @@
if [ $? -ne 0 ]; then
exit $?
fi
- "$GIT_EXE" submodule --quiet sync
+
+ set_target_os
+
"$GIT_EXE" ls-files -s | grep ^160000 | awk '{print $4}' |
while read submod; do
- # Check whether this submodule should be ignored or updated.
- # If it's a new submodule, match the os specified in .gitmodules against
- # the os specified in .git/config.
- update_policy=$(git config "submodule.$submod.update" 2>/dev/null)
- if [ -z "$update_policy" ]; then
- target_os=$(git config target.os 2>/dev/null)
- submod_os=$(git config -f .gitmodules "submodule.$submod.os" 2>/dev/null)
- if [ -n "$target_os" -a -n "$submod_os" ] &&
- [ "$submod_os" != "all" -a "$submod_os" != "$target_os" ]; then
- update_policy=none
- else
- update_policy=checkout
- fi
- git config "submodule.$submod.update" $update_policy 2>/dev/null
- fi
- if [ "$update_policy" != "none" ]; then
- echo "$solution/$submod"
- fi
+ process_submodule "$submod"
done
status=$?
else
submodule="${1#*/}"
- echo "[$solution] updating $submodule ..."
- "$GIT_EXE" submodule update --quiet --init "$submodule" |
+ echo "[$solution] updating $submodule"
+ "$GIT_EXE" submodule update --quiet "$submodule" |
( grep -v '^Skipping submodule' || true ) | sed "s|^|[$1] |g"
status=$?
if [ "$status" -ne "0" ]; then
« no previous file with comments | « no previous file | git-crup » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698