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 <[email protected]>
---
 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 [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to