Merge branch 'rs/child-process-init'
Code clean-up. * rs/child-process-init: run-command: inline prepare_run_command_v_opt() run-command: call run_command_v_opt_cd_env() instead of duplicating it run-command: introduce child_process_init() run-command: introduce CHILD_PROCESS_INIT
This commit is contained in:
commit
825fd93767
@ -13,6 +13,10 @@ produces in the caller in order to process it.
|
|||||||
Functions
|
Functions
|
||||||
---------
|
---------
|
||||||
|
|
||||||
|
`child_process_init`
|
||||||
|
|
||||||
|
Initialize a struct child_process variable.
|
||||||
|
|
||||||
`start_command`::
|
`start_command`::
|
||||||
|
|
||||||
Start a sub-process. Takes a pointer to a `struct child_process`
|
Start a sub-process. Takes a pointer to a `struct child_process`
|
||||||
@ -96,8 +100,8 @@ command to run in a sub-process.
|
|||||||
|
|
||||||
The caller:
|
The caller:
|
||||||
|
|
||||||
1. allocates and clears (memset(&chld, 0, sizeof(chld));) a
|
1. allocates and clears (using child_process_init() or
|
||||||
struct child_process variable;
|
CHILD_PROCESS_INIT) a struct child_process variable;
|
||||||
2. initializes the members;
|
2. initializes the members;
|
||||||
3. calls start_command();
|
3. calls start_command();
|
||||||
4. processes the data;
|
4. processes the data;
|
||||||
|
@ -395,7 +395,7 @@ static int write_tar_filter_archive(const struct archiver *ar,
|
|||||||
struct archiver_args *args)
|
struct archiver_args *args)
|
||||||
{
|
{
|
||||||
struct strbuf cmd = STRBUF_INIT;
|
struct strbuf cmd = STRBUF_INIT;
|
||||||
struct child_process filter;
|
struct child_process filter = CHILD_PROCESS_INIT;
|
||||||
const char *argv[2];
|
const char *argv[2];
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
@ -406,7 +406,6 @@ static int write_tar_filter_archive(const struct archiver *ar,
|
|||||||
if (args->compression_level >= 0)
|
if (args->compression_level >= 0)
|
||||||
strbuf_addf(&cmd, " -%d", args->compression_level);
|
strbuf_addf(&cmd, " -%d", args->compression_level);
|
||||||
|
|
||||||
memset(&filter, 0, sizeof(filter));
|
|
||||||
argv[0] = cmd.buf;
|
argv[0] = cmd.buf;
|
||||||
argv[1] = NULL;
|
argv[1] = NULL;
|
||||||
filter.argv = argv;
|
filter.argv = argv;
|
||||||
|
@ -180,7 +180,7 @@ static int edit_patch(int argc, const char **argv, const char *prefix)
|
|||||||
char *file = git_pathdup("ADD_EDIT.patch");
|
char *file = git_pathdup("ADD_EDIT.patch");
|
||||||
const char *apply_argv[] = { "apply", "--recount", "--cached",
|
const char *apply_argv[] = { "apply", "--recount", "--cached",
|
||||||
NULL, NULL };
|
NULL, NULL };
|
||||||
struct child_process child;
|
struct child_process child = CHILD_PROCESS_INIT;
|
||||||
struct rev_info rev;
|
struct rev_info rev;
|
||||||
int out;
|
int out;
|
||||||
struct stat st;
|
struct stat st;
|
||||||
@ -214,7 +214,6 @@ static int edit_patch(int argc, const char **argv, const char *prefix)
|
|||||||
if (!st.st_size)
|
if (!st.st_size)
|
||||||
die(_("Empty patch. Aborted."));
|
die(_("Empty patch. Aborted."));
|
||||||
|
|
||||||
memset(&child, 0, sizeof(child));
|
|
||||||
child.git_cmd = 1;
|
child.git_cmd = 1;
|
||||||
child.argv = apply_argv;
|
child.argv = apply_argv;
|
||||||
if (run_command(&child))
|
if (run_command(&child))
|
||||||
|
@ -1540,7 +1540,7 @@ static int run_rewrite_hook(const unsigned char *oldsha1,
|
|||||||
{
|
{
|
||||||
/* oldsha1 SP newsha1 LF NUL */
|
/* oldsha1 SP newsha1 LF NUL */
|
||||||
static char buf[2*40 + 3];
|
static char buf[2*40 + 3];
|
||||||
struct child_process proc;
|
struct child_process proc = CHILD_PROCESS_INIT;
|
||||||
const char *argv[3];
|
const char *argv[3];
|
||||||
int code;
|
int code;
|
||||||
size_t n;
|
size_t n;
|
||||||
@ -1552,7 +1552,6 @@ static int run_rewrite_hook(const unsigned char *oldsha1,
|
|||||||
argv[1] = "amend";
|
argv[1] = "amend";
|
||||||
argv[2] = NULL;
|
argv[2] = NULL;
|
||||||
|
|
||||||
memset(&proc, 0, sizeof(proc));
|
|
||||||
proc.argv = argv;
|
proc.argv = argv;
|
||||||
proc.in = -1;
|
proc.in = -1;
|
||||||
proc.stdout_to_stderr = 1;
|
proc.stdout_to_stderr = 1;
|
||||||
|
@ -79,12 +79,11 @@ static const char *get_man_viewer_info(const char *name)
|
|||||||
static int check_emacsclient_version(void)
|
static int check_emacsclient_version(void)
|
||||||
{
|
{
|
||||||
struct strbuf buffer = STRBUF_INIT;
|
struct strbuf buffer = STRBUF_INIT;
|
||||||
struct child_process ec_process;
|
struct child_process ec_process = CHILD_PROCESS_INIT;
|
||||||
const char *argv_ec[] = { "emacsclient", "--version", NULL };
|
const char *argv_ec[] = { "emacsclient", "--version", NULL };
|
||||||
int version;
|
int version;
|
||||||
|
|
||||||
/* emacsclient prints its version number on stderr */
|
/* emacsclient prints its version number on stderr */
|
||||||
memset(&ec_process, 0, sizeof(ec_process));
|
|
||||||
ec_process.argv = argv_ec;
|
ec_process.argv = argv_ec;
|
||||||
ec_process.err = -1;
|
ec_process.err = -1;
|
||||||
ec_process.stdout_to_stderr = 1;
|
ec_process.stdout_to_stderr = 1;
|
||||||
|
@ -237,11 +237,10 @@ static void drop_save(void)
|
|||||||
static int save_state(unsigned char *stash)
|
static int save_state(unsigned char *stash)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
struct child_process cp;
|
struct child_process cp = CHILD_PROCESS_INIT;
|
||||||
struct strbuf buffer = STRBUF_INIT;
|
struct strbuf buffer = STRBUF_INIT;
|
||||||
const char *argv[] = {"stash", "create", NULL};
|
const char *argv[] = {"stash", "create", NULL};
|
||||||
|
|
||||||
memset(&cp, 0, sizeof(cp));
|
|
||||||
cp.argv = argv;
|
cp.argv = argv;
|
||||||
cp.out = -1;
|
cp.out = -1;
|
||||||
cp.git_cmd = 1;
|
cp.git_cmd = 1;
|
||||||
|
@ -122,12 +122,11 @@ static void write_commented_object(int fd, const unsigned char *object)
|
|||||||
{
|
{
|
||||||
const char *show_args[5] =
|
const char *show_args[5] =
|
||||||
{"show", "--stat", "--no-notes", sha1_to_hex(object), NULL};
|
{"show", "--stat", "--no-notes", sha1_to_hex(object), NULL};
|
||||||
struct child_process show;
|
struct child_process show = CHILD_PROCESS_INIT;
|
||||||
struct strbuf buf = STRBUF_INIT;
|
struct strbuf buf = STRBUF_INIT;
|
||||||
struct strbuf cbuf = STRBUF_INIT;
|
struct strbuf cbuf = STRBUF_INIT;
|
||||||
|
|
||||||
/* Invoke "git show --stat --no-notes $object" */
|
/* Invoke "git show --stat --no-notes $object" */
|
||||||
memset(&show, 0, sizeof(show));
|
|
||||||
show.argv = show_args;
|
show.argv = show_args;
|
||||||
show.no_stdin = 1;
|
show.no_stdin = 1;
|
||||||
show.out = -1;
|
show.out = -1;
|
||||||
|
@ -255,7 +255,7 @@ static int copy_to_sideband(int in, int out, void *arg)
|
|||||||
typedef int (*feed_fn)(void *, const char **, size_t *);
|
typedef int (*feed_fn)(void *, const char **, size_t *);
|
||||||
static int run_and_feed_hook(const char *hook_name, feed_fn feed, void *feed_state)
|
static int run_and_feed_hook(const char *hook_name, feed_fn feed, void *feed_state)
|
||||||
{
|
{
|
||||||
struct child_process proc;
|
struct child_process proc = CHILD_PROCESS_INIT;
|
||||||
struct async muxer;
|
struct async muxer;
|
||||||
const char *argv[2];
|
const char *argv[2];
|
||||||
int code;
|
int code;
|
||||||
@ -266,7 +266,6 @@ static int run_and_feed_hook(const char *hook_name, feed_fn feed, void *feed_sta
|
|||||||
|
|
||||||
argv[1] = NULL;
|
argv[1] = NULL;
|
||||||
|
|
||||||
memset(&proc, 0, sizeof(proc));
|
|
||||||
proc.argv = argv;
|
proc.argv = argv;
|
||||||
proc.in = -1;
|
proc.in = -1;
|
||||||
proc.stdout_to_stderr = 1;
|
proc.stdout_to_stderr = 1;
|
||||||
@ -350,7 +349,7 @@ static int run_receive_hook(struct command *commands, const char *hook_name,
|
|||||||
static int run_update_hook(struct command *cmd)
|
static int run_update_hook(struct command *cmd)
|
||||||
{
|
{
|
||||||
const char *argv[5];
|
const char *argv[5];
|
||||||
struct child_process proc;
|
struct child_process proc = CHILD_PROCESS_INIT;
|
||||||
int code;
|
int code;
|
||||||
|
|
||||||
argv[0] = find_hook("update");
|
argv[0] = find_hook("update");
|
||||||
@ -362,7 +361,6 @@ static int run_update_hook(struct command *cmd)
|
|||||||
argv[3] = sha1_to_hex(cmd->new_sha1);
|
argv[3] = sha1_to_hex(cmd->new_sha1);
|
||||||
argv[4] = NULL;
|
argv[4] = NULL;
|
||||||
|
|
||||||
memset(&proc, 0, sizeof(proc));
|
|
||||||
proc.no_stdin = 1;
|
proc.no_stdin = 1;
|
||||||
proc.stdout_to_stderr = 1;
|
proc.stdout_to_stderr = 1;
|
||||||
proc.err = use_sideband ? -1 : 0;
|
proc.err = use_sideband ? -1 : 0;
|
||||||
@ -598,7 +596,7 @@ static void run_update_post_hook(struct command *commands)
|
|||||||
struct command *cmd;
|
struct command *cmd;
|
||||||
int argc;
|
int argc;
|
||||||
const char **argv;
|
const char **argv;
|
||||||
struct child_process proc;
|
struct child_process proc = CHILD_PROCESS_INIT;
|
||||||
char *hook;
|
char *hook;
|
||||||
|
|
||||||
hook = find_hook("post-update");
|
hook = find_hook("post-update");
|
||||||
@ -621,7 +619,6 @@ static void run_update_post_hook(struct command *commands)
|
|||||||
}
|
}
|
||||||
argv[argc] = NULL;
|
argv[argc] = NULL;
|
||||||
|
|
||||||
memset(&proc, 0, sizeof(proc));
|
|
||||||
proc.no_stdin = 1;
|
proc.no_stdin = 1;
|
||||||
proc.stdout_to_stderr = 1;
|
proc.stdout_to_stderr = 1;
|
||||||
proc.err = use_sideband ? -1 : 0;
|
proc.err = use_sideband ? -1 : 0;
|
||||||
@ -911,7 +908,7 @@ static const char *unpack(int err_fd, struct shallow_info *si)
|
|||||||
const char *hdr_err;
|
const char *hdr_err;
|
||||||
int status;
|
int status;
|
||||||
char hdr_arg[38];
|
char hdr_arg[38];
|
||||||
struct child_process child;
|
struct child_process child = CHILD_PROCESS_INIT;
|
||||||
int fsck_objects = (receive_fsck_objects >= 0
|
int fsck_objects = (receive_fsck_objects >= 0
|
||||||
? receive_fsck_objects
|
? receive_fsck_objects
|
||||||
: transfer_fsck_objects >= 0
|
: transfer_fsck_objects >= 0
|
||||||
@ -933,7 +930,6 @@ static const char *unpack(int err_fd, struct shallow_info *si)
|
|||||||
argv_array_pushl(&av, "--shallow-file", alt_shallow_file, NULL);
|
argv_array_pushl(&av, "--shallow-file", alt_shallow_file, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(&child, 0, sizeof(child));
|
|
||||||
if (ntohl(hdr.hdr_entries) < unpack_limit) {
|
if (ntohl(hdr.hdr_entries) < unpack_limit) {
|
||||||
argv_array_pushl(&av, "unpack-objects", hdr_arg, NULL);
|
argv_array_pushl(&av, "unpack-objects", hdr_arg, NULL);
|
||||||
if (quiet)
|
if (quiet)
|
||||||
|
@ -179,9 +179,8 @@ static void send_git_request(int stdin_fd, const char *serv, const char *repo,
|
|||||||
static int run_child(const char *arg, const char *service)
|
static int run_child(const char *arg, const char *service)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
struct child_process child;
|
struct child_process child = CHILD_PROCESS_INIT;
|
||||||
|
|
||||||
memset(&child, 0, sizeof(child));
|
|
||||||
child.in = -1;
|
child.in = -1;
|
||||||
child.out = -1;
|
child.out = -1;
|
||||||
child.err = 0;
|
child.err = 0;
|
||||||
|
@ -133,7 +133,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
|
|||||||
{".idx"},
|
{".idx"},
|
||||||
{".bitmap", 1},
|
{".bitmap", 1},
|
||||||
};
|
};
|
||||||
struct child_process cmd;
|
struct child_process cmd = CHILD_PROCESS_INIT;
|
||||||
struct string_list_item *item;
|
struct string_list_item *item;
|
||||||
struct argv_array cmd_args = ARGV_ARRAY_INIT;
|
struct argv_array cmd_args = ARGV_ARRAY_INIT;
|
||||||
struct string_list names = STRING_LIST_INIT_DUP;
|
struct string_list names = STRING_LIST_INIT_DUP;
|
||||||
@ -250,7 +250,6 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
|
|||||||
|
|
||||||
argv_array_push(&cmd_args, packtmp);
|
argv_array_push(&cmd_args, packtmp);
|
||||||
|
|
||||||
memset(&cmd, 0, sizeof(cmd));
|
|
||||||
cmd.argv = cmd_args.argv;
|
cmd.argv = cmd_args.argv;
|
||||||
cmd.git_cmd = 1;
|
cmd.git_cmd = 1;
|
||||||
cmd.out = -1;
|
cmd.out = -1;
|
||||||
|
@ -197,7 +197,7 @@ static int replace_object(const char *object_ref, const char *replace_ref, int f
|
|||||||
static void export_object(const unsigned char *sha1, enum object_type type,
|
static void export_object(const unsigned char *sha1, enum object_type type,
|
||||||
int raw, const char *filename)
|
int raw, const char *filename)
|
||||||
{
|
{
|
||||||
struct child_process cmd = { NULL };
|
struct child_process cmd = CHILD_PROCESS_INIT;
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0666);
|
fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0666);
|
||||||
@ -234,7 +234,7 @@ static void import_object(unsigned char *sha1, enum object_type type,
|
|||||||
|
|
||||||
if (!raw && type == OBJ_TREE) {
|
if (!raw && type == OBJ_TREE) {
|
||||||
const char *argv[] = { "mktree", NULL };
|
const char *argv[] = { "mktree", NULL };
|
||||||
struct child_process cmd = { argv };
|
struct child_process cmd = CHILD_PROCESS_INIT;
|
||||||
struct strbuf result = STRBUF_INIT;
|
struct strbuf result = STRBUF_INIT;
|
||||||
|
|
||||||
cmd.argv = argv;
|
cmd.argv = argv;
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
static int verify_one_pack(const char *path, unsigned int flags)
|
static int verify_one_pack(const char *path, unsigned int flags)
|
||||||
{
|
{
|
||||||
struct child_process index_pack;
|
struct child_process index_pack = CHILD_PROCESS_INIT;
|
||||||
const char *argv[] = {"index-pack", NULL, NULL, NULL };
|
const char *argv[] = {"index-pack", NULL, NULL, NULL };
|
||||||
struct strbuf arg = STRBUF_INIT;
|
struct strbuf arg = STRBUF_INIT;
|
||||||
int verbose = flags & VERIFY_PACK_VERBOSE;
|
int verbose = flags & VERIFY_PACK_VERBOSE;
|
||||||
@ -32,7 +32,6 @@ static int verify_one_pack(const char *path, unsigned int flags)
|
|||||||
strbuf_addstr(&arg, ".pack");
|
strbuf_addstr(&arg, ".pack");
|
||||||
argv[2] = arg.buf;
|
argv[2] = arg.buf;
|
||||||
|
|
||||||
memset(&index_pack, 0, sizeof(index_pack));
|
|
||||||
index_pack.argv = argv;
|
index_pack.argv = argv;
|
||||||
index_pack.git_cmd = 1;
|
index_pack.git_cmd = 1;
|
||||||
|
|
||||||
|
6
bundle.c
6
bundle.c
@ -240,7 +240,7 @@ int create_bundle(struct bundle_header *header, const char *path,
|
|||||||
int i, ref_count = 0;
|
int i, ref_count = 0;
|
||||||
struct strbuf buf = STRBUF_INIT;
|
struct strbuf buf = STRBUF_INIT;
|
||||||
struct rev_info revs;
|
struct rev_info revs;
|
||||||
struct child_process rls;
|
struct child_process rls = CHILD_PROCESS_INIT;
|
||||||
FILE *rls_fout;
|
FILE *rls_fout;
|
||||||
|
|
||||||
bundle_to_stdout = !strcmp(path, "-");
|
bundle_to_stdout = !strcmp(path, "-");
|
||||||
@ -258,7 +258,6 @@ int create_bundle(struct bundle_header *header, const char *path,
|
|||||||
init_revisions(&revs, NULL);
|
init_revisions(&revs, NULL);
|
||||||
|
|
||||||
/* write prerequisites */
|
/* write prerequisites */
|
||||||
memset(&rls, 0, sizeof(rls));
|
|
||||||
argv_array_pushl(&rls.args,
|
argv_array_pushl(&rls.args,
|
||||||
"rev-list", "--boundary", "--pretty=oneline",
|
"rev-list", "--boundary", "--pretty=oneline",
|
||||||
NULL);
|
NULL);
|
||||||
@ -417,14 +416,13 @@ int unbundle(struct bundle_header *header, int bundle_fd, int flags)
|
|||||||
{
|
{
|
||||||
const char *argv_index_pack[] = {"index-pack",
|
const char *argv_index_pack[] = {"index-pack",
|
||||||
"--fix-thin", "--stdin", NULL, NULL};
|
"--fix-thin", "--stdin", NULL, NULL};
|
||||||
struct child_process ip;
|
struct child_process ip = CHILD_PROCESS_INIT;
|
||||||
|
|
||||||
if (flags & BUNDLE_VERBOSE)
|
if (flags & BUNDLE_VERBOSE)
|
||||||
argv_index_pack[3] = "-v";
|
argv_index_pack[3] = "-v";
|
||||||
|
|
||||||
if (verify_bundle(header, 0))
|
if (verify_bundle(header, 0))
|
||||||
return -1;
|
return -1;
|
||||||
memset(&ip, 0, sizeof(ip));
|
|
||||||
ip.argv = argv_index_pack;
|
ip.argv = argv_index_pack;
|
||||||
ip.in = bundle_fd;
|
ip.in = bundle_fd;
|
||||||
ip.no_stdout = 1;
|
ip.no_stdout = 1;
|
||||||
|
2
column.c
2
column.c
@ -367,7 +367,7 @@ int parseopt_column_callback(const struct option *opt,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int fd_out = -1;
|
static int fd_out = -1;
|
||||||
static struct child_process column_process;
|
static struct child_process column_process = CHILD_PROCESS_INIT;
|
||||||
|
|
||||||
int run_column_filter(int colopts, const struct column_options *opts)
|
int run_column_filter(int colopts, const struct column_options *opts)
|
||||||
{
|
{
|
||||||
|
@ -537,7 +537,8 @@ static struct child_process *git_proxy_connect(int fd[2], char *host)
|
|||||||
|
|
||||||
get_host_and_port(&host, &port);
|
get_host_and_port(&host, &port);
|
||||||
|
|
||||||
proxy = xcalloc(1, sizeof(*proxy));
|
proxy = xmalloc(sizeof(*proxy));
|
||||||
|
child_process_init(proxy);
|
||||||
argv_array_push(&proxy->args, git_proxy_command);
|
argv_array_push(&proxy->args, git_proxy_command);
|
||||||
argv_array_push(&proxy->args, host);
|
argv_array_push(&proxy->args, host);
|
||||||
argv_array_push(&proxy->args, port);
|
argv_array_push(&proxy->args, port);
|
||||||
@ -639,7 +640,7 @@ static enum protocol parse_connect_url(const char *url_orig, char **ret_host,
|
|||||||
return protocol;
|
return protocol;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct child_process no_fork;
|
static struct child_process no_fork = CHILD_PROCESS_INIT;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This returns a dummy child_process if the transport protocol does not
|
* This returns a dummy child_process if the transport protocol does not
|
||||||
@ -694,7 +695,8 @@ struct child_process *git_connect(int fd[2], const char *url,
|
|||||||
target_host, 0);
|
target_host, 0);
|
||||||
free(target_host);
|
free(target_host);
|
||||||
} else {
|
} else {
|
||||||
conn = xcalloc(1, sizeof(*conn));
|
conn = xmalloc(sizeof(*conn));
|
||||||
|
child_process_init(conn);
|
||||||
|
|
||||||
strbuf_addstr(&cmd, prog);
|
strbuf_addstr(&cmd, prog);
|
||||||
strbuf_addch(&cmd, ' ');
|
strbuf_addch(&cmd, ' ');
|
||||||
|
@ -25,7 +25,7 @@ static int check_everything_connected_real(sha1_iterate_fn fn,
|
|||||||
struct transport *transport,
|
struct transport *transport,
|
||||||
const char *shallow_file)
|
const char *shallow_file)
|
||||||
{
|
{
|
||||||
struct child_process rev_list;
|
struct child_process rev_list = CHILD_PROCESS_INIT;
|
||||||
const char *argv[9];
|
const char *argv[9];
|
||||||
char commit[41];
|
char commit[41];
|
||||||
unsigned char sha1[20];
|
unsigned char sha1[20];
|
||||||
@ -60,7 +60,6 @@ static int check_everything_connected_real(sha1_iterate_fn fn,
|
|||||||
argv[ac++] = "--quiet";
|
argv[ac++] = "--quiet";
|
||||||
argv[ac] = NULL;
|
argv[ac] = NULL;
|
||||||
|
|
||||||
memset(&rev_list, 0, sizeof(rev_list));
|
|
||||||
rev_list.argv = argv;
|
rev_list.argv = argv;
|
||||||
rev_list.git_cmd = 1;
|
rev_list.git_cmd = 1;
|
||||||
rev_list.in = -1;
|
rev_list.in = -1;
|
||||||
|
@ -321,7 +321,7 @@ static int filter_buffer(int in, int out, void *data)
|
|||||||
/*
|
/*
|
||||||
* Spawn cmd and feed the buffer contents through its stdin.
|
* Spawn cmd and feed the buffer contents through its stdin.
|
||||||
*/
|
*/
|
||||||
struct child_process child_process;
|
struct child_process child_process = CHILD_PROCESS_INIT;
|
||||||
struct filter_params *params = (struct filter_params *)data;
|
struct filter_params *params = (struct filter_params *)data;
|
||||||
int write_err, status;
|
int write_err, status;
|
||||||
const char *argv[] = { NULL, NULL };
|
const char *argv[] = { NULL, NULL };
|
||||||
@ -344,7 +344,6 @@ static int filter_buffer(int in, int out, void *data)
|
|||||||
|
|
||||||
argv[0] = cmd.buf;
|
argv[0] = cmd.buf;
|
||||||
|
|
||||||
memset(&child_process, 0, sizeof(child_process));
|
|
||||||
child_process.argv = argv;
|
child_process.argv = argv;
|
||||||
child_process.use_shell = 1;
|
child_process.use_shell = 1;
|
||||||
child_process.in = -1;
|
child_process.in = -1;
|
||||||
|
@ -37,12 +37,11 @@ static int send_request(const char *socket, const struct strbuf *out)
|
|||||||
|
|
||||||
static void spawn_daemon(const char *socket)
|
static void spawn_daemon(const char *socket)
|
||||||
{
|
{
|
||||||
struct child_process daemon;
|
struct child_process daemon = CHILD_PROCESS_INIT;
|
||||||
const char *argv[] = { NULL, NULL, NULL };
|
const char *argv[] = { NULL, NULL, NULL };
|
||||||
char buf[128];
|
char buf[128];
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
memset(&daemon, 0, sizeof(daemon));
|
|
||||||
argv[0] = "git-credential-cache--daemon";
|
argv[0] = "git-credential-cache--daemon";
|
||||||
argv[1] = socket;
|
argv[1] = socket;
|
||||||
daemon.argv = argv;
|
daemon.argv = argv;
|
||||||
|
@ -205,11 +205,10 @@ static int run_credential_helper(struct credential *c,
|
|||||||
const char *cmd,
|
const char *cmd,
|
||||||
int want_output)
|
int want_output)
|
||||||
{
|
{
|
||||||
struct child_process helper;
|
struct child_process helper = CHILD_PROCESS_INIT;
|
||||||
const char *argv[] = { NULL, NULL };
|
const char *argv[] = { NULL, NULL };
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
memset(&helper, 0, sizeof(helper));
|
|
||||||
argv[0] = cmd;
|
argv[0] = cmd;
|
||||||
helper.argv = argv;
|
helper.argv = argv;
|
||||||
helper.use_shell = 1;
|
helper.use_shell = 1;
|
||||||
|
8
daemon.c
8
daemon.c
@ -242,7 +242,7 @@ static const char *access_hook;
|
|||||||
|
|
||||||
static int run_access_hook(struct daemon_service *service, const char *dir, const char *path)
|
static int run_access_hook(struct daemon_service *service, const char *dir, const char *path)
|
||||||
{
|
{
|
||||||
struct child_process child;
|
struct child_process child = CHILD_PROCESS_INIT;
|
||||||
struct strbuf buf = STRBUF_INIT;
|
struct strbuf buf = STRBUF_INIT;
|
||||||
const char *argv[8];
|
const char *argv[8];
|
||||||
const char **arg = argv;
|
const char **arg = argv;
|
||||||
@ -260,7 +260,6 @@ static int run_access_hook(struct daemon_service *service, const char *dir, cons
|
|||||||
*arg = NULL;
|
*arg = NULL;
|
||||||
#undef STRARG
|
#undef STRARG
|
||||||
|
|
||||||
memset(&child, 0, sizeof(child));
|
|
||||||
child.use_shell = 1;
|
child.use_shell = 1;
|
||||||
child.argv = argv;
|
child.argv = argv;
|
||||||
child.no_stdin = 1;
|
child.no_stdin = 1;
|
||||||
@ -388,9 +387,8 @@ static void copy_to_log(int fd)
|
|||||||
|
|
||||||
static int run_service_command(const char **argv)
|
static int run_service_command(const char **argv)
|
||||||
{
|
{
|
||||||
struct child_process cld;
|
struct child_process cld = CHILD_PROCESS_INIT;
|
||||||
|
|
||||||
memset(&cld, 0, sizeof(cld));
|
|
||||||
cld.argv = argv;
|
cld.argv = argv;
|
||||||
cld.git_cmd = 1;
|
cld.git_cmd = 1;
|
||||||
cld.err = -1;
|
cld.err = -1;
|
||||||
@ -715,7 +713,7 @@ static void check_dead_children(void)
|
|||||||
static char **cld_argv;
|
static char **cld_argv;
|
||||||
static void handle(int incoming, struct sockaddr *addr, socklen_t addrlen)
|
static void handle(int incoming, struct sockaddr *addr, socklen_t addrlen)
|
||||||
{
|
{
|
||||||
struct child_process cld = { NULL };
|
struct child_process cld = CHILD_PROCESS_INIT;
|
||||||
char addrbuf[300] = "REMOTE_ADDR=", portbuf[300];
|
char addrbuf[300] = "REMOTE_ADDR=", portbuf[300];
|
||||||
char *env[] = { addrbuf, portbuf, NULL };
|
char *env[] = { addrbuf, portbuf, NULL };
|
||||||
|
|
||||||
|
3
diff.c
3
diff.c
@ -4931,7 +4931,7 @@ static char *run_textconv(const char *pgm, struct diff_filespec *spec,
|
|||||||
struct diff_tempfile *temp;
|
struct diff_tempfile *temp;
|
||||||
const char *argv[3];
|
const char *argv[3];
|
||||||
const char **arg = argv;
|
const char **arg = argv;
|
||||||
struct child_process child;
|
struct child_process child = CHILD_PROCESS_INIT;
|
||||||
struct strbuf buf = STRBUF_INIT;
|
struct strbuf buf = STRBUF_INIT;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
@ -4940,7 +4940,6 @@ static char *run_textconv(const char *pgm, struct diff_filespec *spec,
|
|||||||
*arg++ = temp->name;
|
*arg++ = temp->name;
|
||||||
*arg = NULL;
|
*arg = NULL;
|
||||||
|
|
||||||
memset(&child, 0, sizeof(child));
|
|
||||||
child.use_shell = 1;
|
child.use_shell = 1;
|
||||||
child.argv = argv;
|
child.argv = argv;
|
||||||
child.out = -1;
|
child.out = -1;
|
||||||
|
3
editor.c
3
editor.c
@ -38,10 +38,9 @@ int launch_editor(const char *path, struct strbuf *buffer, const char *const *en
|
|||||||
|
|
||||||
if (strcmp(editor, ":")) {
|
if (strcmp(editor, ":")) {
|
||||||
const char *args[] = { editor, real_path(path), NULL };
|
const char *args[] = { editor, real_path(path), NULL };
|
||||||
struct child_process p;
|
struct child_process p = CHILD_PROCESS_INIT;
|
||||||
int ret, sig;
|
int ret, sig;
|
||||||
|
|
||||||
memset(&p, 0, sizeof(p));
|
|
||||||
p.argv = args;
|
p.argv = args;
|
||||||
p.env = env;
|
p.env = env;
|
||||||
p.use_shell = 1;
|
p.use_shell = 1;
|
||||||
|
@ -666,7 +666,7 @@ static int get_pack(struct fetch_pack_args *args,
|
|||||||
char hdr_arg[256];
|
char hdr_arg[256];
|
||||||
const char **av, *cmd_name;
|
const char **av, *cmd_name;
|
||||||
int do_keep = args->keep_pack;
|
int do_keep = args->keep_pack;
|
||||||
struct child_process cmd;
|
struct child_process cmd = CHILD_PROCESS_INIT;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
memset(&demux, 0, sizeof(demux));
|
memset(&demux, 0, sizeof(demux));
|
||||||
@ -685,7 +685,6 @@ static int get_pack(struct fetch_pack_args *args,
|
|||||||
else
|
else
|
||||||
demux.out = xd[0];
|
demux.out = xd[0];
|
||||||
|
|
||||||
memset(&cmd, 0, sizeof(cmd));
|
|
||||||
cmd.argv = argv;
|
cmd.argv = argv;
|
||||||
av = argv;
|
av = argv;
|
||||||
*hdr_arg = 0;
|
*hdr_arg = 0;
|
||||||
|
@ -55,12 +55,11 @@ const char *get_signing_key(void)
|
|||||||
*/
|
*/
|
||||||
int sign_buffer(struct strbuf *buffer, struct strbuf *signature, const char *signing_key)
|
int sign_buffer(struct strbuf *buffer, struct strbuf *signature, const char *signing_key)
|
||||||
{
|
{
|
||||||
struct child_process gpg;
|
struct child_process gpg = CHILD_PROCESS_INIT;
|
||||||
const char *args[4];
|
const char *args[4];
|
||||||
ssize_t len;
|
ssize_t len;
|
||||||
size_t i, j, bottom;
|
size_t i, j, bottom;
|
||||||
|
|
||||||
memset(&gpg, 0, sizeof(gpg));
|
|
||||||
gpg.argv = args;
|
gpg.argv = args;
|
||||||
gpg.in = -1;
|
gpg.in = -1;
|
||||||
gpg.out = -1;
|
gpg.out = -1;
|
||||||
@ -116,7 +115,7 @@ int verify_signed_buffer(const char *payload, size_t payload_size,
|
|||||||
const char *signature, size_t signature_size,
|
const char *signature, size_t signature_size,
|
||||||
struct strbuf *gpg_output, struct strbuf *gpg_status)
|
struct strbuf *gpg_output, struct strbuf *gpg_status)
|
||||||
{
|
{
|
||||||
struct child_process gpg;
|
struct child_process gpg = CHILD_PROCESS_INIT;
|
||||||
const char *args_gpg[] = {NULL, "--status-fd=1", "--verify", "FILE", "-", NULL};
|
const char *args_gpg[] = {NULL, "--status-fd=1", "--verify", "FILE", "-", NULL};
|
||||||
char path[PATH_MAX];
|
char path[PATH_MAX];
|
||||||
int fd, ret;
|
int fd, ret;
|
||||||
@ -133,7 +132,6 @@ int verify_signed_buffer(const char *payload, size_t payload_size,
|
|||||||
path, strerror(errno));
|
path, strerror(errno));
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|
||||||
memset(&gpg, 0, sizeof(gpg));
|
|
||||||
gpg.argv = args_gpg;
|
gpg.argv = args_gpg;
|
||||||
gpg.in = -1;
|
gpg.in = -1;
|
||||||
gpg.out = -1;
|
gpg.out = -1;
|
||||||
|
@ -316,7 +316,7 @@ static void run_service(const char **argv)
|
|||||||
const char *host = getenv("REMOTE_ADDR");
|
const char *host = getenv("REMOTE_ADDR");
|
||||||
struct argv_array env = ARGV_ARRAY_INIT;
|
struct argv_array env = ARGV_ARRAY_INIT;
|
||||||
int gzipped_request = 0;
|
int gzipped_request = 0;
|
||||||
struct child_process cld;
|
struct child_process cld = CHILD_PROCESS_INIT;
|
||||||
|
|
||||||
if (encoding && !strcmp(encoding, "gzip"))
|
if (encoding && !strcmp(encoding, "gzip"))
|
||||||
gzipped_request = 1;
|
gzipped_request = 1;
|
||||||
@ -334,7 +334,6 @@ static void run_service(const char **argv)
|
|||||||
argv_array_pushf(&env, "GIT_COMMITTER_EMAIL=%s@http.%s",
|
argv_array_pushf(&env, "GIT_COMMITTER_EMAIL=%s@http.%s",
|
||||||
user, host);
|
user, host);
|
||||||
|
|
||||||
memset(&cld, 0, sizeof(cld));
|
|
||||||
cld.argv = argv;
|
cld.argv = argv;
|
||||||
cld.env = env.argv;
|
cld.env = env.argv;
|
||||||
if (gzipped_request)
|
if (gzipped_request)
|
||||||
|
3
http.c
3
http.c
@ -1332,7 +1332,7 @@ int finish_http_pack_request(struct http_pack_request *preq)
|
|||||||
struct packed_git **lst;
|
struct packed_git **lst;
|
||||||
struct packed_git *p = preq->target;
|
struct packed_git *p = preq->target;
|
||||||
char *tmp_idx;
|
char *tmp_idx;
|
||||||
struct child_process ip;
|
struct child_process ip = CHILD_PROCESS_INIT;
|
||||||
const char *ip_argv[8];
|
const char *ip_argv[8];
|
||||||
|
|
||||||
close_pack_index(p);
|
close_pack_index(p);
|
||||||
@ -1355,7 +1355,6 @@ int finish_http_pack_request(struct http_pack_request *preq)
|
|||||||
ip_argv[3] = preq->tmpfile;
|
ip_argv[3] = preq->tmpfile;
|
||||||
ip_argv[4] = NULL;
|
ip_argv[4] = NULL;
|
||||||
|
|
||||||
memset(&ip, 0, sizeof(ip));
|
|
||||||
ip.argv = ip_argv;
|
ip.argv = ip_argv;
|
||||||
ip.git_cmd = 1;
|
ip.git_cmd = 1;
|
||||||
ip.no_stdin = 1;
|
ip.no_stdin = 1;
|
||||||
|
@ -925,7 +925,7 @@ static struct imap_store *imap_open_store(struct imap_server_conf *srvc, char *f
|
|||||||
|
|
||||||
if (srvc->tunnel) {
|
if (srvc->tunnel) {
|
||||||
const char *argv[] = { srvc->tunnel, NULL };
|
const char *argv[] = { srvc->tunnel, NULL };
|
||||||
struct child_process tunnel = {NULL};
|
struct child_process tunnel = CHILD_PROCESS_INIT;
|
||||||
|
|
||||||
imap_info("Starting tunnel '%s'... ", srvc->tunnel);
|
imap_info("Starting tunnel '%s'... ", srvc->tunnel);
|
||||||
|
|
||||||
|
2
pager.c
2
pager.c
@ -12,7 +12,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
static const char *pager_argv[] = { NULL, NULL };
|
static const char *pager_argv[] = { NULL, NULL };
|
||||||
static struct child_process pager_process;
|
static struct child_process pager_process = CHILD_PROCESS_INIT;
|
||||||
|
|
||||||
static void wait_for_pager(void)
|
static void wait_for_pager(void)
|
||||||
{
|
{
|
||||||
|
3
prompt.c
3
prompt.c
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
static char *do_askpass(const char *cmd, const char *prompt)
|
static char *do_askpass(const char *cmd, const char *prompt)
|
||||||
{
|
{
|
||||||
struct child_process pass;
|
struct child_process pass = CHILD_PROCESS_INIT;
|
||||||
const char *args[3];
|
const char *args[3];
|
||||||
static struct strbuf buffer = STRBUF_INIT;
|
static struct strbuf buffer = STRBUF_INIT;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
@ -15,7 +15,6 @@ static char *do_askpass(const char *cmd, const char *prompt)
|
|||||||
args[1] = prompt;
|
args[1] = prompt;
|
||||||
args[2] = NULL;
|
args[2] = NULL;
|
||||||
|
|
||||||
memset(&pass, 0, sizeof(pass));
|
|
||||||
pass.argv = args;
|
pass.argv = args;
|
||||||
pass.out = -1;
|
pass.out = -1;
|
||||||
|
|
||||||
|
@ -623,10 +623,9 @@ static int rpc_service(struct rpc_state *rpc, struct discovery *heads)
|
|||||||
const char *svc = rpc->service_name;
|
const char *svc = rpc->service_name;
|
||||||
struct strbuf buf = STRBUF_INIT;
|
struct strbuf buf = STRBUF_INIT;
|
||||||
struct strbuf *preamble = rpc->stdin_preamble;
|
struct strbuf *preamble = rpc->stdin_preamble;
|
||||||
struct child_process client;
|
struct child_process client = CHILD_PROCESS_INIT;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
memset(&client, 0, sizeof(client));
|
|
||||||
client.in = -1;
|
client.in = -1;
|
||||||
client.out = -1;
|
client.out = -1;
|
||||||
client.git_cmd = 1;
|
client.git_cmd = 1;
|
||||||
|
@ -175,7 +175,7 @@ static int cmd_import(const char *line)
|
|||||||
char *note_msg;
|
char *note_msg;
|
||||||
unsigned char head_sha1[20];
|
unsigned char head_sha1[20];
|
||||||
unsigned int startrev;
|
unsigned int startrev;
|
||||||
struct child_process svndump_proc;
|
struct child_process svndump_proc = CHILD_PROCESS_INIT;
|
||||||
const char *command = "svnrdump";
|
const char *command = "svnrdump";
|
||||||
|
|
||||||
if (read_ref(private_ref, head_sha1))
|
if (read_ref(private_ref, head_sha1))
|
||||||
@ -200,7 +200,6 @@ static int cmd_import(const char *line)
|
|||||||
if(dumpin_fd < 0)
|
if(dumpin_fd < 0)
|
||||||
die_errno("Couldn't open svn dump file %s.", url);
|
die_errno("Couldn't open svn dump file %s.", url);
|
||||||
} else {
|
} else {
|
||||||
memset(&svndump_proc, 0, sizeof(struct child_process));
|
|
||||||
svndump_proc.out = -1;
|
svndump_proc.out = -1;
|
||||||
argv_array_push(&svndump_proc.args, command);
|
argv_array_push(&svndump_proc.args, command);
|
||||||
argv_array_push(&svndump_proc.args, "dump");
|
argv_array_push(&svndump_proc.args, "dump");
|
||||||
|
@ -8,6 +8,12 @@
|
|||||||
# define SHELL_PATH "/bin/sh"
|
# define SHELL_PATH "/bin/sh"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void child_process_init(struct child_process *child)
|
||||||
|
{
|
||||||
|
memset(child, 0, sizeof(*child));
|
||||||
|
argv_array_init(&child->args);
|
||||||
|
}
|
||||||
|
|
||||||
struct child_to_clean {
|
struct child_to_clean {
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
struct child_to_clean *next;
|
struct child_to_clean *next;
|
||||||
@ -555,31 +561,21 @@ int run_command(struct child_process *cmd)
|
|||||||
return finish_command(cmd);
|
return finish_command(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void prepare_run_command_v_opt(struct child_process *cmd,
|
|
||||||
const char **argv,
|
|
||||||
int opt)
|
|
||||||
{
|
|
||||||
memset(cmd, 0, sizeof(*cmd));
|
|
||||||
cmd->argv = argv;
|
|
||||||
cmd->no_stdin = opt & RUN_COMMAND_NO_STDIN ? 1 : 0;
|
|
||||||
cmd->git_cmd = opt & RUN_GIT_CMD ? 1 : 0;
|
|
||||||
cmd->stdout_to_stderr = opt & RUN_COMMAND_STDOUT_TO_STDERR ? 1 : 0;
|
|
||||||
cmd->silent_exec_failure = opt & RUN_SILENT_EXEC_FAILURE ? 1 : 0;
|
|
||||||
cmd->use_shell = opt & RUN_USING_SHELL ? 1 : 0;
|
|
||||||
cmd->clean_on_exit = opt & RUN_CLEAN_ON_EXIT ? 1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int run_command_v_opt(const char **argv, int opt)
|
int run_command_v_opt(const char **argv, int opt)
|
||||||
{
|
{
|
||||||
struct child_process cmd;
|
return run_command_v_opt_cd_env(argv, opt, NULL, NULL);
|
||||||
prepare_run_command_v_opt(&cmd, argv, opt);
|
|
||||||
return run_command(&cmd);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int run_command_v_opt_cd_env(const char **argv, int opt, const char *dir, const char *const *env)
|
int run_command_v_opt_cd_env(const char **argv, int opt, const char *dir, const char *const *env)
|
||||||
{
|
{
|
||||||
struct child_process cmd;
|
struct child_process cmd = CHILD_PROCESS_INIT;
|
||||||
prepare_run_command_v_opt(&cmd, argv, opt);
|
cmd.argv = argv;
|
||||||
|
cmd.no_stdin = opt & RUN_COMMAND_NO_STDIN ? 1 : 0;
|
||||||
|
cmd.git_cmd = opt & RUN_GIT_CMD ? 1 : 0;
|
||||||
|
cmd.stdout_to_stderr = opt & RUN_COMMAND_STDOUT_TO_STDERR ? 1 : 0;
|
||||||
|
cmd.silent_exec_failure = opt & RUN_SILENT_EXEC_FAILURE ? 1 : 0;
|
||||||
|
cmd.use_shell = opt & RUN_USING_SHELL ? 1 : 0;
|
||||||
|
cmd.clean_on_exit = opt & RUN_CLEAN_ON_EXIT ? 1 : 0;
|
||||||
cmd.dir = dir;
|
cmd.dir = dir;
|
||||||
cmd.env = env;
|
cmd.env = env;
|
||||||
return run_command(&cmd);
|
return run_command(&cmd);
|
||||||
@ -763,14 +759,13 @@ char *find_hook(const char *name)
|
|||||||
|
|
||||||
int run_hook_ve(const char *const *env, const char *name, va_list args)
|
int run_hook_ve(const char *const *env, const char *name, va_list args)
|
||||||
{
|
{
|
||||||
struct child_process hook;
|
struct child_process hook = CHILD_PROCESS_INIT;
|
||||||
const char *p;
|
const char *p;
|
||||||
|
|
||||||
p = find_hook(name);
|
p = find_hook(name);
|
||||||
if (!p)
|
if (!p)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
memset(&hook, 0, sizeof(hook));
|
|
||||||
argv_array_push(&hook.args, p);
|
argv_array_push(&hook.args, p);
|
||||||
while ((p = va_arg(args, const char *)))
|
while ((p = va_arg(args, const char *)))
|
||||||
argv_array_push(&hook.args, p);
|
argv_array_push(&hook.args, p);
|
||||||
|
@ -44,6 +44,9 @@ struct child_process {
|
|||||||
unsigned clean_on_exit:1;
|
unsigned clean_on_exit:1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define CHILD_PROCESS_INIT { NULL, ARGV_ARRAY_INIT }
|
||||||
|
void child_process_init(struct child_process *);
|
||||||
|
|
||||||
int start_command(struct child_process *);
|
int start_command(struct child_process *);
|
||||||
int finish_command(struct child_process *);
|
int finish_command(struct child_process *);
|
||||||
int run_command(struct child_process *);
|
int run_command(struct child_process *);
|
||||||
|
@ -47,7 +47,7 @@ static int pack_objects(int fd, struct ref *refs, struct sha1_array *extra, stru
|
|||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
struct child_process po;
|
struct child_process po = CHILD_PROCESS_INIT;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
i = 4;
|
i = 4;
|
||||||
@ -59,7 +59,6 @@ static int pack_objects(int fd, struct ref *refs, struct sha1_array *extra, stru
|
|||||||
argv[i++] = "-q";
|
argv[i++] = "-q";
|
||||||
if (args->progress)
|
if (args->progress)
|
||||||
argv[i++] = "--progress";
|
argv[i++] = "--progress";
|
||||||
memset(&po, 0, sizeof(po));
|
|
||||||
po.argv = argv;
|
po.argv = argv;
|
||||||
po.in = -1;
|
po.in = -1;
|
||||||
po.out = args->stateless_rpc ? -1 : fd;
|
po.out = args->stateless_rpc ? -1 : fd;
|
||||||
|
21
submodule.c
21
submodule.c
@ -433,13 +433,12 @@ static int submodule_needs_pushing(const char *path, const unsigned char sha1[20
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (for_each_remote_ref_submodule(path, has_remote, NULL) > 0) {
|
if (for_each_remote_ref_submodule(path, has_remote, NULL) > 0) {
|
||||||
struct child_process cp;
|
struct child_process cp = CHILD_PROCESS_INIT;
|
||||||
const char *argv[] = {"rev-list", NULL, "--not", "--remotes", "-n", "1" , NULL};
|
const char *argv[] = {"rev-list", NULL, "--not", "--remotes", "-n", "1" , NULL};
|
||||||
struct strbuf buf = STRBUF_INIT;
|
struct strbuf buf = STRBUF_INIT;
|
||||||
int needs_pushing = 0;
|
int needs_pushing = 0;
|
||||||
|
|
||||||
argv[1] = sha1_to_hex(sha1);
|
argv[1] = sha1_to_hex(sha1);
|
||||||
memset(&cp, 0, sizeof(cp));
|
|
||||||
cp.argv = argv;
|
cp.argv = argv;
|
||||||
cp.env = local_repo_env;
|
cp.env = local_repo_env;
|
||||||
cp.git_cmd = 1;
|
cp.git_cmd = 1;
|
||||||
@ -524,10 +523,9 @@ static int push_submodule(const char *path)
|
|||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (for_each_remote_ref_submodule(path, has_remote, NULL) > 0) {
|
if (for_each_remote_ref_submodule(path, has_remote, NULL) > 0) {
|
||||||
struct child_process cp;
|
struct child_process cp = CHILD_PROCESS_INIT;
|
||||||
const char *argv[] = {"push", NULL};
|
const char *argv[] = {"push", NULL};
|
||||||
|
|
||||||
memset(&cp, 0, sizeof(cp));
|
|
||||||
cp.argv = argv;
|
cp.argv = argv;
|
||||||
cp.env = local_repo_env;
|
cp.env = local_repo_env;
|
||||||
cp.git_cmd = 1;
|
cp.git_cmd = 1;
|
||||||
@ -569,12 +567,11 @@ static int is_submodule_commit_present(const char *path, unsigned char sha1[20])
|
|||||||
if (!add_submodule_odb(path) && lookup_commit_reference(sha1)) {
|
if (!add_submodule_odb(path) && lookup_commit_reference(sha1)) {
|
||||||
/* Even if the submodule is checked out and the commit is
|
/* Even if the submodule is checked out and the commit is
|
||||||
* present, make sure it is reachable from a ref. */
|
* present, make sure it is reachable from a ref. */
|
||||||
struct child_process cp;
|
struct child_process cp = CHILD_PROCESS_INIT;
|
||||||
const char *argv[] = {"rev-list", "-n", "1", NULL, "--not", "--all", NULL};
|
const char *argv[] = {"rev-list", "-n", "1", NULL, "--not", "--all", NULL};
|
||||||
struct strbuf buf = STRBUF_INIT;
|
struct strbuf buf = STRBUF_INIT;
|
||||||
|
|
||||||
argv[3] = sha1_to_hex(sha1);
|
argv[3] = sha1_to_hex(sha1);
|
||||||
memset(&cp, 0, sizeof(cp));
|
|
||||||
cp.argv = argv;
|
cp.argv = argv;
|
||||||
cp.env = local_repo_env;
|
cp.env = local_repo_env;
|
||||||
cp.git_cmd = 1;
|
cp.git_cmd = 1;
|
||||||
@ -695,7 +692,7 @@ int fetch_populated_submodules(const struct argv_array *options,
|
|||||||
int quiet)
|
int quiet)
|
||||||
{
|
{
|
||||||
int i, result = 0;
|
int i, result = 0;
|
||||||
struct child_process cp;
|
struct child_process cp = CHILD_PROCESS_INIT;
|
||||||
struct argv_array argv = ARGV_ARRAY_INIT;
|
struct argv_array argv = ARGV_ARRAY_INIT;
|
||||||
struct string_list_item *name_for_path;
|
struct string_list_item *name_for_path;
|
||||||
const char *work_tree = get_git_work_tree();
|
const char *work_tree = get_git_work_tree();
|
||||||
@ -711,7 +708,6 @@ int fetch_populated_submodules(const struct argv_array *options,
|
|||||||
argv_array_push(&argv, "--recurse-submodules-default");
|
argv_array_push(&argv, "--recurse-submodules-default");
|
||||||
/* default value, "--submodule-prefix" and its value are added later */
|
/* default value, "--submodule-prefix" and its value are added later */
|
||||||
|
|
||||||
memset(&cp, 0, sizeof(cp));
|
|
||||||
cp.env = local_repo_env;
|
cp.env = local_repo_env;
|
||||||
cp.git_cmd = 1;
|
cp.git_cmd = 1;
|
||||||
cp.no_stdin = 1;
|
cp.no_stdin = 1;
|
||||||
@ -794,7 +790,7 @@ out:
|
|||||||
unsigned is_submodule_modified(const char *path, int ignore_untracked)
|
unsigned is_submodule_modified(const char *path, int ignore_untracked)
|
||||||
{
|
{
|
||||||
ssize_t len;
|
ssize_t len;
|
||||||
struct child_process cp;
|
struct child_process cp = CHILD_PROCESS_INIT;
|
||||||
const char *argv[] = {
|
const char *argv[] = {
|
||||||
"status",
|
"status",
|
||||||
"--porcelain",
|
"--porcelain",
|
||||||
@ -821,7 +817,6 @@ unsigned is_submodule_modified(const char *path, int ignore_untracked)
|
|||||||
if (ignore_untracked)
|
if (ignore_untracked)
|
||||||
argv[2] = "-uno";
|
argv[2] = "-uno";
|
||||||
|
|
||||||
memset(&cp, 0, sizeof(cp));
|
|
||||||
cp.argv = argv;
|
cp.argv = argv;
|
||||||
cp.env = local_repo_env;
|
cp.env = local_repo_env;
|
||||||
cp.git_cmd = 1;
|
cp.git_cmd = 1;
|
||||||
@ -862,7 +857,7 @@ unsigned is_submodule_modified(const char *path, int ignore_untracked)
|
|||||||
|
|
||||||
int submodule_uses_gitfile(const char *path)
|
int submodule_uses_gitfile(const char *path)
|
||||||
{
|
{
|
||||||
struct child_process cp;
|
struct child_process cp = CHILD_PROCESS_INIT;
|
||||||
const char *argv[] = {
|
const char *argv[] = {
|
||||||
"submodule",
|
"submodule",
|
||||||
"foreach",
|
"foreach",
|
||||||
@ -883,7 +878,6 @@ int submodule_uses_gitfile(const char *path)
|
|||||||
strbuf_release(&buf);
|
strbuf_release(&buf);
|
||||||
|
|
||||||
/* Now test that all nested submodules use a gitfile too */
|
/* Now test that all nested submodules use a gitfile too */
|
||||||
memset(&cp, 0, sizeof(cp));
|
|
||||||
cp.argv = argv;
|
cp.argv = argv;
|
||||||
cp.env = local_repo_env;
|
cp.env = local_repo_env;
|
||||||
cp.git_cmd = 1;
|
cp.git_cmd = 1;
|
||||||
@ -901,7 +895,7 @@ int ok_to_remove_submodule(const char *path)
|
|||||||
{
|
{
|
||||||
struct stat st;
|
struct stat st;
|
||||||
ssize_t len;
|
ssize_t len;
|
||||||
struct child_process cp;
|
struct child_process cp = CHILD_PROCESS_INIT;
|
||||||
const char *argv[] = {
|
const char *argv[] = {
|
||||||
"status",
|
"status",
|
||||||
"--porcelain",
|
"--porcelain",
|
||||||
@ -918,7 +912,6 @@ int ok_to_remove_submodule(const char *path)
|
|||||||
if (!submodule_uses_gitfile(path))
|
if (!submodule_uses_gitfile(path))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
memset(&cp, 0, sizeof(cp));
|
|
||||||
cp.argv = argv;
|
cp.argv = argv;
|
||||||
cp.env = local_repo_env;
|
cp.env = local_repo_env;
|
||||||
cp.git_cmd = 1;
|
cp.git_cmd = 1;
|
||||||
|
@ -15,9 +15,7 @@
|
|||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
struct child_process proc;
|
struct child_process proc = CHILD_PROCESS_INIT;
|
||||||
|
|
||||||
memset(&proc, 0, sizeof(proc));
|
|
||||||
|
|
||||||
if (argc < 3)
|
if (argc < 3)
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
struct child_process cp;
|
struct child_process cp = CHILD_PROCESS_INIT;
|
||||||
int nogit = 0;
|
int nogit = 0;
|
||||||
|
|
||||||
setup_git_directory_gently(&nogit);
|
setup_git_directory_gently(&nogit);
|
||||||
@ -13,7 +13,6 @@ int main(int argc, char **argv)
|
|||||||
setup_work_tree();
|
setup_work_tree();
|
||||||
argv++;
|
argv++;
|
||||||
}
|
}
|
||||||
memset(&cp, 0, sizeof(cp));
|
|
||||||
cp.git_cmd = 1;
|
cp.git_cmd = 1;
|
||||||
cp.argv = (const char **)argv + 1;
|
cp.argv = (const char **)argv + 1;
|
||||||
return run_command(&cp);
|
return run_command(&cp);
|
||||||
|
@ -118,7 +118,8 @@ static struct child_process *get_helper(struct transport *transport)
|
|||||||
if (data->helper)
|
if (data->helper)
|
||||||
return data->helper;
|
return data->helper;
|
||||||
|
|
||||||
helper = xcalloc(1, sizeof(*helper));
|
helper = xmalloc(sizeof(*helper));
|
||||||
|
child_process_init(helper);
|
||||||
helper->in = -1;
|
helper->in = -1;
|
||||||
helper->out = -1;
|
helper->out = -1;
|
||||||
helper->err = 0;
|
helper->err = 0;
|
||||||
@ -395,7 +396,7 @@ static int get_importer(struct transport *transport, struct child_process *fasti
|
|||||||
struct child_process *helper = get_helper(transport);
|
struct child_process *helper = get_helper(transport);
|
||||||
struct helper_data *data = transport->data;
|
struct helper_data *data = transport->data;
|
||||||
int cat_blob_fd, code;
|
int cat_blob_fd, code;
|
||||||
memset(fastimport, 0, sizeof(*fastimport));
|
child_process_init(fastimport);
|
||||||
fastimport->in = helper->out;
|
fastimport->in = helper->out;
|
||||||
argv_array_push(&fastimport->args, "fast-import");
|
argv_array_push(&fastimport->args, "fast-import");
|
||||||
argv_array_push(&fastimport->args, debug ? "--stats" : "--quiet");
|
argv_array_push(&fastimport->args, debug ? "--stats" : "--quiet");
|
||||||
|
12
transport.c
12
transport.c
@ -201,7 +201,7 @@ static struct ref *get_refs_via_rsync(struct transport *transport, int for_push)
|
|||||||
{
|
{
|
||||||
struct strbuf buf = STRBUF_INIT, temp_dir = STRBUF_INIT;
|
struct strbuf buf = STRBUF_INIT, temp_dir = STRBUF_INIT;
|
||||||
struct ref dummy = {NULL}, *tail = &dummy;
|
struct ref dummy = {NULL}, *tail = &dummy;
|
||||||
struct child_process rsync;
|
struct child_process rsync = CHILD_PROCESS_INIT;
|
||||||
const char *args[5];
|
const char *args[5];
|
||||||
int temp_dir_len;
|
int temp_dir_len;
|
||||||
|
|
||||||
@ -218,7 +218,6 @@ static struct ref *get_refs_via_rsync(struct transport *transport, int for_push)
|
|||||||
strbuf_addstr(&buf, rsync_url(transport->url));
|
strbuf_addstr(&buf, rsync_url(transport->url));
|
||||||
strbuf_addstr(&buf, "/refs");
|
strbuf_addstr(&buf, "/refs");
|
||||||
|
|
||||||
memset(&rsync, 0, sizeof(rsync));
|
|
||||||
rsync.argv = args;
|
rsync.argv = args;
|
||||||
rsync.stdout_to_stderr = 1;
|
rsync.stdout_to_stderr = 1;
|
||||||
args[0] = "rsync";
|
args[0] = "rsync";
|
||||||
@ -263,9 +262,8 @@ static struct ref *get_refs_via_rsync(struct transport *transport, int for_push)
|
|||||||
static int fetch_objs_via_rsync(struct transport *transport,
|
static int fetch_objs_via_rsync(struct transport *transport,
|
||||||
int nr_objs, struct ref **to_fetch)
|
int nr_objs, struct ref **to_fetch)
|
||||||
{
|
{
|
||||||
struct child_process rsync;
|
struct child_process rsync = CHILD_PROCESS_INIT;
|
||||||
|
|
||||||
memset(&rsync, 0, sizeof(rsync));
|
|
||||||
rsync.stdout_to_stderr = 1;
|
rsync.stdout_to_stderr = 1;
|
||||||
argv_array_push(&rsync.args, "rsync");
|
argv_array_push(&rsync.args, "rsync");
|
||||||
argv_array_push(&rsync.args, (transport->verbose > 1) ? "-rv" : "-r");
|
argv_array_push(&rsync.args, (transport->verbose > 1) ? "-rv" : "-r");
|
||||||
@ -327,7 +325,7 @@ static int rsync_transport_push(struct transport *transport,
|
|||||||
{
|
{
|
||||||
struct strbuf buf = STRBUF_INIT, temp_dir = STRBUF_INIT;
|
struct strbuf buf = STRBUF_INIT, temp_dir = STRBUF_INIT;
|
||||||
int result = 0, i;
|
int result = 0, i;
|
||||||
struct child_process rsync;
|
struct child_process rsync = CHILD_PROCESS_INIT;
|
||||||
const char *args[10];
|
const char *args[10];
|
||||||
|
|
||||||
if (flags & TRANSPORT_PUSH_MIRROR)
|
if (flags & TRANSPORT_PUSH_MIRROR)
|
||||||
@ -338,7 +336,6 @@ static int rsync_transport_push(struct transport *transport,
|
|||||||
strbuf_addstr(&buf, rsync_url(transport->url));
|
strbuf_addstr(&buf, rsync_url(transport->url));
|
||||||
strbuf_addch(&buf, '/');
|
strbuf_addch(&buf, '/');
|
||||||
|
|
||||||
memset(&rsync, 0, sizeof(rsync));
|
|
||||||
rsync.argv = args;
|
rsync.argv = args;
|
||||||
rsync.stdout_to_stderr = 1;
|
rsync.stdout_to_stderr = 1;
|
||||||
i = 0;
|
i = 0;
|
||||||
@ -1056,7 +1053,7 @@ static int run_pre_push_hook(struct transport *transport,
|
|||||||
{
|
{
|
||||||
int ret = 0, x;
|
int ret = 0, x;
|
||||||
struct ref *r;
|
struct ref *r;
|
||||||
struct child_process proc;
|
struct child_process proc = CHILD_PROCESS_INIT;
|
||||||
struct strbuf buf;
|
struct strbuf buf;
|
||||||
const char *argv[4];
|
const char *argv[4];
|
||||||
|
|
||||||
@ -1067,7 +1064,6 @@ static int run_pre_push_hook(struct transport *transport,
|
|||||||
argv[2] = transport->url;
|
argv[2] = transport->url;
|
||||||
argv[3] = NULL;
|
argv[3] = NULL;
|
||||||
|
|
||||||
memset(&proc, 0, sizeof(proc));
|
|
||||||
proc.argv = argv;
|
proc.argv = argv;
|
||||||
proc.in = -1;
|
proc.in = -1;
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ static int write_one_shallow(const struct commit_graft *graft, void *cb_data)
|
|||||||
|
|
||||||
static void create_pack_file(void)
|
static void create_pack_file(void)
|
||||||
{
|
{
|
||||||
struct child_process pack_objects;
|
struct child_process pack_objects = CHILD_PROCESS_INIT;
|
||||||
char data[8193], progress[128];
|
char data[8193], progress[128];
|
||||||
char abort_msg[] = "aborting due to possible repository "
|
char abort_msg[] = "aborting due to possible repository "
|
||||||
"corruption on the remote side.";
|
"corruption on the remote side.";
|
||||||
@ -108,7 +108,6 @@ static void create_pack_file(void)
|
|||||||
argv[arg++] = "--include-tag";
|
argv[arg++] = "--include-tag";
|
||||||
argv[arg++] = NULL;
|
argv[arg++] = NULL;
|
||||||
|
|
||||||
memset(&pack_objects, 0, sizeof(pack_objects));
|
|
||||||
pack_objects.in = -1;
|
pack_objects.in = -1;
|
||||||
pack_objects.out = -1;
|
pack_objects.out = -1;
|
||||||
pack_objects.err = -1;
|
pack_objects.err = -1;
|
||||||
@ -448,7 +447,7 @@ static void check_non_tip(void)
|
|||||||
static const char *argv[] = {
|
static const char *argv[] = {
|
||||||
"rev-list", "--stdin", NULL,
|
"rev-list", "--stdin", NULL,
|
||||||
};
|
};
|
||||||
static struct child_process cmd;
|
static struct child_process cmd = CHILD_PROCESS_INIT;
|
||||||
struct object *o;
|
struct object *o;
|
||||||
char namebuf[42]; /* ^ + SHA-1 + LF */
|
char namebuf[42]; /* ^ + SHA-1 + LF */
|
||||||
int i;
|
int i;
|
||||||
|
@ -725,7 +725,7 @@ static void wt_status_print_changed(struct wt_status *s)
|
|||||||
|
|
||||||
static void wt_status_print_submodule_summary(struct wt_status *s, int uncommitted)
|
static void wt_status_print_submodule_summary(struct wt_status *s, int uncommitted)
|
||||||
{
|
{
|
||||||
struct child_process sm_summary;
|
struct child_process sm_summary = CHILD_PROCESS_INIT;
|
||||||
struct argv_array env = ARGV_ARRAY_INIT;
|
struct argv_array env = ARGV_ARRAY_INIT;
|
||||||
struct argv_array argv = ARGV_ARRAY_INIT;
|
struct argv_array argv = ARGV_ARRAY_INIT;
|
||||||
struct strbuf cmd_stdout = STRBUF_INIT;
|
struct strbuf cmd_stdout = STRBUF_INIT;
|
||||||
@ -744,7 +744,6 @@ static void wt_status_print_submodule_summary(struct wt_status *s, int uncommitt
|
|||||||
if (!uncommitted)
|
if (!uncommitted)
|
||||||
argv_array_push(&argv, s->amend ? "HEAD^" : "HEAD");
|
argv_array_push(&argv, s->amend ? "HEAD^" : "HEAD");
|
||||||
|
|
||||||
memset(&sm_summary, 0, sizeof(sm_summary));
|
|
||||||
sm_summary.argv = argv.argv;
|
sm_summary.argv = argv.argv;
|
||||||
sm_summary.env = env.argv;
|
sm_summary.env = env.argv;
|
||||||
sm_summary.git_cmd = 1;
|
sm_summary.git_cmd = 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user