diff options
Diffstat (limited to 't/helper/test-run-command.c')
| -rw-r--r-- | t/helper/test-run-command.c | 87 | 
1 files changed, 87 insertions, 0 deletions
| diff --git a/t/helper/test-run-command.c b/t/helper/test-run-command.c new file mode 100644 index 0000000000..d24d157379 --- /dev/null +++ b/t/helper/test-run-command.c @@ -0,0 +1,87 @@ +/* + * test-run-command.c: test run command API. + * + * (C) 2009 Ilari Liusvaara <ilari.liusvaara@elisanet.fi> + * + * This code is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include "git-compat-util.h" +#include "run-command.h" +#include "argv-array.h" +#include "strbuf.h" +#include <string.h> +#include <errno.h> + +static int number_callbacks; +static int parallel_next(struct child_process *cp, +			 struct strbuf *err, +			 void *cb, +			 void **task_cb) +{ +	struct child_process *d = cb; +	if (number_callbacks >= 4) +		return 0; + +	argv_array_pushv(&cp->args, d->argv); +	strbuf_addstr(err, "preloaded output of a child\n"); +	number_callbacks++; +	return 1; +} + +static int no_job(struct child_process *cp, +		  struct strbuf *err, +		  void *cb, +		  void **task_cb) +{ +	strbuf_addstr(err, "no further jobs available\n"); +	return 0; +} + +static int task_finished(int result, +			 struct strbuf *err, +			 void *pp_cb, +			 void *pp_task_cb) +{ +	strbuf_addstr(err, "asking for a quick stop\n"); +	return 1; +} + +int cmd_main(int argc, const char **argv) +{ +	struct child_process proc = CHILD_PROCESS_INIT; +	int jobs; + +	if (argc < 3) +		return 1; +	proc.argv = (const char **)argv + 2; + +	if (!strcmp(argv[1], "start-command-ENOENT")) { +		if (start_command(&proc) < 0 && errno == ENOENT) +			return 0; +		fprintf(stderr, "FAIL %s\n", argv[1]); +		return 1; +	} +	if (!strcmp(argv[1], "run-command")) +		exit(run_command(&proc)); + +	jobs = atoi(argv[2]); +	proc.argv = (const char **)argv + 3; + +	if (!strcmp(argv[1], "run-command-parallel")) +		exit(run_processes_parallel(jobs, parallel_next, +					    NULL, NULL, &proc)); + +	if (!strcmp(argv[1], "run-command-abort")) +		exit(run_processes_parallel(jobs, parallel_next, +					    NULL, task_finished, &proc)); + +	if (!strcmp(argv[1], "run-command-no-jobs")) +		exit(run_processes_parallel(jobs, no_job, +					    NULL, task_finished, &proc)); + +	fprintf(stderr, "check usage\n"); +	return 1; +} | 
