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:
Johannes Schindelin 2019-04-18 06:16:51 -07:00 коммит произвёл Junio C Hamano
Родитель 6ea18fffb0
Коммит b7ce24d095
9 изменённых файлов: 36 добавлений и 30 удалений

Просмотреть файл

@ -758,6 +758,7 @@ TEST_BUILTINS_OBJS += test-repository.o
TEST_BUILTINS_OBJS += test-revision-walking.o
TEST_BUILTINS_OBJS += test-run-command.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-array.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/rm.o
BUILTIN_OBJS += builtin/send-pack.o
BUILTIN_OBJS += builtin/serve.o
BUILTIN_OBJS += builtin/shortlog.o
BUILTIN_OBJS += builtin/show-branch.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_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_serve(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_branch(int argc, const char **argv, const char *prefix);

1
git.c
Просмотреть файл

@ -548,7 +548,6 @@ static struct cmd_struct commands[] = {
{ "revert", cmd_revert, RUN_SETUP | NEED_WORK_TREE },
{ "rm", cmd_rm, RUN_SETUP },
{ "send-pack", cmd_send_pack, RUN_SETUP },
{ "serve", cmd_serve, RUN_SETUP },
{ "shortlog", cmd_shortlog, RUN_SETUP_GENTLY | USE_PAGER },
{ "show", cmd_show, RUN_SETUP },
{ "show-branch", cmd_show_branch, RUN_SETUP },

Просмотреть файл

@ -1,14 +1,14 @@
#include "test-tool.h"
#include "cache.h"
#include "builtin.h"
#include "parse-options.h"
#include "serve.h"
static char const * const serve_usage[] = {
N_("git serve [<options>]"),
N_("test-tool serve-v2 [<options>]"),
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;
@ -19,6 +19,7 @@ int cmd_serve(int argc, const char **argv, const char *prefix)
N_("exit immediately after advertising capabilities")),
OPT_END()
};
const char *prefix = setup_git_directory();
/* ignore all unknown cmdline switches for now */
argc = parse_options(argc, argv, prefix, options, serve_usage,

Просмотреть файл

@ -48,6 +48,7 @@ static struct test_cmd cmds[] = {
{ "revision-walking", cmd__revision_walking },
{ "run-command", cmd__run_command },
{ "scrap-cache-tree", cmd__scrap_cache_tree },
{ "serve-v2", cmd__serve_v2 },
{ "sha1", cmd__sha1 },
{ "sha1-array", cmd__sha1_array },
{ "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__run_command(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_array(int argc, const char **argv);
int cmd__sha256(int argc, const char **argv);

Просмотреть файл

@ -1,6 +1,6 @@
#!/bin/sh
test_description='test git-serve and server commands'
test_description='test protocol v2 server commands'
. ./test-lib.sh
@ -14,7 +14,8 @@ test_expect_success 'test capability advertisement' '
0000
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_cmp expect actual
'
@ -24,11 +25,11 @@ test_expect_success 'stateless-rpc flag does not list capabilities' '
test-tool pkt-line pack >in <<-EOF &&
0000
EOF
git serve --stateless-rpc >out <in &&
test-tool serve-v2 --stateless-rpc >out <in &&
test_must_be_empty out &&
# EOF
git serve --stateless-rpc >out &&
test-tool serve-v2 --stateless-rpc >out &&
test_must_be_empty out
'
@ -37,7 +38,7 @@ test_expect_success 'request invalid capability' '
foobar
0000
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
'
@ -46,7 +47,7 @@ test_expect_success 'request with no command' '
agent=git/test
0000
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
'
@ -56,7 +57,7 @@ test_expect_success 'request invalid command' '
agent=git/test
0000
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
'
@ -87,7 +88,7 @@ test_expect_success 'basics of ls-refs' '
0000
EOF
git serve --stateless-rpc <in >out &&
test-tool serve-v2 --stateless-rpc <in >out &&
test-tool pkt-line unpack <out >actual &&
test_cmp expect actual
'
@ -107,7 +108,7 @@ test_expect_success 'basic ref-prefixes' '
0000
EOF
git serve --stateless-rpc <in >out &&
test-tool serve-v2 --stateless-rpc <in >out &&
test-tool pkt-line unpack <out >actual &&
test_cmp expect actual
'
@ -127,7 +128,7 @@ test_expect_success 'refs/heads prefix' '
0000
EOF
git serve --stateless-rpc <in >out &&
test-tool serve-v2 --stateless-rpc <in >out &&
test-tool pkt-line unpack <out >actual &&
test_cmp expect actual
'
@ -148,7 +149,7 @@ test_expect_success 'peel parameter' '
0000
EOF
git serve --stateless-rpc <in >out &&
test-tool serve-v2 --stateless-rpc <in >out &&
test-tool pkt-line unpack <out >actual &&
test_cmp expect actual
'
@ -169,7 +170,7 @@ test_expect_success 'symrefs parameter' '
0000
EOF
git serve --stateless-rpc <in >out &&
test-tool serve-v2 --stateless-rpc <in >out &&
test-tool pkt-line unpack <out >actual &&
test_cmp expect actual
'
@ -189,7 +190,7 @@ test_expect_success 'sending server-options' '
0000
EOF
git serve --stateless-rpc <in >out &&
test-tool serve-v2 --stateless-rpc <in >out &&
test-tool pkt-line unpack <out >actual &&
test_cmp expect actual
'
@ -204,7 +205,10 @@ test_expect_success 'unexpected lines are not allowed in fetch request' '
0000
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
'

Просмотреть файл

@ -359,12 +359,13 @@ test_expect_success 'even with handcrafted request, filter does not work if not
0000
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 &&
# Exercise to ensure that if advertised, filter works
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' '

Просмотреть файл

@ -48,15 +48,15 @@ test_expect_success 'setup repository' '
'
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 &&
git config uploadpack.allowRefInWant false &&
git serve --advertise-capabilities >out &&
test-tool serve-v2 --advertise-capabilities >out &&
! grep -a ref-in-want out &&
git config uploadpack.allowRefInWant true &&
git serve --advertise-capabilities >out &&
test-tool serve-v2 --advertise-capabilities >out &&
grep -a ref-in-want out
'
@ -70,7 +70,7 @@ test_expect_success 'invalid want-ref line' '
0000
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
'
@ -90,7 +90,7 @@ test_expect_success 'basic want-ref' '
0000
EOF
git serve --stateless-rpc >out <in &&
test-tool serve-v2 --stateless-rpc >out <in &&
check_output
'
@ -112,7 +112,7 @@ test_expect_success 'multiple want-ref lines' '
0000
EOF
git serve --stateless-rpc >out <in &&
test-tool serve-v2 --stateless-rpc >out <in &&
check_output
'
@ -133,7 +133,7 @@ test_expect_success 'mix want and want-ref' '
0000
EOF
git serve --stateless-rpc >out <in &&
test-tool serve-v2 --stateless-rpc >out <in &&
check_output
'
@ -153,7 +153,7 @@ test_expect_success 'want-ref with ref we already have commit for' '
0000
EOF
git serve --stateless-rpc >out <in &&
test-tool serve-v2 --stateless-rpc >out <in &&
check_output
'