We could allow more than just alphanumeric and dash characters for submodule labels. As a precaution we'll first allow only this subset and later on we can extend it once we have more experience with them. Signed-off-by: Stefan Beller <sbeller@xxxxxxxxxx> --- builtin/submodule--helper.c | 30 ++++++++++++++++++++++++++- t/t7412-submodule--helper.sh | 49 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 1 deletion(-) create mode 100755 t/t7412-submodule--helper.sh diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index 7f0941d..d3f4684 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -831,6 +831,33 @@ static int update_clone(int argc, const char **argv, const char *prefix) return 0; } +static int submodule_valid_label_name(const char *label) +{ + if (!label || !strlen(label)) + return 0; + + if (!isalnum(*label)) + return 0; + + while (*label) { + if (!(isalnum(*label) || + *label == '-')) + return 0; + label++; + } + + return 1; +} + +static int valid_label_name(int argc, const char **argv, const char *prefix) +{ + if (argc == 2 && submodule_valid_label_name(argv[1])) + return 0; + + die(_("submodule label must start with an alphanumeric character" + "and must contain alphanumeric characters or dashes only.")); +} + struct cmd_struct { const char *cmd; int (*fn)(int, const char **, const char *); @@ -843,7 +870,8 @@ static struct cmd_struct commands[] = { {"update-clone", update_clone}, {"resolve-relative-url", resolve_relative_url}, {"resolve-relative-url-test", resolve_relative_url_test}, - {"init", module_init} + {"init", module_init}, + {"valid-label-name", valid_label_name} }; int cmd_submodule__helper(int argc, const char **argv, const char *prefix) diff --git a/t/t7412-submodule--helper.sh b/t/t7412-submodule--helper.sh new file mode 100755 index 0000000..3af315c --- /dev/null +++ b/t/t7412-submodule--helper.sh @@ -0,0 +1,49 @@ +#!/bin/sh + +test_description='Basic plumbing support of submodule--helper + +This test verifies the submodule--helper plumbing command used to implement +git-submodule. +' + +. ./test-lib.sh + + +test_expect_success 'valid-label-name tests empty label' ' + test_must_fail git submodule--helper valid-label-name 2>actual && + test_i18ngrep alphanumeric actual && + test_must_fail git submodule--helper valid-label-name "" 2>actual && + test_i18ngrep alphanumeric actual +' + +test_expect_success 'valid-label-name tests correct label asdf' ' + git submodule--helper valid-label-name asdf 2>actual && + test_must_be_empty actual +' + +test_expect_success 'valid-label-name tests correct label a' ' + git submodule--helper valid-label-name a 2>actual && + test_must_be_empty actual +' + +test_expect_success 'valid-label-name tests correct label a-b' ' + git submodule--helper valid-label-name a-b 2>actual && + test_must_be_empty actual +' + +test_expect_success 'valid-label-name fails with multiple arguments' ' + test_must_fail git submodule--helper valid-label-name a b 2>actual && + test_i18ngrep alphanumeric actual +' + +test_expect_success 'valid-label-name fails with white spaced arguments' ' + test_must_fail git submodule--helper valid-label-name "a b" 2>actual && + test_i18ngrep alphanumeric actual +' + +test_expect_success 'valid-label-name fails with utf8 characters' ' + test_must_fail git submodule--helper valid-label-name ☺ 2>actual && + test_i18ngrep alphanumeric actual +' + +test_done -- 2.8.0.35.g58985d9.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html