Signed-off-by: Stefan Beller <sbel...@google.com>
---
 builtin/submodule--helper.c | 14 +++++++++++++-
 git-submodule.sh            | 10 ++++++++++
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
index b6f297b..707f201 100644
--- a/builtin/submodule--helper.c
+++ b/builtin/submodule--helper.c
@@ -584,6 +584,7 @@ struct submodule_update_clone {
        int quiet;
        int recommend_shallow;
        struct string_list references;
+       struct string_list superreferences;
        const char *depth;
        const char *recursive_prefix;
        const char *prefix;
@@ -600,7 +601,7 @@ struct submodule_update_clone {
 };
 #define SUBMODULE_UPDATE_CLONE_INIT {0, MODULE_LIST_INIT, 0, \
        SUBMODULE_UPDATE_STRATEGY_INIT, 0, -1, STRING_LIST_INIT_DUP, \
-       NULL, NULL, NULL, \
+       STRING_LIST_INIT_DUP, NULL, NULL, NULL, \
        STRING_LIST_INIT_DUP, 0, NULL, 0, 0}
 
 
@@ -715,6 +716,15 @@ static int prepare_to_clone_next_submodule(const struct 
cache_entry *ce,
                for_each_string_list_item(item, &suc->references)
                        argv_array_pushl(&child->args, "--reference", 
item->string, NULL);
        }
+       if (suc->superreferences.nr) {
+               struct string_list_item *item;
+               for_each_string_list_item(item, &suc->superreferences) {
+                       strbuf_reset(&sb);
+                       argv_array_pushf(&child->args, "--reference=%s/%s",
+                                        relative_path(item->string, 
suc->prefix, &sb),
+                                        sub->path);
+               }
+       }
        if (suc->depth)
                argv_array_push(&child->args, suc->depth);
 
@@ -835,6 +845,8 @@ static int update_clone(int argc, const char **argv, const 
char *prefix)
                           N_("rebase, merge, checkout or none")),
                OPT_STRING_LIST(0, "reference", &suc.references, N_("repo"),
                           N_("reference repository")),
+               OPT_STRING_LIST(0, "super-reference", &suc.superreferences, 
N_("repo"),
+                          N_("superproject of a reference repository")),
                OPT_STRING(0, "depth", &suc.depth, "<depth>",
                           N_("Create a shallow clone truncated to the "
                              "specified number of revisions")),
diff --git a/git-submodule.sh b/git-submodule.sh
index 526ea5d..99d45c8 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -34,6 +34,7 @@ command=
 branch=
 force=
 reference=
+superreference=
 cached=
 recursive=
 init=
@@ -520,6 +521,14 @@ cmd_update()
                --reference=*)
                        reference="$1"
                        ;;
+               --super-reference)
+                       case "$2" in '') usage ;; esac
+                       superreference="--super-reference=$2"
+                       shift
+                       ;;
+               --super-reference=*)
+                       superreference="$1"
+                       ;;
                -m|--merge)
                        update="merge"
                        ;;
@@ -576,6 +585,7 @@ cmd_update()
                ${prefix:+--recursive-prefix "$prefix"} \
                ${update:+--update "$update"} \
                ${reference:+"$reference"} \
+               ${superreference:+"$superreference"} \
                ${depth:+--depth "$depth"} \
                ${recommend_shallow:+"$recommend_shallow"} \
                ${jobs:+$jobs} \
-- 
2.9.2.572.g9d9644e.dirty

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