@@ -16,8 +16,8 @@ use uv_pep508::{
1616} ;
1717
1818use crate :: {
19- Hashes , ParsedArchiveUrl , ParsedDirectoryUrl , ParsedGitUrl , ParsedPathUrl , ParsedUrl ,
20- ParsedUrlError , VerbatimParsedUrl ,
19+ ConflictItem , Hashes , ParsedArchiveUrl , ParsedDirectoryUrl , ParsedGitUrl , ParsedPathUrl ,
20+ ParsedUrl , ParsedUrlError , VerbatimParsedUrl ,
2121} ;
2222
2323#[ derive( Debug , Error ) ]
@@ -192,11 +192,13 @@ impl From<uv_pep508::Requirement<VerbatimParsedUrl>> for Requirement {
192192 None => RequirementSource :: Registry {
193193 specifier : VersionSpecifiers :: empty ( ) ,
194194 index : None ,
195+ conflict : None ,
195196 } ,
196197 // The most popular case: just a name, a version range and maybe extras.
197198 Some ( VersionOrUrl :: VersionSpecifier ( specifier) ) => RequirementSource :: Registry {
198199 specifier,
199200 index : None ,
201+ conflict : None ,
200202 } ,
201203 Some ( VersionOrUrl :: Url ( url) ) => {
202204 RequirementSource :: from_parsed_url ( url. parsed_url , url. verbatim )
@@ -229,7 +231,9 @@ impl Display for Requirement {
229231 ) ?;
230232 }
231233 match & self . source {
232- RequirementSource :: Registry { specifier, index } => {
234+ RequirementSource :: Registry {
235+ specifier, index, ..
236+ } => {
233237 write ! ( f, "{specifier}" ) ?;
234238 if let Some ( index) = index {
235239 write ! ( f, " (index: {index})" ) ?;
@@ -283,6 +287,8 @@ pub enum RequirementSource {
283287 specifier : VersionSpecifiers ,
284288 /// Choose a version from the index at the given URL.
285289 index : Option < Url > ,
290+ /// The conflict item associated with the source, if any.
291+ conflict : Option < ConflictItem > ,
286292 } ,
287293 // TODO(konsti): Track and verify version specifier from `project.dependencies` matches the
288294 // version in remote location.
@@ -513,7 +519,9 @@ impl Display for RequirementSource {
513519 /// rather than for inclusion in a `requirements.txt` file.
514520 fn fmt ( & self , f : & mut Formatter < ' _ > ) -> std:: fmt:: Result {
515521 match self {
516- Self :: Registry { specifier, index } => {
522+ Self :: Registry {
523+ specifier, index, ..
524+ } => {
517525 write ! ( f, "{specifier}" ) ?;
518526 if let Some ( index) = index {
519527 write ! ( f, " (index: {index})" ) ?;
@@ -571,6 +579,7 @@ enum RequirementSourceWire {
571579 #[ serde( skip_serializing_if = "VersionSpecifiers::is_empty" , default ) ]
572580 specifier : VersionSpecifiers ,
573581 index : Option < Url > ,
582+ conflict : Option < ConflictItem > ,
574583 } ,
575584}
576585
@@ -580,11 +589,16 @@ impl From<RequirementSource> for RequirementSourceWire {
580589 RequirementSource :: Registry {
581590 specifier,
582591 mut index,
592+ conflict,
583593 } => {
584594 if let Some ( index) = index. as_mut ( ) {
585595 redact_credentials ( index) ;
586596 }
587- Self :: Registry { specifier, index }
597+ Self :: Registry {
598+ specifier,
599+ index,
600+ conflict,
601+ }
588602 }
589603 RequirementSource :: Url {
590604 subdirectory,
@@ -686,9 +700,15 @@ impl TryFrom<RequirementSourceWire> for RequirementSource {
686700
687701 fn try_from ( wire : RequirementSourceWire ) -> Result < RequirementSource , RequirementError > {
688702 match wire {
689- RequirementSourceWire :: Registry { specifier, index } => {
690- Ok ( Self :: Registry { specifier, index } )
691- }
703+ RequirementSourceWire :: Registry {
704+ specifier,
705+ index,
706+ conflict,
707+ } => Ok ( Self :: Registry {
708+ specifier,
709+ index,
710+ conflict,
711+ } ) ,
692712 RequirementSourceWire :: Git { git } => {
693713 let mut repository = Url :: parse ( & git) ?;
694714
0 commit comments