@@ -349,76 +349,75 @@ fn exec(args: UpgradeArgs) -> CargoResult<()> {
349349 None
350350 } ;
351351
352- if new_version_req. is_none ( ) {
353- if let Some ( Some ( explicit_version_req) ) =
352+ if new_version_req. is_none ( )
353+ && let Some ( Some ( explicit_version_req) ) =
354354 selected_dependencies. get ( & dependency. name )
355- {
355+ {
356+ if is_pinned_dep && !args. pinned . as_bool ( ) {
357+ // `--pinned` is required in case the user meant an unpinned version
358+ // in the dependency tree
359+ reason. get_or_insert ( Reason :: Pinned ) ;
360+ pinned_present = true ;
361+ } else {
362+ new_version_req = Some ( explicit_version_req. to_owned ( ) )
363+ }
364+ }
365+
366+ if new_version_req. is_none ( )
367+ && let Some ( latest_incompatible) = & latest_incompatible
368+ {
369+ let new_version: semver:: Version = latest_incompatible. parse ( ) ?;
370+ let req_candidate =
371+ match cargo_edit:: upgrade_requirement ( & old_version_req, & new_version) {
372+ Ok ( Some ( version_req) ) => Some ( version_req) ,
373+ Err ( _) => {
374+ // Didn't know how to preserve existing format, so abandon it
375+ Some ( latest_incompatible. clone ( ) )
376+ }
377+ _ => {
378+ // Already at latest
379+ None
380+ }
381+ } ;
382+
383+ if req_candidate. is_some ( ) {
356384 if is_pinned_dep && !args. pinned . as_bool ( ) {
357- // `--pinned` is required in case the user meant an unpinned version
358- // in the dependency tree
385+ // `--pinned` is required for incompatible upgrades
359386 reason. get_or_insert ( Reason :: Pinned ) ;
360387 pinned_present = true ;
388+ } else if !args. incompatible . as_bool ( ) && !is_pinned_dep {
389+ // `--incompatible` is required for non-pinned deps
390+ reason. get_or_insert ( Reason :: Incompatible ) ;
391+ incompatible_present = true ;
361392 } else {
362- new_version_req = Some ( explicit_version_req . to_owned ( ) )
393+ new_version_req = req_candidate ;
363394 }
364395 }
365396 }
366397
367- if new_version_req. is_none ( ) {
368- if let Some ( latest_incompatible) = & latest_incompatible {
369- let new_version: semver:: Version = latest_incompatible. parse ( ) ?;
370- let req_candidate =
371- match cargo_edit:: upgrade_requirement ( & old_version_req, & new_version) {
372- Ok ( Some ( version_req) ) => Some ( version_req) ,
373- Err ( _) => {
374- // Didn't know how to preserve existing format, so abandon it
375- Some ( latest_incompatible. clone ( ) )
376- }
377- _ => {
378- // Already at latest
379- None
380- }
381- } ;
382-
383- if req_candidate. is_some ( ) {
384- if is_pinned_dep && !args. pinned . as_bool ( ) {
385- // `--pinned` is required for incompatible upgrades
386- reason. get_or_insert ( Reason :: Pinned ) ;
387- pinned_present = true ;
388- } else if !args. incompatible . as_bool ( ) && !is_pinned_dep {
389- // `--incompatible` is required for non-pinned deps
390- reason. get_or_insert ( Reason :: Incompatible ) ;
391- incompatible_present = true ;
392- } else {
393- new_version_req = req_candidate;
398+ if new_version_req. is_none ( )
399+ && let Some ( latest_compatible) = & latest_compatible
400+ {
401+ // Compatible upgrades are allowed for pinned
402+ let new_version: semver:: Version = latest_compatible. parse ( ) ?;
403+ let req_candidate =
404+ match cargo_edit:: upgrade_requirement ( & old_version_req, & new_version) {
405+ Ok ( Some ( version_req) ) => Some ( version_req) ,
406+ Err ( _) => {
407+ // Do not change syntax for compatible upgrades
408+ Some ( old_version_req. clone ( ) )
394409 }
395- }
396- }
397- }
398-
399- if new_version_req. is_none ( ) {
400- if let Some ( latest_compatible) = & latest_compatible {
401- // Compatible upgrades are allowed for pinned
402- let new_version: semver:: Version = latest_compatible. parse ( ) ?;
403- let req_candidate =
404- match cargo_edit:: upgrade_requirement ( & old_version_req, & new_version) {
405- Ok ( Some ( version_req) ) => Some ( version_req) ,
406- Err ( _) => {
407- // Do not change syntax for compatible upgrades
408- Some ( old_version_req. clone ( ) )
409- }
410- _ => {
411- // Already at latest
412- None
413- }
414- } ;
415-
416- if req_candidate. is_some ( ) {
417- if !args. compatible . as_bool ( ) {
418- reason. get_or_insert ( Reason :: Compatible ) ;
419- } else {
420- new_version_req = req_candidate;
410+ _ => {
411+ // Already at latest
412+ None
421413 }
414+ } ;
415+
416+ if req_candidate. is_some ( ) {
417+ if !args. compatible . as_bool ( ) {
418+ reason. get_or_insert ( Reason :: Compatible ) ;
419+ } else {
420+ new_version_req = req_candidate;
422421 }
423422 }
424423 }
@@ -787,14 +786,11 @@ impl Dep {
787786 . latest_version
788787 . as_ref ( )
789788 . and_then ( |v| semver:: Version :: parse ( v) . ok ( ) )
789+ && let Some ( new_version_req) = & self . new_version_req
790+ && let Ok ( new_version_req) = VersionReq :: parse ( new_version_req)
791+ && !new_version_req. matches ( & latest_version)
790792 {
791- if let Some ( new_version_req) = & self . new_version_req {
792- if let Ok ( new_version_req) = VersionReq :: parse ( new_version_req) {
793- if !new_version_req. matches ( & latest_version) {
794- spec. set_fg ( Some ( Color :: Red ) ) ;
795- }
796- }
797- }
793+ spec. set_fg ( Some ( Color :: Red ) ) ;
798794 }
799795 spec
800796 }
@@ -846,12 +842,10 @@ impl Dep {
846842 . latest_version
847843 . as_ref ( )
848844 . and_then ( |v| semver:: Version :: parse ( v) . ok ( ) )
845+ && let Some ( old_version_req) = & self . old_version_req
846+ && let Ok ( old_version_req) = VersionReq :: parse ( old_version_req)
849847 {
850- if let Some ( old_version_req) = & self . old_version_req {
851- if let Ok ( old_version_req) = VersionReq :: parse ( old_version_req) {
852- return old_version_req. matches ( & latest_version) ;
853- }
854- }
848+ return old_version_req. matches ( & latest_version) ;
855849 }
856850 true
857851 }
0 commit comments