]> git.proxmox.com Git - proxmox-apt.git/commitdiff
standard repos: allow conversion from handle and improve information
authorFabian Ebner <f.ebner@proxmox.com>
Wed, 30 Jun 2021 15:07:53 +0000 (17:07 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Wed, 30 Jun 2021 18:38:05 +0000 (20:38 +0200)
Add a description for the handle, which can be useful to display
alongside the name. The descriptions are essentially the first
sentence from PVE's "Package Repositories" docs, but without the
product name.

Also drop the " Repository" suffix from the names, as it's not useful,
but can be ugly: e.g. for the UI when the label already is
'Repository:'.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
src/repositories/mod.rs
src/repositories/standard.rs
tests/repositories.rs

index e2b0b6bfca35257f3f1c87b734c051c9a56948d3..7bac3336d8e1b64a32d19354ca9742926498b7b2 100644 (file)
@@ -80,45 +80,17 @@ pub fn standard_repositories(
     files: &[APTRepositoryFile],
 ) -> Vec<APTStandardRepository> {
     let mut result = vec![
-        APTStandardRepository {
-            handle: APTRepositoryHandle::Enterprise,
-            status: None,
-            name: APTRepositoryHandle::Enterprise.name(),
-        },
-        APTStandardRepository {
-            handle: APTRepositoryHandle::NoSubscription,
-            status: None,
-            name: APTRepositoryHandle::NoSubscription.name(),
-        },
-        APTStandardRepository {
-            handle: APTRepositoryHandle::Test,
-            status: None,
-            name: APTRepositoryHandle::Test.name(),
-        },
+        APTStandardRepository::from(APTRepositoryHandle::Enterprise),
+        APTStandardRepository::from(APTRepositoryHandle::NoSubscription),
+        APTStandardRepository::from(APTRepositoryHandle::Test),
     ];
 
     if product == "pve" {
         result.append(&mut vec![
-            APTStandardRepository {
-                handle: APTRepositoryHandle::CephPacific,
-                status: None,
-                name: APTRepositoryHandle::CephPacific.name(),
-            },
-            APTStandardRepository {
-                handle: APTRepositoryHandle::CephPacificTest,
-                status: None,
-                name: APTRepositoryHandle::CephPacificTest.name(),
-            },
-            APTStandardRepository {
-                handle: APTRepositoryHandle::CephOctopus,
-                status: None,
-                name: APTRepositoryHandle::CephOctopus.name(),
-            },
-            APTStandardRepository {
-                handle: APTRepositoryHandle::CephOctopusTest,
-                status: None,
-                name: APTRepositoryHandle::CephOctopusTest.name(),
-            },
+            APTStandardRepository::from(APTRepositoryHandle::CephPacific),
+            APTStandardRepository::from(APTRepositoryHandle::CephPacificTest),
+            APTStandardRepository::from(APTRepositoryHandle::CephOctopus),
+            APTStandardRepository::from(APTRepositoryHandle::CephOctopusTest),
         ]);
     }
 
index dcfe85bbc94b4947b1fe2d66853271ed16916472..0d2cc14a5c8bf14d0215784d1bb63b5ae6ac9584 100644 (file)
@@ -29,8 +29,11 @@ pub struct APTStandardRepository {
     #[serde(skip_serializing_if = "Option::is_none")]
     pub status: Option<bool>,
 
-    /// Full name of the repository.
+    /// Display name of the repository.
     pub name: String,
+
+    /// Description of the repository.
+    pub description: String,
 }
 
 #[api]
@@ -54,6 +57,17 @@ pub enum APTRepositoryHandle {
     CephOctopusTest,
 }
 
+impl From<APTRepositoryHandle> for APTStandardRepository {
+    fn from(handle: APTRepositoryHandle) -> Self {
+        APTStandardRepository {
+            handle,
+            status: None,
+            name: handle.name(),
+            description: handle.description(),
+        }
+    }
+}
+
 impl TryFrom<&str> for APTRepositoryHandle {
     type Error = Error;
 
@@ -86,16 +100,48 @@ impl Display for APTRepositoryHandle {
 }
 
 impl APTRepositoryHandle {
-    /// Get the full name of the repository.
+    /// Get the description for the repository.
+    pub fn description(self) -> String {
+        match self {
+            APTRepositoryHandle::Enterprise => {
+                "This is the default, stable, and recommended repository, available for all \
+                Proxmox subscription users."
+            }
+            APTRepositoryHandle::NoSubscription => {
+                "This is the recommended repository for testing and non-production use."
+            }
+            APTRepositoryHandle::Test => {
+                "This repository contains the latest packages and is primarily used by developers \
+                to test new features."
+            }
+            APTRepositoryHandle::CephPacific => {
+                "This repository holds the main Proxmox Ceph Pacific packages."
+            }
+            APTRepositoryHandle::CephPacificTest => {
+                "This repository contains the Ceph Pacific packages before they are moved to the \
+                main repository."
+            }
+            APTRepositoryHandle::CephOctopus => {
+                "This repository holds the main Proxmox Ceph Octopus packages."
+            }
+            APTRepositoryHandle::CephOctopusTest => {
+                "This repository contains the Ceph Octopus packages before they are moved to the \
+                main repository."
+            }
+        }
+        .to_string()
+    }
+
+    /// Get the display name of the repository.
     pub fn name(self) -> String {
         match self {
-            APTRepositoryHandle::Enterprise => "Enterprise Repository",
-            APTRepositoryHandle::NoSubscription => "No-Subscription Repository",
-            APTRepositoryHandle::Test => "Test Repository",
-            APTRepositoryHandle::CephPacific => "Ceph Pacific Repository",
-            APTRepositoryHandle::CephPacificTest => "Ceph Pacific Test Repository",
-            APTRepositoryHandle::CephOctopus => "Ceph Octopus Repository",
-            APTRepositoryHandle::CephOctopusTest => "Ceph Octopus Test Repository",
+            APTRepositoryHandle::Enterprise => "Enterprise",
+            APTRepositoryHandle::NoSubscription => "No-Subscription",
+            APTRepositoryHandle::Test => "Test",
+            APTRepositoryHandle::CephPacific => "Ceph Pacific",
+            APTRepositoryHandle::CephPacificTest => "Ceph Pacific Test",
+            APTRepositoryHandle::CephOctopus => "Ceph Octopus",
+            APTRepositoryHandle::CephOctopusTest => "Ceph Octopus Test",
         }
         .to_string()
     }
index fefc60897244a1719e38ba1481775d2612c24f61..289bbe47ae3e61db658bb581a27de8d83ecdb5ac 100644 (file)
@@ -317,41 +317,13 @@ fn test_standard_repositories() -> Result<(), Error> {
     let read_dir = test_dir.join("sources.list.d");
 
     let mut expected = vec![
-        APTStandardRepository {
-            handle: APTRepositoryHandle::Enterprise,
-            status: None,
-            name: APTRepositoryHandle::Enterprise.name(),
-        },
-        APTStandardRepository {
-            handle: APTRepositoryHandle::NoSubscription,
-            status: None,
-            name: APTRepositoryHandle::NoSubscription.name(),
-        },
-        APTStandardRepository {
-            handle: APTRepositoryHandle::Test,
-            status: None,
-            name: APTRepositoryHandle::Test.name(),
-        },
-        APTStandardRepository {
-            handle: APTRepositoryHandle::CephPacific,
-            status: None,
-            name: APTRepositoryHandle::CephPacific.name(),
-        },
-        APTStandardRepository {
-            handle: APTRepositoryHandle::CephPacificTest,
-            status: None,
-            name: APTRepositoryHandle::CephPacificTest.name(),
-        },
-        APTStandardRepository {
-            handle: APTRepositoryHandle::CephOctopus,
-            status: None,
-            name: APTRepositoryHandle::CephOctopus.name(),
-        },
-        APTStandardRepository {
-            handle: APTRepositoryHandle::CephOctopusTest,
-            status: None,
-            name: APTRepositoryHandle::CephOctopusTest.name(),
-        },
+        APTStandardRepository::from(APTRepositoryHandle::Enterprise),
+        APTStandardRepository::from(APTRepositoryHandle::NoSubscription),
+        APTStandardRepository::from(APTRepositoryHandle::Test),
+        APTStandardRepository::from(APTRepositoryHandle::CephPacific),
+        APTStandardRepository::from(APTRepositoryHandle::CephPacificTest),
+        APTStandardRepository::from(APTRepositoryHandle::CephOctopus),
+        APTStandardRepository::from(APTRepositoryHandle::CephOctopusTest),
     ];
 
     let absolute_suite_list = read_dir.join("absolute_suite.list");