Skip to content

Commit 28b5dc4

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 28b5dc4

File tree

1 file changed

+24
-1
lines changed

1 file changed

+24
-1
lines changed

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

+24-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,19 @@ impl<'lock> RequirementsTxtExport<'lock> {
312313
.map(|(index, package)| Requirement {
313314
package,
314315
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(),
315329
})
316330
.filter(|requirement| !requirement.marker.is_false())
317331
.collect::<Vec<_>>();
@@ -496,7 +510,12 @@ fn conflict_marker_reachability<'lock>(
496510
impl std::fmt::Display for RequirementsTxtExport<'_> {
497511
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
498512
// 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+
{
500519
match &package.id.source {
501520
Source::Registry(_) => {
502521
let version = package
@@ -587,6 +606,9 @@ impl std::fmt::Display for RequirementsTxtExport<'_> {
587606
}
588607

589608
writeln!(f)?;
609+
for parent in parents {
610+
writeln!(f, "{}", format!("# via {}", parent.id.name).green())?;
611+
}
590612
}
591613

592614
Ok(())
@@ -638,6 +660,7 @@ impl Reachable<MarkerTree> for Edge<'_> {
638660
struct Requirement<'lock> {
639661
package: &'lock Package,
640662
marker: MarkerTree,
663+
parents: Vec<&'lock Package>,
641664
}
642665

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

0 commit comments

Comments
 (0)