| /* | |
| * 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; | |
| } |