git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Ping Yin" <pkufranky@gmail.com>
To: "Mark Levedahl" <mlevedahl@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 2/3] git-submodule - Allow adding a submodule in-place
Date: Mon, 3 Mar 2008 21:14:17 +0800	[thread overview]
Message-ID: <46dff0320803030514y3b7b1860h18094f99619ff671@mail.gmail.com> (raw)
In-Reply-To: <1202576245-284-2-git-send-email-mlevedahl@gmail.com>

On Sun, Feb 10, 2008 at 12:57 AM, Mark Levedahl <mlevedahl@gmail.com> wrote:
> When working in top-level project, it is useful to create a new submodule
>  as a git repo in a subdirectory, then add that submodule to top-level in
>  place.  This allows "git submodule add <intended url> subdir" to add the
>  existing subdir to the current project.  The presumption is the user will
>  later push / clone the subdir to the <intended url> so that future
>  submodule init / updates will work.
>
>  Absent this patch, "git submodule add" insists upon cloning the subdir
>  from a repository at the given url, which is fine for adding an existing
>  project in but less useful when adding a new submodule from scratch to an
>  existing project.  The former functionality remains, and the clone is
>  attempted if the subdir does not already exist as a valid git repo.
>
>  Signed-off-by: Mark Levedahl <mlevedahl@gmail.com>
>  ---
>   Documentation/git-submodule.txt |    5 ++-
>   git-submodule.sh                |   57 +++++++++++++++++++++++---------------
>   2 files changed, 37 insertions(+), 25 deletions(-)
>
>  diff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt
>  index 4fc17f6..85d7dd3 100644
>  --- a/Documentation/git-submodule.txt
>  +++ b/Documentation/git-submodule.txt
>  @@ -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
>  diff --git a/git-submodule.sh b/git-submodule.sh
>  index b97bf18..4c86a3c 100755
>  --- a/git-submodule.sh
>  +++ b/git-submodule.sh
>  @@ -166,23 +166,6 @@ cmd_add()
>                 usage
>         fi
>
>  -       case "$repo" in
>  -       ./*|../*)
>  -               # dereference source url relative to parent's url
>  -               realremote=${remote:-$(get_default_remote)}
>  -               realrepo=$(resolve_relative_url $repo) || exit 1
>  -               ;;
>  -       *)
>  -               # Turn the source into an absolute path if
>  -               # it is local
>  -               if base=$(get_repo_base "$repo"); then
>  -                       repo="$base"
>  -               fi
>  -               realremote=origin
>  -               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')
>  @@ -190,15 +173,43 @@ cmd_add()
>                 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" "$realremote" || exit
>  -       (unset GIT_DIR; cd "$path" && git checkout -q ${branch:+-b "$branch" "$realremote/$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
>  +                       realremote=${remote:-$(get_default_remote)}
>  +                       realrepo=$(resolve_relative_url $repo) || exit 1
>  +                       ;;
>  +               *)
>  +                       # Turn the source into an absolute path if
>  +                       # it is local
>  +                       if base=$(get_repo_base "$repo")
>  +                       then
>  +                               repo="$base"
>  +                       fi
>  +                       realremote=origin
>  +                       realrepo=$repo
>  +                       ;;
>  +               esac
>  +
>  +               module_clone "$path" "$realrepo" "$realremote" || exit
>  +               (unset GIT_DIR; cd "$path" && git checkout -q ${branch:+-b "$branch" "$realremote/$branch"}) ||
>  +               die "Unable to checkout submodule '$path'"
>  +       fi
>  +
>         git add "$path" ||
>         die "Failed to add submodule '$path'"
>
>  --

I think it's a very useful patch. But why has it sleeped for over one month?



-- 
Ping Yin

  parent reply	other threads:[~2008-03-03 13:15 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-02-09 16:57 [PATCH 1/3] git-submodule - Follow top-level remote on init/update/clone Mark Levedahl
2008-02-09 16:57 ` [PATCH 2/3] git-submodule - Allow adding a submodule in-place Mark Levedahl
2008-02-09 16:57   ` [PATCH 3/3] Add t/t7401 - test submodule interaction with remotes machinery Mark Levedahl
2008-03-03 13:14   ` Ping Yin [this message]
2008-02-11 22:09 ` [PATCH 1/3] git-submodule - Follow top-level remote on init/update/clone Johannes Schindelin
2008-02-12  1:00   ` Mark Levedahl
2008-02-12  1:10     ` Johannes Schindelin
2008-02-12  1:34       ` Mark Levedahl

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=46dff0320803030514y3b7b1860h18094f99619ff671@mail.gmail.com \
    --to=pkufranky@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=mlevedahl@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).