1
- use std:: { env, ffi:: OsString , fmt, io, path:: PathBuf , process:: ExitStatus , string:: FromUtf8Error } ;
2
-
3
- use crate :: { Cmd , CmdData } ;
1
+ use std:: {
2
+ env,
3
+ ffi:: OsString ,
4
+ fmt, io,
5
+ path:: { Path , PathBuf } ,
6
+ process:: ExitStatus ,
7
+ string:: FromUtf8Error ,
8
+ sync:: Arc ,
9
+ } ;
10
+
11
+ use crate :: Cmd ;
4
12
5
13
/// `Result` from std, with the error type defaulting to xshell's [`Error`].
6
14
pub type Result < T , E = Error > = std:: result:: Result < T , E > ;
@@ -12,7 +20,7 @@ pub struct Error {
12
20
13
21
/// Note: this is intentionally not public.
14
22
enum ErrorKind {
15
- CurrentDir { err : io:: Error , path : Option < PathBuf > } ,
23
+ CurrentDir { err : io:: Error , path : Option < Arc < Path > > } ,
16
24
Var { err : env:: VarError , var : OsString } ,
17
25
ReadFile { err : io:: Error , path : PathBuf } ,
18
26
ReadDir { err : io:: Error , path : PathBuf } ,
@@ -21,10 +29,10 @@ enum ErrorKind {
21
29
HardLink { err : io:: Error , src : PathBuf , dst : PathBuf } ,
22
30
CreateDir { err : io:: Error , path : PathBuf } ,
23
31
RemovePath { err : io:: Error , path : PathBuf } ,
24
- CmdStatus { cmd : CmdData , status : ExitStatus } ,
25
- CmdIo { err : io:: Error , cmd : CmdData } ,
26
- CmdUtf8 { err : FromUtf8Error , cmd : CmdData } ,
27
- CmdStdin { err : io:: Error , cmd : CmdData } ,
32
+ CmdStatus { cmd : Cmd , status : ExitStatus } ,
33
+ CmdIo { err : io:: Error , cmd : Cmd } ,
34
+ CmdUtf8 { err : FromUtf8Error , cmd : Cmd } ,
35
+ CmdStdin { err : io:: Error , cmd : Cmd } ,
28
36
}
29
37
30
38
impl From < ErrorKind > for Error {
@@ -91,7 +99,7 @@ impl fmt::Display for Error {
91
99
} ,
92
100
ErrorKind :: CmdIo { err, cmd } => {
93
101
if err. kind ( ) == io:: ErrorKind :: NotFound {
94
- let prog = cmd. prog . display ( ) ;
102
+ let prog = cmd. prog . as_path ( ) . display ( ) ;
95
103
write ! ( f, "command not found: `{prog}`" )
96
104
} else {
97
105
write ! ( f, "io error when running command `{cmd}`: {err}" )
@@ -117,7 +125,7 @@ impl std::error::Error for Error {}
117
125
118
126
/// `pub(crate)` constructors, visible only in this crate.
119
127
impl Error {
120
- pub ( crate ) fn new_current_dir ( err : io:: Error , path : Option < PathBuf > ) -> Error {
128
+ pub ( crate ) fn new_current_dir ( err : io:: Error , path : Option < Arc < Path > > ) -> Error {
121
129
ErrorKind :: CurrentDir { err, path } . into ( )
122
130
}
123
131
@@ -153,23 +161,23 @@ impl Error {
153
161
ErrorKind :: RemovePath { err, path } . into ( )
154
162
}
155
163
156
- pub ( crate ) fn new_cmd_status ( cmd : & Cmd < ' _ > , status : ExitStatus ) -> Error {
157
- let cmd = cmd. data . clone ( ) ;
164
+ pub ( crate ) fn new_cmd_status ( cmd : & Cmd , status : ExitStatus ) -> Error {
165
+ let cmd = cmd. clone ( ) ;
158
166
ErrorKind :: CmdStatus { cmd, status } . into ( )
159
167
}
160
168
161
- pub ( crate ) fn new_cmd_io ( cmd : & Cmd < ' _ > , err : io:: Error ) -> Error {
162
- let cmd = cmd. data . clone ( ) ;
169
+ pub ( crate ) fn new_cmd_io ( cmd : & Cmd , err : io:: Error ) -> Error {
170
+ let cmd = cmd. clone ( ) ;
163
171
ErrorKind :: CmdIo { err, cmd } . into ( )
164
172
}
165
173
166
- pub ( crate ) fn new_cmd_utf8 ( cmd : & Cmd < ' _ > , err : FromUtf8Error ) -> Error {
167
- let cmd = cmd. data . clone ( ) ;
174
+ pub ( crate ) fn new_cmd_utf8 ( cmd : & Cmd , err : FromUtf8Error ) -> Error {
175
+ let cmd = cmd. clone ( ) ;
168
176
ErrorKind :: CmdUtf8 { err, cmd } . into ( )
169
177
}
170
178
171
- pub ( crate ) fn new_cmd_stdin ( cmd : & Cmd < ' _ > , err : io:: Error ) -> Error {
172
- let cmd = cmd. data . clone ( ) ;
179
+ pub ( crate ) fn new_cmd_stdin ( cmd : & Cmd , err : io:: Error ) -> Error {
180
+ let cmd = cmd. clone ( ) ;
173
181
ErrorKind :: CmdStdin { err, cmd } . into ( )
174
182
}
175
183
}
0 commit comments