vorta icon indicating copy to clipboard operation
vorta copied to clipboard

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

Open NovaViper opened this issue 1 year ago • 7 comments

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

  • [X] I tried to reproduce the issue.
  • [X] I was able to reproduce the issue.

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

NovaViper avatar Jun 22 '24 16:06 NovaViper

Maybe something you entered in the exclusion settings?

m3nu avatar Jun 22 '24 22:06 m3nu

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!

NovaViper avatar Jun 22 '24 22:06 NovaViper

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?

m3nu avatar Jun 23 '24 07:06 m3nu

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())

shivansh02 avatar Jun 24 '24 05:06 shivansh02

@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

NovaViper avatar Jun 24 '24 19:06 NovaViper

🤔 Now it's odd because while every other folder works, my Documents folder oddly causes the error again (it does have some git repos and symlinks in it so maybe that could be the issue?). Will debug what exactly is causing it to fail

NovaViper avatar Jul 13 '24 14:07 NovaViper

AH I found the trouble, I have a file that SOMEHOW has newlines in its name! It appears like this in Dolphin image image And ends up creating a bunch of new lines in vorta's patterns file which is what causes it to become confused and fail with that error

+ home/novaviper/Documents/School/LinuxMaterial/Chap2_Using_Linux/2.10 Links

.pdf

I haven't an absolute clue HOW that happened when I saved the file but it happened. 🤷🏾‍♀️ Excluding that file from the extract gui made it work again! There probably should be some kind of sanity check in Vorta (or maybe even in borg itself) that checks for crazy filesnames to avoid it breaking like it did in this case.

NovaViper avatar Jul 13 '24 17:07 NovaViper