Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
Use run_command within receive-pack to invoke index-pack
author
Shawn O. Pearce
<spearce@spearce.org>
Mon, 12 Mar 2007 23:00:26 +0000
(19:00 -0400)
committer
Junio C Hamano
<junkio@cox.net>
Tue, 13 Mar 2007 06:40:18 +0000
(23:40 -0700)
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
receive-pack.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
b49809c
)
diff --git
a/receive-pack.c
b/receive-pack.c
index 7cf58782e38b0d52c104921d938163f2ba2c343c..26aa26bcb5089adcf400d12b673519e328b49a23 100644
(file)
--- a/
receive-pack.c
+++ b/
receive-pack.c
@@
-382,10
+382,10
@@
static const char *unpack(void)
}
} else {
const char *keeper[6];
}
} else {
const char *keeper[6];
- int fd[2], s, len, status;
- pid_t pid;
+ int s, len, status;
char keep_arg[256];
char packname[46];
char keep_arg[256];
char packname[46];
+ struct child_process ip;
s = sprintf(keep_arg, "--keep=receive-pack %i on ", getpid());
if (gethostname(keep_arg + s, sizeof(keep_arg) - s))
s = sprintf(keep_arg, "--keep=receive-pack %i on ", getpid());
if (gethostname(keep_arg + s, sizeof(keep_arg) - s))
@@
-397,20
+397,12
@@
static const char *unpack(void)
keeper[3] = hdr_arg;
keeper[4] = keep_arg;
keeper[5] = NULL;
keeper[3] = hdr_arg;
keeper[4] = keep_arg;
keeper[5] = NULL;
-
- i
f (pipe(fd) < 0)
-
return "index-pack pipe failed"
;
-
pid = fork()
;
- if (
pid < 0
)
+ memset(&ip, 0, sizeof(ip));
+ i
p.argv = keeper;
+
ip.out = -1
;
+
ip.git_cmd = 1
;
+ if (
start_command(&ip)
)
return "index-pack fork failed";
return "index-pack fork failed";
- if (!pid) {
- dup2(fd[1], 1);
- close(fd[1]);
- close(fd[0]);
- execv_git_cmd(keeper);
- die("execv of index-pack failed");
- }
- close(fd[1]);
/*
* The first thing we expects from index-pack's output
/*
* The first thing we expects from index-pack's output
@@
-420,9
+412,8
@@
static const char *unpack(void)
* later on. If we don't get that then tough luck with it.
*/
for (len = 0;
* later on. If we don't get that then tough luck with it.
*/
for (len = 0;
- len < 46 && (s = xread(
fd[0]
, packname+len, 46-len)) > 0;
+ len < 46 && (s = xread(
ip.out
, packname+len, 46-len)) > 0;
len += s);
len += s);
- close(fd[0]);
if (len == 46 && packname[45] == '\n' &&
memcmp(packname, "keep\t", 5) == 0) {
char path[PATH_MAX];
if (len == 46 && packname[45] == '\n' &&
memcmp(packname, "keep\t", 5) == 0) {
char path[PATH_MAX];
@@
-432,14
+423,8
@@
static const char *unpack(void)
pack_lockfile = xstrdup(path);
}
pack_lockfile = xstrdup(path);
}
- /* Then wrap our index-pack process. */
- while (waitpid(pid, &status, 0) < 0)
- if (errno != EINTR)
- return "waitpid failed";
- if (WIFEXITED(status)) {
- int code = WEXITSTATUS(status);
- if (code)
- return "index-pack exited with error code";
+ status = finish_command(&ip);
+ if (!status) {
reprepare_packed_git();
return NULL;
}
reprepare_packed_git();
return NULL;
}