Skip to content

Commit 3db6731

Browse files
committed
Add dependency parents ("via" comments) in export command
This is a similar behavior to the pip compile output
1 parent e40c551 commit 3db6731

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

crates/uv-resolver/src/lock/requirements_txt.rs

+18-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use std::fmt::Formatter;
55
use std::path::{Component, Path, PathBuf};
66

77
use either::Either;
8+
use owo_colors::OwoColorize;
89
use petgraph::graph::NodeIndex;
910
use petgraph::prelude::EdgeRef;
1011
use petgraph::visit::IntoNodeReferences;
@@ -312,6 +313,18 @@ impl<'lock> RequirementsTxtExport<'lock> {
312313
.map(|(index, package)| Requirement {
313314
package,
314315
marker: reachability.remove(&index).unwrap_or_default(),
316+
parents: graph.edges_directed(index, Direction::Incoming)
317+
.filter_map(|edge| {
318+
let src = edge.source();
319+
if src == root {
320+
None
321+
} else if let Some(Node::Package(parent)) = graph.node_weight(src) {
322+
Some(*parent)
323+
} else {
324+
None
325+
}
326+
})
327+
.collect(),
315328
})
316329
.filter(|requirement| !requirement.marker.is_false())
317330
.collect::<Vec<_>>();
@@ -496,7 +509,7 @@ fn conflict_marker_reachability<'lock>(
496509
impl std::fmt::Display for RequirementsTxtExport<'_> {
497510
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
498511
// Write out each package.
499-
for Requirement { package, marker } in &self.nodes {
512+
for Requirement { package, marker , parents} in &self.nodes {
500513
match &package.id.source {
501514
Source::Registry(_) => {
502515
let version = package
@@ -587,6 +600,9 @@ impl std::fmt::Display for RequirementsTxtExport<'_> {
587600
}
588601

589602
writeln!(f)?;
603+
for parent in parents {
604+
writeln!(f, "{}", format!("# via {}", parent.id.name).green())?;
605+
}
590606
}
591607

592608
Ok(())
@@ -638,6 +654,7 @@ impl Reachable<MarkerTree> for Edge<'_> {
638654
struct Requirement<'lock> {
639655
package: &'lock Package,
640656
marker: MarkerTree,
657+
parents: Vec<&'lock Package>,
641658
}
642659

643660
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]

0 commit comments

Comments
 (0)