mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
os: add an .exit_code field to os.Command (#13321)
* Added os.Command.exit_code * vfmt vlib/os/os_test.v * extract os.Command to os.v, add a dummy panicing implementation on windows, just for parity, fix os_test.v on macos, skip test_command on windows. Co-authored-by: Merlin Diavova <md@merlindiaova.org> Co-authored-by: Delyan Angelov <delian66@gmail.com>
This commit is contained in:
parent
eb7f152f3d
commit
f3683b7cdc
11
vlib/os/os.v
11
vlib/os/os.v
@ -24,6 +24,17 @@ pub:
|
|||||||
// stderr string // TODO
|
// stderr string // TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub struct Command {
|
||||||
|
mut:
|
||||||
|
f voidptr
|
||||||
|
pub mut:
|
||||||
|
eof bool
|
||||||
|
exit_code int
|
||||||
|
pub:
|
||||||
|
path string
|
||||||
|
redirect_stdout bool
|
||||||
|
}
|
||||||
|
|
||||||
[unsafe]
|
[unsafe]
|
||||||
pub fn (mut result Result) free() {
|
pub fn (mut result Result) free() {
|
||||||
unsafe { result.output.free() }
|
unsafe { result.output.free() }
|
||||||
|
@ -364,16 +364,6 @@ pub fn execute(cmd string) Result {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Command {
|
|
||||||
mut:
|
|
||||||
f voidptr
|
|
||||||
pub mut:
|
|
||||||
eof bool
|
|
||||||
pub:
|
|
||||||
path string
|
|
||||||
redirect_stdout bool
|
|
||||||
}
|
|
||||||
|
|
||||||
[manualfree]
|
[manualfree]
|
||||||
pub fn (mut c Command) start() ? {
|
pub fn (mut c Command) start() ? {
|
||||||
pcmd := c.path + ' 2>&1'
|
pcmd := c.path + ' 2>&1'
|
||||||
@ -412,9 +402,9 @@ pub fn (mut c Command) read_line() string {
|
|||||||
return final
|
return final
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (c &Command) close() ? {
|
pub fn (mut c Command) close() ? {
|
||||||
exit_code := vpclose(c.f)
|
c.exit_code = vpclose(c.f)
|
||||||
if exit_code == 127 {
|
if c.exit_code == 127 {
|
||||||
return error_with_code('error', 127)
|
return error_with_code('error', 127)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -861,3 +861,36 @@ fn test_execute() ? {
|
|||||||
assert hexresult.starts_with('7374617274004d4944444c450066696e697368')
|
assert hexresult.starts_with('7374617274004d4944444c450066696e697368')
|
||||||
assert hexresult.ends_with('0a7878')
|
assert hexresult.ends_with('0a7878')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn test_command() {
|
||||||
|
if os.user_os() == 'windows' {
|
||||||
|
eprintln('>>> os.Command is not implemented fully on Windows yet')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
mut cmd := os.Command{
|
||||||
|
path: 'ls'
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd.start() or { panic(err) }
|
||||||
|
for !cmd.eof {
|
||||||
|
cmd.read_line()
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd.close() or { panic(err) }
|
||||||
|
// dump( cmd )
|
||||||
|
assert cmd.exit_code == 0
|
||||||
|
|
||||||
|
// This will return a non 0 code
|
||||||
|
mut cmd_to_fail := os.Command{
|
||||||
|
path: 'ls -M'
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd_to_fail.start() or { panic(err) }
|
||||||
|
for !cmd_to_fail.eof {
|
||||||
|
cmd_to_fail.read_line()
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd_to_fail.close() or { panic(err) }
|
||||||
|
// dump( cmd_to_fail )
|
||||||
|
assert cmd_to_fail.exit_code != 0 // 2 on linux, 1 on macos
|
||||||
|
}
|
||||||
|
@ -543,3 +543,17 @@ pub fn getegid() int {
|
|||||||
pub fn posix_set_permission_bit(path_s string, mode u32, enable bool) {
|
pub fn posix_set_permission_bit(path_s string, mode u32, enable bool) {
|
||||||
// windows has no concept of a permission mask, so do nothing
|
// windows has no concept of a permission mask, so do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
|
pub fn (mut c Command) start() ? {
|
||||||
|
panic('not implemented')
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn (mut c Command) read_line() string {
|
||||||
|
panic('not implemented')
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn (mut c Command) close() ? {
|
||||||
|
panic('not implemented')
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user