[pve-devel] [RFC v5 pve-rs 19/23] RFC: add upgrade_repositories wrapper

Fabian Ebner f.ebner at proxmox.com
Fri May 28 16:29:58 CEST 2021


Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
---

New in v5.

 perlmod/src/apt/repositories.rs | 37 +++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/perlmod/src/apt/repositories.rs b/perlmod/src/apt/repositories.rs
index 37a62f2..d9d9429 100644
--- a/perlmod/src/apt/repositories.rs
+++ b/perlmod/src/apt/repositories.rs
@@ -52,4 +52,41 @@ mod export {
             to_value(&no_subscription_enabled)?,
         ))
     }
+
+    #[export]
+    fn upgrade_repositories(digest: String) -> Result<(), Error> {
+        //bail!("next major version not released yet, or current version not fully upgraded");
+
+        // TODO should it be required that all files could be parsed?
+        let (mut files, _errors) = proxmox_apt::repositories::repositories()?;
+
+        if files.is_empty() {
+            bail!("no APT repository files could be parsed!");
+        }
+
+        if !digest.is_empty() {
+            let expected_digest = proxmox::tools::hex_to_digest(&digest)?;
+            let current_digest = proxmox_apt::repositories::common_digest(&files);
+            if current_digest != expected_digest {
+                bail!("detected modified configuration - file changed by other user? Try again.");
+            }
+        }
+
+        proxmox_apt::repositories::replace_suite(
+            &mut files,
+            proxmox_apt::repositories::STABLE_SUITE,
+            proxmox_apt::repositories::NEXT_STABLE_SUITE,
+        );
+
+        if let Err(errors) = proxmox_apt::repositories::write_repositories(&files) {
+            let message = errors
+                .iter()
+                .fold("Problem writing file(s):".to_string(), |message, error| {
+                    format!("{}\n{}", message, error)
+                });
+            bail!(message);
+        }
+
+        Ok(())
+    }
 }
-- 
2.20.1





More information about the pve-devel mailing list