mirror of
https://codeberg.org/Toasterson/ips.git
synced 2026-04-10 13:20:42 +00:00
Remove deprecated Catalog v0 support and refactor legacy catalog handling.
- Removed `get_catalog` handler and associated Catalog v0 route. - Updated `get_legacy_catalog` to accept `filename` for enhanced flexibility. - Adjusted integration tests to validate changes and focus on Catalog v1 support. - Refactored `SupportedOperation` definitions to exclude Catalog v0.
This commit is contained in:
parent
048dddf487
commit
84b2c50ed6
6 changed files with 6 additions and 27 deletions
|
|
@ -1696,7 +1696,7 @@ impl FileBackend {
|
||||||
Err(RepositoryError::NotFound(format!("manifest for {} not found", fmri)))
|
Err(RepositoryError::NotFound(format!("manifest for {} not found", fmri)))
|
||||||
}
|
}
|
||||||
/// Fetch legacy catalog content (stub)
|
/// Fetch legacy catalog content (stub)
|
||||||
pub fn fetch_legacy_catalog(&self, _publisher: &str) -> Result<String> {
|
pub fn fetch_legacy_catalog(&self, _publisher: &str, _filename: &str) -> Result<PathBuf> {
|
||||||
todo!("Implement legacy catalog format for REST API");
|
todo!("Implement legacy catalog format for REST API");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
use axum::{
|
use axum::{
|
||||||
extract::{Path, State, Request},
|
extract::{Path, State, Request},
|
||||||
response::{IntoResponse, Response},
|
response::{IntoResponse, Response},
|
||||||
http::header,
|
|
||||||
};
|
};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use crate::repo::DepotRepo;
|
use crate::repo::DepotRepo;
|
||||||
|
|
@ -9,25 +8,12 @@ use crate::errors::DepotError;
|
||||||
use tower_http::services::ServeFile;
|
use tower_http::services::ServeFile;
|
||||||
use tower::ServiceExt;
|
use tower::ServiceExt;
|
||||||
|
|
||||||
pub async fn get_catalog(
|
|
||||||
State(repo): State<Arc<DepotRepo>>,
|
|
||||||
Path(publisher): Path<String>,
|
|
||||||
) -> Result<Response, DepotError> {
|
|
||||||
let content = repo.get_legacy_catalog(&publisher)?;
|
|
||||||
|
|
||||||
Ok((
|
|
||||||
[(header::CONTENT_TYPE, "text/plain")],
|
|
||||||
content
|
|
||||||
).into_response())
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn get_catalog_v1(
|
pub async fn get_catalog_v1(
|
||||||
State(repo): State<Arc<DepotRepo>>,
|
State(repo): State<Arc<DepotRepo>>,
|
||||||
Path((publisher, filename)): Path<(String, String)>,
|
Path((publisher, filename)): Path<(String, String)>,
|
||||||
req: Request,
|
req: Request,
|
||||||
) -> Result<Response, DepotError> {
|
) -> Result<Response, DepotError> {
|
||||||
let path = repo.get_catalog_file_path(&publisher, &filename)
|
let path = repo.get_legacy_catalog(&publisher, &filename)?;
|
||||||
.ok_or_else(|| DepotError::Repo(libips::repository::RepositoryError::NotFound(filename.clone())))?;
|
|
||||||
|
|
||||||
let service = ServeFile::new(path);
|
let service = ServeFile::new(path);
|
||||||
let result = service.oneshot(req).await;
|
let result = service.oneshot(req).await;
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ pub async fn get_versions() -> impl IntoResponse {
|
||||||
operations: vec![
|
operations: vec![
|
||||||
SupportedOperation { op: Operation::Info, versions: vec![0] },
|
SupportedOperation { op: Operation::Info, versions: vec![0] },
|
||||||
SupportedOperation { op: Operation::Versions, versions: vec![0] },
|
SupportedOperation { op: Operation::Versions, versions: vec![0] },
|
||||||
SupportedOperation { op: Operation::Catalog, versions: vec![0, 1] },
|
SupportedOperation { op: Operation::Catalog, versions: vec![1] },
|
||||||
SupportedOperation { op: Operation::Manifest, versions: vec![0, 1] },
|
SupportedOperation { op: Operation::Manifest, versions: vec![0, 1] },
|
||||||
SupportedOperation { op: Operation::File, versions: vec![0, 1] },
|
SupportedOperation { op: Operation::File, versions: vec![0, 1] },
|
||||||
SupportedOperation { op: Operation::Publisher, versions: vec![0, 1] },
|
SupportedOperation { op: Operation::Publisher, versions: vec![0, 1] },
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@ use crate::http::handlers::{versions, catalog, manifest, file, info, publisher};
|
||||||
pub fn app_router(state: Arc<DepotRepo>) -> Router {
|
pub fn app_router(state: Arc<DepotRepo>) -> Router {
|
||||||
Router::new()
|
Router::new()
|
||||||
.route("/versions/0/", get(versions::get_versions))
|
.route("/versions/0/", get(versions::get_versions))
|
||||||
.route("/{publisher}/catalog/0/", get(catalog::get_catalog))
|
|
||||||
.route("/{publisher}/catalog/1/{filename}", get(catalog::get_catalog_v1))
|
.route("/{publisher}/catalog/1/{filename}", get(catalog::get_catalog_v1))
|
||||||
.route("/{publisher}/manifest/0/{fmri}", get(manifest::get_manifest))
|
.route("/{publisher}/manifest/0/{fmri}", get(manifest::get_manifest))
|
||||||
.route("/{publisher}/manifest/1/{fmri}", get(manifest::get_manifest))
|
.route("/{publisher}/manifest/1/{fmri}", get(manifest::get_manifest))
|
||||||
|
|
|
||||||
|
|
@ -36,9 +36,9 @@ impl DepotRepo {
|
||||||
backend.fetch_manifest_text(publisher, fmri).map_err(DepotError::Repo)
|
backend.fetch_manifest_text(publisher, fmri).map_err(DepotError::Repo)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_legacy_catalog(&self, publisher: &str) -> Result<String> {
|
pub fn get_legacy_catalog(&self, publisher: &str, filename: &str) -> Result<PathBuf> {
|
||||||
let backend = self.backend.lock().map_err(|e| DepotError::Server(format!("Lock poisoned: {}", e)))?;
|
let backend = self.backend.lock().map_err(|e| DepotError::Server(format!("Lock poisoned: {}", e)))?;
|
||||||
backend.fetch_legacy_catalog(publisher).map_err(DepotError::Repo)
|
backend.fetch_legacy_catalog(publisher, filename).map_err(DepotError::Repo)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_catalog_file_path(&self, publisher: &str, filename: &str) -> Option<PathBuf> {
|
pub fn get_catalog_file_path(&self, publisher: &str, filename: &str) -> Option<PathBuf> {
|
||||||
|
|
|
||||||
|
|
@ -101,16 +101,10 @@ async fn test_depot_server() {
|
||||||
assert!(resp.status().is_success());
|
assert!(resp.status().is_success());
|
||||||
let text = resp.text().await.unwrap();
|
let text = resp.text().await.unwrap();
|
||||||
assert!(text.contains("pkg-server pkg6depotd-0.5.1"));
|
assert!(text.contains("pkg-server pkg6depotd-0.5.1"));
|
||||||
assert!(text.contains("catalog 0 1"));
|
assert!(text.contains("catalog 1"));
|
||||||
assert!(text.contains("manifest 0 1"));
|
assert!(text.contains("manifest 0 1"));
|
||||||
|
|
||||||
// 2. Test Catalog
|
// 2. Test Catalog
|
||||||
// Catalog v0 stub check
|
|
||||||
/*
|
|
||||||
let catalog_url = format!("{}/test/catalog/0/", base_url);
|
|
||||||
let resp = client.get(&catalog_url).send().await.unwrap();
|
|
||||||
assert!(resp.status().is_success());
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Test Catalog v1
|
// Test Catalog v1
|
||||||
let catalog_v1_url = format!("{}/test/catalog/1/catalog.attrs", base_url);
|
let catalog_v1_url = format!("{}/test/catalog/1/catalog.attrs", base_url);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue