diff options
| author | bors <bors@rust-lang.org> | 2013-08-27 21:55:42 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-08-27 21:55:42 -0700 |
| commit | b8d1fa399402c71331aefd634d710004e00b73a6 (patch) | |
| tree | 575c040a4b277c8ff0107fdf673ef5a516eaf866 /src/librustpkg | |
| parent | f22b4b169854c8a4ba86c16ee43327d6bcf94562 (diff) | |
| parent | 4635644746034bd01306159cc952cbdda23b3703 (diff) | |
auto merge of #8645 : alexcrichton/rust/issue-6436-run-non-blocking, r=brson
This overhauls `std::run` to instead run on top of libuv. This is *not* in a mergeable state, I've been attempting to diagnose failures in the compiletest suite. I've managed to find a fair number of bugs so far, but I still don't seem to be done yet. Notable changes: * This requires upgrading libuv. From the discussion on #6567, I took libuv master from a few days ago, applied one patch to fix process spawning with multiple event loops in libuv, and pushed to my own fork * The build system for libuv has changed since we last used it. There's some extra checkout from a google build system which apparently does all the magic if you don't want to require autotools, and the google system just requires python. I updated the Makefile to get this build system and build libuv with it instead. This is untested on windows and arm, and both will probably need to see some improvement. * This required adding some pipe bindings to libuv as well. Currently the support is pretty simple and probably completely unsafe for pipes, but you at least get read/write methods. This is necessary for capturing output of processes. * I didn't redesign `std::run` at all, I simply tried to reimplement all the existing functionality on top of libuv. Some functions ended up dying, but nothing major. All uses of `std::run` in the compiler still work just fine. I'm not quite sure how the rest of the runtime deals with this, but I marked process structures as `no_send` because the waiting/waking up has to happen in the same event loop right now. If processes start migrating between event loops then very bad things can happen. This may be what threadsafe I/O would fix, and I would be more than willing to rebase on that if it lands first. Anyway, for now I wanted to put this up for review, I'm still investigating the corruption/deadlock bugs, but this is in an *almost* workable state. Once I find the bugs I'll also rebase on the current master.
Diffstat (limited to 'src/librustpkg')
| -rw-r--r-- | src/librustpkg/source_control.rs | 2 | ||||
| -rw-r--r-- | src/librustpkg/tests.rs | 14 |
2 files changed, 9 insertions, 7 deletions
diff --git a/src/librustpkg/source_control.rs b/src/librustpkg/source_control.rs index caa004a53b2..c67a8158139 100644 --- a/src/librustpkg/source_control.rs +++ b/src/librustpkg/source_control.rs @@ -89,7 +89,7 @@ pub fn git_clone_general(source: &str, target: &Path, v: &Version) -> bool { fn process_output_in_cwd(prog: &str, args: &[~str], cwd: &Path) -> ProcessOutput { let mut prog = Process::new(prog, args, ProcessOptions{ dir: Some(cwd) - ,..ProcessOptions::new()}); + ,..ProcessOptions::new()}).unwrap(); prog.finish_with_output() } diff --git a/src/librustpkg/tests.rs b/src/librustpkg/tests.rs index 98999da41c8..b0d996ea0af 100644 --- a/src/librustpkg/tests.rs +++ b/src/librustpkg/tests.rs @@ -112,13 +112,14 @@ fn mk_temp_workspace(short_name: &Path, version: &Version) -> Path { fn run_git(args: &[~str], env: Option<~[(~str, ~str)]>, cwd: &Path, err_msg: &str) { let cwd = (*cwd).clone(); - let mut prog = run::Process::new("git", args, run::ProcessOptions { + let prog = run::Process::new("git", args, run::ProcessOptions { env: env, dir: Some(&cwd), in_fd: None, out_fd: None, err_fd: None }); + let mut prog = prog.unwrap(); let rslt = prog.finish_with_output(); if rslt.status != 0 { fail!("%s [git returned %?, output = %s, error = %s]", err_msg, @@ -226,7 +227,7 @@ fn command_line_test_with_env(args: &[~str], cwd: &Path, env: Option<~[(~str, ~s in_fd: None, out_fd: None, err_fd: None - }); + }).unwrap(); let output = prog.finish_with_output(); debug!("Output from command %s with args %? was %s {%s}[%?]", cmd, args, str::from_bytes(output.output), @@ -1027,16 +1028,17 @@ fn test_extern_mod() { test_sysroot().to_str(), exec_file.to_str()); - let mut prog = run::Process::new(rustc.to_str(), [main_file.to_str(), - ~"--sysroot", test_sysroot().to_str(), - ~"-o", exec_file.to_str()], - run::ProcessOptions { + let prog = run::Process::new(rustc.to_str(), [main_file.to_str(), + ~"--sysroot", test_sysroot().to_str(), + ~"-o", exec_file.to_str()], + run::ProcessOptions { env: env, dir: Some(&dir), in_fd: None, out_fd: None, err_fd: None }); + let mut prog = prog.unwrap(); let outp = prog.finish_with_output(); if outp.status != 0 { fail!("output was %s, error was %s", |
