Merge branch 'ml/submodule-add-existing'
* ml/submodule-add-existing: git-submodule - Allow adding a submodule in-place
This commit is contained in:
commit
0ae496ccd8
@ -18,8 +18,9 @@ COMMANDS
|
|||||||
--------
|
--------
|
||||||
add::
|
add::
|
||||||
Add the given repository as a submodule at the given path
|
Add the given repository as a submodule at the given path
|
||||||
to the changeset to be committed next. In particular, the
|
to the changeset to be committed next. If path is a valid
|
||||||
repository is cloned at the specified path, added to the
|
repository within the project, it is added as is. Otherwise,
|
||||||
|
repository is cloned at the specified path. path is added to the
|
||||||
changeset and registered in .gitmodules. If no path is
|
changeset and registered in .gitmodules. If no path is
|
||||||
specified, the path is deduced from the repository specification.
|
specified, the path is deduced from the repository specification.
|
||||||
If the repository url begins with ./ or ../, it is stored as
|
If the repository url begins with ./ or ../, it is stored as
|
||||||
|
@ -153,6 +153,27 @@ cmd_add()
|
|||||||
usage
|
usage
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Guess path from repo if not specified or strip trailing slashes
|
||||||
|
if test -z "$path"; then
|
||||||
|
path=$(echo "$repo" | sed -e 's|/*$||' -e 's|:*/*\.git$||' -e 's|.*[/:]||g')
|
||||||
|
else
|
||||||
|
path=$(echo "$path" | sed -e 's|/*$||')
|
||||||
|
fi
|
||||||
|
|
||||||
|
git ls-files --error-unmatch "$path" > /dev/null 2>&1 &&
|
||||||
|
die "'$path' already exists in the index"
|
||||||
|
|
||||||
|
# perhaps the path exists and is already a git repo, else clone it
|
||||||
|
if test -e "$path"
|
||||||
|
then
|
||||||
|
if test -d "$path/.git" &&
|
||||||
|
test "$(unset GIT_DIR; cd $path; git rev-parse --git-dir)" = ".git"
|
||||||
|
then
|
||||||
|
echo "Adding existing repo at '$path' to the index"
|
||||||
|
else
|
||||||
|
die "'$path' already exists and is not a valid git repo"
|
||||||
|
fi
|
||||||
|
else
|
||||||
case "$repo" in
|
case "$repo" in
|
||||||
./*|../*)
|
./*|../*)
|
||||||
# dereference source url relative to parent's url
|
# dereference source url relative to parent's url
|
||||||
@ -167,22 +188,11 @@ cmd_add()
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Guess path from repo if not specified or strip trailing slashes
|
|
||||||
if test -z "$path"; then
|
|
||||||
path=$(echo "$repo" | sed -e 's|/*$||' -e 's|:*/*\.git$||' -e 's|.*[/:]||g')
|
|
||||||
else
|
|
||||||
path=$(echo "$path" | sed -e 's|/*$||')
|
|
||||||
fi
|
|
||||||
|
|
||||||
test -e "$path" &&
|
|
||||||
die "'$path' already exists"
|
|
||||||
|
|
||||||
git ls-files --error-unmatch "$path" > /dev/null 2>&1 &&
|
|
||||||
die "'$path' already exists in the index"
|
|
||||||
|
|
||||||
module_clone "$path" "$realrepo" || exit
|
module_clone "$path" "$realrepo" || exit
|
||||||
(unset GIT_DIR; cd "$path" && git checkout -q ${branch:+-b "$branch" "origin/$branch"}) ||
|
(unset GIT_DIR; cd "$path" && git checkout -q ${branch:+-b "$branch" "origin/$branch"}) ||
|
||||||
die "Unable to checkout submodule '$path'"
|
die "Unable to checkout submodule '$path'"
|
||||||
|
fi
|
||||||
|
|
||||||
git add "$path" ||
|
git add "$path" ||
|
||||||
die "Failed to add submodule '$path'"
|
die "Failed to add submodule '$path'"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user