11use std:: fmt:: Write ;
22use std:: ops:: Deref ;
33use std:: path:: Path ;
4- use std:: sync:: Arc ;
54
65use anyhow:: Result ;
76use itertools:: Itertools ;
@@ -19,9 +18,7 @@ use uv_configuration::{
1918} ;
2019use uv_dispatch:: BuildDispatch ;
2120use uv_distribution:: LoweredExtraBuildDependencies ;
22- use uv_distribution_types:: {
23- DirectorySourceDist , Dist , Index , Name , Requirement , Resolution , ResolvedDist , SourceDist ,
24- } ;
21+ use uv_distribution_types:: { Dist , Index , Name , Requirement , Resolution , ResolvedDist , SourceDist } ;
2522use uv_fs:: { PortablePathBuf , Simplified } ;
2623use uv_installer:: { InstallationStrategy , SitePackages } ;
2724use uv_normalize:: { DefaultExtras , DefaultGroups , PackageName } ;
@@ -37,6 +34,7 @@ use uv_warnings::warn_user;
3734use uv_workspace:: pyproject:: Source ;
3835use uv_workspace:: { DiscoveryOptions , MemberDiscovery , VirtualProject , Workspace , WorkspaceCache } ;
3936
37+ use crate :: commands:: editable:: apply_editable_mode;
4038use crate :: commands:: pip:: loggers:: { DefaultInstallLogger , DefaultResolveLogger , InstallLogger } ;
4139use crate :: commands:: pip:: operations:: { ChangedDist , Changelog , Modifications } ;
4240use crate :: commands:: pip:: resolution_markers;
@@ -882,70 +880,6 @@ pub(super) async fn do_sync(
882880 Ok ( changelog)
883881}
884882
885- /// If necessary, convert any editable requirements to non-editable.
886- fn apply_editable_mode ( resolution : Resolution , editable : Option < EditableMode > ) -> Resolution {
887- match editable {
888- // No modifications are necessary for editable mode; retain any editable distributions.
889- None => resolution,
890-
891- // Filter out any non-editable distributions.
892- Some ( EditableMode :: Editable ) => resolution. map ( |dist| {
893- let ResolvedDist :: Installable { dist, version } = dist else {
894- return None ;
895- } ;
896- let Dist :: Source ( SourceDist :: Directory ( DirectorySourceDist {
897- name,
898- install_path,
899- editable : None | Some ( false ) ,
900- r#virtual,
901- url,
902- } ) ) = dist. as_ref ( )
903- else {
904- return None ;
905- } ;
906-
907- Some ( ResolvedDist :: Installable {
908- dist : Arc :: new ( Dist :: Source ( SourceDist :: Directory ( DirectorySourceDist {
909- name : name. clone ( ) ,
910- install_path : install_path. clone ( ) ,
911- editable : Some ( true ) ,
912- r#virtual : * r#virtual,
913- url : url. clone ( ) ,
914- } ) ) ) ,
915- version : version. clone ( ) ,
916- } )
917- } ) ,
918-
919- // If a package is editable, map it to a non-editable distribution.
920- Some ( EditableMode :: NonEditable ) => resolution. map ( |dist| {
921- let ResolvedDist :: Installable { dist, version } = dist else {
922- return None ;
923- } ;
924- let Dist :: Source ( SourceDist :: Directory ( DirectorySourceDist {
925- name,
926- install_path,
927- editable : None | Some ( true ) ,
928- r#virtual,
929- url,
930- } ) ) = dist. as_ref ( )
931- else {
932- return None ;
933- } ;
934-
935- Some ( ResolvedDist :: Installable {
936- dist : Arc :: new ( Dist :: Source ( SourceDist :: Directory ( DirectorySourceDist {
937- name : name. clone ( ) ,
938- install_path : install_path. clone ( ) ,
939- editable : Some ( false ) ,
940- r#virtual : * r#virtual,
941- url : url. clone ( ) ,
942- } ) ) ) ,
943- version : version. clone ( ) ,
944- } )
945- } ) ,
946- }
947- }
948-
949883/// Filter out any virtual workspace members.
950884fn apply_no_virtual_project ( resolution : Resolution ) -> Resolution {
951885 resolution. filter ( |dist| {
0 commit comments