Skip to content

Commit

Permalink
Merge branch 'ml/submodule-add-existing'
Browse files Browse the repository at this point in the history
* ml/submodule-add-existing:
  git-submodule - Allow adding a submodule in-place
  • Loading branch information
Junio C Hamano committed Mar 9, 2008
2 parents 6e79a88 + d4264ca commit 0ae496c
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 22 deletions.
5 changes: 3 additions & 2 deletions Documentation/git-submodule.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,9 @@ COMMANDS
--------
add::
Add the given repository as a submodule at the given path
to the changeset to be committed next. In particular, the
repository is cloned at the specified path, added to the
to the changeset to be committed next. If path is a valid
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
specified, the path is deduced from the repository specification.
If the repository url begins with ./ or ../, it is stored as
Expand Down
50 changes: 30 additions & 20 deletions git-submodule.sh
Original file line number Diff line number Diff line change
Expand Up @@ -153,36 +153,46 @@ cmd_add()
usage
fi

case "$repo" in
./*|../*)
# dereference source url relative to parent's url
realrepo="$(resolve_relative_url $repo)" ;;
*)
# Turn the source into an absolute path if
# it is local
if base=$(get_repo_base "$repo"); then
repo="$base"
fi
realrepo=$repo
;;
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
(unset GIT_DIR; cd "$path" && git checkout -q ${branch:+-b "$branch" "origin/$branch"}) ||
die "Unable to checkout submodule '$path'"
# 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
./*|../*)
# dereference source url relative to parent's url
realrepo="$(resolve_relative_url $repo)" ;;
*)
# Turn the source into an absolute path if
# it is local
if base=$(get_repo_base "$repo"); then
repo="$base"
fi
realrepo=$repo
;;
esac

module_clone "$path" "$realrepo" || exit
(unset GIT_DIR; cd "$path" && git checkout -q ${branch:+-b "$branch" "origin/$branch"}) ||
die "Unable to checkout submodule '$path'"
fi

git add "$path" ||
die "Failed to add submodule '$path'"

Expand Down

0 comments on commit 0ae496c

Please sign in to comment.