mirror of
https://github.com/pesde-pkg/pesde.git
synced 2025-04-13 23:30:57 +01:00
feat: allow full version reqs in workspace spec version field
This commit is contained in:
parent
e6773144db
commit
15df417472
5 changed files with 63 additions and 10 deletions
|
@ -6,6 +6,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
### Added
|
||||||
|
- Support full version requirements in workspace version field by @daimond113
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
- Correct `pesde.toml` inclusion message in `publish` command by @daimond113
|
- Correct `pesde.toml` inclusion message in `publish` command by @daimond113
|
||||||
- Allow writes to files when `link` is false in PackageFS::write_to by @daimond113
|
- Allow writes to files when `link` is false in PackageFS::write_to by @daimond113
|
||||||
|
|
|
@ -117,7 +117,7 @@ impl AddCommand {
|
||||||
DependencySpecifiers::Workspace(
|
DependencySpecifiers::Workspace(
|
||||||
pesde::source::workspace::specifier::WorkspaceDependencySpecifier {
|
pesde::source::workspace::specifier::WorkspaceDependencySpecifier {
|
||||||
name: name.clone(),
|
name: name.clone(),
|
||||||
version_type: version.unwrap_or_default(),
|
version: version.clone().unwrap_or_default(),
|
||||||
target: self.target,
|
target: self.target,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
@ -220,7 +220,7 @@ impl AddCommand {
|
||||||
|
|
||||||
println!(
|
println!(
|
||||||
"added workspace {}@{} to {}",
|
"added workspace {}@{} to {}",
|
||||||
spec.name, spec.version_type, dependency_key
|
spec.name, spec.version, dependency_key
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,10 @@ use pesde::{
|
||||||
pesde::{specifier::PesdeDependencySpecifier, PesdePackageSource},
|
pesde::{specifier::PesdeDependencySpecifier, PesdePackageSource},
|
||||||
specifiers::DependencySpecifiers,
|
specifiers::DependencySpecifiers,
|
||||||
traits::PackageSource,
|
traits::PackageSource,
|
||||||
workspace::{specifier::VersionType, WorkspacePackageSource},
|
workspace::{
|
||||||
|
specifier::{VersionType, VersionTypeOrReq},
|
||||||
|
WorkspacePackageSource,
|
||||||
|
},
|
||||||
IGNORED_DIRS, IGNORED_FILES,
|
IGNORED_DIRS, IGNORED_FILES,
|
||||||
},
|
},
|
||||||
Project, DEFAULT_INDEX_NAME, MANIFEST_FILE_NAME,
|
Project, DEFAULT_INDEX_NAME, MANIFEST_FILE_NAME,
|
||||||
|
@ -344,8 +347,11 @@ impl PublishCommand {
|
||||||
|
|
||||||
*specifier = DependencySpecifiers::Pesde(PesdeDependencySpecifier {
|
*specifier = DependencySpecifiers::Pesde(PesdeDependencySpecifier {
|
||||||
name: spec.name.clone(),
|
name: spec.name.clone(),
|
||||||
version: match spec.version_type {
|
version: match spec.version.clone() {
|
||||||
VersionType::Wildcard => VersionReq::STAR,
|
VersionTypeOrReq::VersionType(VersionType::Wildcard) => {
|
||||||
|
VersionReq::STAR
|
||||||
|
}
|
||||||
|
VersionTypeOrReq::Req(r) => r,
|
||||||
v => VersionReq::parse(&format!("{v}{}", manifest.version))
|
v => VersionReq::parse(&format!("{v}{}", manifest.version))
|
||||||
.context(format!("failed to parse version for {v}"))?,
|
.context(format!("failed to parse version for {v}"))?,
|
||||||
},
|
},
|
||||||
|
|
|
@ -6,7 +6,7 @@ use pesde::{
|
||||||
lockfile::{DependencyGraph, DownloadedGraph, Lockfile},
|
lockfile::{DependencyGraph, DownloadedGraph, Lockfile},
|
||||||
manifest::target::TargetKind,
|
manifest::target::TargetKind,
|
||||||
names::{PackageName, PackageNames},
|
names::{PackageName, PackageNames},
|
||||||
source::{version_id::VersionId, workspace::specifier::VersionType, PackageSources},
|
source::{version_id::VersionId, workspace::specifier::VersionTypeOrReq, PackageSources},
|
||||||
Project,
|
Project,
|
||||||
};
|
};
|
||||||
use relative_path::RelativePathBuf;
|
use relative_path::RelativePathBuf;
|
||||||
|
@ -152,7 +152,7 @@ impl VersionedPackageName {
|
||||||
enum AnyPackageIdentifier<V: FromStr = VersionId, N: FromStr = PackageNames> {
|
enum AnyPackageIdentifier<V: FromStr = VersionId, N: FromStr = PackageNames> {
|
||||||
PackageName(VersionedPackageName<V, N>),
|
PackageName(VersionedPackageName<V, N>),
|
||||||
Url((gix::Url, String)),
|
Url((gix::Url, String)),
|
||||||
Workspace(VersionedPackageName<VersionType, PackageName>),
|
Workspace(VersionedPackageName<VersionTypeOrReq, PackageName>),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<V: FromStr<Err = E>, E: Into<anyhow::Error>, N: FromStr<Err = F>, F: Into<anyhow::Error>>
|
impl<V: FromStr<Err = E>, E: Into<anyhow::Error>, N: FromStr<Err = F>, F: Into<anyhow::Error>>
|
||||||
|
|
|
@ -11,7 +11,7 @@ pub struct WorkspaceDependencySpecifier {
|
||||||
pub name: PackageName,
|
pub name: PackageName,
|
||||||
/// The version type to use when publishing the package
|
/// The version type to use when publishing the package
|
||||||
#[serde(default, rename = "version")]
|
#[serde(default, rename = "version")]
|
||||||
pub version_type: VersionType,
|
pub version: VersionTypeOrReq,
|
||||||
/// The target of the workspace package
|
/// The target of the workspace package
|
||||||
pub target: Option<TargetKind>,
|
pub target: Option<TargetKind>,
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ impl DependencySpecifier for WorkspaceDependencySpecifier {}
|
||||||
|
|
||||||
impl Display for WorkspaceDependencySpecifier {
|
impl Display for WorkspaceDependencySpecifier {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
write!(f, "workspace:{}{}", self.version_type, self.name)
|
write!(f, "workspace:{}{}", self.version, self.name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,6 +66,42 @@ impl FromStr for VersionType {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Either a version type or a version requirement
|
||||||
|
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, Hash)]
|
||||||
|
pub enum VersionTypeOrReq {
|
||||||
|
/// A version type
|
||||||
|
VersionType(VersionType),
|
||||||
|
/// A version requirement
|
||||||
|
Req(semver::VersionReq),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for VersionTypeOrReq {
|
||||||
|
fn default() -> Self {
|
||||||
|
VersionTypeOrReq::VersionType(VersionType::Caret)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Display for VersionTypeOrReq {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
match self {
|
||||||
|
VersionTypeOrReq::VersionType(t) => write!(f, "{t}"),
|
||||||
|
VersionTypeOrReq::Req(r) => write!(f, "{r}"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl FromStr for VersionTypeOrReq {
|
||||||
|
type Err = errors::VersionTypeOrReqFromStr;
|
||||||
|
|
||||||
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||||
|
s.parse().map(VersionTypeOrReq::VersionType).or_else(|_| {
|
||||||
|
s.parse()
|
||||||
|
.map(VersionTypeOrReq::Req)
|
||||||
|
.map_err(errors::VersionTypeOrReqFromStr::InvalidVersionReq)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Errors that can occur when using a version type
|
/// Errors that can occur when using a version type
|
||||||
pub mod errors {
|
pub mod errors {
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
|
@ -74,7 +110,15 @@ pub mod errors {
|
||||||
#[derive(Debug, Error)]
|
#[derive(Debug, Error)]
|
||||||
pub enum VersionTypeFromStr {
|
pub enum VersionTypeFromStr {
|
||||||
/// The version type is invalid
|
/// The version type is invalid
|
||||||
#[error("invalid version type: {0}")]
|
#[error("invalid version type {0}")]
|
||||||
InvalidVersionType(String),
|
InvalidVersionType(String),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Errors that can occur when parsing a version type or requirement
|
||||||
|
#[derive(Debug, Error)]
|
||||||
|
pub enum VersionTypeOrReqFromStr {
|
||||||
|
/// The version requirement is invalid
|
||||||
|
#[error("invalid version requirement {0}")]
|
||||||
|
InvalidVersionReq(#[from] semver::Error),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue