submodule-config: rename commit_sha1 to treeish_name
authorStefan Beller <sbeller@google.com>
Tue, 22 Nov 2016 20:14:37 +0000 (12:14 -0800)
committerJunio C Hamano <gitster@pobox.com>
Tue, 22 Nov 2016 22:43:03 +0000 (14:43 -0800)
It is also possible to pass in any treeish name to lookup a submodule
config. Make it clear by naming the variables accordingly. Looking up
a submodule config by tree hash will come in handy in a later patch.

Signed-off-by: Stefan Beller <sbeller@google.com>
Reviewed-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/technical/api-submodule-config.txt
submodule-config.c
submodule-config.h
t/t7411-submodule-config.sh
index 941fa178dd866162b4d3e8cb0c23a17f03016bb5..8285bcc605ecfae1387697c959d9f62fbc70125f 100644 (file)
@@ -47,15 +47,16 @@ Functions
        Can be passed to the config parsing infrastructure to parse
        local (worktree) submodule configurations.
 
        Can be passed to the config parsing infrastructure to parse
        local (worktree) submodule configurations.
 
-`const struct submodule *submodule_from_path(const unsigned char *commit_sha1, const char *path)`::
+`const struct submodule *submodule_from_path(const unsigned char *treeish_name, const char *path)`::
 
 
-       Lookup values for one submodule by its commit_sha1 and path.
+       Given a tree-ish in the superproject and a path, return the
+       submodule that is bound at the path in the named tree.
 
 
-`const struct submodule *submodule_from_name(const unsigned char *commit_sha1, const char *name)`::
+`const struct submodule *submodule_from_name(const unsigned char *treeish_name, const char *name)`::
 
        The same as above but lookup by name.
 
 
        The same as above but lookup by name.
 
-If given the null_sha1 as commit_sha1 the local configuration of a
+If given the null_sha1 as treeish_name the local configuration of a
 submodule will be returned (e.g. consolidated values from local git
 configuration and the .gitmodules file in the worktree).
 
 submodule will be returned (e.g. consolidated values from local git
 configuration and the .gitmodules file in the worktree).
 
index 15ffab6af40f374b5dacf12701e1725b178ea7bc..ec13ab5a3dd82ac90c1c83d9e07dc8c045a992d2 100644 (file)
@@ -263,12 +263,12 @@ int parse_push_recurse_submodules_arg(const char *opt, const char *arg)
        return parse_push_recurse(opt, arg, 1);
 }
 
        return parse_push_recurse(opt, arg, 1);
 }
 
-static void warn_multiple_config(const unsigned char *commit_sha1,
+static void warn_multiple_config(const unsigned char *treeish_name,
                                 const char *name, const char *option)
 {
        const char *commit_string = "WORKTREE";
                                 const char *name, const char *option)
 {
        const char *commit_string = "WORKTREE";
-       if (commit_sha1)
-               commit_string = sha1_to_hex(commit_sha1);
+       if (treeish_name)
+               commit_string = sha1_to_hex(treeish_name);
        warning("%s:.gitmodules, multiple configurations found for "
                        "'submodule.%s.%s'. Skipping second one!",
                        commit_string, name, option);
        warning("%s:.gitmodules, multiple configurations found for "
                        "'submodule.%s.%s'. Skipping second one!",
                        commit_string, name, option);
@@ -276,7 +276,7 @@ static void warn_multiple_config(const unsigned char *commit_sha1,
 
 struct parse_config_parameter {
        struct submodule_cache *cache;
 
 struct parse_config_parameter {
        struct submodule_cache *cache;
-       const unsigned char *commit_sha1;
+       const unsigned char *treeish_name;
        const unsigned char *gitmodules_sha1;
        int overwrite;
 };
        const unsigned char *gitmodules_sha1;
        int overwrite;
 };
@@ -300,7 +300,7 @@ static int parse_config(const char *var, const char *value, void *data)
                if (!value)
                        ret = config_error_nonbool(var);
                else if (!me->overwrite && submodule->path)
                if (!value)
                        ret = config_error_nonbool(var);
                else if (!me->overwrite && submodule->path)
-                       warn_multiple_config(me->commit_sha1, submodule->name,
+                       warn_multiple_config(me->treeish_name, submodule->name,
                                        "path");
                else {
                        if (submodule->path)
                                        "path");
                else {
                        if (submodule->path)
@@ -314,7 +314,7 @@ static int parse_config(const char *var, const char *value, void *data)
                int die_on_error = is_null_sha1(me->gitmodules_sha1);
                if (!me->overwrite &&
                    submodule->fetch_recurse != RECURSE_SUBMODULES_NONE)
                int die_on_error = is_null_sha1(me->gitmodules_sha1);
                if (!me->overwrite &&
                    submodule->fetch_recurse != RECURSE_SUBMODULES_NONE)
-                       warn_multiple_config(me->commit_sha1, submodule->name,
+                       warn_multiple_config(me->treeish_name, submodule->name,
                                        "fetchrecursesubmodules");
                else
                        submodule->fetch_recurse = parse_fetch_recurse(
                                        "fetchrecursesubmodules");
                else
                        submodule->fetch_recurse = parse_fetch_recurse(
@@ -324,7 +324,7 @@ static int parse_config(const char *var, const char *value, void *data)
                if (!value)
                        ret = config_error_nonbool(var);
                else if (!me->overwrite && submodule->ignore)
                if (!value)
                        ret = config_error_nonbool(var);
                else if (!me->overwrite && submodule->ignore)
-                       warn_multiple_config(me->commit_sha1, submodule->name,
+                       warn_multiple_config(me->treeish_name, submodule->name,
                                        "ignore");
                else if (strcmp(value, "untracked") &&
                         strcmp(value, "dirty") &&
                                        "ignore");
                else if (strcmp(value, "untracked") &&
                         strcmp(value, "dirty") &&
@@ -340,7 +340,7 @@ static int parse_config(const char *var, const char *value, void *data)
                if (!value) {
                        ret = config_error_nonbool(var);
                } else if (!me->overwrite && submodule->url) {
                if (!value) {
                        ret = config_error_nonbool(var);
                } else if (!me->overwrite && submodule->url) {
-                       warn_multiple_config(me->commit_sha1, submodule->name,
+                       warn_multiple_config(me->treeish_name, submodule->name,
                                        "url");
                } else {
                        free((void *) submodule->url);
                                        "url");
                } else {
                        free((void *) submodule->url);
@@ -351,21 +351,21 @@ static int parse_config(const char *var, const char *value, void *data)
                        ret = config_error_nonbool(var);
                else if (!me->overwrite &&
                         submodule->update_strategy.type != SM_UPDATE_UNSPECIFIED)
                        ret = config_error_nonbool(var);
                else if (!me->overwrite &&
                         submodule->update_strategy.type != SM_UPDATE_UNSPECIFIED)
-                       warn_multiple_config(me->commit_sha1, submodule->name,
+                       warn_multiple_config(me->treeish_name, submodule->name,
                                             "update");
                else if (parse_submodule_update_strategy(value,
                         &submodule->update_strategy) < 0)
                                die(_("invalid value for %s"), var);
        } else if (!strcmp(item.buf, "shallow")) {
                if (!me->overwrite && submodule->recommend_shallow != -1)
                                             "update");
                else if (parse_submodule_update_strategy(value,
                         &submodule->update_strategy) < 0)
                                die(_("invalid value for %s"), var);
        } else if (!strcmp(item.buf, "shallow")) {
                if (!me->overwrite && submodule->recommend_shallow != -1)
-                       warn_multiple_config(me->commit_sha1, submodule->name,
+                       warn_multiple_config(me->treeish_name, submodule->name,
                                             "shallow");
                else
                        submodule->recommend_shallow =
                                git_config_bool(var, value);
        } else if (!strcmp(item.buf, "branch")) {
                if (!me->overwrite && submodule->branch)
                                             "shallow");
                else
                        submodule->recommend_shallow =
                                git_config_bool(var, value);
        } else if (!strcmp(item.buf, "branch")) {
                if (!me->overwrite && submodule->branch)
-                       warn_multiple_config(me->commit_sha1, submodule->name,
+                       warn_multiple_config(me->treeish_name, submodule->name,
                                             "branch");
                else {
                        free((void *)submodule->branch);
                                             "branch");
                else {
                        free((void *)submodule->branch);
@@ -379,18 +379,18 @@ static int parse_config(const char *var, const char *value, void *data)
        return ret;
 }
 
        return ret;
 }
 
-static int gitmodule_sha1_from_commit(const unsigned char *commit_sha1,
+static int gitmodule_sha1_from_commit(const unsigned char *treeish_name,
                                      unsigned char *gitmodules_sha1,
                                      struct strbuf *rev)
 {
        int ret = 0;
 
                                      unsigned char *gitmodules_sha1,
                                      struct strbuf *rev)
 {
        int ret = 0;
 
-       if (is_null_sha1(commit_sha1)) {
+       if (is_null_sha1(treeish_name)) {
                hashclr(gitmodules_sha1);
                return 1;
        }
 
                hashclr(gitmodules_sha1);
                return 1;
        }
 
-       strbuf_addf(rev, "%s:.gitmodules", sha1_to_hex(commit_sha1));
+       strbuf_addf(rev, "%s:.gitmodules", sha1_to_hex(treeish_name));
        if (get_sha1(rev->buf, gitmodules_sha1) >= 0)
                ret = 1;
 
        if (get_sha1(rev->buf, gitmodules_sha1) >= 0)
                ret = 1;
 
@@ -402,7 +402,7 @@ static int gitmodule_sha1_from_commit(const unsigned char *commit_sha1,
  * revisions.
  */
 static const struct submodule *config_from(struct submodule_cache *cache,
  * revisions.
  */
 static const struct submodule *config_from(struct submodule_cache *cache,
-               const unsigned char *commit_sha1, const char *key,
+               const unsigned char *treeish_name, const char *key,
                enum lookup_type lookup_type)
 {
        struct strbuf rev = STRBUF_INIT;
                enum lookup_type lookup_type)
 {
        struct strbuf rev = STRBUF_INIT;
@@ -418,7 +418,7 @@ static const struct submodule *config_from(struct submodule_cache *cache,
         * return the first submodule. Can be used to check whether
         * there are any submodules parsed.
         */
         * return the first submodule. Can be used to check whether
         * there are any submodules parsed.
         */
-       if (!commit_sha1 || !key) {
+       if (!treeish_name || !key) {
                struct hashmap_iter iter;
                struct submodule_entry *entry;
 
                struct hashmap_iter iter;
                struct submodule_entry *entry;
 
@@ -428,7 +428,7 @@ static const struct submodule *config_from(struct submodule_cache *cache,
                return entry->config;
        }
 
                return entry->config;
        }
 
-       if (!gitmodule_sha1_from_commit(commit_sha1, sha1, &rev))
+       if (!gitmodule_sha1_from_commit(treeish_name, sha1, &rev))
                goto out;
 
        switch (lookup_type) {
                goto out;
 
        switch (lookup_type) {
@@ -448,7 +448,7 @@ static const struct submodule *config_from(struct submodule_cache *cache,
 
        /* fill the submodule config into the cache */
        parameter.cache = cache;
 
        /* fill the submodule config into the cache */
        parameter.cache = cache;
-       parameter.commit_sha1 = commit_sha1;
+       parameter.treeish_name = treeish_name;
        parameter.gitmodules_sha1 = sha1;
        parameter.overwrite = 0;
        git_config_from_mem(parse_config, CONFIG_ORIGIN_SUBMODULE_BLOB, rev.buf,
        parameter.gitmodules_sha1 = sha1;
        parameter.overwrite = 0;
        git_config_from_mem(parse_config, CONFIG_ORIGIN_SUBMODULE_BLOB, rev.buf,
@@ -484,7 +484,7 @@ int parse_submodule_config_option(const char *var, const char *value)
 {
        struct parse_config_parameter parameter;
        parameter.cache = &the_submodule_cache;
 {
        struct parse_config_parameter parameter;
        parameter.cache = &the_submodule_cache;
-       parameter.commit_sha1 = NULL;
+       parameter.treeish_name = NULL;
        parameter.gitmodules_sha1 = null_sha1;
        parameter.overwrite = 1;
 
        parameter.gitmodules_sha1 = null_sha1;
        parameter.overwrite = 1;
 
@@ -492,18 +492,18 @@ int parse_submodule_config_option(const char *var, const char *value)
        return parse_config(var, value, &parameter);
 }
 
        return parse_config(var, value, &parameter);
 }
 
-const struct submodule *submodule_from_name(const unsigned char *commit_sha1,
+const struct submodule *submodule_from_name(const unsigned char *treeish_name,
                const char *name)
 {
        ensure_cache_init();
                const char *name)
 {
        ensure_cache_init();
-       return config_from(&the_submodule_cache, commit_sha1, name, lookup_name);
+       return config_from(&the_submodule_cache, treeish_name, name, lookup_name);
 }
 
 }
 
-const struct submodule *submodule_from_path(const unsigned char *commit_sha1,
+const struct submodule *submodule_from_path(const unsigned char *treeish_name,
                const char *path)
 {
        ensure_cache_init();
                const char *path)
 {
        ensure_cache_init();
-       return config_from(&the_submodule_cache, commit_sha1, path, lookup_path);
+       return config_from(&the_submodule_cache, treeish_name, path, lookup_path);
 }
 
 void submodule_free(void)
 }
 
 void submodule_free(void)
index d05c542d2cdace181ea72055c0f71db6b1afda42..99df8e593cc7c274f88a73dfdd6524b7f661692c 100644 (file)
@@ -25,9 +25,9 @@ struct submodule {
 int parse_fetch_recurse_submodules_arg(const char *opt, const char *arg);
 int parse_push_recurse_submodules_arg(const char *opt, const char *arg);
 int parse_submodule_config_option(const char *var, const char *value);
 int parse_fetch_recurse_submodules_arg(const char *opt, const char *arg);
 int parse_push_recurse_submodules_arg(const char *opt, const char *arg);
 int parse_submodule_config_option(const char *var, const char *value);
-const struct submodule *submodule_from_name(const unsigned char *commit_sha1,
+const struct submodule *submodule_from_name(const unsigned char *commit_or_tree,
                const char *name);
                const char *name);
-const struct submodule *submodule_from_path(const unsigned char *commit_sha1,
+const struct submodule *submodule_from_path(const unsigned char *commit_or_tree,
                const char *path);
 void submodule_free(void);
 
                const char *path);
 void submodule_free(void);
 
index 47562ce4654db9d763cdf0c6d6b91724489110ff..d389ae5408ab783467f64368adc01325e258046b 100755 (executable)
@@ -93,6 +93,20 @@ test_expect_success 'error message contains blob reference' '
        )
 '
 
        )
 '
 
+test_expect_success 'using different treeishs works' '
+       (
+               cd super &&
+               git tag new_tag &&
+               tree=$(git rev-parse HEAD^{tree}) &&
+               commit=$(git rev-parse HEAD^{commit}) &&
+               test-submodule-config $commit b >expect &&
+               test-submodule-config $tree b >actual.1 &&
+               test-submodule-config new_tag b >actual.2 &&
+               test_cmp expect actual.1 &&
+               test_cmp expect actual.2
+       )
+'
+
 cat >super/expect_url <<EOF
 Submodule url: 'git@somewhere.else.net:a.git' for path 'b'
 Submodule url: 'git@somewhere.else.net:submodule.git' for path 'submodule'
 cat >super/expect_url <<EOF
 Submodule url: 'git@somewhere.else.net:a.git' for path 'b'
 Submodule url: 'git@somewhere.else.net:submodule.git' for path 'submodule'