Add a new option, --ref-storage, to allow the ref storage backend to
be set on new clones.

Submodules must use the same ref storage as the parent repository, so
we also pass the --ref-storage option option when cloning
submodules.

Signed-off-by: David Turner <dtur...@twopensource.com>
Signed-off-by: SZEDER Gábor <sze...@ira.uka.de>
---
 Documentation/git-clone.txt            |  5 +++++
 builtin/clone.c                        |  5 +++++
 builtin/submodule--helper.c            |  2 +-
 contrib/completion/git-completion.bash |  1 +
 git-submodule.sh                       | 13 +++++++++++++
 5 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/Documentation/git-clone.txt b/Documentation/git-clone.txt
index 45d74be..68f56a7 100644
--- a/Documentation/git-clone.txt
+++ b/Documentation/git-clone.txt
@@ -14,6 +14,7 @@ SYNOPSIS
          [-o <name>] [-b <name>] [-u <upload-pack>] [--reference <repository>]
          [--dissociate] [--separate-git-dir <git dir>]
          [--depth <depth>] [--[no-]single-branch]
+         [--ref-storage=<name>]
          [--recursive | --recurse-submodules] [--jobs <n>] [--] <repository>
          [<directory>]
 
@@ -224,6 +225,10 @@ objects from the source repository into a pack in the 
cloned repository.
        The number of submodules fetched at the same time.
        Defaults to the `submodule.fetchJobs` option.
 
+--ref-storage=<name>::
+       Type of ref storage backend. Default is to use the original files
+       based ref storage.
+
 <repository>::
        The (possibly remote) repository to clone from.  See the
        <<URLS,URLS>> section below for more information on specifying
diff --git a/builtin/clone.c b/builtin/clone.c
index 191f522..5ba0514 100644
--- a/builtin/clone.c
+++ b/builtin/clone.c
@@ -95,6 +95,8 @@ static struct option builtin_clone_options[] = {
                   N_("separate git dir from working tree")),
        OPT_STRING_LIST('c', "config", &option_config, N_("key=value"),
                        N_("set config inside the new repository")),
+       OPT_STRING(0, "ref-storage", &ref_storage_backend,
+                  N_("name"), N_("name of backend type to use")),
        OPT_END()
 };
 
@@ -733,6 +735,9 @@ static int checkout(void)
                if (max_jobs != -1)
                        argv_array_pushf(&args, "--jobs=%d", max_jobs);
 
+               argv_array_pushl(&args, "--ref-storage",
+                                ref_storage_backend, NULL);
+
                err = run_command_v_opt(args.argv, RUN_GIT_CMD);
                argv_array_clear(&args);
        }
diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
index 689c354..879d6fb 100644
--- a/builtin/submodule--helper.c
+++ b/builtin/submodule--helper.c
@@ -457,7 +457,7 @@ static int clone_submodule(const char *path, const char 
*gitdir, const char *url
                argv_array_pushl(&cp.args, "--reference", reference, NULL);
        if (gitdir && *gitdir)
                argv_array_pushl(&cp.args, "--separate-git-dir", gitdir, NULL);
-
+       argv_array_pushl(&cp.args, "--ref-storage", ref_storage_backend, NULL);
        argv_array_push(&cp.args, url);
        argv_array_push(&cp.args, path);
 
diff --git a/contrib/completion/git-completion.bash 
b/contrib/completion/git-completion.bash
index 0138d03..cb9c473 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -1092,6 +1092,7 @@ _git_clone ()
                        --depth
                        --single-branch
                        --branch
+                       --ref-storage=
                        "
                return
                ;;
diff --git a/git-submodule.sh b/git-submodule.sh
index 6fce0dc..e7ac98b 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -527,6 +527,14 @@ cmd_update()
                --checkout)
                        update="checkout"
                        ;;
+               --ref-storage=*)
+                       ref_storage="$1"
+                       ;;
+               --ref-storage)
+                       case "$2" in '') usage ;; esac
+                       ref_storage="$2"
+                       shift
+                       ;;
                --depth)
                        case "$2" in '') usage ;; esac
                        depth="--depth=$2"
@@ -560,6 +568,11 @@ cmd_update()
        if test -n "$init"
        then
                cmd_init "--" "$@" || return
+       else
+               if test -n "$ref_storage"
+               then
+                       usage
+               fi
        fi
 
        git submodule--helper update-clone ${GIT_QUIET:+--quiet} \
-- 
2.4.2.749.g730654d-twtrsrc

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to