@@ -263,12 +263,14 @@ fn install_one(
263
263
}
264
264
} ;
265
265
266
- let git_package = if source_id. is_git ( ) {
267
- Some ( pkg. clone ( ) )
266
+ let ( mut ws, rustc, target) = make_ws_rustc_target ( config, opts, & source_id, pkg. clone ( ) ) ?;
267
+ let pkg = if source_id. is_git ( ) {
268
+ // Don't use ws.current() in order to keep the package source as a git source so that
269
+ // install tracking uses the correct source.
270
+ pkg
268
271
} else {
269
- None
272
+ ws . current ( ) ? . clone ( )
270
273
} ;
271
- let ( mut ws, rustc, target) = make_ws_rustc_target ( config, opts, & source_id, pkg) ?;
272
274
273
275
let mut td_opt = None ;
274
276
let mut needs_cleanup = false ;
@@ -286,10 +288,6 @@ fn install_one(
286
288
ws. set_target_dir ( target_dir) ;
287
289
}
288
290
289
- let pkg = git_package
290
- . as_ref ( )
291
- . map_or_else ( || ws. current ( ) , |pkg| Ok ( pkg) ) ?;
292
-
293
291
if from_cwd {
294
292
if pkg. manifest ( ) . edition ( ) == Edition :: Edition2015 {
295
293
config. shell ( ) . warn (
@@ -317,7 +315,7 @@ fn install_one(
317
315
318
316
// Helper for --no-track flag to make sure it doesn't overwrite anything.
319
317
let no_track_duplicates = || -> CargoResult < BTreeMap < String , Option < PackageId > > > {
320
- let duplicates: BTreeMap < String , Option < PackageId > > = exe_names ( pkg, & opts. filter )
318
+ let duplicates: BTreeMap < String , Option < PackageId > > = exe_names ( & pkg, & opts. filter )
321
319
. into_iter ( )
322
320
. filter ( |name| dst. join ( name) . exists ( ) )
323
321
. map ( |name| ( name, None ) )
@@ -349,7 +347,7 @@ fn install_one(
349
347
}
350
348
}
351
349
352
- config. shell ( ) . status ( "Installing" , pkg) ?;
350
+ config. shell ( ) . status ( "Installing" , & pkg) ?;
353
351
354
352
check_yanked_install ( & ws) ?;
355
353
@@ -390,7 +388,7 @@ fn install_one(
390
388
} else {
391
389
let tracker = InstallTracker :: load ( config, root) ?;
392
390
let ( _freshness, duplicates) =
393
- tracker. check_upgrade ( & dst, pkg, force, opts, & target, & rustc. verbose_version ) ?;
391
+ tracker. check_upgrade ( & dst, & pkg, force, opts, & target, & rustc. verbose_version ) ?;
394
392
( Some ( tracker) , duplicates)
395
393
} ;
396
394
@@ -453,15 +451,15 @@ fn install_one(
453
451
454
452
if let Some ( mut tracker) = tracker {
455
453
tracker. mark_installed (
456
- pkg,
454
+ & pkg,
457
455
& successful_bins,
458
456
vers. map ( |s| s. to_string ( ) ) ,
459
457
opts,
460
458
& target,
461
459
& rustc. verbose_version ,
462
460
) ;
463
461
464
- if let Err ( e) = remove_orphaned_bins ( & ws, & mut tracker, & duplicates, pkg, & dst) {
462
+ if let Err ( e) = remove_orphaned_bins ( & ws, & mut tracker, & duplicates, & pkg, & dst) {
465
463
// Don't hard error on remove.
466
464
config
467
465
. shell ( )
@@ -588,11 +586,7 @@ fn make_ws_rustc_target<'cfg>(
588
586
source_id : & SourceId ,
589
587
pkg : Package ,
590
588
) -> CargoResult < ( Workspace < ' cfg > , Rustc , String ) > {
591
- let mut ws = if source_id. is_git ( ) {
592
- // Don't use ws.current() in order to keep the package source as a git source so that
593
- // install tracking uses the correct source.
594
- Workspace :: new ( pkg. manifest_path ( ) , config) ?
595
- } else if source_id. is_path ( ) {
589
+ let mut ws = if source_id. is_git ( ) || source_id. is_path ( ) {
596
590
Workspace :: new ( pkg. manifest_path ( ) , config) ?
597
591
} else {
598
592
Workspace :: ephemeral ( pkg, config, None , false ) ?
0 commit comments