style(游戏共创): 按 rustfmt 格式化 AGC tauri 侧取件与发布改动(纯格式,无语义变化)
CI run 3386 的 `Repository checks` 失败于 `cargo fmt --all -- --check`(AGC tauri
workspace),本分支引入;本次只跑 `cargo fmt --all --manifest-path
apps/ai-game-creator-shell/src-tauri/Cargo.toml`,漂移文件与 CI 报告完全一致,共 3 个:
- game_distribution_publish.rs:404 分支的 `StatusCode::NOT_FOUND =>` 改成块、`game_id`
字符集判据的 `.chars().all(...)` 换行、`if let Some(...) = crate::project::read_project_fork_source(...)`
换行、下载路径测试里的 `fork_source_download_segments(...)` 调用换行。
- game_fork.rs:测试里两处 `writer.start_file(...).expect(...)` 与一处 `assert!(...)`
折行、`filter(|entry| ...)` 闭包折行。
- game_fork/desktop.rs:`use crate::game_distribution_publish::{...}` 收成单行。
逐文件核对过 `git diff`:只有折行 / 缩进 / 大括号位置 / 尾随逗号类变化,标识符、字符串
字面量、注释文本、逻辑一律未动。未改 server-rs、src、scripts,也未动 PR 状态。
This commit is contained in:
@@ -528,7 +528,9 @@ fn map_fork_source_http_error(status: StatusCode, body: &str) -> String {
|
||||
StatusCode::FORBIDDEN => {
|
||||
"permission-denied: 作者没有开放这个作品的共创授权,无法改编".to_string()
|
||||
}
|
||||
StatusCode::NOT_FOUND => "fork-source-not-found: 该作品不存在或已被删除,无法改编".to_string(),
|
||||
StatusCode::NOT_FOUND => {
|
||||
"fork-source-not-found: 该作品不存在或已被删除,无法改编".to_string()
|
||||
}
|
||||
StatusCode::CONFLICT => {
|
||||
"fork-source-not-available: 该作品当前不能作为改编来源(未公开、已下架或没有公开版本)"
|
||||
.to_string()
|
||||
@@ -679,9 +681,9 @@ pub(crate) async fn fetch_platform_game_fork_source(
|
||||
let game_id = game_id.trim();
|
||||
// 路径安全判据与发行入口一致:只接受 ASCII 字母数字与 `-`/`_`,不接受分隔符与盘符。
|
||||
if game_id.is_empty()
|
||||
|| !game_id
|
||||
.chars()
|
||||
.all(|character| character.is_ascii_alphanumeric() || character == '-' || character == '_')
|
||||
|| !game_id.chars().all(|character| {
|
||||
character.is_ascii_alphanumeric() || character == '-' || character == '_'
|
||||
})
|
||||
{
|
||||
return Err("改编来源作品标识无效".to_string());
|
||||
}
|
||||
@@ -1497,7 +1499,8 @@ pub(crate) async fn publish_local_project_game(
|
||||
// (带 gameId)重复带声明会变成不可恢复的 409。判据就是目标 gameId 是否属于更新发布。
|
||||
let mut metadata = metadata;
|
||||
if target_game_id.is_none() {
|
||||
if let Some(source) = crate::project::read_project_fork_source(Path::new(project_path.trim()))
|
||||
if let Some(source) =
|
||||
crate::project::read_project_fork_source(Path::new(project_path.trim()))
|
||||
{
|
||||
metadata.fork = Some(GameDistributionForkDeclaration {
|
||||
parent_game_id: source.game_id,
|
||||
@@ -1921,8 +1924,10 @@ mod tests {
|
||||
#[test]
|
||||
fn fork_source_download_path_accepts_only_same_origin_relative_paths() {
|
||||
assert_eq!(
|
||||
fork_source_download_segments("/api/game-distribution/games/game_1/fork-source/package")
|
||||
.expect("relative path"),
|
||||
fork_source_download_segments(
|
||||
"/api/game-distribution/games/game_1/fork-source/package"
|
||||
)
|
||||
.expect("relative path"),
|
||||
vec![
|
||||
"api",
|
||||
"game-distribution",
|
||||
|
||||
@@ -183,9 +183,13 @@ mod tests {
|
||||
fn release_package_bytes() -> Vec<u8> {
|
||||
let mut writer = zip::ZipWriter::new(std::io::Cursor::new(Vec::new()));
|
||||
let options = SimpleFileOptions::default();
|
||||
writer.start_file("index.html", options).expect("start entry");
|
||||
writer
|
||||
.start_file("index.html", options)
|
||||
.expect("start entry");
|
||||
std::io::Write::write_all(&mut writer, b"<html></html>").expect("write entry");
|
||||
writer.start_file("game/main.js", options).expect("start script");
|
||||
writer
|
||||
.start_file("game/main.js", options)
|
||||
.expect("start script");
|
||||
std::io::Write::write_all(&mut writer, b"console.log('playable')").expect("write script");
|
||||
writer.finish().expect("finish zip").into_inner()
|
||||
}
|
||||
@@ -196,7 +200,9 @@ mod tests {
|
||||
let digest = sha256_hex(&bytes);
|
||||
assert!(verify_fork_source_bytes(&bytes, &digest, bytes.len() as u64).is_ok());
|
||||
// 摘要大小写不敏感(服务端回小写,客户端仍按同一口径比较)。
|
||||
assert!(verify_fork_source_bytes(&bytes, &digest.to_uppercase(), bytes.len() as u64).is_ok());
|
||||
assert!(
|
||||
verify_fork_source_bytes(&bytes, &digest.to_uppercase(), bytes.len() as u64).is_ok()
|
||||
);
|
||||
|
||||
let size_error = verify_fork_source_bytes(&bytes, &digest, bytes.len() as u64 + 1)
|
||||
.expect_err("大小不符必须失败");
|
||||
@@ -280,7 +286,12 @@ mod tests {
|
||||
let leftovers = fs::read_dir(&projects_root)
|
||||
.expect("read projects root")
|
||||
.filter_map(Result::ok)
|
||||
.filter(|entry| entry.file_name().to_string_lossy().starts_with("gameagent-"))
|
||||
.filter(|entry| {
|
||||
entry
|
||||
.file_name()
|
||||
.to_string_lossy()
|
||||
.starts_with("gameagent-")
|
||||
})
|
||||
.count();
|
||||
assert_eq!(leftovers, 0, "失败的项目目录必须被清理");
|
||||
}
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
// 桌面 Fork 取件接入;摘要校验、参考副本落点与来源记录规则保留在父模块供现有测试验证。
|
||||
use super::*;
|
||||
use crate::game_distribution_publish::{
|
||||
fetch_platform_game_fork_source, require_platform_session,
|
||||
};
|
||||
use crate::game_distribution_publish::{fetch_platform_game_fork_source, require_platform_session};
|
||||
|
||||
/// 从平台作品开始创作:取平台已授权公开作品的发行成品包,建成「合规脚手架 + 参考副本」项目。
|
||||
///
|
||||
|
||||
Reference in New Issue
Block a user