mirror of
https://github.com/astral-sh/uv.git
synced 2025-07-07 21:35:00 +00:00
Add an autogeneration header to pip-compile (#145)
Closes https://github.com/astral-sh/puffin/issues/132.
This commit is contained in:
parent
0b60804db6
commit
03101c6a5c
4 changed files with 22 additions and 13 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -2136,6 +2136,7 @@ version = "0.0.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bitflags 2.4.1",
|
"bitflags 2.4.1",
|
||||||
|
"colored",
|
||||||
"futures",
|
"futures",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"pep440_rs 0.3.12",
|
"pep440_rs 0.3.12",
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
use std::env;
|
||||||
use std::fmt::Write;
|
use std::fmt::Write;
|
||||||
use std::io::{stdout, BufWriter};
|
use std::io::{stdout, BufWriter};
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
@ -19,6 +20,8 @@ use crate::commands::{elapsed, ExitStatus};
|
||||||
use crate::printer::Printer;
|
use crate::printer::Printer;
|
||||||
use crate::requirements::RequirementsSource;
|
use crate::requirements::RequirementsSource;
|
||||||
|
|
||||||
|
const VERSION: &str = env!("CARGO_PKG_VERSION");
|
||||||
|
|
||||||
/// Resolve a set of requirements into a set of pinned versions.
|
/// Resolve a set of requirements into a set of pinned versions.
|
||||||
pub(crate) async fn pip_compile(
|
pub(crate) async fn pip_compile(
|
||||||
requirements: &[RequirementsSource],
|
requirements: &[RequirementsSource],
|
||||||
|
@ -91,11 +94,24 @@ pub(crate) async fn pip_compile(
|
||||||
.dimmed()
|
.dimmed()
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
if let Some(output_file) = output_file {
|
let mut writer: Box<dyn std::io::Write> = if let Some(output_file) = output_file {
|
||||||
resolution.write_requirement_format(&mut BufWriter::new(File::create(output_file)?))?;
|
Box::new(BufWriter::new(File::create(output_file)?))
|
||||||
} else {
|
} else {
|
||||||
resolution.write_requirement_format(&mut stdout().lock())?;
|
Box::new(stdout())
|
||||||
};
|
};
|
||||||
|
|
||||||
|
writeln!(
|
||||||
|
writer,
|
||||||
|
"{}",
|
||||||
|
format!("# This file was autogenerated by Puffin v{VERSION} via the following command:")
|
||||||
|
.green()
|
||||||
|
)?;
|
||||||
|
writeln!(
|
||||||
|
writer,
|
||||||
|
"{}",
|
||||||
|
format!("# {}", env::args().join(" ")).green()
|
||||||
|
)?;
|
||||||
|
writeln!(writer, "{resolution}")?;
|
||||||
|
|
||||||
Ok(ExitStatus::Success)
|
Ok(ExitStatus::Success)
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ wheel-filename = { path = "../wheel-filename" }
|
||||||
|
|
||||||
anyhow = { workspace = true }
|
anyhow = { workspace = true }
|
||||||
bitflags = { workspace = true }
|
bitflags = { workspace = true }
|
||||||
|
colored = { workspace = true }
|
||||||
futures = { workspace = true }
|
futures = { workspace = true }
|
||||||
once_cell = { workspace = true }
|
once_cell = { workspace = true }
|
||||||
thiserror = { workspace = true }
|
thiserror = { workspace = true }
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
use std::io;
|
|
||||||
use std::io::Write;
|
|
||||||
|
|
||||||
use pep440_rs::Version;
|
use pep440_rs::Version;
|
||||||
use puffin_client::File;
|
use puffin_client::File;
|
||||||
|
@ -34,16 +32,9 @@ impl Resolution {
|
||||||
pub fn is_empty(&self) -> bool {
|
pub fn is_empty(&self) -> bool {
|
||||||
self.0.is_empty()
|
self.0.is_empty()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Write the resolution in the `{name}=={version}` format of requirements.txt that pip uses.
|
|
||||||
pub fn write_requirement_format(&self, writer: &mut impl Write) -> io::Result<()> {
|
|
||||||
for (name, package) in self.iter() {
|
|
||||||
writeln!(writer, "{}=={}", name, package.version())?;
|
|
||||||
}
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Write the resolution in the `{name}=={version}` format of requirements.txt that pip uses.
|
||||||
impl std::fmt::Display for Resolution {
|
impl std::fmt::Display for Resolution {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
let mut first = true;
|
let mut first = true;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue