Merge branch 'jc/submodule-sync-no-auto-vivify' into maint

* jc/submodule-sync-no-auto-vivify:
  submodule add: always initialize .git/config entry
  submodule sync: do not auto-vivify uninteresting submodule
This commit is contained in:
Junio C Hamano 2011-08-16 11:41:26 -07:00
commit 4a5a8008fd
3 changed files with 46 additions and 29 deletions

View File

@ -167,7 +167,9 @@ commit for each submodule.
sync:: sync::
Synchronizes submodules' remote URL configuration setting Synchronizes submodules' remote URL configuration setting
to the value specified in .gitmodules. This is useful when to the value specified in .gitmodules. It will only affect those
submodules which already have an url entry in .git/config (that is the
case when they are initialized or freshly added). This is useful when
submodule URLs change upstream and you need to update your local submodule URLs change upstream and you need to update your local
repositories accordingly. repositories accordingly.
+ +

View File

@ -246,7 +246,6 @@ cmd_add()
url="$repo" url="$repo"
;; ;;
esac esac
git config submodule."$path".url "$url"
else else
module_clone "$path" "$realrepo" "$reference" || exit module_clone "$path" "$realrepo" "$reference" || exit
@ -260,6 +259,7 @@ cmd_add()
esac esac
) || die "Unable to checkout submodule '$path'" ) || die "Unable to checkout submodule '$path'"
fi fi
git config submodule."$path".url "$url"
git add $force "$path" || git add $force "$path" ||
die "Failed to add submodule '$path'" die "Failed to add submodule '$path'"
@ -359,25 +359,26 @@ cmd_init()
do do
# Skip already registered paths # Skip already registered paths
name=$(module_name "$path") || exit name=$(module_name "$path") || exit
url=$(git config submodule."$name".url) if test -z "$(git config "submodule.$name.url")"
test -z "$url" || continue then
url=$(git config -f .gitmodules submodule."$name".url)
test -z "$url" &&
die "No url found for submodule path '$path' in .gitmodules"
url=$(git config -f .gitmodules submodule."$name".url) # Possibly a url relative to parent
test -z "$url" && case "$url" in
die "No url found for submodule path '$path' in .gitmodules" ./*|../*)
url=$(resolve_relative_url "$url") || exit
# Possibly a url relative to parent ;;
case "$url" in esac
./*|../*) git config submodule."$name".url "$url" ||
url=$(resolve_relative_url "$url") || exit die "Failed to register url for submodule path '$path'"
;; fi
esac
git config submodule."$name".url "$url" ||
die "Failed to register url for submodule path '$path'"
# Copy "update" setting when it is not set yet
upd="$(git config -f .gitmodules submodule."$name".update)" upd="$(git config -f .gitmodules submodule."$name".update)"
test -z "$upd" || test -z "$upd" ||
test -n "$(git config submodule."$name".update)" ||
git config submodule."$name".update "$upd" || git config submodule."$name".update "$upd" ||
die "Failed to register update mode for submodule path '$path'" die "Failed to register update mode for submodule path '$path'"
@ -878,17 +879,20 @@ cmd_sync()
;; ;;
esac esac
say "Synchronizing submodule url for '$name'" if git config "submodule.$name.url" >/dev/null 2>/dev/null
git config submodule."$name".url "$url"
if test -e "$path"/.git
then then
( say "Synchronizing submodule url for '$name'"
clear_local_git_env git config submodule."$name".url "$url"
cd "$path"
remote=$(get_default_remote) if test -e "$path"/.git
git config remote."$remote".url "$url" then
) (
clear_local_git_env
cd "$path"
remote=$(get_default_remote)
git config remote."$remote".url "$url"
)
fi
fi fi
done done
} }

View File

@ -25,7 +25,8 @@ test_expect_success setup '
git clone super super-clone && git clone super super-clone &&
(cd super-clone && git submodule update --init) && (cd super-clone && git submodule update --init) &&
git clone super empty-clone && git clone super empty-clone &&
(cd empty-clone && git submodule init) (cd empty-clone && git submodule init) &&
git clone super top-only-clone
' '
test_expect_success 'change submodule' ' test_expect_success 'change submodule' '
@ -66,7 +67,7 @@ test_expect_success '"git submodule sync" should update submodule URLs' '
) )
' '
test_expect_success '"git submodule sync" should update submodule URLs if not yet cloned' ' test_expect_success '"git submodule sync" should update known submodule URLs' '
(cd empty-clone && (cd empty-clone &&
git pull && git pull &&
git submodule sync && git submodule sync &&
@ -74,4 +75,14 @@ test_expect_success '"git submodule sync" should update submodule URLs if not ye
) )
' '
test_expect_success '"git submodule sync" should not vivify uninteresting submodule' '
(cd top-only-clone &&
git pull &&
git submodule sync &&
test -z "$(git config submodule.submodule.url)" &&
git submodule sync submodule &&
test -z "$(git config submodule.submodule.url)"
)
'
test_done test_done