| Index: crup-runner.sh | 
| =================================================================== | 
| --- crup-runner.sh	(revision 174277) | 
| +++ crup-runner.sh	(working copy) | 
| @@ -9,13 +9,39 @@ | 
| cd "$solution" | 
| if [ "$solution" = "$1" ]; then | 
| shift | 
| -  $@ | sed "s/^/[$solution] /g" 1>&2 | 
| +  # 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 | 
| +    first_args="$1 $2" | 
| +  fi | 
| +  shift 2 | 
| +  $first_args $@ | sed "s/^/[$solution] /g" 1>&2 | 
| if [ $? -ne 0 ]; then | 
| exit $? | 
| fi | 
| "$GIT_EXE" submodule --quiet sync | 
| "$GIT_EXE" ls-files -s | grep ^160000 | awk '{print $4}' | | 
| -  sed "s/^/$solution\//g" | 
| +  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 | 
| +  done | 
| status=$? | 
| else | 
| submodule="${1#*/}" | 
|  |