Skip to content

Commit 42df283

Browse files
Refresh GodotSharp package before regen
1 parent 0a9ae13 commit 42df283

3 files changed

Lines changed: 22 additions & 23 deletions

File tree

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.

tools/regen/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ edition.workspace = true
77
anyhow.workspace = true
88
clap.workspace = true
99
duct.workspace = true
10+
serde_json.workspace = true
1011
tempfile.workspace = true

tools/regen/src/csharp.rs

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
use anyhow::{bail, Context, Result};
44
use duct::cmd;
5+
use serde_json::Value;
56
use std::env;
67
use std::fs;
78
use std::path::{Path, PathBuf};
@@ -127,46 +128,41 @@ fn clear_godot_intermediate_outputs() -> Result<()> {
127128
Ok(())
128129
}
129130

130-
fn restored_package_version<'a>(assets: &'a str, package_id: &str) -> Option<&'a str> {
131-
let needle = format!("\"{package_id}/");
132-
let start = assets.find(&needle)? + needle.len();
133-
let rest = &assets[start..];
134-
let end = rest.find('"')?;
135-
Some(&rest[..end])
136-
}
137-
138-
fn restored_lib_package_file<'a>(assets: &'a str, file_name: &str) -> Option<&'a str> {
139-
let suffix = format!("/{file_name}\"");
140-
let mut search_start = 0;
131+
fn restored_package<'a>(assets: &'a Value, package_id: &str) -> Option<(&'a str, &'a Value)> {
132+
let libraries = assets.get("libraries")?.as_object()?;
141133

142-
while let Some(suffix_start) = assets[search_start..].find(&suffix) {
143-
let path_end = search_start + suffix_start + suffix.len() - 1;
144-
let path_start = assets[..path_end].rfind('"')? + 1;
145-
let path = &assets[path_start..path_end];
146-
if path.starts_with("lib/") {
147-
return Some(path);
148-
}
149-
search_start = path_end + 1;
150-
}
134+
libraries.iter().find_map(|(key, package)| {
135+
let (id, version) = key.split_once('/')?;
136+
id.eq_ignore_ascii_case(package_id).then_some((version, package))
137+
})
138+
}
151139

152-
None
140+
fn restored_lib_package_file<'a>(package: &'a Value, file_name: &str) -> Option<&'a str> {
141+
package.get("files")?.as_array()?.iter().find_map(|file| {
142+
let path = file.as_str()?;
143+
let actual_file_name = path.rsplit('/').next()?;
144+
(path.starts_with("lib/") && actual_file_name == file_name).then_some(path)
145+
})
153146
}
154147

155148
fn verify_godotsharp_restore() -> Result<()> {
156149
let sdk = sdk_dir();
157150
let assets_path = sdk.join("obj~/godot/project.assets.json");
158151
let assets =
159152
fs::read_to_string(&assets_path).with_context(|| format!("Failed to read {}", assets_path.display()))?;
153+
let assets: Value =
154+
serde_json::from_str(&assets).with_context(|| format!("Failed to parse {}", assets_path.display()))?;
160155

161-
let Some(godotsharp_version) = restored_package_version(&assets, GODOTSHARP_ASSET_ID) else {
156+
let Some((godotsharp_version, godotsharp_package)) = restored_package(&assets, GODOTSHARP_ASSET_ID) else {
162157
bail!(
163158
"Godot restore output {} does not contain {}; refusing to pack with --no-restore",
164159
assets_path.display(),
165160
GODOTSHARP_ASSET_ID
166161
);
167162
};
168163

169-
let Some(godotsharp_dll_relative_path) = restored_lib_package_file(&assets, GODOTSHARP_DLL_FILE_NAME) else {
164+
let Some(godotsharp_dll_relative_path) = restored_lib_package_file(godotsharp_package, GODOTSHARP_DLL_FILE_NAME)
165+
else {
170166
bail!(
171167
"Godot restore output {} does not reference a lib package file named {}; refusing to pack with --no-restore",
172168
assets_path.display(),
@@ -282,6 +278,7 @@ pub fn regen_dlls() -> Result<()> {
282278
)?;
283279

284280
clear_restored_package_dirs(BSATN_PACKAGE_ID)?;
281+
clear_restored_package_dirs(GODOTSHARP_PACKAGE_ID)?;
285282
clear_restored_package_dirs(RUNTIME_PACKAGE_ID)?;
286283
clear_godot_intermediate_outputs()?;
287284

0 commit comments

Comments
 (0)