From 68d28b413a00b6821cdc70eb0875f77f9f9f2bdb Mon Sep 17 00:00:00 2001 From: Alexander Weiss Date: Wed, 6 Jul 2022 13:12:53 +0200 Subject: [PATCH] restore: Add option --numeric-id --- src/backend/local.rs | 11 +++++++++-- src/commands/restore.rs | 10 +++++++++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/backend/local.rs b/src/backend/local.rs index 40741f9..0094dd0 100644 --- a/src/backend/local.rs +++ b/src/backend/local.rs @@ -193,11 +193,9 @@ impl LocalBackend { fs::create_dir(&dirname).unwrap(); } - // TODO: times pub fn set_user_group(&self, item: impl AsRef, meta: &Metadata) { let filename = self.path.join(item); - // set uid/gid let user = meta .user .as_ref() @@ -216,6 +214,15 @@ impl LocalBackend { chown(&filename, uid, gid).unwrap(); } + pub fn set_uid_gid(&self, item: impl AsRef, meta: &Metadata) { + let filename = self.path.join(item); + + let uid = meta.uid.map(Uid::from_raw); + let gid = meta.gid.map(Gid::from_raw); + + chown(&filename, uid, gid).unwrap(); + } + pub fn set_permission(&self, item: impl AsRef, meta: &Metadata) { let filename = self.path.join(item); diff --git a/src/commands/restore.rs b/src/commands/restore.rs index 2dd7cc8..0317a13 100644 --- a/src/commands/restore.rs +++ b/src/commands/restore.rs @@ -26,6 +26,10 @@ pub(super) struct Opts { #[clap(long)] delete: bool, + /// use numeric ids instead of user/groug when restoring uid/gui + #[clap(long)] + numeric_id: bool, + /// snapshot to restore id: String, @@ -151,7 +155,11 @@ async fn restore_metadata( while let Some((path, node)) = node_streamer.try_next().await? { if !opts.dry_run { dest.create_special(&path, &node); - dest.set_user_group(&path, node.meta()); + if opts.numeric_id { + dest.set_uid_gid(&path, node.meta()); + } else { + dest.set_user_group(&path, node.meta()); + } dest.set_permission(&path, node.meta()); } }