mirror of
https://github.com/modrinth/code.git
synced 2026-08-25 00:55:25 +00:00
in mrpack export, match with hash rather than by primary on version (#7254)
This commit is contained in:
@@ -529,12 +529,12 @@ pub async fn create_mrpack_json(
|
|||||||
)
|
)
|
||||||
.await?
|
.await?
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.filter_map(|(path, file)| match file.metadata {
|
.filter_map(|(path, file)| {
|
||||||
Some(metadata) => Some((path, metadata.version_id)),
|
file.metadata
|
||||||
_ => None,
|
.map(|metadata| (path, file.hash, metadata.version_id))
|
||||||
})
|
})
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
let version_ids = projects.iter().map(|x| &*x.1).collect::<Vec<_>>();
|
let version_ids = projects.iter().map(|x| &*x.2).collect::<Vec<_>>();
|
||||||
let versions = CachedEntry::get_version_v3_many(
|
let versions = CachedEntry::get_version_v3_many(
|
||||||
&version_ids,
|
&version_ids,
|
||||||
Some(CacheBehaviour::MustRevalidate),
|
Some(CacheBehaviour::MustRevalidate),
|
||||||
@@ -544,43 +544,38 @@ pub async fn create_mrpack_json(
|
|||||||
.await?;
|
.await?;
|
||||||
let files = projects
|
let files = projects
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.filter_map(|(path, version_id)| {
|
.filter_map(|(path, hash, version_id)| {
|
||||||
if let Some(version) = versions.iter().find(|x| x.id == version_id)
|
let version = versions.iter().find(|x| x.id == version_id)?;
|
||||||
{
|
let env = get_mrpack_environment(version.environment);
|
||||||
let env = get_mrpack_environment(version.environment);
|
let file = version.files.iter().find(|file| {
|
||||||
let Some(primary_file) = version.files.first() else {
|
file.hashes
|
||||||
return Some(Err(crate::ErrorKind::OtherError(format!(
|
.get("sha1")
|
||||||
"No primary file found for mod at: {path}"
|
.is_some_and(|file_hash| file_hash == &hash)
|
||||||
))
|
})?;
|
||||||
.as_error()));
|
let file_size = file.size;
|
||||||
};
|
let downloads = vec![file.url.clone()];
|
||||||
let file_size = primary_file.size;
|
let hashes = file
|
||||||
let downloads = vec![primary_file.url.clone()];
|
.hashes
|
||||||
let hashes = primary_file
|
.clone()
|
||||||
.hashes
|
.into_iter()
|
||||||
.clone()
|
.map(|(h1, h2)| (PackFileHash::from(h1), h2))
|
||||||
.into_iter()
|
.collect();
|
||||||
.map(|(h1, h2)| (PackFileHash::from(h1), h2))
|
|
||||||
.collect();
|
|
||||||
|
|
||||||
Some(Ok(PackFile {
|
Some(Ok(PackFile {
|
||||||
path: match path.try_into() {
|
path: match path.try_into() {
|
||||||
Ok(path) => path,
|
Ok(path) => path,
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
return Some(Err(crate::ErrorKind::OtherError(
|
return Some(Err(crate::ErrorKind::OtherError(
|
||||||
"Invalid file path in project".into(),
|
"Invalid file path in project".into(),
|
||||||
)
|
)
|
||||||
.as_error()));
|
.as_error()));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
hashes,
|
hashes,
|
||||||
env: Some(env),
|
env: Some(env),
|
||||||
downloads,
|
downloads,
|
||||||
file_size,
|
file_size,
|
||||||
}))
|
}))
|
||||||
} else {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
.collect::<crate::Result<Vec<PackFile>>>()?;
|
.collect::<crate::Result<Vec<PackFile>>>()?;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user