Show 37 quoted lines
> Now that the run_command family supports all of the redirection
> modes needed by builtin-bundle, we can use those functions rather
> than the underlying POSIX primitives. This should help to make the
> bundle command slightly more portable to other systems, like Windows.
>
> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
> ...
> @@ -263,9 +202,10 @@ static int create_bundle(struct bundle_header *header, const char *path,
> int bundle_fd = -1;
> const char **argv_boundary = xmalloc((argc + 4) * sizeof(const char *));
> const char **argv_pack = xmalloc(5 * sizeof(const char *));
> - int pid, in, out, i, status, ref_count = 0;
> + int i, status, ref_count = 0;
> char buffer[1024];
> struct rev_info revs;
> + struct child_process rls;
>
> bundle_fd = (!strcmp(path, "-") ? 1 :
> open(path, O_CREAT | O_EXCL | O_WRONLY, 0666));
> ...
> write_or_die(bundle_fd, buffer, i);
> @@ -303,11 +245,8 @@ static int create_bundle(struct bundle_header *header, const char *path,
> object->flags |= SHOWN;
> }
> }
> - while ((i = waitpid(pid, &status, 0)) < 0)
> - if (errno != EINTR)
> - return error("rev-list died");
> - if (!WIFEXITED(status) || WEXITSTATUS(status))
> - return error("rev-list died %d", WEXITSTATUS(status));
> + if (finish_command(&rls))
> + return error("rev-list died");
> ...
> + if (finish_command(&rls))
> return error ("pack-objects died");
>
> return status;