Add a --prerelease flag to the CLI (#217)

This commit is contained in:
Charlie Marsh 2023-10-29 11:39:30 -07:00 committed by GitHub
parent 7e7e9f8a0c
commit bae3c89ab1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 18 additions and 13 deletions

View file

@ -32,6 +32,7 @@ pub(crate) async fn pip_compile(
constraints: &[RequirementsSource], constraints: &[RequirementsSource],
output_file: Option<&Path>, output_file: Option<&Path>,
resolution_mode: ResolutionMode, resolution_mode: ResolutionMode,
prerelease_mode: PreReleaseMode,
upgrade_mode: UpgradeMode, upgrade_mode: UpgradeMode,
index_urls: Option<IndexUrls>, index_urls: Option<IndexUrls>,
cache: Option<&Path>, cache: Option<&Path>,
@ -61,7 +62,7 @@ pub(crate) async fn pip_compile(
constraints, constraints,
preferences, preferences,
resolution_mode, resolution_mode,
PreReleaseMode::default(), prerelease_mode,
); );
// Detect the current Python interpreter. // Detect the current Python interpreter.

View file

@ -4,7 +4,7 @@ use std::process::ExitCode;
use clap::{Args, Parser, Subcommand}; use clap::{Args, Parser, Subcommand};
use colored::Colorize; use colored::Colorize;
use directories::ProjectDirs; use directories::ProjectDirs;
use puffin_resolver::ResolutionMode; use puffin_resolver::{PreReleaseMode, ResolutionMode};
use url::Url; use url::Url;
use crate::commands::ExitStatus; use crate::commands::ExitStatus;
@ -74,6 +74,9 @@ struct PipCompileArgs {
#[clap(long, value_enum)] #[clap(long, value_enum)]
resolution: Option<ResolutionMode>, resolution: Option<ResolutionMode>,
#[clap(long, value_enum)]
prerelease: Option<PreReleaseMode>,
/// Write the compiled requirements to the given `requirements.txt` file. /// Write the compiled requirements to the given `requirements.txt` file.
#[clap(short, long)] #[clap(short, long)]
output_file: Option<PathBuf>, output_file: Option<PathBuf>,
@ -200,6 +203,7 @@ async fn main() -> ExitCode {
&constraints, &constraints,
args.output_file.as_deref(), args.output_file.as_deref(),
args.resolution.unwrap_or_default(), args.resolution.unwrap_or_default(),
args.prerelease.unwrap_or_default(),
args.upgrade.into(), args.upgrade.into(),
index_urls, index_urls,
cache_dir, cache_dir,

View file

@ -99,8 +99,8 @@ impl CandidateSelector {
// Determine the appropriate prerelease strategy for the current package. // Determine the appropriate prerelease strategy for the current package.
let allow_prerelease = match &self.prerelease_strategy { let allow_prerelease = match &self.prerelease_strategy {
PreReleaseStrategy::DisallowAll => AllowPreRelease::No, PreReleaseStrategy::Disallow => AllowPreRelease::No,
PreReleaseStrategy::AllowAll => AllowPreRelease::Yes, PreReleaseStrategy::Allow => AllowPreRelease::Yes,
PreReleaseStrategy::IfNecessary => AllowPreRelease::IfNecessary, PreReleaseStrategy::IfNecessary => AllowPreRelease::IfNecessary,
PreReleaseStrategy::Explicit(packages) => { PreReleaseStrategy::Explicit(packages) => {
if packages.contains(package_name) { if packages.contains(package_name) {

View file

@ -7,10 +7,10 @@ use puffin_package::package_name::PackageName;
#[cfg_attr(feature = "clap", derive(clap::ValueEnum))] #[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
pub enum PreReleaseMode { pub enum PreReleaseMode {
/// Disallow all pre-release versions. /// Disallow all pre-release versions.
DisallowAll, Disallow,
/// Allow all pre-release versions. /// Allow all pre-release versions.
AllowAll, Allow,
/// Allow pre-release versions if all versions of a package are pre-release. /// Allow pre-release versions if all versions of a package are pre-release.
IfNecessary, IfNecessary,
@ -30,10 +30,10 @@ pub enum PreReleaseMode {
#[derive(Debug)] #[derive(Debug)]
pub(crate) enum PreReleaseStrategy { pub(crate) enum PreReleaseStrategy {
/// Disallow all pre-release versions. /// Disallow all pre-release versions.
DisallowAll, Disallow,
/// Allow all pre-release versions. /// Allow all pre-release versions.
AllowAll, Allow,
/// Allow pre-release versions if all versions of a package are pre-release. /// Allow pre-release versions if all versions of a package are pre-release.
IfNecessary, IfNecessary,
@ -50,8 +50,8 @@ pub(crate) enum PreReleaseStrategy {
impl PreReleaseStrategy { impl PreReleaseStrategy {
pub(crate) fn from_mode(mode: PreReleaseMode, direct_dependencies: &[Requirement]) -> Self { pub(crate) fn from_mode(mode: PreReleaseMode, direct_dependencies: &[Requirement]) -> Self {
match mode { match mode {
PreReleaseMode::DisallowAll => Self::DisallowAll, PreReleaseMode::Disallow => Self::Disallow,
PreReleaseMode::AllowAll => Self::AllowAll, PreReleaseMode::Allow => Self::Allow,
PreReleaseMode::IfNecessary => Self::IfNecessary, PreReleaseMode::IfNecessary => Self::IfNecessary,
PreReleaseMode::Explicit => Self::Explicit( PreReleaseMode::Explicit => Self::Explicit(
direct_dependencies direct_dependencies

View file

@ -295,7 +295,7 @@ async fn black_disallow_prerelease() -> Result<()> {
vec![], vec![],
vec![], vec![],
ResolutionMode::default(), ResolutionMode::default(),
PreReleaseMode::DisallowAll, PreReleaseMode::Disallow,
); );
let resolver = Resolver::new(manifest, &MARKERS_311, &TAGS_311, &client, &DummyContext); let resolver = Resolver::new(manifest, &MARKERS_311, &TAGS_311, &client, &DummyContext);
@ -339,7 +339,7 @@ async fn pylint_disallow_prerelease() -> Result<()> {
vec![], vec![],
vec![], vec![],
ResolutionMode::default(), ResolutionMode::default(),
PreReleaseMode::DisallowAll, PreReleaseMode::Disallow,
); );
let resolver = Resolver::new(manifest, &MARKERS_311, &TAGS_311, &client, &DummyContext); let resolver = Resolver::new(manifest, &MARKERS_311, &TAGS_311, &client, &DummyContext);
@ -361,7 +361,7 @@ async fn pylint_allow_prerelease() -> Result<()> {
vec![], vec![],
vec![], vec![],
ResolutionMode::default(), ResolutionMode::default(),
PreReleaseMode::AllowAll, PreReleaseMode::Allow,
); );
let resolver = Resolver::new(manifest, &MARKERS_311, &TAGS_311, &client, &DummyContext); let resolver = Resolver::new(manifest, &MARKERS_311, &TAGS_311, &client, &DummyContext);