Sync does some work determining what URLs should be used for a submodule
but then throws this work away if the submodule isn't active.  Instead
perform the activity check earlier and skip inactive submodule in order
to avoid doing unnecessary work.

Signed-off-by: Brandon Williams <bmw...@google.com>
---
 git-submodule.sh | 38 +++++++++++++++++++++-----------------
 1 file changed, 21 insertions(+), 17 deletions(-)

diff --git a/git-submodule.sh b/git-submodule.sh
index ab233712d..577136148 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -1090,6 +1090,13 @@ cmd_sync()
        do
                die_if_unmatched "$mode" "$sha1"
                name=$(git submodule--helper name "$sm_path")
+
+               # skip inactive submodules
+               if ! git config "submodule.$name.url" >/dev/null 2>/dev/null
+               then
+                       continue
+               fi
+
                url=$(git config -f .gitmodules --get submodule."$name".url)
 
                # Possibly a url relative to parent
@@ -1111,27 +1118,24 @@ cmd_sync()
                        ;;
                esac
 
-               if git config "submodule.$name.url" >/dev/null 2>/dev/null
+               displaypath=$(git submodule--helper relative-path 
"$prefix$sm_path" "$wt_prefix")
+               say "$(eval_gettext "Synchronizing submodule url for 
'\$displaypath'")"
+               git config submodule."$name".url "$super_config_url"
+
+               if test -e "$sm_path"/.git
                then
-                       displaypath=$(git submodule--helper relative-path 
"$prefix$sm_path" "$wt_prefix")
-                       say "$(eval_gettext "Synchronizing submodule url for 
'\$displaypath'")"
-                       git config submodule."$name".url "$super_config_url"
+               (
+                       sanitize_submodule_env
+                       cd "$sm_path"
+                       remote=$(get_default_remote)
+                       git config remote."$remote".url "$sub_origin_url"
 
-                       if test -e "$sm_path"/.git
+                       if test -n "$recursive"
                        then
-                       (
-                               sanitize_submodule_env
-                               cd "$sm_path"
-                               remote=$(get_default_remote)
-                               git config remote."$remote".url 
"$sub_origin_url"
-
-                               if test -n "$recursive"
-                               then
-                                       prefix="$prefix$sm_path/"
-                                       eval cmd_sync
-                               fi
-                       )
+                               prefix="$prefix$sm_path/"
+                               eval cmd_sync
                        fi
+               )
                fi
        done
 }
-- 
2.12.0.367.g23dc2f6d3c-goog

Reply via email to