diff options
author | Jacques Germishuys <jacquesg@striata.com> | 2014-08-17 14:55:06 +0200 |
---|---|---|
committer | Jacques Germishuys <jacquesg@striata.com> | 2014-08-17 14:55:06 +0200 |
commit | 4e53c28096f4b04ab9b573fc594a538f51e10049 (patch) | |
tree | 71ffc739c341a49bb13e8430f7663a861cd6d449 /tests | |
parent | fa44a1699ccd70725b236868ef4be5cac8c36267 (diff) | |
download | libgit2-4e53c28096f4b04ab9b573fc594a538f51e10049.tar.gz |
Check if the refspec matches before transforming
Diffstat (limited to 'tests')
-rw-r--r-- | tests/network/refspecs.c | 48 |
1 files changed, 43 insertions, 5 deletions
diff --git a/tests/network/refspecs.c b/tests/network/refspecs.c index aa9b36e58..c6bcb10e8 100644 --- a/tests/network/refspecs.c +++ b/tests/network/refspecs.c @@ -88,7 +88,7 @@ void test_network_refspecs__parsing(void) assert_refspec(GIT_DIRECTION_FETCH, "refs/pull/*/head:refs/remotes/origin/pr/*", true); } -void assert_transform(const char *refspec, const char *name, const char *result) +static void assert_valid_transform(const char *refspec, const char *name, const char *result) { git_refspec spec; git_buf buf = GIT_BUF_INIT; @@ -103,8 +103,46 @@ void assert_transform(const char *refspec, const char *name, const char *result) void test_network_refspecs__transform_mid_star(void) { - assert_transform("refs/pull/*/head:refs/remotes/origin/pr/*", "refs/pull/23/head", "refs/remotes/origin/pr/23"); - assert_transform("refs/heads/*:refs/remotes/origin/*", "refs/heads/master", "refs/remotes/origin/master"); - assert_transform("refs/heads/*:refs/heads/*", "refs/heads/master", "refs/heads/master"); - assert_transform("refs/*:refs/*", "refs/heads/master", "refs/heads/master"); + assert_valid_transform("refs/pull/*/head:refs/remotes/origin/pr/*", "refs/pull/23/head", "refs/remotes/origin/pr/23"); + assert_valid_transform("refs/heads/*:refs/remotes/origin/*", "refs/heads/master", "refs/remotes/origin/master"); + assert_valid_transform("refs/heads/*:refs/remotes/origin/*", "refs/heads/user/feature", "refs/remotes/origin/user/feature"); + assert_valid_transform("refs/heads/*:refs/heads/*", "refs/heads/master", "refs/heads/master"); + assert_valid_transform("refs/heads/*:refs/heads/*", "refs/heads/user/feature", "refs/heads/user/feature"); + assert_valid_transform("refs/*:refs/*", "refs/heads/master", "refs/heads/master"); +} + +static void assert_invalid_transform(const char *refspec, const char *name) +{ + git_refspec spec; + git_buf buf = GIT_BUF_INIT; + + git_refspec__parse(&spec, refspec, true); + cl_git_fail(git_refspec_transform(&buf, &spec, name)); + + git_buf_free(&buf); + git_refspec__free(&spec); +} + +void test_network_refspecs__invalid(void) +{ + assert_invalid_transform("refs/heads/*:refs/remotes/origin/*", "master"); + assert_invalid_transform("refs/heads/*:refs/remotes/origin/*", "refs/headz/master"); +} + +static void assert_invalid_rtransform(const char *refspec, const char *name) +{ + git_refspec spec; + git_buf buf = GIT_BUF_INIT; + + git_refspec__parse(&spec, refspec, true); + cl_git_fail(git_refspec_rtransform(&buf, &spec, name)); + + git_buf_free(&buf); + git_refspec__free(&spec); +} + +void test_network_refspecs__invalid_reverse(void) +{ + assert_invalid_rtransform("refs/heads/*:refs/remotes/origin/*", "master"); + assert_invalid_rtransform("refs/heads/*:refs/remotes/origin/*", "refs/remotes/o/master"); } |