Skip to content
This repository was archived by the owner on Apr 15, 2026. It is now read-only.

Commit b2dd54c

Browse files
committed
xtask: copy over features and default-features when setting version
1 parent 1084924 commit b2dd54c

3 files changed

Lines changed: 35 additions & 16 deletions

File tree

crates/shader-crate-template/Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/shader-crate-template/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ crate-type = ["rlib", "cdylib"]
1010
[dependencies]
1111
# TODO: use a simple crate version once v0.10.0 is released
1212
spirv-std = { git = "https://github.com/Rust-GPU/rust-gpu", rev = "2aa4d4f8a8ba73103501562cfca17b8163e5a887" }
13+
glam = { version = "0.30.8", default-features = false }
1314

1415
[package.metadata.rust-gpu.build]
1516
# Where to output the compiled shader. Defaults to where `cargo gpu` is called from.

crates/xtask/src/main.rs

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -155,23 +155,21 @@ impl ShaderCrateTemplateCargoTomlWriter {
155155
}
156156

157157
/// Add or replace a dependency in the shader-crate-template
158-
fn set_dependency(
159-
&mut self,
160-
package: String,
161-
version: &DependencyVersion,
162-
) -> anyhow::Result<()> {
163-
if let Some(version) = version.to_toml() {
164-
let dependencies = self.get_cargo_dependencies_table();
165-
dependencies.insert(package, version);
158+
fn set_dependency(&mut self, package: &str, version: &DependencyVersion) -> anyhow::Result<()> {
159+
let dependencies = self.get_cargo_dependencies_table();
160+
if let Some(value) = dependencies.get_mut(package) {
161+
version.modify_toml(value);
166162
self.write_shader_crate_cargo_toml_changes()?;
163+
Ok(())
164+
} else {
165+
anyhow::bail!("Crate `{package}` not found")
167166
}
168-
Ok(())
169167
}
170168

171169
/// Replace the `spirv-std` dependency version
172170
fn set_spirv_std_version(&mut self, version: &str) -> anyhow::Result<()> {
173171
self.set_dependency(
174-
"spirv-std".into(),
172+
"spirv-std",
175173
&DependencyVersion::parse(
176174
version.into(),
177175
Some("https://github.com/Rust-GPU/rust-gpu".into()),
@@ -182,7 +180,7 @@ impl ShaderCrateTemplateCargoTomlWriter {
182180
/// Replace the `glam` dependency version
183181
fn set_dependency_glam(&mut self, version: &str) -> anyhow::Result<()> {
184182
self.set_dependency(
185-
"glam".into(),
183+
"glam",
186184
&DependencyVersion::parse(
187185
version.into(),
188186
Some("https://github.com/bitshifter/glam-rs".into()),
@@ -227,14 +225,33 @@ impl DependencyVersion {
227225

228226
/// Convert this version to a toml value, may fail if we want the latest version
229227
#[must_use]
230-
pub fn to_toml(&self) -> Option<toml::Value> {
228+
pub fn to_toml(&self) -> Option<toml::Table> {
231229
match self {
232230
Self::Latest => None,
233-
Self::Crates(version) => Some(toml::Value::String(version.clone())),
234-
Self::Git { git, rev } => Some(toml::Value::Table(toml::Table::from_iter([
231+
Self::Crates(version) => Some(toml::Table::from_iter([(
232+
"version".to_owned(),
233+
toml::Value::String(version.clone()),
234+
)])),
235+
Self::Git { git, rev } => Some(toml::Table::from_iter([
235236
("git".to_owned(), toml::Value::String(git.clone())),
236237
("rev".to_owned(), toml::Value::String(rev.clone())),
237-
]))),
238+
])),
239+
}
240+
}
241+
242+
/// Convert this version to a toml value, may fail if we want the latest version
243+
pub fn modify_toml(&self, toml: &mut toml::Value) {
244+
if let Some(mut table) = self.to_toml() {
245+
let mut copy = |key: &str| {
246+
if let Some(src_table) = toml.as_table_mut() {
247+
if let Some(value) = src_table.remove(key) {
248+
table.insert(key.to_owned(), value);
249+
}
250+
}
251+
};
252+
copy("default-features");
253+
copy("features");
254+
*toml = toml::Value::Table(table);
238255
}
239256
}
240257
}
@@ -285,7 +302,7 @@ fn main() -> anyhow::Result<()> {
285302
} => {
286303
let mut overwriter = ShaderCrateTemplateCargoTomlWriter::new(true);
287304
overwriter.set_dependency(
288-
package.clone(),
305+
package,
289306
&DependencyVersion::parse(version.clone(), git.clone())?,
290307
)?;
291308
}

0 commit comments

Comments
 (0)