borgbase / vorta

Desktop Backup Client for Borg Backup
https://vorta.borgbase.com
GNU General Public License v3.0
1.92k stars 127 forks source link

Extract command fails with ambiguous "A pattern/command must start with any of: -, !, +, R, r, P, p" error #2025

Open NovaViper opened 1 week ago

NovaViper commented 1 week ago

Description

Whenever I run the Extract command in Vorta, I get this ambiguous error saying A pattern/command must start with any of: -, !, +, R, r, P, p. It looks like it's something to do with the --patterns-from /tmp/tmpddwoqsy1 part of the command because I can run the particular command directly and it works fine in cli. My borg repo is on a OpenMediaVault server

Reproduction

OS

Linux 6.9.4-xanmod1, NixOS, 24.11 (Vicuna), 24.11.20240619.5b75ddc

Version of Vorta

0.9.1

What did you install Vorta with?

Distribution package

Version of Borg

1.2.8

Logs

2024-06-22 11:28:27,152 - vorta.keyring.abc - DEBUG - No module named 'objc'
2024-06-22 11:28:27,153 - vorta.keyring.abc - DEBUG - Using VortaKWallet5Keyring
2024-06-22 11:28:27,153 - vorta.borg.borg_job - DEBUG - Using VortaKWallet5Keyring keyring to store passwords.
2024-06-22 11:28:27,154 - vorta.keyring.kwallet - DEBUG - Retrieved password for repo ssh://knoxpi/srv/dev-disk-by-uuid-3a8e28d0-a221-4cf8-a136-c83f764e5bc3/Backupper/Computers
2024-06-22 11:28:27,162 - vorta.borg.jobs_manager - DEBUG - Add job for site 1
2024-06-22 11:28:27,163 - vorta.borg.jobs_manager - DEBUG - Start job on site: 1
2024-06-22 11:28:27,175 - vorta.borg.borg_job - INFO - Running command /nix/store/sa3a47whgq5qb8616hwqwyc2i8vvy5h4-borgbackup-1.2.8/bin/borg list --info --log-json --json-lines --format {mode}{user}{group}{size}{isomtime}{path}{source}{health}{NL} ssh://knoxpi/srv/dev-disk-by-uuid-3a8e28d0-a221-4cf8-a136-c83f764e5bc3/Backupper/Computers::ryzennova-2024-06-09-195509
2024-06-22 11:28:33,308 - vorta.borg.jobs_manager - DEBUG - Finish job for site: 1
2024-06-22 11:28:33,308 - vorta.borg.jobs_manager - DEBUG - No more jobs for site: 1
2024-06-22 11:28:33,310 - vorta.scheduler - DEBUG - Scheduler for profile 2 is disabled.
2024-06-22 11:28:39,687 - vorta.keyring.abc - DEBUG - No module named 'objc'
2024-06-22 11:28:39,687 - vorta.keyring.abc - DEBUG - Using VortaKWallet5Keyring
2024-06-22 11:28:39,688 - vorta.borg.borg_job - DEBUG - Using VortaKWallet5Keyring keyring to store passwords.
2024-06-22 11:28:39,689 - vorta.keyring.kwallet - DEBUG - Retrieved password for repo ssh://knoxpi/srv/dev-disk-by-uuid-3a8e28d0-a221-4cf8-a136-c83f764e5bc3/Backupper/Computers
2024-06-22 11:28:39,861 - vorta.borg.jobs_manager - DEBUG - Add job for site 1
2024-06-22 11:28:39,861 - vorta.borg.jobs_manager - DEBUG - Start job on site: 1
2024-06-22 11:28:39,884 - vorta.borg.borg_job - INFO - Running command /nix/store/sa3a47whgq5qb8616hwqwyc2i8vvy5h4-borgbackup-1.2.8/bin/borg extract --list --info --log-json ssh://knoxpi/srv/dev-disk-by-uuid-3a8e28d0-a221-4cf8-a136-c83f764e5bc3/Backupper/Computers::ryzennova-2024-06-09-195509 --patterns-from /tmp/tmpddwoqsy1
2024-06-22 11:28:40,141 - vorta.borg.borg_job - WARNING - A pattern/command must start with any of: -, !, +, R, r, P, p
2024-06-22 11:28:40,282 - vorta.scheduler - DEBUG - Scheduler for profile 2 is disabled.
2024-06-22 11:28:40,282 - vorta.borg.jobs_manager - DEBUG - Finish job for site: 1
2024-06-22 11:28:40,283 - vorta.borg.jobs_manager - DEBUG - No more jobs for site: 1
m3nu commented 1 week ago

Maybe something you entered in the exclusion settings?

NovaViper commented 1 week ago

Sorry for the late reply! I actually tried with both my profile (which has a few exclusion settings like so below) aswell as the Default profile too (which has no exclusion rules listed at all or really any other settings at all, just a blank template) My main profile's rules:

*/.cache
*.cache
*.kate-swp
*.~lock.*
*.FCStd1
*.directory
.directory

Another oddity is that when I try to see what's on that tmp file it's referencing, it doesn't even exist!

m3nu commented 1 week ago

The temp file would be removed automatically. You would need to be really quick to view it's content. Or add some debug statement in Vorta to print it.

@shivansh02 , could we improve our exclusion code to prevent such situations? Do you see any possibility of getting invalid patterns?

shivansh02 commented 1 week ago

I couldn't reproduce this, nor could I think of any possibility of getting invalid patterns in the pattern_file, since we are only writing directory paths with a "+" prefix and "- fm:*" at the end, both of which are valid according to Borg.

@NovaViper If you could print the contents of your temp file, it would be a great help. If it's possible, here's what you would need to do in extract.py: a. change tempfile mode from 'w' to 'w+' on line 45. b. add the following below line 61:

pattern_file.seek(0)
print(pattern_file.read())
NovaViper commented 6 days ago

@shivansh02 Changing the tempfile mode made it work! And this is what it's outputting after the change With w+

P pf
+ home/novaviper/Desktop/Beat Saber.desktop
+ home/novaviper/Desktop/Blender.desktop
+ home/novaviper/Desktop/EVERSPACE 2 - Demo.desktop
+ home/novaviper/Desktop/KeyCaps
+ home/novaviper/Desktop/KeyCaps/.git
+ home/novaviper/Desktop/KeyCaps/.github
+ home/novaviper/Desktop/KeyCaps/.gitignore
+ home/novaviper/Desktop/KeyCaps/.node-version
+ home/novaviper/Desktop/KeyCaps/.tool-versions
+ home/novaviper/Desktop/KeyCaps/LICENSE.md
+ home/novaviper/Desktop/KeyCaps/README.md
+ home/novaviper/Desktop/KeyCaps/TIPS_AND_TRICKS.md
+ home/novaviper/Desktop/KeyCaps/assets
+ home/novaviper/Desktop/KeyCaps/customizer.json
+ home/novaviper/Desktop/KeyCaps/customizer.scad
+ home/novaviper/Desktop/KeyCaps/customizer_base.scad
+ home/novaviper/Desktop/KeyCaps/examples
+ home/novaviper/Desktop/KeyCaps/expand.rb
+ home/novaviper/Desktop/KeyCaps/gulpfile.js
+ home/novaviper/Desktop/KeyCaps/includes.scad
+ home/novaviper/Desktop/KeyCaps/key_mold.scad
+ home/novaviper/Desktop/KeyCaps/keys.scad
+ home/novaviper/Desktop/KeyCaps/model_base.scad
+ home/novaviper/Desktop/KeyCaps/models.rb
+ home/novaviper/Desktop/KeyCaps/openscad.rb
+ home/novaviper/Desktop/KeyCaps/package.json
+ home/novaviper/Desktop/KeyCaps/src
+ home/novaviper/Desktop/KeyCaps/yarn.lock
+ home/novaviper/Desktop/KeyCaps/src/constants.scad
+ home/novaviper/Desktop/KeyCaps/src/dishes
+ home/novaviper/Desktop/KeyCaps/src/dishes.scad
+ home/novaviper/Desktop/KeyCaps/src/features
+ home/novaviper/Desktop/KeyCaps/src/functions.scad
+ home/novaviper/Desktop/KeyCaps/src/key.scad
+ home/novaviper/Desktop/KeyCaps/src/key_features.scad
+ home/novaviper/Desktop/KeyCaps/src/key_helpers.scad
+ home/novaviper/Desktop/KeyCaps/src/key_layouts.scad
+ home/novaviper/Desktop/KeyCaps/src/key_profiles
+ home/novaviper/Desktop/KeyCaps/src/key_profiles.scad
+ home/novaviper/Desktop/KeyCaps/src/key_sizes.scad
+ home/novaviper/Desktop/KeyCaps/src/key_transformations.scad
+ home/novaviper/Desktop/KeyCaps/src/key_types.scad
+ home/novaviper/Desktop/KeyCaps/src/layouts
+ home/novaviper/Desktop/KeyCaps/src/libraries
+ home/novaviper/Desktop/KeyCaps/src/settings.scad
+ home/novaviper/Desktop/KeyCaps/src/shapes
+ home/novaviper/Desktop/KeyCaps/src/shapes.scad
+ home/novaviper/Desktop/KeyCaps/src/stem_supports
+ home/novaviper/Desktop/KeyCaps/src/stem_supports.scad
+ home/novaviper/Desktop/KeyCaps/src/stems
+ home/novaviper/Desktop/KeyCaps/src/stems.scad
+ home/novaviper/Desktop/KeyCaps/src/supports
+ home/novaviper/Desktop/KeyCaps/src/supports.scad
+ home/novaviper/Desktop/KeyCaps/src/supports/bars.scad
+ home/novaviper/Desktop/KeyCaps/src/supports/flared.scad
+ home/novaviper/Desktop/KeyCaps/src/supports/flat.scad
+ home/novaviper/Desktop/KeyCaps/src/stems/alps.scad
+ home/novaviper/Desktop/KeyCaps/src/stems/box_cherry.scad
+ home/novaviper/Desktop/KeyCaps/src/stems/cherry.scad
+ home/novaviper/Desktop/KeyCaps/src/stems/cherry_stabilizer.scad
+ home/novaviper/Desktop/KeyCaps/src/stems/filled.scad
+ home/novaviper/Desktop/KeyCaps/src/stems/rounded_cherry.scad
+ home/novaviper/Desktop/KeyCaps/src/stem_supports/brim.scad
+ home/novaviper/Desktop/KeyCaps/src/stem_supports/tines.scad
+ home/novaviper/Desktop/KeyCaps/src/shapes/ISO_enter.scad
+ home/novaviper/Desktop/KeyCaps/src/shapes/oblong.scad
+ home/novaviper/Desktop/KeyCaps/src/shapes/rounded_square.scad
+ home/novaviper/Desktop/KeyCaps/src/shapes/sculpted_square.scad
+ home/novaviper/Desktop/KeyCaps/src/shapes/square.scad
+ home/novaviper/Desktop/KeyCaps/src/libraries/3d_surface.scad
+ home/novaviper/Desktop/KeyCaps/src/libraries/geodesic_sphere.scad
+ home/novaviper/Desktop/KeyCaps/src/libraries/polyhedrons.scad
+ home/novaviper/Desktop/KeyCaps/src/libraries/round-anything
+ home/novaviper/Desktop/KeyCaps/src/libraries/scad-utils
+ home/novaviper/Desktop/KeyCaps/src/libraries/skin.scad
+ home/novaviper/Desktop/KeyCaps/src/libraries/scad-utils/LICENSE
+ home/novaviper/Desktop/KeyCaps/src/libraries/scad-utils/README.md
+ home/novaviper/Desktop/KeyCaps/src/libraries/scad-utils/hull.scad
+ home/novaviper/Desktop/KeyCaps/src/libraries/scad-utils/linalg.scad
+ home/novaviper/Desktop/KeyCaps/src/libraries/scad-utils/lists.scad
+ home/novaviper/Desktop/KeyCaps/src/libraries/scad-utils/mirror.scad
+ home/novaviper/Desktop/KeyCaps/src/libraries/scad-utils/morphology.scad
+ home/novaviper/Desktop/KeyCaps/src/libraries/scad-utils/se3.scad
+ home/novaviper/Desktop/KeyCaps/src/libraries/scad-utils/shapes.scad
+ home/novaviper/Desktop/KeyCaps/src/libraries/scad-utils/so3.scad
+ home/novaviper/Desktop/KeyCaps/src/libraries/scad-utils/spline.scad
+ home/novaviper/Desktop/KeyCaps/src/libraries/scad-utils/trajectory.scad
+ home/novaviper/Desktop/KeyCaps/src/libraries/scad-utils/trajectory_path.scad
+ home/novaviper/Desktop/KeyCaps/src/libraries/scad-utils/transformations.scad
+ home/novaviper/Desktop/KeyCaps/src/libraries/round-anything/polyround.scad
+ home/novaviper/Desktop/KeyCaps/src/layouts/60_percent
+ home/novaviper/Desktop/KeyCaps/src/layouts/dactyl_manuform
+ home/novaviper/Desktop/KeyCaps/src/layouts/gherkin
+ home/novaviper/Desktop/KeyCaps/src/layouts/layout.scad
+ home/novaviper/Desktop/KeyCaps/src/layouts/lets_split
+ home/novaviper/Desktop/KeyCaps/src/layouts/planck
+ home/novaviper/Desktop/KeyCaps/src/layouts/plate.scad
+ home/novaviper/Desktop/KeyCaps/src/layouts/preonic
+ home/novaviper/Desktop/KeyCaps/src/layouts/project_zen
+ home/novaviper/Desktop/KeyCaps/src/layouts/project_zen/default.scad
+ home/novaviper/Desktop/KeyCaps/src/layouts/preonic/default.scad
+ home/novaviper/Desktop/KeyCaps/src/layouts/preonic/mit.scad
+ home/novaviper/Desktop/KeyCaps/src/layouts/planck/default.scad
+ home/novaviper/Desktop/KeyCaps/src/layouts/planck/mit.scad
+ home/novaviper/Desktop/KeyCaps/src/layouts/lets_split/default.scad
+ home/novaviper/Desktop/KeyCaps/src/layouts/gherkin/default.scad
+ home/novaviper/Desktop/KeyCaps/src/layouts/gherkin/gherkin_bump.scad
+ home/novaviper/Desktop/KeyCaps/src/layouts/dactyl_manuform/4x6.scad
+ home/novaviper/Desktop/KeyCaps/src/layouts/dactyl_manuform/4x6_legends.scad
+ home/novaviper/Desktop/KeyCaps/src/layouts/60_percent/default.scad
+ home/novaviper/Desktop/KeyCaps/src/key_profiles/cherry.scad
+ home/novaviper/Desktop/KeyCaps/src/key_profiles/dcs.scad
+ home/novaviper/Desktop/KeyCaps/src/key_profiles/dsa.scad
+ home/novaviper/Desktop/KeyCaps/src/key_profiles/dss.scad
+ home/novaviper/Desktop/KeyCaps/src/key_profiles/g20.scad
+ home/novaviper/Desktop/KeyCaps/src/key_profiles/grid.scad
+ home/novaviper/Desktop/KeyCaps/src/key_profiles/hipro.scad
+ home/novaviper/Desktop/KeyCaps/src/key_profiles/oem.scad
+ home/novaviper/Desktop/KeyCaps/src/key_profiles/sa.scad
+ home/novaviper/Desktop/KeyCaps/src/features/key_bump.scad
+ home/novaviper/Desktop/KeyCaps/src/dishes/3d_surface.scad
+ home/novaviper/Desktop/KeyCaps/src/dishes/cylindrical.scad
+ home/novaviper/Desktop/KeyCaps/src/dishes/flat.scad
+ home/novaviper/Desktop/KeyCaps/src/dishes/old_spherical.scad
+ home/novaviper/Desktop/KeyCaps/src/dishes/sideways_cylindrical.scad
+ home/novaviper/Desktop/KeyCaps/src/dishes/spherical.scad
+ home/novaviper/Desktop/KeyCaps/examples/legends.scad
+ home/novaviper/Desktop/KeyCaps/examples/multimaterial_key_top.scad
+ home/novaviper/Desktop/KeyCaps/examples/multimaterial_legend.scad
+ home/novaviper/Desktop/KeyCaps/examples/plate_generation.scad
+ home/novaviper/Desktop/KeyCaps/examples/print_keycaps_on_their_side.scad
+ home/novaviper/Desktop/KeyCaps/examples/sa_ergo.scad
+ home/novaviper/Desktop/KeyCaps/examples/single_extruder_multimaterial_legends.scad
+ home/novaviper/Desktop/KeyCaps/assets/dual_legends.png
+ home/novaviper/Desktop/KeyCaps/assets/example1.JPG
+ home/novaviper/Desktop/KeyCaps/assets/example2.JPG
+ home/novaviper/Desktop/KeyCaps/assets/example3.JPG
+ home/novaviper/Desktop/KeyCaps/assets/example4.JPG
+ home/novaviper/Desktop/KeyCaps/assets/example5.JPG
+ home/novaviper/Desktop/KeyCaps/assets/layout.png
+ home/novaviper/Desktop/KeyCaps/assets/welcome.png
+ home/novaviper/Desktop/KeyCaps/.github/ISSUE_TEMPLATE
+ home/novaviper/Desktop/KeyCaps/.github/ISSUE_TEMPLATE/bug_report.md
+ home/novaviper/Desktop/KeyCaps/.github/ISSUE_TEMPLATE/question---enhancement.md
+ home/novaviper/Desktop/KeyCaps/.git/HEAD
+ home/novaviper/Desktop/KeyCaps/.git/branches
+ home/novaviper/Desktop/KeyCaps/.git/config
+ home/novaviper/Desktop/KeyCaps/.git/description
+ home/novaviper/Desktop/KeyCaps/.git/hooks
+ home/novaviper/Desktop/KeyCaps/.git/index
+ home/novaviper/Desktop/KeyCaps/.git/info
+ home/novaviper/Desktop/KeyCaps/.git/logs
+ home/novaviper/Desktop/KeyCaps/.git/objects
+ home/novaviper/Desktop/KeyCaps/.git/packed-refs
+ home/novaviper/Desktop/KeyCaps/.git/refs
+ home/novaviper/Desktop/KeyCaps/.git/refs/heads
+ home/novaviper/Desktop/KeyCaps/.git/refs/remotes
+ home/novaviper/Desktop/KeyCaps/.git/refs/tags
+ home/novaviper/Desktop/KeyCaps/.git/refs/remotes/origin
+ home/novaviper/Desktop/KeyCaps/.git/refs/remotes/origin/HEAD
+ home/novaviper/Desktop/KeyCaps/.git/refs/heads/master
+ home/novaviper/Desktop/KeyCaps/.git/objects/info
+ home/novaviper/Desktop/KeyCaps/.git/objects/pack
+ home/novaviper/Desktop/KeyCaps/.git/objects/pack/pack-a7d17eb391232e275fb3be4d8556099cbe1fd0b6.idx
+ home/novaviper/Desktop/KeyCaps/.git/objects/pack/pack-a7d17eb391232e275fb3be4d8556099cbe1fd0b6.pack
+ home/novaviper/Desktop/KeyCaps/.git/logs/HEAD
+ home/novaviper/Desktop/KeyCaps/.git/logs/refs
+ home/novaviper/Desktop/KeyCaps/.git/logs/refs/heads
+ home/novaviper/Desktop/KeyCaps/.git/logs/refs/remotes
+ home/novaviper/Desktop/KeyCaps/.git/logs/refs/remotes/origin
+ home/novaviper/Desktop/KeyCaps/.git/logs/refs/remotes/origin/HEAD
+ home/novaviper/Desktop/KeyCaps/.git/logs/refs/heads/master
+ home/novaviper/Desktop/KeyCaps/.git/info/exclude
+ home/novaviper/Desktop/KeyCaps/.git/hooks/applypatch-msg.sample
+ home/novaviper/Desktop/KeyCaps/.git/hooks/commit-msg.sample
+ home/novaviper/Desktop/KeyCaps/.git/hooks/fsmonitor-watchman.sample
+ home/novaviper/Desktop/KeyCaps/.git/hooks/post-update.sample
+ home/novaviper/Desktop/KeyCaps/.git/hooks/pre-applypatch.sample
+ home/novaviper/Desktop/KeyCaps/.git/hooks/pre-commit.sample
+ home/novaviper/Desktop/KeyCaps/.git/hooks/pre-merge-commit.sample
+ home/novaviper/Desktop/KeyCaps/.git/hooks/pre-push.sample
+ home/novaviper/Desktop/KeyCaps/.git/hooks/pre-rebase.sample
+ home/novaviper/Desktop/KeyCaps/.git/hooks/pre-receive.sample
+ home/novaviper/Desktop/KeyCaps/.git/hooks/prepare-commit-msg.sample
+ home/novaviper/Desktop/KeyCaps/.git/hooks/push-to-checkout.sample
+ home/novaviper/Desktop/KeyCaps/.git/hooks/update.sample
- fm:*

And when I run extract with print log changes and keep it on the old w mode, I get this in the logs:

2024-06-24 14:00:11,123 - vorta.keyring.kwallet - DEBUG - Retrieved password for repo ssh://knoxpi/srv/dev-disk-by-uuid-3a8e28d0-a221-4cf8-a136-c83f764e5bc3/Backupper/Computers
2024-06-24 14:00:11,208 - root - CRITICAL - Uncaught exception, file a report at https://github.com/borgbase/vorta/issues/new/choose
Traceback (most recent call last):
  File "/nix/store/zvzznzkyxxrhigmmv7xa4ml71mnz4dlj-vorta-0.9.1/lib/python3.11/site-packages/vorta/views/archive_tab.py", line 780, in receive
    params = BorgExtractJob.prepare(self.profile(), archive.name, model, extraction_folder[0])
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/nix/store/zvzznzkyxxrhigmmv7xa4ml71mnz4dlj-vorta-0.9.1/lib/python3.11/site-packages/vorta/borg/extract.py", line 62, in prepare
    print(pattern_file.read())
          ^^^^^^^^^^^^^^^^^^^
  File "/nix/store/6b1fqdwb3g56j5pazv8zkx9qd0mv3wiz-python3-3.11.9/lib/python3.11/tempfile.py", line 500, in func_wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
io.UnsupportedOperation: not readable