@@ -24,6 +24,16 @@ enum Cli {
2424 #[ clap( long) ]
2525 glam_version : Option < String > ,
2626 } ,
27+ /// Set a dependency in the shader-crate-template to some version
28+ SetDependency {
29+ /// the dependency to modify
30+ package : String ,
31+ /// the version to set it to
32+ version : String ,
33+ /// the git repo to use, if version is a commit rev
34+ #[ clap( long) ]
35+ git : Option < String > ,
36+ } ,
2737}
2838
2939fn cmd ( args : impl IntoIterator < Item = impl AsRef < str > > ) -> anyhow:: Result < ( ) > {
@@ -51,10 +61,16 @@ struct ShaderCrateTemplateCargoTomlWriter {
5161 original_shader_crate_lock_file : String ,
5262 /// Parsed toml table
5363 table : toml:: Table ,
64+ /// false will reset Cargo.toml when this is dropped
65+ persistent : bool ,
5466}
5567
5668impl Drop for ShaderCrateTemplateCargoTomlWriter {
5769 fn drop ( & mut self ) {
70+ if self . persistent {
71+ return ;
72+ }
73+
5874 log:: info!( "reverting overwrite of Cargo.toml" ) ;
5975 std:: fs:: write (
6076 format ! ( "{SHADER_CRATE_PATH}/Cargo.toml" ) ,
@@ -70,9 +86,15 @@ impl Drop for ShaderCrateTemplateCargoTomlWriter {
7086 }
7187}
7288
89+ impl Default for ShaderCrateTemplateCargoTomlWriter {
90+ fn default ( ) -> Self {
91+ Self :: new ( false )
92+ }
93+ }
94+
7395impl ShaderCrateTemplateCargoTomlWriter {
7496 /// Create a new one
75- fn new ( ) -> Self {
97+ fn new ( persistent : bool ) -> Self {
7698 let original_shader_crate_template_str =
7799 std:: fs:: read_to_string ( format ! ( "{SHADER_CRATE_PATH}/Cargo.toml" ) ) . unwrap ( ) ;
78100 let table = toml:: from_str :: < toml:: Table > ( & original_shader_crate_template_str) . unwrap ( ) ;
@@ -82,6 +104,7 @@ impl ShaderCrateTemplateCargoTomlWriter {
82104 original_shader_crate_template_str,
83105 original_shader_crate_lock_file,
84106 table,
107+ persistent,
85108 }
86109 }
87110
@@ -229,7 +252,7 @@ fn main() -> anyhow::Result<()> {
229252 cmd ( [ "cargo" , "install" , "--path" , "crates/cargo-gpu" ] ) ?;
230253
231254 log:: info!( "setup project" ) ;
232- let mut overwriter = ShaderCrateTemplateCargoTomlWriter :: new ( ) ;
255+ let mut overwriter = ShaderCrateTemplateCargoTomlWriter :: default ( ) ;
233256 let dir = tempfile:: TempDir :: with_prefix ( "test-shader-output" ) ?;
234257 overwriter. replace_output_dir ( dir. path ( ) ) ?;
235258 if let Some ( rust_gpu_version) = rust_gpu_version. as_ref ( ) {
@@ -255,6 +278,17 @@ fn main() -> anyhow::Result<()> {
255278 //NOTE: manifest.json is the default value here, which should be valid
256279 cmd ( [ "cat" , dir. path ( ) . join ( "manifest.json" ) . to_str ( ) . unwrap ( ) ] ) ?;
257280 }
281+ Cli :: SetDependency {
282+ package,
283+ version,
284+ git,
285+ } => {
286+ let mut overwriter = ShaderCrateTemplateCargoTomlWriter :: new ( true ) ;
287+ overwriter. set_dependency (
288+ package. clone ( ) ,
289+ & DependencyVersion :: parse ( version. clone ( ) , git. clone ( ) ) ?,
290+ ) ?;
291+ }
258292 }
259293 Ok ( ( ) )
260294}
0 commit comments