test-run-command.con commit Merge branch 'aw/push-force-with-lease-reporting' (24abb31)
   1/*
   2 * test-run-command.c: test run command API.
   3 *
   4 * (C) 2009 Ilari Liusvaara <ilari.liusvaara@elisanet.fi>
   5 *
   6 * This code is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License version 2 as
   8 * published by the Free Software Foundation.
   9 */
  10
  11#include "git-compat-util.h"
  12#include "run-command.h"
  13#include "argv-array.h"
  14#include "strbuf.h"
  15#include <string.h>
  16#include <errno.h>
  17
  18static int number_callbacks;
  19static int parallel_next(struct child_process *cp,
  20                         struct strbuf *err,
  21                         void *cb,
  22                         void **task_cb)
  23{
  24        struct child_process *d = cb;
  25        if (number_callbacks >= 4)
  26                return 0;
  27
  28        argv_array_pushv(&cp->args, d->argv);
  29        strbuf_addf(err, "preloaded output of a child\n");
  30        number_callbacks++;
  31        return 1;
  32}
  33
  34static int no_job(struct child_process *cp,
  35                  struct strbuf *err,
  36                  void *cb,
  37                  void **task_cb)
  38{
  39        strbuf_addf(err, "no further jobs available\n");
  40        return 0;
  41}
  42
  43static int task_finished(int result,
  44                         struct child_process *cp,
  45                         struct strbuf *err,
  46                         void *pp_cb,
  47                         void *pp_task_cb)
  48{
  49        strbuf_addf(err, "asking for a quick stop\n");
  50        return 1;
  51}
  52
  53int main(int argc, char **argv)
  54{
  55        struct child_process proc = CHILD_PROCESS_INIT;
  56        int jobs;
  57
  58        if (argc < 3)
  59                return 1;
  60        proc.argv = (const char **)argv + 2;
  61
  62        if (!strcmp(argv[1], "start-command-ENOENT")) {
  63                if (start_command(&proc) < 0 && errno == ENOENT)
  64                        return 0;
  65                fprintf(stderr, "FAIL %s\n", argv[1]);
  66                return 1;
  67        }
  68        if (!strcmp(argv[1], "run-command"))
  69                exit(run_command(&proc));
  70
  71        jobs = atoi(argv[2]);
  72        proc.argv = (const char **)argv + 3;
  73
  74        if (!strcmp(argv[1], "run-command-parallel"))
  75                exit(run_processes_parallel(jobs, parallel_next,
  76                                            NULL, NULL, &proc));
  77
  78        if (!strcmp(argv[1], "run-command-abort"))
  79                exit(run_processes_parallel(jobs, parallel_next,
  80                                            NULL, task_finished, &proc));
  81
  82        if (!strcmp(argv[1], "run-command-no-jobs"))
  83                exit(run_processes_parallel(jobs, no_job,
  84                                            NULL, task_finished, &proc));
  85
  86        fprintf(stderr, "check usage\n");
  87        return 1;
  88}