Skip to content

Commit

Permalink
Merge branch 'jc/submodule-sync-no-auto-vivify'
Browse files Browse the repository at this point in the history
* jc/submodule-sync-no-auto-vivify:
  submodule add: always initialize .git/config entry
  submodule sync: do not auto-vivify uninteresting submodule

Conflicts:
	git-submodule.sh
  • Loading branch information
Junio C Hamano committed Jul 19, 2011
2 parents 765c7e4 + 2cd9de3 commit 0591c0a
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 30 deletions.
4 changes: 3 additions & 1 deletion Documentation/git-submodule.txt
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,9 @@ commit for each submodule.

sync::
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
repositories accordingly.
+
Expand Down
58 changes: 31 additions & 27 deletions git-submodule.sh
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,6 @@ Use -f if you really want to add it." &&
url="$repo"
;;
esac
git config submodule."$path".url "$url"
else

module_clone "$path" "$realrepo" "$reference" || exit
Expand All @@ -264,6 +263,7 @@ Use -f if you really want to add it." &&
esac
) || die "$(eval_gettext "Unable to checkout submodule '\$path'")"
fi
git config submodule."$path".url "$url"

git add $force "$path" ||
die "$(eval_gettext "Failed to add submodule '\$path'")"
Expand Down Expand Up @@ -363,25 +363,26 @@ cmd_init()
do
# Skip already registered paths
name=$(module_name "$path") || exit
url=$(git config submodule."$name".url)
test -z "$url" || continue

url=$(git config -f .gitmodules submodule."$name".url)
test -z "$url" &&
die "$(eval_gettext "No url found for submodule path '\$path' in .gitmodules")"

# Possibly a url relative to parent
case "$url" in
./*|../*)
url=$(resolve_relative_url "$url") || exit
;;
esac

git config submodule."$name".url "$url" ||
die "$(eval_gettext "Failed to register url for submodule path '\$path'")"
if test -z "$(git config "submodule.$name.url")"
then
url=$(git config -f .gitmodules submodule."$name".url)
test -z "$url" &&
die "$(eval_gettext "No url found for submodule path '\$path' in .gitmodules")"

# Possibly a url relative to parent
case "$url" in
./*|../*)
url=$(resolve_relative_url "$url") || exit
;;
esac
git config submodule."$name".url "$url" ||
die "$(eval_gettext "Failed to register url for submodule path '\$path'")"
fi

# Copy "update" setting when it is not set yet
upd="$(git config -f .gitmodules submodule."$name".update)"
test -z "$upd" ||
test -n "$(git config submodule."$name".update)" ||
git config submodule."$name".update "$upd" ||
die "$(eval_gettext "Failed to register update mode for submodule path '\$path'")"

Expand Down Expand Up @@ -925,17 +926,20 @@ cmd_sync()
;;
esac

say "$(eval_gettext "Synchronizing submodule url for '\$name'")"
git config submodule."$name".url "$url"

if test -e "$path"/.git
if git config "submodule.$name.url" >/dev/null 2>/dev/null
then
(
clear_local_git_env
cd "$path"
remote=$(get_default_remote)
git config remote."$remote".url "$url"
)
say "$(eval_gettext "Synchronizing submodule url for '\$name'")"
git config submodule."$name".url "$url"

if test -e "$path"/.git
then
(
clear_local_git_env
cd "$path"
remote=$(get_default_remote)
git config remote."$remote".url "$url"
)
fi
fi
done
}
Expand Down
15 changes: 13 additions & 2 deletions t/t7403-submodule-sync.sh
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ test_expect_success setup '
git clone super super-clone &&
(cd super-clone && git submodule update --init) &&
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' '
Expand Down Expand Up @@ -66,12 +67,22 @@ 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 &&
git pull &&
git submodule sync &&
test -d "$(git config submodule.submodule.url)"
)
'

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

0 comments on commit 0591c0a

Please sign in to comment.