From: Jens Lehmann <Jens.Lehmann@web.de>
To: Henri GEIST <geist.henri@laposte.net>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] submodule : Add --no-separate-git-dir option to add and update command.
Date: Mon, 03 Mar 2014 17:45:09 +0000 [thread overview]
Message-ID: <5314BFA5.2030807@web.de> (raw)
In-Reply-To: <1393858066.7891.20.camel@Naugrim>
Am 03.03.2014 14:47, schrieb Henri GEIST:
> This new option prevent git submodule <add|update> to clone the missing
> submodules with the --separate-git-dir option.
> Then the submodule will be regular repository and their gitdir will not
> be placed in the superproject gitdir/modules directory.
And what is your motivation for this? After all submodules containing
a .git directory are second class citizens (because they can never be
safely removed by regular git commands).
> Signed-off-by: Henri GEIST <geist.henri@laposte.net>
> ---
> Documentation/git-submodule.txt | 18 ++++++++++++++++--
> git-submodule.sh | 22 ++++++++++++++++++++--
> t/t7400-submodule-basic.sh | 12 ++++++++++++
> 3 files changed, 48 insertions(+), 4 deletions(-)
>
> diff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt
> index 21cb59a..303a475 100644
> --- a/Documentation/git-submodule.txt
> +++ b/Documentation/git-submodule.txt
> @@ -10,13 +10,14 @@ SYNOPSIS
> --------
> [verse]
> 'git submodule' [--quiet] add [-b <branch>] [-f|--force] [--name <name>]
> - [--reference <repository>] [--depth <depth>] [--] <repository> [<path>]
> + [--reference <repository>] [--depth <depth>] [--no-separate-git-dir]
> + [--] <repository> [<path>]
> 'git submodule' [--quiet] status [--cached] [--recursive] [--] [<path>...]
> 'git submodule' [--quiet] init [--] [<path>...]
> 'git submodule' [--quiet] deinit [-f|--force] [--] <path>...
> 'git submodule' [--quiet] update [--init] [--remote] [-N|--no-fetch]
> [-f|--force] [--rebase|--merge|--checkout] [--reference <repository>]
> - [--depth <depth>] [--recursive] [--] [<path>...]
> + [--depth <depth>] [--recursive] [--no-separate-git-dir] [--] [<path>...]
> 'git submodule' [--quiet] summary [--cached|--files] [(-n|--summary-limit) <n>]
> [commit] [--] [<path>...]
> 'git submodule' [--quiet] foreach [--recursive] <command>
> @@ -107,6 +108,10 @@ is the superproject and submodule repositories will be kept
> together in the same relative location, and only the
> superproject's URL needs to be provided: git-submodule will correctly
> locate the submodule using the relative URL in .gitmodules.
> ++
> +If `--no-separate-git-dir` is specified, missing submodules will be cloned
> +has normal git repository without the option `--separate-git-dir` pointing
> +to the modules directory of the superproject gitdir.
>
> status::
> Show the status of the submodules. This will print the SHA-1 of the
> @@ -185,6 +190,10 @@ If the submodule is not yet initialized, and you just want to use the
> setting as stored in .gitmodules, you can automatically initialize the
> submodule with the `--init` option.
> +
> +If `--no-separate-git-dir` is specified, missing submodules will be cloned
> +has normal git repository without the option `--separate-git-dir` pointing
> +to the modules directory of the superproject gitdir.
> ++
> If `--recursive` is specified, this command will recurse into the
> registered submodules, and update any nested submodules within.
> +
> @@ -363,6 +372,11 @@ for linkgit:git-clone[1]'s `--reference` and `--shared` options carefully.
> clone with a history truncated to the specified number of revisions.
> See linkgit:git-clone[1]
>
> +--no-separate-git-dir::
> + This option is valid for add and update commands. Specify that missing
> + submodules should be clonned as self contain repository without a
> + separate gitdir placed in the modules directory of the superproject
> + gitdir.
>
> <path>...::
> Paths to submodule(s). When specified this will restrict the command
> diff --git a/git-submodule.sh b/git-submodule.sh
> index a33f68d..36eaf31 100755
> --- a/git-submodule.sh
> +++ b/git-submodule.sh
> @@ -5,11 +5,11 @@
> # Copyright (c) 2007 Lars Hjemli
>
> dashless=$(basename "$0" | sed -e 's/-/ /')
> -USAGE="[--quiet] add [-b <branch>] [-f|--force] [--name <name>] [--reference <repository>] [--] <repository> [<path>]
> +USAGE="[--quiet] add [-b <branch>] [-f|--force] [--name <name>] [--reference <repository>] [--no-separate-git-dir] [--] <repository> [<path>]
> or: $dashless [--quiet] status [--cached] [--recursive] [--] [<path>...]
> or: $dashless [--quiet] init [--] [<path>...]
> or: $dashless [--quiet] deinit [-f|--force] [--] <path>...
> - or: $dashless [--quiet] update [--init] [--remote] [-N|--no-fetch] [-f|--force] [--rebase] [--reference <repository>] [--merge] [--recursive] [--] [<path>...]
> + or: $dashless [--quiet] update [--init] [--remote] [-N|--no-fetch] [-f|--force] [--rebase] [--reference <repository>] [--merge] [--recursive] [--no-separate-git-dir] [--] [<path>...]
> or: $dashless [--quiet] summary [--cached|--files] [--summary-limit <n>] [commit] [--] [<path>...]
> or: $dashless [--quiet] foreach [--recursive] <command>
> or: $dashless [--quiet] sync [--recursive] [--] [<path>...]"
> @@ -36,6 +36,7 @@ update=
> prefix=
> custom_name=
> depth=
> +noseparategitdir=
>
> # The function takes at most 2 arguments. The first argument is the
> # URL that navigates to the submodule origin repo. When relative, this URL
> @@ -270,6 +271,17 @@ module_clone()
> quiet=-q
> fi
>
> +
> + if test -n "$noseparategitdir"
> + then
> + (
> + clear_local_git_env
> + git clone $quiet ${depth:+"$depth"} -n ${reference:+"$reference"} "$url" "$sm_path"
> + ) ||
> + die "$(eval_gettext "Clone of '\$url' into submodule path '\$sm_path' failed")"
> + return
> + fi
> +
> gitdir=
> gitdir_base=
> base_name=$(dirname "$name")
> @@ -359,6 +371,9 @@ cmd_add()
> -q|--quiet)
> GIT_QUIET=1
> ;;
> + --no-separate-git-dir)
> + noseparategitdir=1
> + ;;
> --reference)
> case "$2" in '') usage ;; esac
> reference_path=$2
> @@ -758,6 +773,9 @@ cmd_update()
> -f|--force)
> force=$1
> ;;
> + --no-separate-git-dir)
> + noseparategitdir=1
> + ;;
> -r|--rebase)
> update="rebase"
> ;;
> diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
> index c28e8d8..aa2df3d 100755
> --- a/t/t7400-submodule-basic.sh
> +++ b/t/t7400-submodule-basic.sh
> @@ -81,6 +81,18 @@ inspect() {
> )
> }
>
> +test_expect_success 'submodule add --no-separate-git-dir' '
> + (
> + cd addtest &&
> + rm -rf submod &&
> + git submodule add --no-separate-git-dir -q "$submodurl" submod >actual &&
> + test_must_be_empty actual &&
> + test -d submod/.git &&
> + rm -rf submod &&
> + git reset --hard
> + )
> +'
> +
> test_expect_success 'submodule add' '
> echo "refs/heads/master" >expect &&
> >empty &&
>
next prev parent reply other threads:[~2014-03-03 17:45 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-03 14:47 [PATCH] submodule : Add --no-separate-git-dir option to add and update command Henri GEIST
2014-03-03 17:45 ` Jens Lehmann [this message]
2014-03-03 20:34 ` Henri GEIST
2014-03-05 18:13 ` Jens Lehmann
2014-03-06 1:25 ` Henri GEIST
2014-03-06 19:48 ` Jens Lehmann
2014-03-06 20:15 ` Henri GEIST
2014-03-06 20:51 ` Jens Lehmann
2014-03-06 22:20 ` Henri GEIST
2014-03-07 23:00 ` Jens Lehmann
2014-03-10 9:08 ` Henri GEIST
2014-03-10 20:32 ` Heiko Voigt
2014-03-11 9:55 ` Henri GEIST
2014-03-11 20:11 ` Heiko Voigt
2014-03-11 22:07 ` Henri GEIST
2014-03-03 19:22 ` Junio C Hamano
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=5314BFA5.2030807@web.de \
--to=jens.lehmann@web.de \
--cc=geist.henri@laposte.net \
--cc=git@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.