Merge branch 'ml/submodule-add-existing'

* ml/submodule-add-existing:
  git-submodule - Allow adding a submodule in-place
This commit is contained in:
Junio C Hamano 2008-03-08 21:29:52 -08:00
commit 0ae496ccd8
2 changed files with 33 additions and 22 deletions

View File

@ -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

View File

@ -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'"