| 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#*/}"
 | 
| 
 |