@@ -5,6 +5,7 @@ use std::fmt::Formatter;
5
5
use std:: path:: { Component , Path , PathBuf } ;
6
6
7
7
use either:: Either ;
8
+ use owo_colors:: OwoColorize ;
8
9
use petgraph:: graph:: NodeIndex ;
9
10
use petgraph:: prelude:: EdgeRef ;
10
11
use petgraph:: visit:: IntoNodeReferences ;
@@ -312,6 +313,19 @@ impl<'lock> RequirementsTxtExport<'lock> {
312
313
. map ( |( index, package) | Requirement {
313
314
package,
314
315
marker : reachability. remove ( & index) . unwrap_or_default ( ) ,
316
+ parents : graph
317
+ . edges_directed ( index, Direction :: Incoming )
318
+ . filter_map ( |edge| {
319
+ let src = edge. source ( ) ;
320
+ if src == root {
321
+ None
322
+ } else if let Some ( Node :: Package ( parent) ) = graph. node_weight ( src) {
323
+ Some ( * parent)
324
+ } else {
325
+ None
326
+ }
327
+ } )
328
+ . collect ( ) ,
315
329
} )
316
330
. filter ( |requirement| !requirement. marker . is_false ( ) )
317
331
. collect :: < Vec < _ > > ( ) ;
@@ -496,7 +510,12 @@ fn conflict_marker_reachability<'lock>(
496
510
impl std:: fmt:: Display for RequirementsTxtExport < ' _ > {
497
511
fn fmt ( & self , f : & mut Formatter < ' _ > ) -> std:: fmt:: Result {
498
512
// Write out each package.
499
- for Requirement { package, marker } in & self . nodes {
513
+ for Requirement {
514
+ package,
515
+ marker,
516
+ parents,
517
+ } in & self . nodes
518
+ {
500
519
match & package. id . source {
501
520
Source :: Registry ( _) => {
502
521
let version = package
@@ -587,6 +606,9 @@ impl std::fmt::Display for RequirementsTxtExport<'_> {
587
606
}
588
607
589
608
writeln ! ( f) ?;
609
+ for parent in parents {
610
+ writeln ! ( f, "{}" , format!( "# via {}" , parent. id. name) . green( ) ) ?;
611
+ }
590
612
}
591
613
592
614
Ok ( ( ) )
@@ -638,6 +660,7 @@ impl Reachable<MarkerTree> for Edge<'_> {
638
660
struct Requirement < ' lock > {
639
661
package : & ' lock Package ,
640
662
marker : MarkerTree ,
663
+ parents : Vec < & ' lock Package > ,
641
664
}
642
665
643
666
#[ derive( Debug , Clone , PartialEq , Eq , PartialOrd , Ord ) ]
0 commit comments