summaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)AuthorFilesLines
2020-10-14DB: Vacuum database after schema migrationsFlorian Pritz1-0/+6
Migrations may remove data and it doesn't hurt to vacuum afterwards to reduce the file size. Signed-off-by: Florian Pritz <bluewind@xinu.at>
2020-10-14cpanfile: Require DBD::SQLite 1.60 or newerFlorian Pritz2-1/+3
This fixes an error in migration 2 where `alter table .. rename column` is used. This syntax is only supported in sqlite 3.25.0 or newer and DBD::SQLite 1.60 is the first production version to include this version of sqlite. Signed-off-by: Florian Pritz <bluewind@xinu.at>
2020-09-27DB: Add assertion to check for missing files in databasedevFlorian Pritz3-0/+8
This is related to 62f5bc3ce90fedb396d103caae68dc2f211f1b16 and would trigger if the optimization prevents a path from being added to the database. Signed-off-by: Florian Pritz <bluewind@xinu.at>
2020-09-27Checking in changes prior to tagging of version 3.4.3.Florian Pritz3-2/+4
Changelog diff is: diff --git a/Changes b/Changes index 1bb3489..3013873 100644 --- a/Changes +++ b/Changes @@ -1,6 +1,8 @@ Revision history for Perl extension App-BorgRestore {{$NEXT}} + +3.4.3 2020-09-27T13:53:54Z - Add database migration for change from 3.4.2 3.4.2 2020-09-27T13:50:47Z
2020-09-27Add missing database migrationFlorian Pritz2-0/+8
Should have been part of f0dd3fd59afac321317d3b52a36d179b4ea504f7. Oops. Signed-off-by: Florian Pritz <bluewind@xinu.at>
2020-09-27Checking in changes prior to tagging of version 3.4.2.Florian Pritz3-2/+4
Changelog diff is: diff --git a/Changes b/Changes index 6a1d238..a40a774 100644 --- a/Changes +++ b/Changes @@ -1,6 +1,8 @@ Revision history for Perl extension App-BorgRestore {{$NEXT}} + +3.4.2 2020-09-27T13:50:47Z - Fix missing cache data for top level files that exist with and without an extension. For example a '/lib' symlink and '/lib64'. '/lib' would be missing from the database.
2020-09-27DB: Fix incorrect subpath handling for path that is a superstring of theFlorian Pritz3-6/+20
previous path for top level paths Same issue as 62f5bc3ce90fedb396d103caae68dc2f211f1b16 except that this time it is the for top level paths (`/lib` and `/lib64`) which are handled outside the loop. Signed-off-by: Florian Pritz <bluewind@xinu.at>
2020-09-27Checking in changes prior to tagging of version 3.4.1.Florian Pritz3-5/+7
Changelog diff is: diff --git a/Changes b/Changes index f77e9f9..cd1a4c3 100644 --- a/Changes +++ b/Changes @@ -1,6 +1,8 @@ Revision history for Perl extension App-BorgRestore {{$NEXT}} + +3.4.1 2020-09-27T12:57:01Z - Fix missing cache data for files that exist with and without an extension. For example '/home/*/.ssh/id_rsa' would be missing from the database and only the accompanying `id_rsa.pub` file would be contained
2020-09-27DB: Fix incorrect subpath handling for path that is a superstring of theFlorian Pritz4-6/+56
previous path Files that share a common substring (e.g. `/home/foo/.ssh/id_rsa` and `/home/foo/.ssh/id_rsa.pub`) could incorrectly trigger an optimization that was only supposed to be triggered if the first path is a directory. The first path would then not be added to the database cache even though it should have been. Signed-off-by: Florian Pritz <bluewind@xinu.at>
2019-09-28Checking in changes prior to tagging of version 3.4.0.Florian Pritz3-4/+6
Changelog diff is: diff --git a/Changes b/Changes index eeb4d3b..dd5812e 100644 --- a/Changes +++ b/Changes @@ -1,6 +1,8 @@ Revision history for Perl extension App-BorgRestore {{$NEXT}} + +3.4.0 2019-09-28T13:28:49Z - Remove archive name untaint restrictions (remove untaint_archive_name function)
2019-09-28Import untaint function where usedFlorian Pritz4-16/+16
Better code readability than with the full name. Signed-off-by: Florian Pritz <bluewind@xinu.at>
2019-09-28Helper: Export untaintFlorian Pritz1-0/+3
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2019-09-28Helper: Remove untaint_archive_nameFlorian Pritz6-31/+6
We no longer need a special whitelist for archive names since the database no longer uses them as column keys. We still need to untaint variables that are passed to DBI so we use untaint() for this now. We also move the location of the untaint call closer to its usage with DBI/system() to prevent untainted data from leaking elsewhere. Fixes #4 Signed-off-by: Florian Pritz <bluewind@xinu.at>
2019-09-28DB: Convert timestamp column names to numeric IDsFlorian Pritz1-7/+23
Having the backup archive names in the table columns is not strictly necessary. Replace this with numeric IDs and map them via the `archives` table so that we can eventually remove untaint_archive_name(). Signed-off-by: Florian Pritz <bluewind@xinu.at>
2019-09-28DB: Use get_archive_id instead of _prefix_archive_idFlorian Pritz1-2/+2
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2019-09-28DB: Apply migration is correct orderFlorian Pritz1-1/+1
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2019-09-28DB: Implement version based database schema upgradesFlorian Pritz1-6/+34
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2019-02-07Checking in changes prior to tagging of version 3.3.0.Florian Pritz3-2/+4
Changelog diff is: diff --git a/Changes b/Changes index 807706c..9bb5022 100644 --- a/Changes +++ b/Changes @@ -1,6 +1,8 @@ Revision history for Perl extension App-BorgRestore {{$NEXT}} + +3.3.0 2019-02-07T16:18:41Z - Support borg list's --prefix option via $borg_prefix setting - Properly handle cases where the DB is empty after removal of archive information
2019-02-07Support borg list --prefix option via settingFlorian Pritz4-4/+18
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2019-02-07DB/remove_archive: Properly handle cases where the DB is empty after removalFlorian Pritz3-7/+64
Empty here means that the DB does not contain any backup archive information because all information that is already in the db has to be removed. The old code tries to copy existing data into the new table, but since there are no archives to copy data for, the sql query fails. Also, it would copy all rows and only populate the path column, but if there are no archives that have timestamps, that's actually useless work. This patch ensures that the table is kept empty if there are no archives. Signed-off-by: Florian Pritz <bluewind@xinu.at>
2019-02-07t/handle_added_archives: Document weird testFlorian Pritz1-3/+3
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2019-02-07t/handle_added_archives: Add test for removal of archivesFlorian Pritz1-0/+23
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2018-11-12Enable trace logging in BEGIN block for test suiteFlorian Pritz1-4/+9
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2018-11-01Checking in changes prior to tagging of version 3.2.1.Florian Pritz3-2/+5
Changelog diff is: diff --git a/Changes b/Changes index b9b6218..dae2435 100644 --- a/Changes +++ b/Changes @@ -2,6 +2,9 @@ Revision history for Perl extension App-BorgRestore {{$NEXT}} +3.2.1 2018-11-01T12:54:26Z + - Add missing version requirement to List::Util dependency + 3.2.0 2018-09-19T11:46:35Z - Write data directly to DB instead of preparing it in memory first. The new algorithm should be faster and uses constant memory. If you want the
2018-11-01capnfile: Add minimum List::Util versionFlorian Pritz2-2/+2
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2018-09-19Checking in changes prior to tagging of version 3.2.0.Florian Pritz3-2/+4
Changelog diff is: diff --git a/Changes b/Changes index bd95acb..b9b6218 100644 --- a/Changes +++ b/Changes @@ -1,6 +1,8 @@ Revision history for Perl extension App-BorgRestore {{$NEXT}} + +3.2.0 2018-09-19T11:46:35Z - Write data directly to DB instead of preparing it in memory first. The new algorithm should be faster and uses constant memory. If you want the old one back for any reason look at the '$prepare_data_in_memory' config
2018-09-13Change prepare_data_in_memory default to 0 to enable direct-to-dbFlorian Pritz2-5/+10
Also instantly deprecate the option since it is only a short term fix in case someone notices problems with the new code. Signed-off-by: Florian Pritz <bluewind@xinu.at>
2018-09-13handle_added_archives_with_db.t: Add file that is removed in second backupFlorian Pritz1-0/+6
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2018-09-12Remove duplicate code by calling add_path in save_nodesFlorian Pritz1-17/+1
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2018-09-12Update cache only when going back up the stack instead of all the timeFlorian Pritz1-9/+13
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2018-09-12Only add top level directory when we actually have a top level directoryFlorian Pritz1-2/+4
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2018-09-12Ensure that top level directories are also written to the DBFlorian Pritz1-0/+4
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2018-09-12handle_added_archives_with_db.t: Add 2nd top level directory to testFlorian Pritz1-0/+21
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2018-09-10Remove left over debug log entryFlorian Pritz1-1/+0
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2018-09-09PathTimeTable/DB: Use cache as kind of stack and only write to DB when ↵Florian Pritz1-18/+25
removing an item from the stack Signed-off-by: Florian Pritz <bluewind@xinu.at>
2018-09-09DB: Fix update_path_if_greater not working for existing rowsFlorian Pritz1-1/+1
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2018-09-09Test if adding an archive updates existing rows correctlyFlorian Pritz1-0/+79
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2018-09-09handle_added_archives_with_db.t: Extend to verify that PathTimeTable/DB ↵Florian Pritz1-0/+10
caching doesn't cause problems Signed-off-by: Florian Pritz <bluewind@xinu.at>
2018-09-09PathTimeTable/DB: Use constant to control trace loggingFlorian Pritz1-6/+8
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2018-09-09PathTimeTable/DB: Improve performance by removing usage of regex in hot placesFlorian Pritz1-6/+10
This cuts execution time on my workstation from about 85 seconds for an --update-cache adding one archive to roughly 62 seconds. Measured totally unscientifically by simply running the full application instead of isolating the code, but it makes sense that regexes are slower so I'll take it. Signed-off-by: Florian Pritz <bluewind@xinu.at>
2018-09-09handle_added_archives_with_db.t: Use new_no_defaults instead of newFlorian Pritz1-3/+1
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2018-09-09Update META.jsonFlorian Pritz1-1/+2
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2018-09-09Use strictures instead of strict/warningsFlorian Pritz20-37/+20
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2018-09-09Sort cpanfileFlorian Pritz1-5/+5
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2018-09-09Get settings via hash instead of direct variable accessFlorian Pritz3-24/+26
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2018-09-09Settings: Add constructorsFlorian Pritz2-12/+27
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2018-09-09Settings: Pull config file loading into functionFlorian Pritz1-13/+18
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2018-09-09Settings: Use Function::ParametersFlorian Pritz1-6/+5
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2018-09-09Simplify BorgRestore constructorsFlorian Pritz1-8/+4
Signed-off-by: Florian Pritz <bluewind@xinu.at>
2018-09-09BorgRestore: Move dependencies to dedicated $self->{deps} keyFlorian Pritz1-28/+28
Signed-off-by: Florian Pritz <bluewind@xinu.at>