auto merge of #8518 : catamorphism/rust/issue-8498-workaround, r=brson
r? @brson
This commit is contained in:
commit
92af0db0a3
@ -49,7 +49,7 @@ pub fn run(lib_path: &str,
|
||||
|
||||
let env = env + target_env(lib_path, prog);
|
||||
let mut proc = run::Process::new(prog, args, run::ProcessOptions {
|
||||
env: Some(env.slice(0, env.len())),
|
||||
env: Some(env),
|
||||
dir: None,
|
||||
in_fd: None,
|
||||
out_fd: None,
|
||||
|
@ -114,7 +114,7 @@ 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 {
|
||||
env: env.map(|v| v.slice(0, v.len())),
|
||||
env: env,
|
||||
dir: Some(&cwd),
|
||||
in_fd: None,
|
||||
out_fd: None,
|
||||
@ -222,7 +222,7 @@ fn command_line_test_with_env(args: &[~str], cwd: &Path, env: Option<~[(~str, ~s
|
||||
assert!(os::path_is_dir(&*cwd));
|
||||
let cwd = (*cwd).clone();
|
||||
let mut prog = run::Process::new(cmd, args, run::ProcessOptions {
|
||||
env: env.map(|v| v.slice(0, v.len())),
|
||||
env: env,
|
||||
dir: Some(&cwd),
|
||||
in_fd: None,
|
||||
out_fd: None,
|
||||
@ -757,7 +757,9 @@ fn rust_path_test() {
|
||||
// use command_line_test_with_env
|
||||
let mut prog = run::Process::new("rustpkg",
|
||||
[~"install", ~"foo"],
|
||||
run::ProcessOptions { env: Some(&[(~"RUST_LOG",
|
||||
// This should actually extend the environment; then we can probably
|
||||
// un-ignore it
|
||||
run::ProcessOptions { env: Some(~[(~"RUST_LOG",
|
||||
~"rustpkg"),
|
||||
(~"RUST_PATH",
|
||||
dir_for_path.to_str())]),
|
||||
@ -1039,7 +1041,7 @@ fn test_extern_mod() {
|
||||
~"--sysroot", test_sysroot().to_str(),
|
||||
~"-o", exec_file.to_str()],
|
||||
run::ProcessOptions {
|
||||
env: env.map(|v| v.slice(0, v.len())),
|
||||
env: env,
|
||||
dir: Some(&dir),
|
||||
in_fd: None,
|
||||
out_fd: None,
|
||||
|
@ -68,7 +68,7 @@ pub struct ProcessOptions<'self> {
|
||||
* If this is Some(vec-of-names-and-values) then the new process will
|
||||
* have an environment containing the given named values only.
|
||||
*/
|
||||
env: Option<&'self [(~str, ~str)]>,
|
||||
env: Option<~[(~str, ~str)]>,
|
||||
|
||||
/**
|
||||
* If this is None then the new process will use the same initial working
|
||||
@ -171,7 +171,7 @@ impl Process {
|
||||
Some(fd) => (None, fd)
|
||||
};
|
||||
|
||||
let res = spawn_process_os(prog, args, options.env, options.dir,
|
||||
let res = spawn_process_os(prog, args, options.env.clone(), options.dir,
|
||||
in_fd, out_fd, err_fd);
|
||||
|
||||
unsafe {
|
||||
@ -444,7 +444,7 @@ struct SpawnProcessResult {
|
||||
|
||||
#[cfg(windows)]
|
||||
fn spawn_process_os(prog: &str, args: &[~str],
|
||||
env: Option<&[(~str, ~str)]>,
|
||||
env: Option<~[(~str, ~str)]>,
|
||||
dir: Option<&Path>,
|
||||
in_fd: c_int, out_fd: c_int, err_fd: c_int) -> SpawnProcessResult {
|
||||
|
||||
@ -627,7 +627,7 @@ pub fn make_command_line(prog: &str, args: &[~str]) -> ~str {
|
||||
|
||||
#[cfg(unix)]
|
||||
fn spawn_process_os(prog: &str, args: &[~str],
|
||||
env: Option<&[(~str, ~str)]>,
|
||||
env: Option<~[(~str, ~str)]>,
|
||||
dir: Option<&Path>,
|
||||
in_fd: c_int, out_fd: c_int, err_fd: c_int) -> SpawnProcessResult {
|
||||
|
||||
@ -717,7 +717,7 @@ fn with_argv<T>(prog: &str, args: &[~str], cb: &fn(**libc::c_char) -> T) -> T {
|
||||
}
|
||||
|
||||
#[cfg(unix)]
|
||||
fn with_envp<T>(env: Option<&[(~str, ~str)]>, cb: &fn(*c_void) -> T) -> T {
|
||||
fn with_envp<T>(env: Option<~[(~str, ~str)]>, cb: &fn(*c_void) -> T) -> T {
|
||||
use vec;
|
||||
|
||||
// On posixy systems we can pass a char** for envp, which is a
|
||||
@ -749,7 +749,7 @@ fn with_envp<T>(env: Option<&[(~str, ~str)]>, cb: &fn(*c_void) -> T) -> T {
|
||||
}
|
||||
|
||||
#[cfg(windows)]
|
||||
fn with_envp<T>(env: Option<&[(~str, ~str)]>, cb: &fn(*mut c_void) -> T) -> T {
|
||||
fn with_envp<T>(env: Option<~[(~str, ~str)]>, cb: &fn(*mut c_void) -> T) -> T {
|
||||
// On win32 we pass an "environment block" which is not a char**, but
|
||||
// rather a concatenation of null-terminated k=v\0 sequences, with a final
|
||||
// \0 to terminate.
|
||||
@ -1284,14 +1284,14 @@ mod tests {
|
||||
}
|
||||
|
||||
#[cfg(unix,not(target_os="android"))]
|
||||
fn run_env(env: Option<&[(~str, ~str)]>) -> run::Process {
|
||||
fn run_env(env: Option<~[(~str, ~str)]>) -> run::Process {
|
||||
run::Process::new("env", [], run::ProcessOptions {
|
||||
env: env,
|
||||
.. run::ProcessOptions::new()
|
||||
})
|
||||
}
|
||||
#[cfg(unix,target_os="android")]
|
||||
fn run_env(env: Option<&[(~str, ~str)]>) -> run::Process {
|
||||
fn run_env(env: Option<~[(~str, ~str)]>) -> run::Process {
|
||||
run::Process::new("/system/bin/sh", [~"-c",~"set"], run::ProcessOptions {
|
||||
env: env,
|
||||
.. run::ProcessOptions::new()
|
||||
@ -1299,7 +1299,7 @@ mod tests {
|
||||
}
|
||||
|
||||
#[cfg(windows)]
|
||||
fn run_env(env: Option<&[(~str, ~str)]>) -> run::Process {
|
||||
fn run_env(env: Option<~[(~str, ~str)]>) -> run::Process {
|
||||
run::Process::new("cmd", [~"/c", ~"set"], run::ProcessOptions {
|
||||
env: env,
|
||||
.. run::ProcessOptions::new()
|
||||
@ -1344,7 +1344,7 @@ mod tests {
|
||||
let mut new_env = os::env();
|
||||
new_env.push((~"RUN_TEST_NEW_ENV", ~"123"));
|
||||
|
||||
let mut prog = run_env(Some(new_env.slice(0, new_env.len())));
|
||||
let mut prog = run_env(Some(new_env));
|
||||
let output = str::from_bytes(prog.finish_with_output().output);
|
||||
|
||||
assert!(output.contains("RUN_TEST_NEW_ENV=123"));
|
||||
|
44
src/test/run-pass/issue-8498.rs
Normal file
44
src/test/run-pass/issue-8498.rs
Normal file
@ -0,0 +1,44 @@
|
||||
// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// xfail-test
|
||||
use std::io;
|
||||
|
||||
fn main() {
|
||||
// This is ok
|
||||
match &[(~5,~7)] {
|
||||
ps => {
|
||||
let (ref y, _) = ps[0];
|
||||
io::println(fmt!("1. y = %d", **y));
|
||||
assert!(**y == 5);
|
||||
}
|
||||
}
|
||||
|
||||
// This is not entirely ok
|
||||
match Some(&[(~5,)]) {
|
||||
Some(ps) => {
|
||||
let (ref y,) = ps[0];
|
||||
io::println(fmt!("2. y = %d", **y));
|
||||
if **y != 5 { io::println("sadness"); }
|
||||
}
|
||||
None => ()
|
||||
}
|
||||
|
||||
// This is not ok
|
||||
match Some(&[(~5,~7)]) {
|
||||
Some(ps) => {
|
||||
let (ref y, ref z) = ps[0];
|
||||
io::println(fmt!("3. y = %d z = %d", **y, **z));
|
||||
assert!(**y == 5);
|
||||
}
|
||||
None => ()
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user