diff options
| author | Junio C Hamano <gitster@pobox.com> | 2007-11-01 13:47:47 -0700 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2007-11-01 13:47:47 -0700 |
| commit | 4340a813d007b592534de664d152d66417dbe809 (patch) | |
| tree | 731be77f39c37cd0c6b1ddf5bf8e50f1692ae9e7 /run-command.h | |
| parent | Merge branch 'sp/mergetool' (diff) | |
| parent | Use the asyncronous function infrastructure to run the content filter. (diff) | |
| download | git-4340a813d007b592534de664d152d66417dbe809.tar.gz git-4340a813d007b592534de664d152d66417dbe809.zip | |
Merge branch 'js/forkexec'
* js/forkexec:
Use the asyncronous function infrastructure to run the content filter.
Avoid a dup2(2) in apply_filter() - start_command() can do it for us.
t0021-conversion.sh: Test that the clean filter really cleans content.
upload-pack: Run rev-list in an asynchronous function.
upload-pack: Move the revision walker into a separate function.
Use the asyncronous function infrastructure in builtin-fetch-pack.c.
Add infrastructure to run a function asynchronously.
upload-pack: Use start_command() to run pack-objects in create_pack_file().
Have start_command() create a pipe to read the stderr of the child.
Use start_comand() in builtin-fetch-pack.c instead of explicit fork/exec.
Use run_command() to spawn external diff programs instead of fork/exec.
Use start_command() to run content filters instead of explicit fork/exec.
Use start_command() in git_connect() instead of explicit fork/exec.
Change git_connect() to return a struct child_process instead of a pid_t.
Conflicts:
builtin-fetch-pack.c
Diffstat (limited to 'run-command.h')
| -rw-r--r-- | run-command.h | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/run-command.h b/run-command.h index 7958eb1e0b..94e1e9d516 100644 --- a/run-command.h +++ b/run-command.h @@ -16,6 +16,7 @@ struct child_process { pid_t pid; int in; int out; + int err; const char *dir; const char *const *env; unsigned close_in:1; @@ -42,4 +43,26 @@ int run_command_v_opt_cd(const char **argv, int opt, const char *dir); */ int run_command_v_opt_cd_env(const char **argv, int opt, const char *dir, const char *const *env); +/* + * The purpose of the following functions is to feed a pipe by running + * a function asynchronously and providing output that the caller reads. + * + * It is expected that no synchronization and mutual exclusion between + * the caller and the feed function is necessary so that the function + * can run in a thread without interfering with the caller. + */ +struct async { + /* + * proc writes to fd and closes it; + * returns 0 on success, non-zero on failure + */ + int (*proc)(int fd, void *data); + void *data; + int out; /* caller reads from here and closes it */ + pid_t pid; +}; + +int start_async(struct async *async); +int finish_async(struct async *async); + #endif |
