pathspec: drop "lone : means no pathspec" from get_pathspec()
[gitweb.git] / git-submodule.sh
index 9e752904b3d492ef899f172291160c88bf2fa51b..3a13397e057edf88d2c810490ec3d7d755be2009 100755 (executable)
@@ -372,41 +372,35 @@ cmd_init()
 cmd_update()
 {
        # parse $args after "submodule ... update".
-       orig_args="$@"
+       orig_flags=
        while test $# -ne 0
        do
                case "$1" in
                -q|--quiet)
-                       shift
                        GIT_QUIET=1
                        ;;
                -i|--init)
                        init=1
-                       shift
                        ;;
                -N|--no-fetch)
-                       shift
                        nofetch=1
                        ;;
                -r|--rebase)
-                       shift
                        update="rebase"
                        ;;
                --reference)
                        case "$2" in '') usage ;; esac
                        reference="--reference=$2"
-                       shift 2
+                       orig_flags="$orig_flags $(git rev-parse --sq-quote "$1")"
+                       shift
                        ;;
                --reference=*)
                        reference="$1"
-                       shift
                        ;;
                -m|--merge)
-                       shift
                        update="merge"
                        ;;
                --recursive)
-                       shift
                        recursive=1
                        ;;
                --)
@@ -420,6 +414,8 @@ cmd_update()
                        break
                        ;;
                esac
+               orig_flags="$orig_flags $(git rev-parse --sq-quote "$1")"
+               shift
        done
 
        if test -n "$init"
@@ -427,6 +423,7 @@ cmd_update()
                cmd_init "--" "$@" || return
        fi
 
+       cloned_modules=
        module_list "$@" |
        while read mode sha1 stage path
        do
@@ -446,6 +443,7 @@ cmd_update()
                if ! test -d "$path"/.git -o -f "$path"/.git
                then
                        module_clone "$path" "$url" "$reference"|| exit
+                       cloned_modules="$cloned_modules;$name"
                        subsha1=
                else
                        subsha1=$(clear_local_git_env; cd "$path" &&
@@ -473,6 +471,13 @@ cmd_update()
                                die "Unable to fetch in submodule path '$path'"
                        fi
 
+                       # Is this something we just cloned?
+                       case ";$cloned_modules;" in
+                       *";$name;"*)
+                               # then there is no local change to integrate
+                               update_module= ;;
+                       esac
+
                        case "$update_module" in
                        rebase)
                                command="git rebase"
@@ -498,7 +503,7 @@ cmd_update()
 
                if test -n "$recursive"
                then
-                       (clear_local_git_env; cd "$path" && cmd_update $orig_args) ||
+                       (clear_local_git_env; cd "$path" && eval cmd_update "$orig_flags") ||
                        die "Failed to recurse into submodule path '$path'"
                fi
        done
@@ -731,7 +736,7 @@ cmd_summary() {
 cmd_status()
 {
        # parse $args after "submodule ... status".
-       orig_args="$@"
+       orig_flags=
        while test $# -ne 0
        do
                case "$1" in
@@ -755,6 +760,7 @@ cmd_status()
                        break
                        ;;
                esac
+               orig_flags="$orig_flags $(git rev-parse --sq-quote "$1")"
                shift
        done
 
@@ -788,7 +794,7 @@ cmd_status()
                                prefix="$displaypath/"
                                clear_local_git_env
                                cd "$path" &&
-                               cmd_status $orig_args
+                               eval cmd_status "$orig_args"
                        ) ||
                        die "Failed to recurse into submodule path '$path'"
                fi