@@ -234,13 +234,33 @@ impl<'cfg> Workspace<'cfg> {
234
234
Ok ( pkg)
235
235
}
236
236
237
+ pub fn current_mut ( & mut self ) -> CargoResult < & mut Package > {
238
+ let cm = self . current_manifest . clone ( ) ;
239
+ let pkg = self . current_opt_mut ( ) . ok_or_else ( || {
240
+ anyhow:: format_err!(
241
+ "manifest path `{}` is a virtual manifest, but this \
242
+ command requires running against an actual package in \
243
+ this workspace",
244
+ cm. display( )
245
+ )
246
+ } ) ?;
247
+ Ok ( pkg)
248
+ }
249
+
237
250
pub fn current_opt ( & self ) -> Option < & Package > {
238
251
match * self . packages . get ( & self . current_manifest ) {
239
252
MaybePackage :: Package ( ref p) => Some ( p) ,
240
253
MaybePackage :: Virtual ( ..) => None ,
241
254
}
242
255
}
243
256
257
+ pub fn current_opt_mut ( & mut self ) -> Option < & mut Package > {
258
+ match * self . packages . get_mut ( & self . current_manifest ) {
259
+ MaybePackage :: Package ( ref mut p) => Some ( p) ,
260
+ MaybePackage :: Virtual ( ..) => None ,
261
+ }
262
+ }
263
+
244
264
pub fn is_virtual ( & self ) -> bool {
245
265
match * self . packages . get ( & self . current_manifest ) {
246
266
MaybePackage :: Package ( ..) => false ,
@@ -825,10 +845,18 @@ impl<'cfg> Packages<'cfg> {
825
845
self . maybe_get ( manifest_path) . unwrap ( )
826
846
}
827
847
848
+ fn get_mut ( & mut self , manifest_path : & Path ) -> & mut MaybePackage {
849
+ self . maybe_get_mut ( manifest_path) . unwrap ( )
850
+ }
851
+
828
852
fn maybe_get ( & self , manifest_path : & Path ) -> Option < & MaybePackage > {
829
853
self . packages . get ( manifest_path. parent ( ) . unwrap ( ) )
830
854
}
831
855
856
+ fn maybe_get_mut ( & mut self , manifest_path : & Path ) -> Option < & mut MaybePackage > {
857
+ self . packages . get_mut ( manifest_path. parent ( ) . unwrap ( ) )
858
+ }
859
+
832
860
fn load ( & mut self , manifest_path : & Path ) -> CargoResult < & MaybePackage > {
833
861
let key = manifest_path. parent ( ) . unwrap ( ) ;
834
862
match self . packages . entry ( key. to_path_buf ( ) ) {
0 commit comments