From: skimo@liacs.nl
To: git@vger.kernel.org, Junio C Hamano <junkio@cox.net>
Subject: [PATCH 08/15] Add run_command_v_opt_cd: chdir into a directory before exec
Date: Sun, 20 May 2007 20:04:41 +0200 [thread overview]
Message-ID: <1179684289307-git-send-email-skimo@liacs.nl> (raw)
In-Reply-To: <11796842882917-git-send-email-skimo@liacs.nl>
From: Alex Riesen <raa.lkml@gmail.com>
It can make code simplier (no need to preserve cwd) and safer
(no chance the cwd of the current process is accidentally forgotten).
Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
---
run-command.c | 27 ++++++++++++++++++++++-----
run-command.h | 2 ++
2 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/run-command.c b/run-command.c
index eff523e..043b570 100644
--- a/run-command.c
+++ b/run-command.c
@@ -73,6 +73,9 @@ int start_command(struct child_process *cmd)
close(cmd->out);
}
+ if (cmd->dir && chdir(cmd->dir))
+ die("exec %s: cd to %s failed (%s)", cmd->argv[0],
+ cmd->dir, strerror(errno));
if (cmd->git_cmd) {
execv_git_cmd(cmd->argv);
} else {
@@ -133,13 +136,27 @@ int run_command(struct child_process *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;
+}
+
int run_command_v_opt(const char **argv, int opt)
{
struct child_process cmd;
- 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;
+ prepare_run_command_v_opt(&cmd, argv, opt);
+ return run_command(&cmd);
+}
+
+int run_command_v_opt_cd(const char **argv, int opt, const char *dir)
+{
+ struct child_process cmd;
+ prepare_run_command_v_opt(&cmd, argv, opt);
+ cmd.dir = dir;
return run_command(&cmd);
}
diff --git a/run-command.h b/run-command.h
index 3680ef9..cbd7484 100644
--- a/run-command.h
+++ b/run-command.h
@@ -16,6 +16,7 @@ struct child_process {
pid_t pid;
int in;
int out;
+ const char *dir;
unsigned close_in:1;
unsigned close_out:1;
unsigned no_stdin:1;
@@ -32,5 +33,6 @@ int run_command(struct child_process *);
#define RUN_GIT_CMD 2 /*If this is to be git sub-command */
#define RUN_COMMAND_STDOUT_TO_STDERR 4
int run_command_v_opt(const char **argv, int opt);
+int run_command_v_opt_cd(const char **argv, int opt, const char *dir);
#endif
--
1.5.2.rc3.815.g8fc2
next prev parent reply other threads:[~2007-05-20 18:05 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-20 18:04 [RFC] Third round of support for cloning submodules skimo
2007-05-20 18:04 ` [PATCH 01/15] Add dump-config skimo
2007-05-20 18:04 ` [PATCH 02/15] git-config: add --remote option for reading config from remote repo skimo
2007-05-20 18:11 ` Frank Lichtenheld
2007-05-20 19:44 ` Sven Verdoolaege
2007-05-20 22:03 ` Frank Lichtenheld
2007-05-20 18:04 ` [PATCH 03/15] http.h: make fill_active_slots a function pointer skimo
2007-05-20 18:04 ` [PATCH 04/15] git-config: read remote config files over HTTP skimo
2007-05-20 18:04 ` [PATCH 05/15] unpack-trees.c: pass cache_entry * to verify_absent rather than just the name skimo
2007-05-20 18:04 ` [PATCH 06/15] git-read-tree: take --submodules option skimo
2007-05-20 21:24 ` Martin Waitz
2007-05-20 21:50 ` Sven Verdoolaege
2007-05-20 18:04 ` [PATCH 07/15] unpack-trees.c: assume submodules are clean skimo
2007-05-20 18:04 ` skimo [this message]
2007-05-20 18:04 ` [PATCH 09/15] entry.c: optionally checkout submodules skimo
2007-05-20 21:18 ` Martin Waitz
2007-05-20 21:51 ` Sven Verdoolaege
2007-05-24 13:29 ` Sven Verdoolaege
2007-05-20 18:04 ` [PATCH 10/15] git-checkout: pass --submodules option to git-read-tree skimo
2007-05-20 18:04 ` [PATCH 11/15] git-read-tree: treat null commit as empty tree skimo
2007-05-20 18:04 ` [PATCH 12/15] git_config: add void * for callback data skimo
2007-05-20 18:04 ` [PATCH 13/15] unpack-trees.c: optionally clone submodules for later checkout skimo
2007-05-20 18:04 ` [PATCH 14/15] entry.c: optionall checkout newly cloned submodules skimo
2007-05-20 18:04 ` [PATCH 15/15] git-clone: add --submodules for cloning submodules skimo
2007-05-20 19:10 ` [RFC] Third round of support " Junio C Hamano
2007-05-20 19:59 ` Sven Verdoolaege
2007-05-20 20:54 ` Alex Riesen
2007-05-20 21:09 ` Sven Verdoolaege
2007-05-20 21:24 ` Alex Riesen
2007-05-20 21:47 ` Sven Verdoolaege
2007-05-20 22:26 ` Alex Riesen
2007-05-21 9:57 ` Sven Verdoolaege
2007-05-21 10:44 ` Josef Weidendorfer
2007-05-21 11:41 ` Martin Waitz
2007-05-20 21:40 ` Martin Waitz
2007-05-20 22:24 ` Alex Riesen
2007-05-20 22:55 ` Martin Waitz
2007-05-20 23:02 ` Alex Riesen
2007-05-20 23:12 ` Martin Waitz
2007-05-22 21:54 ` Alex Riesen
2007-05-24 15:56 ` Martin Waitz
2007-05-21 0:39 ` Steven Grimm
2007-05-21 10:01 ` Sven Verdoolaege
2007-05-22 21:56 ` Alex Riesen
2007-05-20 22:14 ` Martin Waitz
2007-05-20 22:58 ` Alex Riesen
2007-05-20 23:36 ` Martin Waitz
2007-05-20 22:52 ` Martin Waitz
2007-05-21 8:54 ` Sven Verdoolaege
2007-05-21 10:07 ` Martin Waitz
2007-05-21 10:14 ` Sven Verdoolaege
2007-05-21 11:34 ` Martin Waitz
2007-05-21 12:19 ` Sven Verdoolaege
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1179684289307-git-send-email-skimo@liacs.nl \
--to=skimo@liacs.nl \
--cc=git@vger.kernel.org \
--cc=junkio@cox.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.