fix: simplify meta stem to instance name + slugify + init-prefix

Drop the strip_suffix(extension) approach for computing adjacent meta
file names. Instead, use the instance name directly (slugified if it
has invalid filesystem chars, prefixed with '_' if it's "init"). This
is the same logic as the original code plus init-prefix handling, and
correctly preserves dots in instance names like "Name.new".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-25 21:09:45 +01:00
parent 14bbdaf560
commit 917d17a738
3 changed files with 33 additions and 63 deletions

View File

@@ -109,27 +109,17 @@ pub fn syncback_csv<'sync>(
if !meta.is_empty() {
let parent = snapshot.path.parent_err()?;
let meta_stem = snapshot.middleware
.and_then(|mw| {
let ext = format!(".{}", crate::syncback::extension_for_middleware(mw));
snapshot.path.file_name()
.and_then(|n| n.to_str())
.and_then(|s| s.strip_suffix(ext.as_str()))
.map(str::to_owned)
})
.unwrap_or_else(|| {
let name = &new_inst.name;
let base = if crate::syncback::validate_file_name(name).is_err() {
crate::syncback::slugify_name(name)
let instance_name = &new_inst.name;
let base = if crate::syncback::validate_file_name(instance_name).is_err() {
crate::syncback::slugify_name(instance_name)
} else {
name.clone()
instance_name.clone()
};
if base.to_lowercase() == "init" {
let meta_stem = if base.to_lowercase() == "init" {
format!("_{base}")
} else {
base
}
});
};
fs_snapshot.add_file(
parent.join(format!("{meta_stem}.meta.json")),
serde_json::to_vec_pretty(&meta).context("cannot serialize metadata")?,

View File

@@ -158,27 +158,17 @@ pub fn syncback_lua<'sync>(
if !meta.is_empty() {
let parent_location = snapshot.path.parent_err()?;
let meta_stem = snapshot.middleware
.and_then(|mw| {
let ext = format!(".{}", crate::syncback::extension_for_middleware(mw));
snapshot.path.file_name()
.and_then(|n| n.to_str())
.and_then(|s| s.strip_suffix(ext.as_str()))
.map(str::to_owned)
})
.unwrap_or_else(|| {
let name = &snapshot.new_inst().name;
let base = if crate::syncback::validate_file_name(name).is_err() {
crate::syncback::slugify_name(name)
let instance_name = &snapshot.new_inst().name;
let base = if crate::syncback::validate_file_name(instance_name).is_err() {
crate::syncback::slugify_name(instance_name)
} else {
name.clone()
instance_name.clone()
};
if base.to_lowercase() == "init" {
let meta_stem = if base.to_lowercase() == "init" {
format!("_{base}")
} else {
base
}
});
};
fs_snapshot.add_file(
parent_location.join(format!("{meta_stem}.meta.json")),
serde_json::to_vec_pretty(&meta).context("cannot serialize metadata")?,

View File

@@ -58,27 +58,17 @@ pub fn syncback_txt<'sync>(
if !meta.is_empty() {
let parent = snapshot.path.parent_err()?;
let meta_stem = snapshot.middleware
.and_then(|mw| {
let ext = format!(".{}", crate::syncback::extension_for_middleware(mw));
snapshot.path.file_name()
.and_then(|n| n.to_str())
.and_then(|s| s.strip_suffix(ext.as_str()))
.map(str::to_owned)
})
.unwrap_or_else(|| {
let name = &new_inst.name;
let base = if crate::syncback::validate_file_name(name).is_err() {
crate::syncback::slugify_name(name)
let instance_name = &new_inst.name;
let base = if crate::syncback::validate_file_name(instance_name).is_err() {
crate::syncback::slugify_name(instance_name)
} else {
name.clone()
instance_name.clone()
};
if base.to_lowercase() == "init" {
let meta_stem = if base.to_lowercase() == "init" {
format!("_{base}")
} else {
base
}
});
};
fs_snapshot.add_file(
parent.join(format!("{meta_stem}.meta.json")),
serde_json::to_vec_pretty(&meta).context("could not serialize metadata")?,