Coverage Report

Created: 2024-09-08 06:23

/src/git/run-command.c
Line
Count
Source (jump to first uncovered line)
1
#define USE_THE_REPOSITORY_VARIABLE
2
3
#include "git-compat-util.h"
4
#include "run-command.h"
5
#include "environment.h"
6
#include "exec-cmd.h"
7
#include "gettext.h"
8
#include "sigchain.h"
9
#include "strvec.h"
10
#include "symlinks.h"
11
#include "thread-utils.h"
12
#include "strbuf.h"
13
#include "string-list.h"
14
#include "trace.h"
15
#include "trace2.h"
16
#include "quote.h"
17
#include "config.h"
18
#include "packfile.h"
19
#include "compat/nonblock.h"
20
21
void child_process_init(struct child_process *child)
22
0
{
23
0
  struct child_process blank = CHILD_PROCESS_INIT;
24
0
  memcpy(child, &blank, sizeof(*child));
25
0
}
26
27
void child_process_clear(struct child_process *child)
28
0
{
29
0
  strvec_clear(&child->args);
30
0
  strvec_clear(&child->env);
31
0
}
32
33
struct child_to_clean {
34
  pid_t pid;
35
  struct child_process *process;
36
  struct child_to_clean *next;
37
};
38
static struct child_to_clean *children_to_clean;
39
static int installed_child_cleanup_handler;
40
41
static void cleanup_children(int sig, int in_signal)
42
0
{
43
0
  struct child_to_clean *children_to_wait_for = NULL;
44
45
0
  while (children_to_clean) {
46
0
    struct child_to_clean *p = children_to_clean;
47
0
    children_to_clean = p->next;
48
49
0
    if (p->process && !in_signal) {
50
0
      struct child_process *process = p->process;
51
0
      if (process->clean_on_exit_handler) {
52
0
        trace_printf(
53
0
          "trace: run_command: running exit handler for pid %"
54
0
          PRIuMAX, (uintmax_t)p->pid
55
0
        );
56
0
        process->clean_on_exit_handler(process);
57
0
      }
58
0
    }
59
60
0
    kill(p->pid, sig);
61
62
0
    if (p->process && p->process->wait_after_clean) {
63
0
      p->next = children_to_wait_for;
64
0
      children_to_wait_for = p;
65
0
    } else {
66
0
      if (!in_signal)
67
0
        free(p);
68
0
    }
69
0
  }
70
71
0
  while (children_to_wait_for) {
72
0
    struct child_to_clean *p = children_to_wait_for;
73
0
    children_to_wait_for = p->next;
74
75
0
    while (waitpid(p->pid, NULL, 0) < 0 && errno == EINTR)
76
0
      ; /* spin waiting for process exit or error */
77
78
0
    if (!in_signal)
79
0
      free(p);
80
0
  }
81
0
}
82
83
static void cleanup_children_on_signal(int sig)
84
0
{
85
0
  cleanup_children(sig, 1);
86
0
  sigchain_pop(sig);
87
0
  raise(sig);
88
0
}
89
90
static void cleanup_children_on_exit(void)
91
0
{
92
0
  cleanup_children(SIGTERM, 0);
93
0
}
94
95
static void mark_child_for_cleanup(pid_t pid, struct child_process *process)
96
0
{
97
0
  struct child_to_clean *p = xmalloc(sizeof(*p));
98
0
  p->pid = pid;
99
0
  p->process = process;
100
0
  p->next = children_to_clean;
101
0
  children_to_clean = p;
102
103
0
  if (!installed_child_cleanup_handler) {
104
0
    atexit(cleanup_children_on_exit);
105
0
    sigchain_push_common(cleanup_children_on_signal);
106
0
    installed_child_cleanup_handler = 1;
107
0
  }
108
0
}
109
110
static void clear_child_for_cleanup(pid_t pid)
111
0
{
112
0
  struct child_to_clean **pp;
113
114
0
  for (pp = &children_to_clean; *pp; pp = &(*pp)->next) {
115
0
    struct child_to_clean *clean_me = *pp;
116
117
0
    if (clean_me->pid == pid) {
118
0
      *pp = clean_me->next;
119
0
      free(clean_me);
120
0
      return;
121
0
    }
122
0
  }
123
0
}
124
125
static inline void close_pair(int fd[2])
126
0
{
127
0
  close(fd[0]);
128
0
  close(fd[1]);
129
0
}
130
131
int is_executable(const char *name)
132
0
{
133
0
  struct stat st;
134
135
0
  if (stat(name, &st) || /* stat, not lstat */
136
0
      !S_ISREG(st.st_mode))
137
0
    return 0;
138
139
#if defined(GIT_WINDOWS_NATIVE)
140
  /*
141
   * On Windows there is no executable bit. The file extension
142
   * indicates whether it can be run as an executable, and Git
143
   * has special-handling to detect scripts and launch them
144
   * through the indicated script interpreter. We test for the
145
   * file extension first because virus scanners may make
146
   * it quite expensive to open many files.
147
   */
148
  if (ends_with(name, ".exe"))
149
    return S_IXUSR;
150
151
{
152
  /*
153
   * Now that we know it does not have an executable extension,
154
   * peek into the file instead.
155
   */
156
  char buf[3] = { 0 };
157
  int n;
158
  int fd = open(name, O_RDONLY);
159
  st.st_mode &= ~S_IXUSR;
160
  if (fd >= 0) {
161
    n = read(fd, buf, 2);
162
    if (n == 2)
163
      /* look for a she-bang */
164
      if (!strcmp(buf, "#!"))
165
        st.st_mode |= S_IXUSR;
166
    close(fd);
167
  }
168
}
169
#endif
170
0
  return st.st_mode & S_IXUSR;
171
0
}
172
173
#ifndef locate_in_PATH
174
/*
175
 * Search $PATH for a command.  This emulates the path search that
176
 * execvp would perform, without actually executing the command so it
177
 * can be used before fork() to prepare to run a command using
178
 * execve() or after execvp() to diagnose why it failed.
179
 *
180
 * The caller should ensure that file contains no directory
181
 * separators.
182
 *
183
 * Returns the path to the command, as found in $PATH or NULL if the
184
 * command could not be found.  The caller inherits ownership of the memory
185
 * used to store the resultant path.
186
 *
187
 * This should not be used on Windows, where the $PATH search rules
188
 * are more complicated (e.g., a search for "foo" should find
189
 * "foo.exe").
190
 */
191
static char *locate_in_PATH(const char *file)
192
0
{
193
0
  const char *p = getenv("PATH");
194
0
  struct strbuf buf = STRBUF_INIT;
195
196
0
  if (!p || !*p)
197
0
    return NULL;
198
199
0
  while (1) {
200
0
    const char *end = strchrnul(p, ':');
201
202
0
    strbuf_reset(&buf);
203
204
    /* POSIX specifies an empty entry as the current directory. */
205
0
    if (end != p) {
206
0
      strbuf_add(&buf, p, end - p);
207
0
      strbuf_addch(&buf, '/');
208
0
    }
209
0
    strbuf_addstr(&buf, file);
210
211
0
    if (is_executable(buf.buf))
212
0
      return strbuf_detach(&buf, NULL);
213
214
0
    if (!*end)
215
0
      break;
216
0
    p = end + 1;
217
0
  }
218
219
0
  strbuf_release(&buf);
220
0
  return NULL;
221
0
}
222
#endif
223
224
int exists_in_PATH(const char *command)
225
0
{
226
0
  char *r = locate_in_PATH(command);
227
0
  int found = r != NULL;
228
0
  free(r);
229
0
  return found;
230
0
}
231
232
int sane_execvp(const char *file, char * const argv[])
233
0
{
234
0
#ifndef GIT_WINDOWS_NATIVE
235
  /*
236
   * execvp() doesn't return, so we all we can do is tell trace2
237
   * what we are about to do and let it leave a hint in the log
238
   * (unless of course the execvp() fails).
239
   *
240
   * we skip this for Windows because the compat layer already
241
   * has to emulate the execvp() call anyway.
242
   */
243
0
  int exec_id = trace2_exec(file, (const char **)argv);
244
0
#endif
245
246
0
  if (!execvp(file, argv))
247
0
    return 0; /* cannot happen ;-) */
248
249
0
#ifndef GIT_WINDOWS_NATIVE
250
0
  {
251
0
    int ec = errno;
252
0
    trace2_exec_result(exec_id, ec);
253
0
    errno = ec;
254
0
  }
255
0
#endif
256
257
  /*
258
   * When a command can't be found because one of the directories
259
   * listed in $PATH is unsearchable, execvp reports EACCES, but
260
   * careful usability testing (read: analysis of occasional bug
261
   * reports) reveals that "No such file or directory" is more
262
   * intuitive.
263
   *
264
   * We avoid commands with "/", because execvp will not do $PATH
265
   * lookups in that case.
266
   *
267
   * The reassignment of EACCES to errno looks like a no-op below,
268
   * but we need to protect against exists_in_PATH overwriting errno.
269
   */
270
0
  if (errno == EACCES && !strchr(file, '/'))
271
0
    errno = exists_in_PATH(file) ? EACCES : ENOENT;
272
0
  else if (errno == ENOTDIR && !strchr(file, '/'))
273
0
    errno = ENOENT;
274
0
  return -1;
275
0
}
276
277
char *git_shell_path(void)
278
0
{
279
0
#ifndef GIT_WINDOWS_NATIVE
280
0
  return xstrdup(SHELL_PATH);
281
#else
282
  char *p = locate_in_PATH("sh");
283
  convert_slashes(p);
284
  return p;
285
#endif
286
0
}
287
288
static const char **prepare_shell_cmd(struct strvec *out, const char **argv)
289
0
{
290
0
  if (!argv[0])
291
0
    BUG("shell command is empty");
292
293
0
  if (strcspn(argv[0], "|&;<>()$`\\\"' \t\n*?[#~=%") != strlen(argv[0])) {
294
0
    strvec_push_nodup(out, git_shell_path());
295
0
    strvec_push(out, "-c");
296
297
    /*
298
     * If we have no extra arguments, we do not even need to
299
     * bother with the "$@" magic.
300
     */
301
0
    if (!argv[1])
302
0
      strvec_push(out, argv[0]);
303
0
    else
304
0
      strvec_pushf(out, "%s \"$@\"", argv[0]);
305
0
  }
306
307
0
  strvec_pushv(out, argv);
308
0
  return out->v;
309
0
}
310
311
#ifndef GIT_WINDOWS_NATIVE
312
static int child_notifier = -1;
313
314
enum child_errcode {
315
  CHILD_ERR_CHDIR,
316
  CHILD_ERR_DUP2,
317
  CHILD_ERR_CLOSE,
318
  CHILD_ERR_SIGPROCMASK,
319
  CHILD_ERR_SILENT,
320
  CHILD_ERR_ERRNO
321
};
322
323
struct child_err {
324
  enum child_errcode err;
325
  int syserr; /* errno */
326
};
327
328
static void child_die(enum child_errcode err)
329
0
{
330
0
  struct child_err buf;
331
332
0
  buf.err = err;
333
0
  buf.syserr = errno;
334
335
  /* write(2) on buf smaller than PIPE_BUF (min 512) is atomic: */
336
0
  xwrite(child_notifier, &buf, sizeof(buf));
337
0
  _exit(1);
338
0
}
339
340
static void child_dup2(int fd, int to)
341
0
{
342
0
  if (dup2(fd, to) < 0)
343
0
    child_die(CHILD_ERR_DUP2);
344
0
}
345
346
static void child_close(int fd)
347
0
{
348
0
  if (close(fd))
349
0
    child_die(CHILD_ERR_CLOSE);
350
0
}
351
352
static void child_close_pair(int fd[2])
353
0
{
354
0
  child_close(fd[0]);
355
0
  child_close(fd[1]);
356
0
}
357
358
static void child_error_fn(const char *err UNUSED, va_list params UNUSED)
359
0
{
360
0
  const char msg[] = "error() should not be called in child\n";
361
0
  xwrite(2, msg, sizeof(msg) - 1);
362
0
}
363
364
static void child_warn_fn(const char *err UNUSED, va_list params UNUSED)
365
0
{
366
0
  const char msg[] = "warn() should not be called in child\n";
367
0
  xwrite(2, msg, sizeof(msg) - 1);
368
0
}
369
370
static void NORETURN child_die_fn(const char *err UNUSED, va_list params UNUSED)
371
0
{
372
0
  const char msg[] = "die() should not be called in child\n";
373
0
  xwrite(2, msg, sizeof(msg) - 1);
374
0
  _exit(2);
375
0
}
376
377
/* this runs in the parent process */
378
static void child_err_spew(struct child_process *cmd, struct child_err *cerr)
379
0
{
380
0
  static void (*old_errfn)(const char *err, va_list params);
381
0
  report_fn die_message_routine = get_die_message_routine();
382
383
0
  old_errfn = get_error_routine();
384
0
  set_error_routine(die_message_routine);
385
0
  errno = cerr->syserr;
386
387
0
  switch (cerr->err) {
388
0
  case CHILD_ERR_CHDIR:
389
0
    error_errno("exec '%s': cd to '%s' failed",
390
0
          cmd->args.v[0], cmd->dir);
391
0
    break;
392
0
  case CHILD_ERR_DUP2:
393
0
    error_errno("dup2() in child failed");
394
0
    break;
395
0
  case CHILD_ERR_CLOSE:
396
0
    error_errno("close() in child failed");
397
0
    break;
398
0
  case CHILD_ERR_SIGPROCMASK:
399
0
    error_errno("sigprocmask failed restoring signals");
400
0
    break;
401
0
  case CHILD_ERR_SILENT:
402
0
    break;
403
0
  case CHILD_ERR_ERRNO:
404
0
    error_errno("cannot exec '%s'", cmd->args.v[0]);
405
0
    break;
406
0
  }
407
0
  set_error_routine(old_errfn);
408
0
}
409
410
static int prepare_cmd(struct strvec *out, const struct child_process *cmd)
411
0
{
412
0
  if (!cmd->args.v[0])
413
0
    BUG("command is empty");
414
415
  /*
416
   * Add SHELL_PATH so in the event exec fails with ENOEXEC we can
417
   * attempt to interpret the command with 'sh'.
418
   */
419
0
  strvec_push(out, SHELL_PATH);
420
421
0
  if (cmd->git_cmd) {
422
0
    prepare_git_cmd(out, cmd->args.v);
423
0
  } else if (cmd->use_shell) {
424
0
    prepare_shell_cmd(out, cmd->args.v);
425
0
  } else {
426
0
    strvec_pushv(out, cmd->args.v);
427
0
  }
428
429
  /*
430
   * If there are no dir separator characters in the command then perform
431
   * a path lookup and use the resolved path as the command to exec. If
432
   * there are dir separator characters, we have exec attempt to invoke
433
   * the command directly.
434
   */
435
0
  if (!has_dir_sep(out->v[1])) {
436
0
    char *program = locate_in_PATH(out->v[1]);
437
0
    if (program) {
438
0
      free((char *)out->v[1]);
439
0
      out->v[1] = program;
440
0
    } else {
441
0
      strvec_clear(out);
442
0
      errno = ENOENT;
443
0
      return -1;
444
0
    }
445
0
  }
446
447
0
  return 0;
448
0
}
449
450
static char **prep_childenv(const char *const *deltaenv)
451
0
{
452
0
  extern char **environ;
453
0
  char **childenv;
454
0
  struct string_list env = STRING_LIST_INIT_DUP;
455
0
  struct strbuf key = STRBUF_INIT;
456
0
  const char *const *p;
457
0
  int i;
458
459
  /* Construct a sorted string list consisting of the current environ */
460
0
  for (p = (const char *const *) environ; p && *p; p++) {
461
0
    const char *equals = strchr(*p, '=');
462
463
0
    if (equals) {
464
0
      strbuf_reset(&key);
465
0
      strbuf_add(&key, *p, equals - *p);
466
0
      string_list_append(&env, key.buf)->util = (void *) *p;
467
0
    } else {
468
0
      string_list_append(&env, *p)->util = (void *) *p;
469
0
    }
470
0
  }
471
0
  string_list_sort(&env);
472
473
  /* Merge in 'deltaenv' with the current environ */
474
0
  for (p = deltaenv; p && *p; p++) {
475
0
    const char *equals = strchr(*p, '=');
476
477
0
    if (equals) {
478
      /* ('key=value'), insert or replace entry */
479
0
      strbuf_reset(&key);
480
0
      strbuf_add(&key, *p, equals - *p);
481
0
      string_list_insert(&env, key.buf)->util = (void *) *p;
482
0
    } else {
483
      /* otherwise ('key') remove existing entry */
484
0
      string_list_remove(&env, *p, 0);
485
0
    }
486
0
  }
487
488
  /* Create an array of 'char *' to be used as the childenv */
489
0
  ALLOC_ARRAY(childenv, env.nr + 1);
490
0
  for (i = 0; i < env.nr; i++)
491
0
    childenv[i] = env.items[i].util;
492
0
  childenv[env.nr] = NULL;
493
494
0
  string_list_clear(&env, 0);
495
0
  strbuf_release(&key);
496
0
  return childenv;
497
0
}
498
499
struct atfork_state {
500
#ifndef NO_PTHREADS
501
  int cs;
502
#endif
503
  sigset_t old;
504
};
505
506
#define CHECK_BUG(err, msg) \
507
0
  do { \
508
0
    int e = (err); \
509
0
    if (e) \
510
0
      BUG("%s: %s", msg, strerror(e)); \
511
0
  } while(0)
512
513
static void atfork_prepare(struct atfork_state *as)
514
0
{
515
0
  sigset_t all;
516
517
0
  if (sigfillset(&all))
518
0
    die_errno("sigfillset");
519
#ifdef NO_PTHREADS
520
  if (sigprocmask(SIG_SETMASK, &all, &as->old))
521
    die_errno("sigprocmask");
522
#else
523
0
  CHECK_BUG(pthread_sigmask(SIG_SETMASK, &all, &as->old),
524
0
    "blocking all signals");
525
0
  CHECK_BUG(pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &as->cs),
526
0
    "disabling cancellation");
527
0
#endif
528
0
}
529
530
static void atfork_parent(struct atfork_state *as)
531
0
{
532
#ifdef NO_PTHREADS
533
  if (sigprocmask(SIG_SETMASK, &as->old, NULL))
534
    die_errno("sigprocmask");
535
#else
536
0
  CHECK_BUG(pthread_setcancelstate(as->cs, NULL),
537
0
    "re-enabling cancellation");
538
0
  CHECK_BUG(pthread_sigmask(SIG_SETMASK, &as->old, NULL),
539
0
    "restoring signal mask");
540
0
#endif
541
0
}
542
#endif /* GIT_WINDOWS_NATIVE */
543
544
static inline void set_cloexec(int fd)
545
0
{
546
0
  int flags = fcntl(fd, F_GETFD);
547
0
  if (flags >= 0)
548
0
    fcntl(fd, F_SETFD, flags | FD_CLOEXEC);
549
0
}
550
551
static int wait_or_whine(pid_t pid, const char *argv0, int in_signal)
552
0
{
553
0
  int status, code = -1;
554
0
  pid_t waiting;
555
0
  int failed_errno = 0;
556
557
0
  while ((waiting = waitpid(pid, &status, 0)) < 0 && errno == EINTR)
558
0
    ;  /* nothing */
559
560
0
  if (waiting < 0) {
561
0
    failed_errno = errno;
562
0
    if (!in_signal)
563
0
      error_errno("waitpid for %s failed", argv0);
564
0
  } else if (waiting != pid) {
565
0
    if (!in_signal)
566
0
      error("waitpid is confused (%s)", argv0);
567
0
  } else if (WIFSIGNALED(status)) {
568
0
    code = WTERMSIG(status);
569
0
    if (!in_signal && code != SIGINT && code != SIGQUIT && code != SIGPIPE)
570
0
      error("%s died of signal %d", argv0, code);
571
    /*
572
     * This return value is chosen so that code & 0xff
573
     * mimics the exit code that a POSIX shell would report for
574
     * a program that died from this signal.
575
     */
576
0
    code += 128;
577
0
  } else if (WIFEXITED(status)) {
578
0
    code = WEXITSTATUS(status);
579
0
  } else {
580
0
    if (!in_signal)
581
0
      error("waitpid is confused (%s)", argv0);
582
0
  }
583
584
0
  if (!in_signal)
585
0
    clear_child_for_cleanup(pid);
586
587
0
  errno = failed_errno;
588
0
  return code;
589
0
}
590
591
static void trace_add_env(struct strbuf *dst, const char *const *deltaenv)
592
0
{
593
0
  struct string_list envs = STRING_LIST_INIT_DUP;
594
0
  const char *const *e;
595
0
  int i;
596
0
  int printed_unset = 0;
597
598
  /* Last one wins, see run-command.c:prep_childenv() for context */
599
0
  for (e = deltaenv; e && *e; e++) {
600
0
    struct strbuf key = STRBUF_INIT;
601
0
    char *equals = strchr(*e, '=');
602
603
0
    if (equals) {
604
0
      strbuf_add(&key, *e, equals - *e);
605
0
      string_list_insert(&envs, key.buf)->util = equals + 1;
606
0
    } else {
607
0
      string_list_insert(&envs, *e)->util = NULL;
608
0
    }
609
0
    strbuf_release(&key);
610
0
  }
611
612
  /* "unset X Y...;" */
613
0
  for (i = 0; i < envs.nr; i++) {
614
0
    const char *var = envs.items[i].string;
615
0
    const char *val = envs.items[i].util;
616
617
0
    if (val || !getenv(var))
618
0
      continue;
619
620
0
    if (!printed_unset) {
621
0
      strbuf_addstr(dst, " unset");
622
0
      printed_unset = 1;
623
0
    }
624
0
    strbuf_addf(dst, " %s", var);
625
0
  }
626
0
  if (printed_unset)
627
0
    strbuf_addch(dst, ';');
628
629
  /* ... followed by "A=B C=D ..." */
630
0
  for (i = 0; i < envs.nr; i++) {
631
0
    const char *var = envs.items[i].string;
632
0
    const char *val = envs.items[i].util;
633
0
    const char *oldval;
634
635
0
    if (!val)
636
0
      continue;
637
638
0
    oldval = getenv(var);
639
0
    if (oldval && !strcmp(val, oldval))
640
0
      continue;
641
642
0
    strbuf_addf(dst, " %s=", var);
643
0
    sq_quote_buf_pretty(dst, val);
644
0
  }
645
0
  string_list_clear(&envs, 0);
646
0
}
647
648
static void trace_run_command(const struct child_process *cp)
649
0
{
650
0
  struct strbuf buf = STRBUF_INIT;
651
652
0
  if (!trace_want(&trace_default_key))
653
0
    return;
654
655
0
  strbuf_addstr(&buf, "trace: run_command:");
656
0
  if (cp->dir) {
657
0
    strbuf_addstr(&buf, " cd ");
658
0
    sq_quote_buf_pretty(&buf, cp->dir);
659
0
    strbuf_addch(&buf, ';');
660
0
  }
661
0
  trace_add_env(&buf, cp->env.v);
662
0
  if (cp->git_cmd)
663
0
    strbuf_addstr(&buf, " git");
664
0
  sq_quote_argv_pretty(&buf, cp->args.v);
665
666
0
  trace_printf("%s", buf.buf);
667
0
  strbuf_release(&buf);
668
0
}
669
670
int start_command(struct child_process *cmd)
671
0
{
672
0
  int need_in, need_out, need_err;
673
0
  int fdin[2], fdout[2], fderr[2];
674
0
  int failed_errno;
675
0
  const char *str;
676
677
  /*
678
   * In case of errors we must keep the promise to close FDs
679
   * that have been passed in via ->in and ->out.
680
   */
681
682
0
  need_in = !cmd->no_stdin && cmd->in < 0;
683
0
  if (need_in) {
684
0
    if (pipe(fdin) < 0) {
685
0
      failed_errno = errno;
686
0
      if (cmd->out > 0)
687
0
        close(cmd->out);
688
0
      str = "standard input";
689
0
      goto fail_pipe;
690
0
    }
691
0
    cmd->in = fdin[1];
692
0
  }
693
694
0
  need_out = !cmd->no_stdout
695
0
    && !cmd->stdout_to_stderr
696
0
    && cmd->out < 0;
697
0
  if (need_out) {
698
0
    if (pipe(fdout) < 0) {
699
0
      failed_errno = errno;
700
0
      if (need_in)
701
0
        close_pair(fdin);
702
0
      else if (cmd->in)
703
0
        close(cmd->in);
704
0
      str = "standard output";
705
0
      goto fail_pipe;
706
0
    }
707
0
    cmd->out = fdout[0];
708
0
  }
709
710
0
  need_err = !cmd->no_stderr && cmd->err < 0;
711
0
  if (need_err) {
712
0
    if (pipe(fderr) < 0) {
713
0
      failed_errno = errno;
714
0
      if (need_in)
715
0
        close_pair(fdin);
716
0
      else if (cmd->in)
717
0
        close(cmd->in);
718
0
      if (need_out)
719
0
        close_pair(fdout);
720
0
      else if (cmd->out)
721
0
        close(cmd->out);
722
0
      str = "standard error";
723
0
fail_pipe:
724
0
      error("cannot create %s pipe for %s: %s",
725
0
        str, cmd->args.v[0], strerror(failed_errno));
726
0
      child_process_clear(cmd);
727
0
      errno = failed_errno;
728
0
      return -1;
729
0
    }
730
0
    cmd->err = fderr[0];
731
0
  }
732
733
0
  trace2_child_start(cmd);
734
0
  trace_run_command(cmd);
735
736
0
  fflush(NULL);
737
738
0
  if (cmd->close_object_store)
739
0
    close_object_store(the_repository->objects);
740
741
0
#ifndef GIT_WINDOWS_NATIVE
742
0
{
743
0
  int notify_pipe[2];
744
0
  int null_fd = -1;
745
0
  char **childenv;
746
0
  struct strvec argv = STRVEC_INIT;
747
0
  struct child_err cerr;
748
0
  struct atfork_state as;
749
750
0
  if (prepare_cmd(&argv, cmd) < 0) {
751
0
    failed_errno = errno;
752
0
    cmd->pid = -1;
753
0
    if (!cmd->silent_exec_failure)
754
0
      error_errno("cannot run %s", cmd->args.v[0]);
755
0
    goto end_of_spawn;
756
0
  }
757
758
0
  trace_argv_printf(&argv.v[1], "trace: start_command:");
759
760
0
  if (pipe(notify_pipe))
761
0
    notify_pipe[0] = notify_pipe[1] = -1;
762
763
0
  if (cmd->no_stdin || cmd->no_stdout || cmd->no_stderr) {
764
0
    null_fd = xopen("/dev/null", O_RDWR | O_CLOEXEC);
765
0
    set_cloexec(null_fd);
766
0
  }
767
768
0
  childenv = prep_childenv(cmd->env.v);
769
0
  atfork_prepare(&as);
770
771
  /*
772
   * NOTE: In order to prevent deadlocking when using threads special
773
   * care should be taken with the function calls made in between the
774
   * fork() and exec() calls.  No calls should be made to functions which
775
   * require acquiring a lock (e.g. malloc) as the lock could have been
776
   * held by another thread at the time of forking, causing the lock to
777
   * never be released in the child process.  This means only
778
   * Async-Signal-Safe functions are permitted in the child.
779
   */
780
0
  cmd->pid = fork();
781
0
  failed_errno = errno;
782
0
  if (!cmd->pid) {
783
0
    int sig;
784
    /*
785
     * Ensure the default die/error/warn routines do not get
786
     * called, they can take stdio locks and malloc.
787
     */
788
0
    set_die_routine(child_die_fn);
789
0
    set_error_routine(child_error_fn);
790
0
    set_warn_routine(child_warn_fn);
791
792
0
    close(notify_pipe[0]);
793
0
    set_cloexec(notify_pipe[1]);
794
0
    child_notifier = notify_pipe[1];
795
796
0
    if (cmd->no_stdin)
797
0
      child_dup2(null_fd, 0);
798
0
    else if (need_in) {
799
0
      child_dup2(fdin[0], 0);
800
0
      child_close_pair(fdin);
801
0
    } else if (cmd->in) {
802
0
      child_dup2(cmd->in, 0);
803
0
      child_close(cmd->in);
804
0
    }
805
806
0
    if (cmd->no_stderr)
807
0
      child_dup2(null_fd, 2);
808
0
    else if (need_err) {
809
0
      child_dup2(fderr[1], 2);
810
0
      child_close_pair(fderr);
811
0
    } else if (cmd->err > 1) {
812
0
      child_dup2(cmd->err, 2);
813
0
      child_close(cmd->err);
814
0
    }
815
816
0
    if (cmd->no_stdout)
817
0
      child_dup2(null_fd, 1);
818
0
    else if (cmd->stdout_to_stderr)
819
0
      child_dup2(2, 1);
820
0
    else if (need_out) {
821
0
      child_dup2(fdout[1], 1);
822
0
      child_close_pair(fdout);
823
0
    } else if (cmd->out > 1) {
824
0
      child_dup2(cmd->out, 1);
825
0
      child_close(cmd->out);
826
0
    }
827
828
0
    if (cmd->dir && chdir(cmd->dir))
829
0
      child_die(CHILD_ERR_CHDIR);
830
831
    /*
832
     * restore default signal handlers here, in case
833
     * we catch a signal right before execve below
834
     */
835
0
    for (sig = 1; sig < NSIG; sig++) {
836
      /* ignored signals get reset to SIG_DFL on execve */
837
0
      if (signal(sig, SIG_DFL) == SIG_IGN)
838
0
        signal(sig, SIG_IGN);
839
0
    }
840
841
0
    if (sigprocmask(SIG_SETMASK, &as.old, NULL) != 0)
842
0
      child_die(CHILD_ERR_SIGPROCMASK);
843
844
    /*
845
     * Attempt to exec using the command and arguments starting at
846
     * argv.argv[1].  argv.argv[0] contains SHELL_PATH which will
847
     * be used in the event exec failed with ENOEXEC at which point
848
     * we will try to interpret the command using 'sh'.
849
     */
850
0
    execve(argv.v[1], (char *const *) argv.v + 1,
851
0
           (char *const *) childenv);
852
0
    if (errno == ENOEXEC)
853
0
      execve(argv.v[0], (char *const *) argv.v,
854
0
             (char *const *) childenv);
855
856
0
    if (cmd->silent_exec_failure && errno == ENOENT)
857
0
      child_die(CHILD_ERR_SILENT);
858
0
    child_die(CHILD_ERR_ERRNO);
859
0
  }
860
0
  atfork_parent(&as);
861
0
  if (cmd->pid < 0)
862
0
    error_errno("cannot fork() for %s", cmd->args.v[0]);
863
0
  else if (cmd->clean_on_exit)
864
0
    mark_child_for_cleanup(cmd->pid, cmd);
865
866
  /*
867
   * Wait for child's exec. If the exec succeeds (or if fork()
868
   * failed), EOF is seen immediately by the parent. Otherwise, the
869
   * child process sends a child_err struct.
870
   * Note that use of this infrastructure is completely advisory,
871
   * therefore, we keep error checks minimal.
872
   */
873
0
  close(notify_pipe[1]);
874
0
  if (xread(notify_pipe[0], &cerr, sizeof(cerr)) == sizeof(cerr)) {
875
    /*
876
     * At this point we know that fork() succeeded, but exec()
877
     * failed. Errors have been reported to our stderr.
878
     */
879
0
    wait_or_whine(cmd->pid, cmd->args.v[0], 0);
880
0
    child_err_spew(cmd, &cerr);
881
0
    failed_errno = errno;
882
0
    cmd->pid = -1;
883
0
  }
884
0
  close(notify_pipe[0]);
885
886
0
  if (null_fd >= 0)
887
0
    close(null_fd);
888
0
  strvec_clear(&argv);
889
0
  free(childenv);
890
0
}
891
0
end_of_spawn:
892
893
#else
894
{
895
  int fhin = 0, fhout = 1, fherr = 2;
896
  const char **sargv = cmd->args.v;
897
  struct strvec nargv = STRVEC_INIT;
898
899
  if (cmd->no_stdin)
900
    fhin = open("/dev/null", O_RDWR);
901
  else if (need_in)
902
    fhin = dup(fdin[0]);
903
  else if (cmd->in)
904
    fhin = dup(cmd->in);
905
906
  if (cmd->no_stderr)
907
    fherr = open("/dev/null", O_RDWR);
908
  else if (need_err)
909
    fherr = dup(fderr[1]);
910
  else if (cmd->err > 2)
911
    fherr = dup(cmd->err);
912
913
  if (cmd->no_stdout)
914
    fhout = open("/dev/null", O_RDWR);
915
  else if (cmd->stdout_to_stderr)
916
    fhout = dup(fherr);
917
  else if (need_out)
918
    fhout = dup(fdout[1]);
919
  else if (cmd->out > 1)
920
    fhout = dup(cmd->out);
921
922
  if (cmd->git_cmd)
923
    cmd->args.v = prepare_git_cmd(&nargv, sargv);
924
  else if (cmd->use_shell)
925
    cmd->args.v = prepare_shell_cmd(&nargv, sargv);
926
927
  trace_argv_printf(cmd->args.v, "trace: start_command:");
928
  cmd->pid = mingw_spawnvpe(cmd->args.v[0], cmd->args.v,
929
          (char**) cmd->env.v,
930
          cmd->dir, fhin, fhout, fherr);
931
  failed_errno = errno;
932
  if (cmd->pid < 0 && (!cmd->silent_exec_failure || errno != ENOENT))
933
    error_errno("cannot spawn %s", cmd->args.v[0]);
934
  if (cmd->clean_on_exit && cmd->pid >= 0)
935
    mark_child_for_cleanup(cmd->pid, cmd);
936
937
  strvec_clear(&nargv);
938
  cmd->args.v = sargv;
939
  if (fhin != 0)
940
    close(fhin);
941
  if (fhout != 1)
942
    close(fhout);
943
  if (fherr != 2)
944
    close(fherr);
945
}
946
#endif
947
948
0
  if (cmd->pid < 0) {
949
0
    trace2_child_exit(cmd, -1);
950
951
0
    if (need_in)
952
0
      close_pair(fdin);
953
0
    else if (cmd->in)
954
0
      close(cmd->in);
955
0
    if (need_out)
956
0
      close_pair(fdout);
957
0
    else if (cmd->out)
958
0
      close(cmd->out);
959
0
    if (need_err)
960
0
      close_pair(fderr);
961
0
    else if (cmd->err)
962
0
      close(cmd->err);
963
0
    child_process_clear(cmd);
964
0
    errno = failed_errno;
965
0
    return -1;
966
0
  }
967
968
0
  if (need_in)
969
0
    close(fdin[0]);
970
0
  else if (cmd->in)
971
0
    close(cmd->in);
972
973
0
  if (need_out)
974
0
    close(fdout[1]);
975
0
  else if (cmd->out)
976
0
    close(cmd->out);
977
978
0
  if (need_err)
979
0
    close(fderr[1]);
980
0
  else if (cmd->err)
981
0
    close(cmd->err);
982
983
0
  return 0;
984
0
}
985
986
int finish_command(struct child_process *cmd)
987
0
{
988
0
  int ret = wait_or_whine(cmd->pid, cmd->args.v[0], 0);
989
0
  trace2_child_exit(cmd, ret);
990
0
  child_process_clear(cmd);
991
0
  invalidate_lstat_cache();
992
0
  return ret;
993
0
}
994
995
int finish_command_in_signal(struct child_process *cmd)
996
0
{
997
0
  int ret = wait_or_whine(cmd->pid, cmd->args.v[0], 1);
998
0
  if (ret != -1)
999
0
    trace2_child_exit(cmd, ret);
1000
0
  return ret;
1001
0
}
1002
1003
1004
int run_command(struct child_process *cmd)
1005
0
{
1006
0
  int code;
1007
1008
0
  if (cmd->out < 0 || cmd->err < 0)
1009
0
    BUG("run_command with a pipe can cause deadlock");
1010
1011
0
  code = start_command(cmd);
1012
0
  if (code)
1013
0
    return code;
1014
0
  return finish_command(cmd);
1015
0
}
1016
1017
#ifndef NO_PTHREADS
1018
static pthread_t main_thread;
1019
static int main_thread_set;
1020
static pthread_key_t async_key;
1021
static pthread_key_t async_die_counter;
1022
1023
static void *run_thread(void *data)
1024
0
{
1025
0
  struct async *async = data;
1026
0
  intptr_t ret;
1027
1028
0
  if (async->isolate_sigpipe) {
1029
0
    sigset_t mask;
1030
0
    sigemptyset(&mask);
1031
0
    sigaddset(&mask, SIGPIPE);
1032
0
    if (pthread_sigmask(SIG_BLOCK, &mask, NULL)) {
1033
0
      ret = error("unable to block SIGPIPE in async thread");
1034
0
      return (void *)ret;
1035
0
    }
1036
0
  }
1037
1038
0
  pthread_setspecific(async_key, async);
1039
0
  ret = async->proc(async->proc_in, async->proc_out, async->data);
1040
0
  return (void *)ret;
1041
0
}
1042
1043
static NORETURN void die_async(const char *err, va_list params)
1044
0
{
1045
0
  report_fn die_message_fn = get_die_message_routine();
1046
1047
0
  die_message_fn(err, params);
1048
1049
0
  if (in_async()) {
1050
0
    struct async *async = pthread_getspecific(async_key);
1051
0
    if (async->proc_in >= 0)
1052
0
      close(async->proc_in);
1053
0
    if (async->proc_out >= 0)
1054
0
      close(async->proc_out);
1055
0
    pthread_exit((void *)128);
1056
0
  }
1057
1058
0
  exit(128);
1059
0
}
1060
1061
static int async_die_is_recursing(void)
1062
0
{
1063
0
  void *ret = pthread_getspecific(async_die_counter);
1064
0
  pthread_setspecific(async_die_counter, &async_die_counter); /* set to any non-NULL valid pointer */
1065
0
  return ret != NULL;
1066
0
}
1067
1068
int in_async(void)
1069
0
{
1070
0
  if (!main_thread_set)
1071
0
    return 0; /* no asyncs started yet */
1072
0
  return !pthread_equal(main_thread, pthread_self());
1073
0
}
1074
1075
static void NORETURN async_exit(int code)
1076
0
{
1077
0
  pthread_exit((void *)(intptr_t)code);
1078
0
}
1079
1080
#else
1081
1082
static struct {
1083
  void (**handlers)(void);
1084
  size_t nr;
1085
  size_t alloc;
1086
} git_atexit_hdlrs;
1087
1088
static int git_atexit_installed;
1089
1090
static void git_atexit_dispatch(void)
1091
{
1092
  size_t i;
1093
1094
  for (i=git_atexit_hdlrs.nr ; i ; i--)
1095
    git_atexit_hdlrs.handlers[i-1]();
1096
}
1097
1098
static void git_atexit_clear(void)
1099
{
1100
  free(git_atexit_hdlrs.handlers);
1101
  memset(&git_atexit_hdlrs, 0, sizeof(git_atexit_hdlrs));
1102
  git_atexit_installed = 0;
1103
}
1104
1105
#undef atexit
1106
int git_atexit(void (*handler)(void))
1107
{
1108
  ALLOC_GROW(git_atexit_hdlrs.handlers, git_atexit_hdlrs.nr + 1, git_atexit_hdlrs.alloc);
1109
  git_atexit_hdlrs.handlers[git_atexit_hdlrs.nr++] = handler;
1110
  if (!git_atexit_installed) {
1111
    if (atexit(&git_atexit_dispatch))
1112
      return -1;
1113
    git_atexit_installed = 1;
1114
  }
1115
  return 0;
1116
}
1117
#define atexit git_atexit
1118
1119
static int process_is_async;
1120
int in_async(void)
1121
{
1122
  return process_is_async;
1123
}
1124
1125
static void NORETURN async_exit(int code)
1126
{
1127
  exit(code);
1128
}
1129
1130
#endif
1131
1132
void check_pipe(int err)
1133
0
{
1134
0
  if (err == EPIPE) {
1135
0
    if (in_async())
1136
0
      async_exit(141);
1137
1138
0
    signal(SIGPIPE, SIG_DFL);
1139
0
    raise(SIGPIPE);
1140
    /* Should never happen, but just in case... */
1141
0
    exit(141);
1142
0
  }
1143
0
}
1144
1145
int start_async(struct async *async)
1146
0
{
1147
0
  int need_in, need_out;
1148
0
  int fdin[2], fdout[2];
1149
0
  int proc_in, proc_out;
1150
1151
0
  need_in = async->in < 0;
1152
0
  if (need_in) {
1153
0
    if (pipe(fdin) < 0) {
1154
0
      if (async->out > 0)
1155
0
        close(async->out);
1156
0
      return error_errno("cannot create pipe");
1157
0
    }
1158
0
    async->in = fdin[1];
1159
0
  }
1160
1161
0
  need_out = async->out < 0;
1162
0
  if (need_out) {
1163
0
    if (pipe(fdout) < 0) {
1164
0
      if (need_in)
1165
0
        close_pair(fdin);
1166
0
      else if (async->in)
1167
0
        close(async->in);
1168
0
      return error_errno("cannot create pipe");
1169
0
    }
1170
0
    async->out = fdout[0];
1171
0
  }
1172
1173
0
  if (need_in)
1174
0
    proc_in = fdin[0];
1175
0
  else if (async->in)
1176
0
    proc_in = async->in;
1177
0
  else
1178
0
    proc_in = -1;
1179
1180
0
  if (need_out)
1181
0
    proc_out = fdout[1];
1182
0
  else if (async->out)
1183
0
    proc_out = async->out;
1184
0
  else
1185
0
    proc_out = -1;
1186
1187
#ifdef NO_PTHREADS
1188
  /* Flush stdio before fork() to avoid cloning buffers */
1189
  fflush(NULL);
1190
1191
  async->pid = fork();
1192
  if (async->pid < 0) {
1193
    error_errno("fork (async) failed");
1194
    goto error;
1195
  }
1196
  if (!async->pid) {
1197
    if (need_in)
1198
      close(fdin[1]);
1199
    if (need_out)
1200
      close(fdout[0]);
1201
    git_atexit_clear();
1202
    process_is_async = 1;
1203
    exit(!!async->proc(proc_in, proc_out, async->data));
1204
  }
1205
1206
  mark_child_for_cleanup(async->pid, NULL);
1207
1208
  if (need_in)
1209
    close(fdin[0]);
1210
  else if (async->in)
1211
    close(async->in);
1212
1213
  if (need_out)
1214
    close(fdout[1]);
1215
  else if (async->out)
1216
    close(async->out);
1217
#else
1218
0
  if (!main_thread_set) {
1219
    /*
1220
     * We assume that the first time that start_async is called
1221
     * it is from the main thread.
1222
     */
1223
0
    main_thread_set = 1;
1224
0
    main_thread = pthread_self();
1225
0
    pthread_key_create(&async_key, NULL);
1226
0
    pthread_key_create(&async_die_counter, NULL);
1227
0
    set_die_routine(die_async);
1228
0
    set_die_is_recursing_routine(async_die_is_recursing);
1229
0
  }
1230
1231
0
  if (proc_in >= 0)
1232
0
    set_cloexec(proc_in);
1233
0
  if (proc_out >= 0)
1234
0
    set_cloexec(proc_out);
1235
0
  async->proc_in = proc_in;
1236
0
  async->proc_out = proc_out;
1237
0
  {
1238
0
    int err = pthread_create(&async->tid, NULL, run_thread, async);
1239
0
    if (err) {
1240
0
      error(_("cannot create async thread: %s"), strerror(err));
1241
0
      goto error;
1242
0
    }
1243
0
  }
1244
0
#endif
1245
0
  return 0;
1246
1247
0
error:
1248
0
  if (need_in)
1249
0
    close_pair(fdin);
1250
0
  else if (async->in)
1251
0
    close(async->in);
1252
1253
0
  if (need_out)
1254
0
    close_pair(fdout);
1255
0
  else if (async->out)
1256
0
    close(async->out);
1257
0
  return -1;
1258
0
}
1259
1260
int finish_async(struct async *async)
1261
0
{
1262
#ifdef NO_PTHREADS
1263
  int ret = wait_or_whine(async->pid, "child process", 0);
1264
1265
  invalidate_lstat_cache();
1266
1267
  return ret;
1268
#else
1269
0
  void *ret = (void *)(intptr_t)(-1);
1270
1271
0
  if (pthread_join(async->tid, &ret))
1272
0
    error("pthread_join failed");
1273
0
  invalidate_lstat_cache();
1274
0
  return (int)(intptr_t)ret;
1275
1276
0
#endif
1277
0
}
1278
1279
int async_with_fork(void)
1280
0
{
1281
#ifdef NO_PTHREADS
1282
  return 1;
1283
#else
1284
0
  return 0;
1285
0
#endif
1286
0
}
1287
1288
struct io_pump {
1289
  /* initialized by caller */
1290
  int fd;
1291
  int type; /* POLLOUT or POLLIN */
1292
  union {
1293
    struct {
1294
      const char *buf;
1295
      size_t len;
1296
    } out;
1297
    struct {
1298
      struct strbuf *buf;
1299
      size_t hint;
1300
    } in;
1301
  } u;
1302
1303
  /* returned by pump_io */
1304
  int error; /* 0 for success, otherwise errno */
1305
1306
  /* internal use */
1307
  struct pollfd *pfd;
1308
};
1309
1310
static int pump_io_round(struct io_pump *slots, int nr, struct pollfd *pfd)
1311
0
{
1312
0
  int pollsize = 0;
1313
0
  int i;
1314
1315
0
  for (i = 0; i < nr; i++) {
1316
0
    struct io_pump *io = &slots[i];
1317
0
    if (io->fd < 0)
1318
0
      continue;
1319
0
    pfd[pollsize].fd = io->fd;
1320
0
    pfd[pollsize].events = io->type;
1321
0
    io->pfd = &pfd[pollsize++];
1322
0
  }
1323
1324
0
  if (!pollsize)
1325
0
    return 0;
1326
1327
0
  if (poll(pfd, pollsize, -1) < 0) {
1328
0
    if (errno == EINTR)
1329
0
      return 1;
1330
0
    die_errno("poll failed");
1331
0
  }
1332
1333
0
  for (i = 0; i < nr; i++) {
1334
0
    struct io_pump *io = &slots[i];
1335
1336
0
    if (io->fd < 0)
1337
0
      continue;
1338
1339
0
    if (!(io->pfd->revents & (POLLOUT|POLLIN|POLLHUP|POLLERR|POLLNVAL)))
1340
0
      continue;
1341
1342
0
    if (io->type == POLLOUT) {
1343
0
      ssize_t len;
1344
1345
      /*
1346
       * Don't use xwrite() here. It loops forever on EAGAIN,
1347
       * and we're in our own poll() loop here.
1348
       *
1349
       * Note that we lose xwrite()'s handling of MAX_IO_SIZE
1350
       * and EINTR, so we have to implement those ourselves.
1351
       */
1352
0
      len = write(io->fd, io->u.out.buf,
1353
0
            io->u.out.len <= MAX_IO_SIZE ?
1354
0
            io->u.out.len : MAX_IO_SIZE);
1355
0
      if (len < 0) {
1356
0
        if (errno != EINTR && errno != EAGAIN &&
1357
0
            errno != ENOSPC) {
1358
0
          io->error = errno;
1359
0
          close(io->fd);
1360
0
          io->fd = -1;
1361
0
        }
1362
0
      } else {
1363
0
        io->u.out.buf += len;
1364
0
        io->u.out.len -= len;
1365
0
        if (!io->u.out.len) {
1366
0
          close(io->fd);
1367
0
          io->fd = -1;
1368
0
        }
1369
0
      }
1370
0
    }
1371
1372
0
    if (io->type == POLLIN) {
1373
0
      ssize_t len = strbuf_read_once(io->u.in.buf,
1374
0
                   io->fd, io->u.in.hint);
1375
0
      if (len < 0)
1376
0
        io->error = errno;
1377
0
      if (len <= 0) {
1378
0
        close(io->fd);
1379
0
        io->fd = -1;
1380
0
      }
1381
0
    }
1382
0
  }
1383
1384
0
  return 1;
1385
0
}
1386
1387
static int pump_io(struct io_pump *slots, int nr)
1388
0
{
1389
0
  struct pollfd *pfd;
1390
0
  int i;
1391
1392
0
  for (i = 0; i < nr; i++)
1393
0
    slots[i].error = 0;
1394
1395
0
  ALLOC_ARRAY(pfd, nr);
1396
0
  while (pump_io_round(slots, nr, pfd))
1397
0
    ; /* nothing */
1398
0
  free(pfd);
1399
1400
  /* There may be multiple errno values, so just pick the first. */
1401
0
  for (i = 0; i < nr; i++) {
1402
0
    if (slots[i].error) {
1403
0
      errno = slots[i].error;
1404
0
      return -1;
1405
0
    }
1406
0
  }
1407
0
  return 0;
1408
0
}
1409
1410
1411
int pipe_command(struct child_process *cmd,
1412
     const char *in, size_t in_len,
1413
     struct strbuf *out, size_t out_hint,
1414
     struct strbuf *err, size_t err_hint)
1415
0
{
1416
0
  struct io_pump io[3];
1417
0
  int nr = 0;
1418
1419
0
  if (in)
1420
0
    cmd->in = -1;
1421
0
  if (out)
1422
0
    cmd->out = -1;
1423
0
  if (err)
1424
0
    cmd->err = -1;
1425
1426
0
  if (start_command(cmd) < 0)
1427
0
    return -1;
1428
1429
0
  if (in) {
1430
0
    if (enable_pipe_nonblock(cmd->in) < 0) {
1431
0
      error_errno("unable to make pipe non-blocking");
1432
0
      close(cmd->in);
1433
0
      if (out)
1434
0
        close(cmd->out);
1435
0
      if (err)
1436
0
        close(cmd->err);
1437
0
      return -1;
1438
0
    }
1439
0
    io[nr].fd = cmd->in;
1440
0
    io[nr].type = POLLOUT;
1441
0
    io[nr].u.out.buf = in;
1442
0
    io[nr].u.out.len = in_len;
1443
0
    nr++;
1444
0
  }
1445
0
  if (out) {
1446
0
    io[nr].fd = cmd->out;
1447
0
    io[nr].type = POLLIN;
1448
0
    io[nr].u.in.buf = out;
1449
0
    io[nr].u.in.hint = out_hint;
1450
0
    nr++;
1451
0
  }
1452
0
  if (err) {
1453
0
    io[nr].fd = cmd->err;
1454
0
    io[nr].type = POLLIN;
1455
0
    io[nr].u.in.buf = err;
1456
0
    io[nr].u.in.hint = err_hint;
1457
0
    nr++;
1458
0
  }
1459
1460
0
  if (pump_io(io, nr) < 0) {
1461
0
    finish_command(cmd); /* throw away exit code */
1462
0
    return -1;
1463
0
  }
1464
1465
0
  return finish_command(cmd);
1466
0
}
1467
1468
enum child_state {
1469
  GIT_CP_FREE,
1470
  GIT_CP_WORKING,
1471
  GIT_CP_WAIT_CLEANUP,
1472
};
1473
1474
struct parallel_processes {
1475
  size_t nr_processes;
1476
1477
  struct {
1478
    enum child_state state;
1479
    struct child_process process;
1480
    struct strbuf err;
1481
    void *data;
1482
  } *children;
1483
  /*
1484
   * The struct pollfd is logically part of *children,
1485
   * but the system call expects it as its own array.
1486
   */
1487
  struct pollfd *pfd;
1488
1489
  unsigned shutdown : 1;
1490
1491
  size_t output_owner;
1492
  struct strbuf buffered_output; /* of finished children */
1493
};
1494
1495
struct parallel_processes_for_signal {
1496
  const struct run_process_parallel_opts *opts;
1497
  const struct parallel_processes *pp;
1498
};
1499
1500
static void kill_children(const struct parallel_processes *pp,
1501
        const struct run_process_parallel_opts *opts,
1502
        int signo)
1503
0
{
1504
0
  for (size_t i = 0; i < opts->processes; i++)
1505
0
    if (pp->children[i].state == GIT_CP_WORKING)
1506
0
      kill(pp->children[i].process.pid, signo);
1507
0
}
1508
1509
static void kill_children_signal(const struct parallel_processes_for_signal *pp_sig,
1510
         int signo)
1511
0
{
1512
0
  kill_children(pp_sig->pp, pp_sig->opts, signo);
1513
0
}
1514
1515
static struct parallel_processes_for_signal *pp_for_signal;
1516
1517
static void handle_children_on_signal(int signo)
1518
0
{
1519
0
  kill_children_signal(pp_for_signal, signo);
1520
0
  sigchain_pop(signo);
1521
0
  raise(signo);
1522
0
}
1523
1524
static void pp_init(struct parallel_processes *pp,
1525
        const struct run_process_parallel_opts *opts,
1526
        struct parallel_processes_for_signal *pp_sig)
1527
0
{
1528
0
  const size_t n = opts->processes;
1529
1530
0
  if (!n)
1531
0
    BUG("you must provide a non-zero number of processes!");
1532
1533
0
  trace_printf("run_processes_parallel: preparing to run up to %"PRIuMAX" tasks",
1534
0
         (uintmax_t)n);
1535
1536
0
  if (!opts->get_next_task)
1537
0
    BUG("you need to specify a get_next_task function");
1538
1539
0
  CALLOC_ARRAY(pp->children, n);
1540
0
  if (!opts->ungroup)
1541
0
    CALLOC_ARRAY(pp->pfd, n);
1542
1543
0
  for (size_t i = 0; i < n; i++) {
1544
0
    strbuf_init(&pp->children[i].err, 0);
1545
0
    child_process_init(&pp->children[i].process);
1546
0
    if (pp->pfd) {
1547
0
      pp->pfd[i].events = POLLIN | POLLHUP;
1548
0
      pp->pfd[i].fd = -1;
1549
0
    }
1550
0
  }
1551
1552
0
  pp_sig->pp = pp;
1553
0
  pp_sig->opts = opts;
1554
0
  pp_for_signal = pp_sig;
1555
0
  sigchain_push_common(handle_children_on_signal);
1556
0
}
1557
1558
static void pp_cleanup(struct parallel_processes *pp,
1559
           const struct run_process_parallel_opts *opts)
1560
0
{
1561
0
  trace_printf("run_processes_parallel: done");
1562
0
  for (size_t i = 0; i < opts->processes; i++) {
1563
0
    strbuf_release(&pp->children[i].err);
1564
0
    child_process_clear(&pp->children[i].process);
1565
0
  }
1566
1567
0
  free(pp->children);
1568
0
  free(pp->pfd);
1569
1570
  /*
1571
   * When get_next_task added messages to the buffer in its last
1572
   * iteration, the buffered output is non empty.
1573
   */
1574
0
  strbuf_write(&pp->buffered_output, stderr);
1575
0
  strbuf_release(&pp->buffered_output);
1576
1577
0
  sigchain_pop_common();
1578
0
}
1579
1580
/* returns
1581
 *  0 if a new task was started.
1582
 *  1 if no new jobs was started (get_next_task ran out of work, non critical
1583
 *    problem with starting a new command)
1584
 * <0 no new job was started, user wishes to shutdown early. Use negative code
1585
 *    to signal the children.
1586
 */
1587
static int pp_start_one(struct parallel_processes *pp,
1588
      const struct run_process_parallel_opts *opts)
1589
0
{
1590
0
  size_t i;
1591
0
  int code;
1592
1593
0
  for (i = 0; i < opts->processes; i++)
1594
0
    if (pp->children[i].state == GIT_CP_FREE)
1595
0
      break;
1596
0
  if (i == opts->processes)
1597
0
    BUG("bookkeeping is hard");
1598
1599
  /*
1600
   * By default, do not inherit stdin from the parent process - otherwise,
1601
   * all children would share stdin! Users may overwrite this to provide
1602
   * something to the child's stdin by having their 'get_next_task'
1603
   * callback assign 0 to .no_stdin and an appropriate integer to .in.
1604
   */
1605
0
  pp->children[i].process.no_stdin = 1;
1606
1607
0
  code = opts->get_next_task(&pp->children[i].process,
1608
0
           opts->ungroup ? NULL : &pp->children[i].err,
1609
0
           opts->data,
1610
0
           &pp->children[i].data);
1611
0
  if (!code) {
1612
0
    if (!opts->ungroup) {
1613
0
      strbuf_addbuf(&pp->buffered_output, &pp->children[i].err);
1614
0
      strbuf_reset(&pp->children[i].err);
1615
0
    }
1616
0
    return 1;
1617
0
  }
1618
0
  if (!opts->ungroup) {
1619
0
    pp->children[i].process.err = -1;
1620
0
    pp->children[i].process.stdout_to_stderr = 1;
1621
0
  }
1622
1623
0
  if (start_command(&pp->children[i].process)) {
1624
0
    if (opts->start_failure)
1625
0
      code = opts->start_failure(opts->ungroup ? NULL :
1626
0
               &pp->children[i].err,
1627
0
               opts->data,
1628
0
               pp->children[i].data);
1629
0
    else
1630
0
      code = 0;
1631
1632
0
    if (!opts->ungroup) {
1633
0
      strbuf_addbuf(&pp->buffered_output, &pp->children[i].err);
1634
0
      strbuf_reset(&pp->children[i].err);
1635
0
    }
1636
0
    if (code)
1637
0
      pp->shutdown = 1;
1638
0
    return code;
1639
0
  }
1640
1641
0
  pp->nr_processes++;
1642
0
  pp->children[i].state = GIT_CP_WORKING;
1643
0
  if (pp->pfd)
1644
0
    pp->pfd[i].fd = pp->children[i].process.err;
1645
0
  return 0;
1646
0
}
1647
1648
static void pp_buffer_stderr(struct parallel_processes *pp,
1649
           const struct run_process_parallel_opts *opts,
1650
           int output_timeout)
1651
0
{
1652
0
  while (poll(pp->pfd, opts->processes, output_timeout) < 0) {
1653
0
    if (errno == EINTR)
1654
0
      continue;
1655
0
    pp_cleanup(pp, opts);
1656
0
    die_errno("poll");
1657
0
  }
1658
1659
  /* Buffer output from all pipes. */
1660
0
  for (size_t i = 0; i < opts->processes; i++) {
1661
0
    if (pp->children[i].state == GIT_CP_WORKING &&
1662
0
        pp->pfd[i].revents & (POLLIN | POLLHUP)) {
1663
0
      int n = strbuf_read_once(&pp->children[i].err,
1664
0
             pp->children[i].process.err, 0);
1665
0
      if (n == 0) {
1666
0
        close(pp->children[i].process.err);
1667
0
        pp->children[i].state = GIT_CP_WAIT_CLEANUP;
1668
0
      } else if (n < 0)
1669
0
        if (errno != EAGAIN)
1670
0
          die_errno("read");
1671
0
    }
1672
0
  }
1673
0
}
1674
1675
static void pp_output(const struct parallel_processes *pp)
1676
0
{
1677
0
  size_t i = pp->output_owner;
1678
1679
0
  if (pp->children[i].state == GIT_CP_WORKING &&
1680
0
      pp->children[i].err.len) {
1681
0
    strbuf_write(&pp->children[i].err, stderr);
1682
0
    strbuf_reset(&pp->children[i].err);
1683
0
  }
1684
0
}
1685
1686
static int pp_collect_finished(struct parallel_processes *pp,
1687
             const struct run_process_parallel_opts *opts)
1688
0
{
1689
0
  int code;
1690
0
  size_t i;
1691
0
  int result = 0;
1692
1693
0
  while (pp->nr_processes > 0) {
1694
0
    for (i = 0; i < opts->processes; i++)
1695
0
      if (pp->children[i].state == GIT_CP_WAIT_CLEANUP)
1696
0
        break;
1697
0
    if (i == opts->processes)
1698
0
      break;
1699
1700
0
    code = finish_command(&pp->children[i].process);
1701
1702
0
    if (opts->task_finished)
1703
0
      code = opts->task_finished(code, opts->ungroup ? NULL :
1704
0
               &pp->children[i].err, opts->data,
1705
0
               pp->children[i].data);
1706
0
    else
1707
0
      code = 0;
1708
1709
0
    if (code)
1710
0
      result = code;
1711
0
    if (code < 0)
1712
0
      break;
1713
1714
0
    pp->nr_processes--;
1715
0
    pp->children[i].state = GIT_CP_FREE;
1716
0
    if (pp->pfd)
1717
0
      pp->pfd[i].fd = -1;
1718
0
    child_process_init(&pp->children[i].process);
1719
1720
0
    if (opts->ungroup) {
1721
0
      ; /* no strbuf_*() work to do here */
1722
0
    } else if (i != pp->output_owner) {
1723
0
      strbuf_addbuf(&pp->buffered_output, &pp->children[i].err);
1724
0
      strbuf_reset(&pp->children[i].err);
1725
0
    } else {
1726
0
      const size_t n = opts->processes;
1727
1728
0
      strbuf_write(&pp->children[i].err, stderr);
1729
0
      strbuf_reset(&pp->children[i].err);
1730
1731
      /* Output all other finished child processes */
1732
0
      strbuf_write(&pp->buffered_output, stderr);
1733
0
      strbuf_reset(&pp->buffered_output);
1734
1735
      /*
1736
       * Pick next process to output live.
1737
       * NEEDSWORK:
1738
       * For now we pick it randomly by doing a round
1739
       * robin. Later we may want to pick the one with
1740
       * the most output or the longest or shortest
1741
       * running process time.
1742
       */
1743
0
      for (i = 0; i < n; i++)
1744
0
        if (pp->children[(pp->output_owner + i) % n].state == GIT_CP_WORKING)
1745
0
          break;
1746
0
      pp->output_owner = (pp->output_owner + i) % n;
1747
0
    }
1748
0
  }
1749
0
  return result;
1750
0
}
1751
1752
void run_processes_parallel(const struct run_process_parallel_opts *opts)
1753
0
{
1754
0
  int i, code;
1755
0
  int output_timeout = 100;
1756
0
  int spawn_cap = 4;
1757
0
  struct parallel_processes_for_signal pp_sig;
1758
0
  struct parallel_processes pp = {
1759
0
    .buffered_output = STRBUF_INIT,
1760
0
  };
1761
  /* options */
1762
0
  const char *tr2_category = opts->tr2_category;
1763
0
  const char *tr2_label = opts->tr2_label;
1764
0
  const int do_trace2 = tr2_category && tr2_label;
1765
1766
0
  if (do_trace2)
1767
0
    trace2_region_enter_printf(tr2_category, tr2_label, NULL,
1768
0
             "max:%"PRIuMAX,
1769
0
             (uintmax_t)opts->processes);
1770
1771
0
  pp_init(&pp, opts, &pp_sig);
1772
0
  while (1) {
1773
0
    for (i = 0;
1774
0
        i < spawn_cap && !pp.shutdown &&
1775
0
        pp.nr_processes < opts->processes;
1776
0
        i++) {
1777
0
      code = pp_start_one(&pp, opts);
1778
0
      if (!code)
1779
0
        continue;
1780
0
      if (code < 0) {
1781
0
        pp.shutdown = 1;
1782
0
        kill_children(&pp, opts, -code);
1783
0
      }
1784
0
      break;
1785
0
    }
1786
0
    if (!pp.nr_processes)
1787
0
      break;
1788
0
    if (opts->ungroup) {
1789
0
      for (size_t i = 0; i < opts->processes; i++)
1790
0
        pp.children[i].state = GIT_CP_WAIT_CLEANUP;
1791
0
    } else {
1792
0
      pp_buffer_stderr(&pp, opts, output_timeout);
1793
0
      pp_output(&pp);
1794
0
    }
1795
0
    code = pp_collect_finished(&pp, opts);
1796
0
    if (code) {
1797
0
      pp.shutdown = 1;
1798
0
      if (code < 0)
1799
0
        kill_children(&pp, opts,-code);
1800
0
    }
1801
0
  }
1802
1803
0
  pp_cleanup(&pp, opts);
1804
1805
0
  if (do_trace2)
1806
0
    trace2_region_leave(tr2_category, tr2_label, NULL);
1807
0
}
1808
1809
int prepare_auto_maintenance(int quiet, struct child_process *maint)
1810
0
{
1811
0
  int enabled, auto_detach;
1812
1813
0
  if (!git_config_get_bool("maintenance.auto", &enabled) &&
1814
0
      !enabled)
1815
0
    return 0;
1816
1817
  /*
1818
   * When `maintenance.autoDetach` isn't set, then we fall back to
1819
   * honoring `gc.autoDetach`. This is somewhat weird, but required to
1820
   * retain behaviour from when we used to run git-gc(1) here.
1821
   */
1822
0
  if (git_config_get_bool("maintenance.autodetach", &auto_detach) &&
1823
0
      git_config_get_bool("gc.autodetach", &auto_detach))
1824
0
    auto_detach = 1;
1825
1826
0
  maint->git_cmd = 1;
1827
0
  maint->close_object_store = 1;
1828
0
  strvec_pushl(&maint->args, "maintenance", "run", "--auto", NULL);
1829
0
  strvec_push(&maint->args, quiet ? "--quiet" : "--no-quiet");
1830
0
  strvec_push(&maint->args, auto_detach ? "--detach" : "--no-detach");
1831
1832
0
  return 1;
1833
0
}
1834
1835
int run_auto_maintenance(int quiet)
1836
0
{
1837
0
  struct child_process maint = CHILD_PROCESS_INIT;
1838
0
  if (!prepare_auto_maintenance(quiet, &maint))
1839
0
    return 0;
1840
0
  return run_command(&maint);
1841
0
}
1842
1843
void prepare_other_repo_env(struct strvec *env, const char *new_git_dir)
1844
0
{
1845
0
  const char * const *var;
1846
1847
0
  for (var = local_repo_env; *var; var++) {
1848
0
    if (strcmp(*var, CONFIG_DATA_ENVIRONMENT) &&
1849
0
        strcmp(*var, CONFIG_COUNT_ENVIRONMENT))
1850
0
      strvec_push(env, *var);
1851
0
  }
1852
0
  strvec_pushf(env, "%s=%s", GIT_DIR_ENVIRONMENT, new_git_dir);
1853
0
}
1854
1855
enum start_bg_result start_bg_command(struct child_process *cmd,
1856
              start_bg_wait_cb *wait_cb,
1857
              void *cb_data,
1858
              unsigned int timeout_sec)
1859
0
{
1860
0
  enum start_bg_result sbgr = SBGR_ERROR;
1861
0
  int ret;
1862
0
  int wait_status;
1863
0
  pid_t pid_seen;
1864
0
  time_t time_limit;
1865
1866
  /*
1867
   * We do not allow clean-on-exit because the child process
1868
   * should persist in the background and possibly/probably
1869
   * after this process exits.  So we don't want to kill the
1870
   * child during our atexit routine.
1871
   */
1872
0
  if (cmd->clean_on_exit)
1873
0
    BUG("start_bg_command() does not allow non-zero clean_on_exit");
1874
1875
0
  if (!cmd->trace2_child_class)
1876
0
    cmd->trace2_child_class = "background";
1877
1878
0
  ret = start_command(cmd);
1879
0
  if (ret) {
1880
    /*
1881
     * We assume that if `start_command()` fails, we
1882
     * either get a complete `trace2_child_start() /
1883
     * trace2_child_exit()` pair or it fails before the
1884
     * `trace2_child_start()` is emitted, so we do not
1885
     * need to worry about it here.
1886
     *
1887
     * We also assume that `start_command()` does not add
1888
     * us to the cleanup list.  And that it calls
1889
     * `child_process_clear()`.
1890
     */
1891
0
    sbgr = SBGR_ERROR;
1892
0
    goto done;
1893
0
  }
1894
1895
0
  time(&time_limit);
1896
0
  time_limit += timeout_sec;
1897
1898
0
wait:
1899
0
  pid_seen = waitpid(cmd->pid, &wait_status, WNOHANG);
1900
1901
0
  if (!pid_seen) {
1902
    /*
1903
     * The child is currently running.  Ask the callback
1904
     * if the child is ready to do work or whether we
1905
     * should keep waiting for it to boot up.
1906
     */
1907
0
    ret = (*wait_cb)(cmd, cb_data);
1908
0
    if (!ret) {
1909
      /*
1910
       * The child is running and "ready".
1911
       */
1912
0
      trace2_child_ready(cmd, "ready");
1913
0
      sbgr = SBGR_READY;
1914
0
      goto done;
1915
0
    } else if (ret > 0) {
1916
      /*
1917
       * The callback said to give it more time to boot up
1918
       * (subject to our timeout limit).
1919
       */
1920
0
      time_t now;
1921
1922
0
      time(&now);
1923
0
      if (now < time_limit)
1924
0
        goto wait;
1925
1926
      /*
1927
       * Our timeout has expired.  We don't try to
1928
       * kill the child, but rather let it continue
1929
       * (hopefully) trying to startup.
1930
       */
1931
0
      trace2_child_ready(cmd, "timeout");
1932
0
      sbgr = SBGR_TIMEOUT;
1933
0
      goto done;
1934
0
    } else {
1935
      /*
1936
       * The cb gave up on this child.  It is still running,
1937
       * but our cb got an error trying to probe it.
1938
       */
1939
0
      trace2_child_ready(cmd, "error");
1940
0
      sbgr = SBGR_CB_ERROR;
1941
0
      goto done;
1942
0
    }
1943
0
  }
1944
1945
0
  else if (pid_seen == cmd->pid) {
1946
0
    int child_code = -1;
1947
1948
    /*
1949
     * The child started, but exited or was terminated
1950
     * before becoming "ready".
1951
     *
1952
     * We try to match the behavior of `wait_or_whine()`
1953
     * WRT the handling of WIFSIGNALED() and WIFEXITED()
1954
     * and convert the child's status to a return code for
1955
     * tracing purposes and emit the `trace2_child_exit()`
1956
     * event.
1957
     *
1958
     * We do not want the wait_or_whine() error message
1959
     * because we will be called by client-side library
1960
     * routines.
1961
     */
1962
0
    if (WIFEXITED(wait_status))
1963
0
      child_code = WEXITSTATUS(wait_status);
1964
0
    else if (WIFSIGNALED(wait_status))
1965
0
      child_code = WTERMSIG(wait_status) + 128;
1966
0
    trace2_child_exit(cmd, child_code);
1967
1968
0
    sbgr = SBGR_DIED;
1969
0
    goto done;
1970
0
  }
1971
1972
0
  else if (pid_seen < 0 && errno == EINTR)
1973
0
    goto wait;
1974
1975
0
  trace2_child_exit(cmd, -1);
1976
0
  sbgr = SBGR_ERROR;
1977
1978
0
done:
1979
0
  child_process_clear(cmd);
1980
0
  invalidate_lstat_cache();
1981
0
  return sbgr;
1982
0
}