public inbox for pbs-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Christian Ebner <c.ebner@proxmox.com>
To: "Proxmox Backup Server development discussion"
	<pbs-devel@lists.proxmox.com>,
	"Fabian Grünbichler" <f.gruenbichler@proxmox.com>
Subject: Re: [pbs-devel] [PATCH v2 proxmox-backup] fix #2996: client: allow optional match patterns for restore
Date: Fri, 24 May 2024 12:45:49 +0200	[thread overview]
Message-ID: <0e7831a3-74cd-4a59-be50-0179fbe1d06a@proxmox.com> (raw)
In-Reply-To: <1716545719.rfvnxyuia0.astroid@yuna.none>

On 5/24/24 12:21, Fabian Grünbichler wrote:
> On April 30, 2024 5:58 pm, Christian Ebner wrote:
>> When the user is only interested in a subset of the entries stored in
>> a file-level backup, it is convenient to be able to provide a list of
>> match patterns for the entries intended to be restored.
>>
>> The required restore logic is already in place. Therefore, expose it
>> for the `proxmox-backup-client restore` command by adding the optional
>> array of patterns as command line argument and parse these before
>> passing them via the pxar restore options to the archive extractor.
>>
>> Link to bugtracker issue:
>> https://bugzilla.proxmox.com/show_bug.cgi?id=2996
>>
>> Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
>> Tested-by: Gabriel Goller <g.goller@proxmox.com>
>> ---
>> Changes since version 1:
>>   - bail when `matches` are used in combination with restore to stdout
>>   - fix typo in commit title
>>
>>   proxmox-backup-client/src/main.rs | 31 +++++++++++++++++++++++++++++--
>>   1 file changed, 29 insertions(+), 2 deletions(-)
>>
>> diff --git a/proxmox-backup-client/src/main.rs b/proxmox-backup-client/src/main.rs
>> index 32fe914c4..08582c86d 100644
>> --- a/proxmox-backup-client/src/main.rs
>> +++ b/proxmox-backup-client/src/main.rs
>> @@ -1186,6 +1186,15 @@ We do not extract '.pxar' archives when writing to standard output.
>>   
>>   "###
>>               },
>> +            "matches": {
>> +                type: Array,
>> +                description: "Only restore entries matching given paths or patterns.",
>> +                optional: true,
>> +                items: {
>> +                    type: String,
>> +                    description: "Path or match pattern.",
>> +                },
>> +            },
> 
> in `pxar extract`, we call this "pattern" with the following:
> 
>              pattern: {
>                  description: "List of paths or pattern matching files to restore",
>                  type: Array,
>                  items: {
>                      type: String,
>                      description: "Path or pattern matching files to restore.",
>                  },
>                  optional: true,
>              },
> 
> do we maybe want to copy that wording/name? do we have other places
> where patterns are used for inclusion that we could unify?
> 
> would it make sense to create an API type for this, or at least add some
> sort of schema-based validation up front (e.g., empty strings are not
> valid, but also trailing back slashes, and I don't know what else ;))?


Yes, makes sense to me. Will incorporate this in a new version.

> 
>>               rate: {
>>                   schema: TRAFFIC_CONTROL_RATE_SCHEMA,
>>                   optional: true,
>> @@ -1306,6 +1315,24 @@ async fn restore(
>>       let target = json::required_string_param(&param, "target")?;
>>       let target = if target == "-" { None } else { Some(target) };
>>   
>> +    let mut match_list = Vec::new();
>> +    if let Some(patterns) = param["matches"].as_array() {
>> +        if target.is_none() {
>> +            bail!("matches not allowed when restoring to stdout");
>> +        }
>> +
>> +        for pattern in patterns {
>> +            if let Some(pattern) = pattern.as_str() {
>> +                let match_entry = MatchEntry::parse_pattern(
>> +                    pattern,
>> +                    PatternFlag::PATH_NAME,
>> +                    MatchType::Include
>> +                )?;
>> +                match_list.push(match_entry);
>> +            }
>> +        }
>> +    };
>> +
>>       let crypto = crypto_parameters(&param)?;
>>   
>>       let crypt_config = match crypto.enc_key {
>> @@ -1429,8 +1456,8 @@ async fn restore(
>>           }
>>   
>>           let options = pbs_client::pxar::PxarExtractOptions {
>> -            match_list: &[],
>> -            extract_match_default: true,
>> +            match_list: match_list.as_slice(),
> 
> nit: we don't really use as_slice to convert Vecs to slices when passing
> them to another fn ;) a simple `&` does the job as well (because &Vec
> derefs to &[]).

Noted!

> 
>> +            extract_match_default: match_list.is_empty(),
>>               allow_existing_dirs,
>>               overwrite_flags,
>>               on_error,
>> -- 
>> 2.39.2
>>
>>
>>
>> _______________________________________________
>> pbs-devel mailing list
>> pbs-devel@lists.proxmox.com
>> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel
>>
>>
>>
> 
> 
> _______________________________________________
> pbs-devel mailing list
> pbs-devel@lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel
> 
> 



_______________________________________________
pbs-devel mailing list
pbs-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel

  reply	other threads:[~2024-05-24 10:45 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-30 15:58 Christian Ebner
2024-05-24 10:21 ` Fabian Grünbichler
2024-05-24 10:45   ` Christian Ebner [this message]
2024-06-13 10:58 ` Christian Ebner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=0e7831a3-74cd-4a59-be50-0179fbe1d06a@proxmox.com \
    --to=c.ebner@proxmox.com \
    --cc=f.gruenbichler@proxmox.com \
    --cc=pbs-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal