Turn git serve
into a test helper
The `git serve` built-in was introduced in ed10cb952d
(serve:
introduce git-serve, 2018-03-15) as a backend to serve Git protocol v2,
probably originally intended to be spawned by `git upload-pack`.
However, in the version that the protocol v2 patches made it into core
Git, `git upload-pack` calls the `serve()` function directly instead of
spawning `git serve`; The only reason in life for `git serve` to survive
as a built-in command is to provide a way to test the protocol v2
functionality.
Meaning that it does not even have to be a built-in that is installed
with end-user facing Git installations, but it can be a test helper
instead.
Let's make it so.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
6ea18fffb0
commit
b7ce24d095
2
Makefile
2
Makefile
@ -758,6 +758,7 @@ TEST_BUILTINS_OBJS += test-repository.o
|
|||||||
TEST_BUILTINS_OBJS += test-revision-walking.o
|
TEST_BUILTINS_OBJS += test-revision-walking.o
|
||||||
TEST_BUILTINS_OBJS += test-run-command.o
|
TEST_BUILTINS_OBJS += test-run-command.o
|
||||||
TEST_BUILTINS_OBJS += test-scrap-cache-tree.o
|
TEST_BUILTINS_OBJS += test-scrap-cache-tree.o
|
||||||
|
TEST_BUILTINS_OBJS += test-serve-v2.o
|
||||||
TEST_BUILTINS_OBJS += test-sha1.o
|
TEST_BUILTINS_OBJS += test-sha1.o
|
||||||
TEST_BUILTINS_OBJS += test-sha1-array.o
|
TEST_BUILTINS_OBJS += test-sha1-array.o
|
||||||
TEST_BUILTINS_OBJS += test-sha256.o
|
TEST_BUILTINS_OBJS += test-sha256.o
|
||||||
@ -1127,7 +1128,6 @@ BUILTIN_OBJS += builtin/rev-parse.o
|
|||||||
BUILTIN_OBJS += builtin/revert.o
|
BUILTIN_OBJS += builtin/revert.o
|
||||||
BUILTIN_OBJS += builtin/rm.o
|
BUILTIN_OBJS += builtin/rm.o
|
||||||
BUILTIN_OBJS += builtin/send-pack.o
|
BUILTIN_OBJS += builtin/send-pack.o
|
||||||
BUILTIN_OBJS += builtin/serve.o
|
|
||||||
BUILTIN_OBJS += builtin/shortlog.o
|
BUILTIN_OBJS += builtin/shortlog.o
|
||||||
BUILTIN_OBJS += builtin/show-branch.o
|
BUILTIN_OBJS += builtin/show-branch.o
|
||||||
BUILTIN_OBJS += builtin/show-index.o
|
BUILTIN_OBJS += builtin/show-index.o
|
||||||
|
@ -219,7 +219,6 @@ extern int cmd_rev_parse(int argc, const char **argv, const char *prefix);
|
|||||||
extern int cmd_revert(int argc, const char **argv, const char *prefix);
|
extern int cmd_revert(int argc, const char **argv, const char *prefix);
|
||||||
extern int cmd_rm(int argc, const char **argv, const char *prefix);
|
extern int cmd_rm(int argc, const char **argv, const char *prefix);
|
||||||
extern int cmd_send_pack(int argc, const char **argv, const char *prefix);
|
extern int cmd_send_pack(int argc, const char **argv, const char *prefix);
|
||||||
extern int cmd_serve(int argc, const char **argv, const char *prefix);
|
|
||||||
extern int cmd_shortlog(int argc, const char **argv, const char *prefix);
|
extern int cmd_shortlog(int argc, const char **argv, const char *prefix);
|
||||||
extern int cmd_show(int argc, const char **argv, const char *prefix);
|
extern int cmd_show(int argc, const char **argv, const char *prefix);
|
||||||
extern int cmd_show_branch(int argc, const char **argv, const char *prefix);
|
extern int cmd_show_branch(int argc, const char **argv, const char *prefix);
|
||||||
|
1
git.c
1
git.c
@ -548,7 +548,6 @@ static struct cmd_struct commands[] = {
|
|||||||
{ "revert", cmd_revert, RUN_SETUP | NEED_WORK_TREE },
|
{ "revert", cmd_revert, RUN_SETUP | NEED_WORK_TREE },
|
||||||
{ "rm", cmd_rm, RUN_SETUP },
|
{ "rm", cmd_rm, RUN_SETUP },
|
||||||
{ "send-pack", cmd_send_pack, RUN_SETUP },
|
{ "send-pack", cmd_send_pack, RUN_SETUP },
|
||||||
{ "serve", cmd_serve, RUN_SETUP },
|
|
||||||
{ "shortlog", cmd_shortlog, RUN_SETUP_GENTLY | USE_PAGER },
|
{ "shortlog", cmd_shortlog, RUN_SETUP_GENTLY | USE_PAGER },
|
||||||
{ "show", cmd_show, RUN_SETUP },
|
{ "show", cmd_show, RUN_SETUP },
|
||||||
{ "show-branch", cmd_show_branch, RUN_SETUP },
|
{ "show-branch", cmd_show_branch, RUN_SETUP },
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
|
#include "test-tool.h"
|
||||||
#include "cache.h"
|
#include "cache.h"
|
||||||
#include "builtin.h"
|
|
||||||
#include "parse-options.h"
|
#include "parse-options.h"
|
||||||
#include "serve.h"
|
#include "serve.h"
|
||||||
|
|
||||||
static char const * const serve_usage[] = {
|
static char const * const serve_usage[] = {
|
||||||
N_("git serve [<options>]"),
|
N_("test-tool serve-v2 [<options>]"),
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
int cmd_serve(int argc, const char **argv, const char *prefix)
|
int cmd__serve_v2(int argc, const char **argv)
|
||||||
{
|
{
|
||||||
struct serve_options opts = SERVE_OPTIONS_INIT;
|
struct serve_options opts = SERVE_OPTIONS_INIT;
|
||||||
|
|
||||||
@ -19,6 +19,7 @@ int cmd_serve(int argc, const char **argv, const char *prefix)
|
|||||||
N_("exit immediately after advertising capabilities")),
|
N_("exit immediately after advertising capabilities")),
|
||||||
OPT_END()
|
OPT_END()
|
||||||
};
|
};
|
||||||
|
const char *prefix = setup_git_directory();
|
||||||
|
|
||||||
/* ignore all unknown cmdline switches for now */
|
/* ignore all unknown cmdline switches for now */
|
||||||
argc = parse_options(argc, argv, prefix, options, serve_usage,
|
argc = parse_options(argc, argv, prefix, options, serve_usage,
|
@ -48,6 +48,7 @@ static struct test_cmd cmds[] = {
|
|||||||
{ "revision-walking", cmd__revision_walking },
|
{ "revision-walking", cmd__revision_walking },
|
||||||
{ "run-command", cmd__run_command },
|
{ "run-command", cmd__run_command },
|
||||||
{ "scrap-cache-tree", cmd__scrap_cache_tree },
|
{ "scrap-cache-tree", cmd__scrap_cache_tree },
|
||||||
|
{ "serve-v2", cmd__serve_v2 },
|
||||||
{ "sha1", cmd__sha1 },
|
{ "sha1", cmd__sha1 },
|
||||||
{ "sha1-array", cmd__sha1_array },
|
{ "sha1-array", cmd__sha1_array },
|
||||||
{ "sha256", cmd__sha256 },
|
{ "sha256", cmd__sha256 },
|
||||||
|
@ -39,6 +39,7 @@ int cmd__repository(int argc, const char **argv);
|
|||||||
int cmd__revision_walking(int argc, const char **argv);
|
int cmd__revision_walking(int argc, const char **argv);
|
||||||
int cmd__run_command(int argc, const char **argv);
|
int cmd__run_command(int argc, const char **argv);
|
||||||
int cmd__scrap_cache_tree(int argc, const char **argv);
|
int cmd__scrap_cache_tree(int argc, const char **argv);
|
||||||
|
int cmd__serve_v2(int argc, const char **argv);
|
||||||
int cmd__sha1(int argc, const char **argv);
|
int cmd__sha1(int argc, const char **argv);
|
||||||
int cmd__sha1_array(int argc, const char **argv);
|
int cmd__sha1_array(int argc, const char **argv);
|
||||||
int cmd__sha256(int argc, const char **argv);
|
int cmd__sha256(int argc, const char **argv);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
test_description='test git-serve and server commands'
|
test_description='test protocol v2 server commands'
|
||||||
|
|
||||||
. ./test-lib.sh
|
. ./test-lib.sh
|
||||||
|
|
||||||
@ -14,7 +14,8 @@ test_expect_success 'test capability advertisement' '
|
|||||||
0000
|
0000
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
GIT_TEST_SIDEBAND_ALL=0 git serve --advertise-capabilities >out &&
|
GIT_TEST_SIDEBAND_ALL=0 test-tool serve-v2 \
|
||||||
|
--advertise-capabilities >out &&
|
||||||
test-tool pkt-line unpack <out >actual &&
|
test-tool pkt-line unpack <out >actual &&
|
||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
@ -24,11 +25,11 @@ test_expect_success 'stateless-rpc flag does not list capabilities' '
|
|||||||
test-tool pkt-line pack >in <<-EOF &&
|
test-tool pkt-line pack >in <<-EOF &&
|
||||||
0000
|
0000
|
||||||
EOF
|
EOF
|
||||||
git serve --stateless-rpc >out <in &&
|
test-tool serve-v2 --stateless-rpc >out <in &&
|
||||||
test_must_be_empty out &&
|
test_must_be_empty out &&
|
||||||
|
|
||||||
# EOF
|
# EOF
|
||||||
git serve --stateless-rpc >out &&
|
test-tool serve-v2 --stateless-rpc >out &&
|
||||||
test_must_be_empty out
|
test_must_be_empty out
|
||||||
'
|
'
|
||||||
|
|
||||||
@ -37,7 +38,7 @@ test_expect_success 'request invalid capability' '
|
|||||||
foobar
|
foobar
|
||||||
0000
|
0000
|
||||||
EOF
|
EOF
|
||||||
test_must_fail git serve --stateless-rpc 2>err <in &&
|
test_must_fail test-tool serve-v2 --stateless-rpc 2>err <in &&
|
||||||
test_i18ngrep "unknown capability" err
|
test_i18ngrep "unknown capability" err
|
||||||
'
|
'
|
||||||
|
|
||||||
@ -46,7 +47,7 @@ test_expect_success 'request with no command' '
|
|||||||
agent=git/test
|
agent=git/test
|
||||||
0000
|
0000
|
||||||
EOF
|
EOF
|
||||||
test_must_fail git serve --stateless-rpc 2>err <in &&
|
test_must_fail test-tool serve-v2 --stateless-rpc 2>err <in &&
|
||||||
test_i18ngrep "no command requested" err
|
test_i18ngrep "no command requested" err
|
||||||
'
|
'
|
||||||
|
|
||||||
@ -56,7 +57,7 @@ test_expect_success 'request invalid command' '
|
|||||||
agent=git/test
|
agent=git/test
|
||||||
0000
|
0000
|
||||||
EOF
|
EOF
|
||||||
test_must_fail git serve --stateless-rpc 2>err <in &&
|
test_must_fail test-tool serve-v2 --stateless-rpc 2>err <in &&
|
||||||
test_i18ngrep "invalid command" err
|
test_i18ngrep "invalid command" err
|
||||||
'
|
'
|
||||||
|
|
||||||
@ -87,7 +88,7 @@ test_expect_success 'basics of ls-refs' '
|
|||||||
0000
|
0000
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
git serve --stateless-rpc <in >out &&
|
test-tool serve-v2 --stateless-rpc <in >out &&
|
||||||
test-tool pkt-line unpack <out >actual &&
|
test-tool pkt-line unpack <out >actual &&
|
||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
@ -107,7 +108,7 @@ test_expect_success 'basic ref-prefixes' '
|
|||||||
0000
|
0000
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
git serve --stateless-rpc <in >out &&
|
test-tool serve-v2 --stateless-rpc <in >out &&
|
||||||
test-tool pkt-line unpack <out >actual &&
|
test-tool pkt-line unpack <out >actual &&
|
||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
@ -127,7 +128,7 @@ test_expect_success 'refs/heads prefix' '
|
|||||||
0000
|
0000
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
git serve --stateless-rpc <in >out &&
|
test-tool serve-v2 --stateless-rpc <in >out &&
|
||||||
test-tool pkt-line unpack <out >actual &&
|
test-tool pkt-line unpack <out >actual &&
|
||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
@ -148,7 +149,7 @@ test_expect_success 'peel parameter' '
|
|||||||
0000
|
0000
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
git serve --stateless-rpc <in >out &&
|
test-tool serve-v2 --stateless-rpc <in >out &&
|
||||||
test-tool pkt-line unpack <out >actual &&
|
test-tool pkt-line unpack <out >actual &&
|
||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
@ -169,7 +170,7 @@ test_expect_success 'symrefs parameter' '
|
|||||||
0000
|
0000
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
git serve --stateless-rpc <in >out &&
|
test-tool serve-v2 --stateless-rpc <in >out &&
|
||||||
test-tool pkt-line unpack <out >actual &&
|
test-tool pkt-line unpack <out >actual &&
|
||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
@ -189,7 +190,7 @@ test_expect_success 'sending server-options' '
|
|||||||
0000
|
0000
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
git serve --stateless-rpc <in >out &&
|
test-tool serve-v2 --stateless-rpc <in >out &&
|
||||||
test-tool pkt-line unpack <out >actual &&
|
test-tool pkt-line unpack <out >actual &&
|
||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
@ -204,7 +205,10 @@ test_expect_success 'unexpected lines are not allowed in fetch request' '
|
|||||||
0000
|
0000
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
test_must_fail git -C server serve --stateless-rpc <in >/dev/null 2>err &&
|
(
|
||||||
|
cd server &&
|
||||||
|
test_must_fail test-tool serve-v2 --stateless-rpc
|
||||||
|
) <in >/dev/null 2>err &&
|
||||||
grep "unexpected line: .this-is-not-a-command." err
|
grep "unexpected line: .this-is-not-a-command." err
|
||||||
'
|
'
|
||||||
|
|
||||||
|
@ -359,12 +359,13 @@ test_expect_success 'even with handcrafted request, filter does not work if not
|
|||||||
0000
|
0000
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
test_must_fail git -C server serve --stateless-rpc <in >/dev/null 2>err &&
|
test_must_fail test-tool -C server serve-v2 --stateless-rpc \
|
||||||
|
<in >/dev/null 2>err &&
|
||||||
grep "unexpected line: .filter blob:none." err &&
|
grep "unexpected line: .filter blob:none." err &&
|
||||||
|
|
||||||
# Exercise to ensure that if advertised, filter works
|
# Exercise to ensure that if advertised, filter works
|
||||||
git -C server config uploadpack.allowfilter 1 &&
|
git -C server config uploadpack.allowfilter 1 &&
|
||||||
git -C server serve --stateless-rpc <in >/dev/null
|
test-tool -C server serve-v2 --stateless-rpc <in >/dev/null
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'default refspec is used to filter ref when fetchcing' '
|
test_expect_success 'default refspec is used to filter ref when fetchcing' '
|
||||||
|
@ -48,15 +48,15 @@ test_expect_success 'setup repository' '
|
|||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'config controls ref-in-want advertisement' '
|
test_expect_success 'config controls ref-in-want advertisement' '
|
||||||
git serve --advertise-capabilities >out &&
|
test-tool serve-v2 --advertise-capabilities >out &&
|
||||||
! grep -a ref-in-want out &&
|
! grep -a ref-in-want out &&
|
||||||
|
|
||||||
git config uploadpack.allowRefInWant false &&
|
git config uploadpack.allowRefInWant false &&
|
||||||
git serve --advertise-capabilities >out &&
|
test-tool serve-v2 --advertise-capabilities >out &&
|
||||||
! grep -a ref-in-want out &&
|
! grep -a ref-in-want out &&
|
||||||
|
|
||||||
git config uploadpack.allowRefInWant true &&
|
git config uploadpack.allowRefInWant true &&
|
||||||
git serve --advertise-capabilities >out &&
|
test-tool serve-v2 --advertise-capabilities >out &&
|
||||||
grep -a ref-in-want out
|
grep -a ref-in-want out
|
||||||
'
|
'
|
||||||
|
|
||||||
@ -70,7 +70,7 @@ test_expect_success 'invalid want-ref line' '
|
|||||||
0000
|
0000
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
test_must_fail git serve --stateless-rpc 2>out <in &&
|
test_must_fail test-tool serve-v2 --stateless-rpc 2>out <in &&
|
||||||
grep "unknown ref" out
|
grep "unknown ref" out
|
||||||
'
|
'
|
||||||
|
|
||||||
@ -90,7 +90,7 @@ test_expect_success 'basic want-ref' '
|
|||||||
0000
|
0000
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
git serve --stateless-rpc >out <in &&
|
test-tool serve-v2 --stateless-rpc >out <in &&
|
||||||
check_output
|
check_output
|
||||||
'
|
'
|
||||||
|
|
||||||
@ -112,7 +112,7 @@ test_expect_success 'multiple want-ref lines' '
|
|||||||
0000
|
0000
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
git serve --stateless-rpc >out <in &&
|
test-tool serve-v2 --stateless-rpc >out <in &&
|
||||||
check_output
|
check_output
|
||||||
'
|
'
|
||||||
|
|
||||||
@ -133,7 +133,7 @@ test_expect_success 'mix want and want-ref' '
|
|||||||
0000
|
0000
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
git serve --stateless-rpc >out <in &&
|
test-tool serve-v2 --stateless-rpc >out <in &&
|
||||||
check_output
|
check_output
|
||||||
'
|
'
|
||||||
|
|
||||||
@ -153,7 +153,7 @@ test_expect_success 'want-ref with ref we already have commit for' '
|
|||||||
0000
|
0000
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
git serve --stateless-rpc >out <in &&
|
test-tool serve-v2 --stateless-rpc >out <in &&
|
||||||
check_output
|
check_output
|
||||||
'
|
'
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user