diff -Nru deja-dup-37.1/data/org.gnome.DejaDup.Monitor.desktop.in deja-dup-38.0/data/org.gnome.DejaDup.Monitor.desktop.in --- deja-dup-37.1/data/org.gnome.DejaDup.Monitor.desktop.in 2018-01-02 22:42:18.000000000 +0000 +++ deja-dup-38.0/data/org.gnome.DejaDup.Monitor.desktop.in 2018-04-10 00:59:37.000000000 +0000 @@ -6,10 +6,7 @@ Icon=org.gnome.DejaDup -# Try to limit memory -- we have reports of runaway deja-dup-monitor processes -# but I can't reproduce it. So until we fix whatever is happening there, try -# this. LP: #1302416 -Exec=sh -c "ulimit -v 1000000; exec @pkglibexecdir@/deja-dup-monitor" +Exec=@pkglibexecdir@/deja-dup-monitor X-GNOME-Autostart-Delay=120 X-GNOME-AutoRestart=true diff -Nru deja-dup-37.1/debian/changelog deja-dup-38.0/debian/changelog --- deja-dup-37.1/debian/changelog 2018-03-16 23:31:21.000000000 +0000 +++ deja-dup-38.0/debian/changelog 2018-05-08 22:39:38.000000000 +0000 @@ -1,8 +1,11 @@ -deja-dup (37.1-2fakesync1) bionic-proposed; urgency=medium +deja-dup (38.0-1) unstable; urgency=medium - * Fake sync due to mismatching orig tarball. + * New upstream release + * Drop all patches: Applied in new release + * Bump Standards-Version to 4.1.4 + * Release to unstable - -- Jeremy Bicha Fri, 16 Mar 2018 19:31:21 -0400 + -- Jeremy Bicha Tue, 08 May 2018 18:39:38 -0400 deja-dup (37.1-2) experimental; urgency=medium diff -Nru deja-dup-37.1/debian/control deja-dup-38.0/debian/control --- deja-dup-37.1/debian/control 2018-03-16 23:31:21.000000000 +0000 +++ deja-dup-38.0/debian/control 2018-05-08 22:39:38.000000000 +0000 @@ -5,9 +5,8 @@ Source: deja-dup Section: utils Priority: optional -Maintainer: Ubuntu Developers -XSBC-Original-Maintainer: Debian GNOME Maintainers -Uploaders: Jeremy Bicha , Laurent Bigonville , Michael Biebl +Maintainer: Debian GNOME Maintainers +Uploaders: Jeremy Bicha , Laurent Bigonville Build-Depends: appstream-util, dbus, debhelper (>= 11), @@ -27,7 +26,7 @@ pkg-config, valac (>= 0.36), yelp-tools -Standards-Version: 4.1.1 +Standards-Version: 4.1.4 Vcs-Browser: https://salsa.debian.org/gnome-team/deja-dup Vcs-Git: https://salsa.debian.org/gnome-team/deja-dup.git Homepage: https://launchpad.net/deja-dup diff -Nru deja-dup-37.1/debian/control.in deja-dup-38.0/debian/control.in --- deja-dup-37.1/debian/control.in 2018-03-16 23:31:21.000000000 +0000 +++ deja-dup-38.0/debian/control.in 2018-05-08 22:39:38.000000000 +0000 @@ -1,8 +1,7 @@ Source: deja-dup Section: utils Priority: optional -Maintainer: Ubuntu Developers -XSBC-Original-Maintainer: Debian GNOME Maintainers +Maintainer: Debian GNOME Maintainers Uploaders: @GNOME_TEAM@ Build-Depends: appstream-util, dbus, @@ -23,7 +22,7 @@ pkg-config, valac (>= 0.36), yelp-tools -Standards-Version: 4.1.1 +Standards-Version: 4.1.4 Vcs-Browser: https://salsa.debian.org/gnome-team/deja-dup Vcs-Git: https://salsa.debian.org/gnome-team/deja-dup.git Homepage: https://launchpad.net/deja-dup diff -Nru deja-dup-37.1/debian/patches/0001-Exclude-snap-cache-dirs.patch deja-dup-38.0/debian/patches/0001-Exclude-snap-cache-dirs.patch --- deja-dup-37.1/debian/patches/0001-Exclude-snap-cache-dirs.patch 2018-03-16 18:31:28.000000000 +0000 +++ deja-dup-38.0/debian/patches/0001-Exclude-snap-cache-dirs.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,148 +0,0 @@ -From: Michael Terry -Date: Tue, 23 Jan 2018 21:40:46 -0500 -Subject: Exclude snap cache dirs - ---- - deja-dup/help/C/prefs.page | 1 + - libdeja/OperationBackup.vala | 43 ++++++++++++++----------------- - libdeja/ToolPlugin.vala | 1 + - libdeja/tests/runner.vala | 4 ++- - libdeja/tools/duplicity/DuplicityJob.vala | 6 +++++ - 5 files changed, 30 insertions(+), 25 deletions(-) - -diff --git a/deja-dup/help/C/prefs.page b/deja-dup/help/C/prefs.page -index ae6eb36..810b56e 100644 ---- a/deja-dup/help/C/prefs.page -+++ b/deja-dup/help/C/prefs.page -@@ -34,6 +34,7 @@ -

~/.steam/root (which by default also ignores ~/.local/share/Steam)

-

~/.thumbnails

-

~/.xsession-errors

-+

~/snap/*/*/.cache

-

/proc

-

/run

-

/sys

-diff --git a/libdeja/OperationBackup.vala b/libdeja/OperationBackup.vala -index 0a95c2a..44e121a 100644 ---- a/libdeja/OperationBackup.vala -+++ b/libdeja/OperationBackup.vala -@@ -59,10 +59,8 @@ public class OperationBackup : Operation - var exclude_list = settings.get_file_list(EXCLUDE_LIST_KEY); - - // Exclude directories no one wants to backup -- var always_excluded = get_always_excluded_dirs(); -- foreach (string dir in always_excluded) -- job.excludes.prepend(File.new_for_path(dir)); -- -+ add_always_excluded_dirs(ref job.excludes, ref job.exclude_regexps); -+ - foreach (File s in exclude_list) - job.excludes.prepend(s); - foreach (File s in include_list) -@@ -84,17 +82,15 @@ public class OperationBackup : Operation - return null; - } - -- List get_always_excluded_dirs() -+ void add_always_excluded_dirs(ref List files, ref List regexps) - { -- List rv = new List(); -- - // User doesn't care about cache - string dir = Environment.get_user_cache_dir(); - if (dir != null) { -- rv.append(dir); -+ files.prepend(File.new_for_path(dir)); - // We also add our special cache dir because if the user still especially - // includes the cache dir, we still won't backup our own metadata. -- rv.append(Path.build_filename(dir, Config.PACKAGE)); -+ files.prepend(File.new_for_path(Path.build_filename(dir, Config.PACKAGE))); - } - - // Likewise, user doesn't care about cache-like directories in $HOME. -@@ -104,27 +100,26 @@ public class OperationBackup : Operation - // When changing this list, remember to update the help documentation too. - dir = Environment.get_home_dir(); - if (dir != null) { -- rv.append(Path.build_filename(dir, ".adobe/Flash_Player/AssetCache")); -- rv.append(Path.build_filename(dir, ".ccache")); -- rv.append(Path.build_filename(dir, ".gvfs")); -- rv.append(Path.build_filename(dir, ".Private")); // encrypted copies of stuff in $HOME -- rv.append(Path.build_filename(dir, ".recent-applications.xbel")); -- rv.append(Path.build_filename(dir, ".recently-used.xbel")); -- rv.append(Path.build_filename(dir, ".steam/root")); -- rv.append(Path.build_filename(dir, ".thumbnails")); -- rv.append(Path.build_filename(dir, ".xsession-errors")); -+ files.prepend(File.new_for_path(Path.build_filename(dir, ".adobe/Flash_Player/AssetCache"))); -+ files.prepend(File.new_for_path(Path.build_filename(dir, ".ccache"))); -+ files.prepend(File.new_for_path(Path.build_filename(dir, ".gvfs"))); -+ files.prepend(File.new_for_path(Path.build_filename(dir, ".Private"))); // encrypted copies of stuff in $HOME -+ files.prepend(File.new_for_path(Path.build_filename(dir, ".recent-applications.xbel"))); -+ files.prepend(File.new_for_path(Path.build_filename(dir, ".recently-used.xbel"))); -+ files.prepend(File.new_for_path(Path.build_filename(dir, ".steam/root"))); -+ files.prepend(File.new_for_path(Path.build_filename(dir, ".thumbnails"))); -+ files.prepend(File.new_for_path(Path.build_filename(dir, ".xsession-errors"))); -+ regexps.prepend(Path.build_filename(dir, "snap/*/*/.cache")); - } - - // Skip all of our temporary directories - foreach (var tempdir in DejaDup.get_tempdirs()) -- rv.append(tempdir); -+ files.prepend(File.new_for_path(tempdir)); - - // Skip transient directories -- rv.append("/proc"); -- rv.append("/run"); -- rv.append("/sys"); -- -- return rv; -+ files.prepend(File.new_for_path("/proc")); -+ files.prepend(File.new_for_path("/run")); -+ files.prepend(File.new_for_path("/sys")); - } - - void fill_metadir() throws Error -diff --git a/libdeja/ToolPlugin.vala b/libdeja/ToolPlugin.vala -index a65355f..ae800c3 100644 ---- a/libdeja/ToolPlugin.vala -+++ b/libdeja/ToolPlugin.vala -@@ -65,6 +65,7 @@ public abstract class ToolJob : Object - - public List includes; // BACKUP - public List excludes; // BACKUP -+ public List exclude_regexps; // BACKUP - - protected List _restore_files; - public List restore_files { // RESTORE -diff --git a/libdeja/tests/runner.vala b/libdeja/tests/runner.vala -index a5eceb5..cedb157 100644 ---- a/libdeja/tests/runner.vala -+++ b/libdeja/tests/runner.vala -@@ -191,7 +191,9 @@ string default_args(BackupRunner br, Mode mode = Mode.NONE, bool encrypted = fal - args += "collection-status "; - - if (mode == Mode.STATUS || mode == Mode.NONE || mode == Mode.DRY || mode == Mode.BACKUP) { -- args += "'--exclude=%s' '--include=%s/deja-dup/metadata' ".printf(backupdir, cachedir); -+ args += "'--exclude=%s' ".printf(backupdir); -+ args += "'--exclude=%s/snap/*/*/.cache' ".printf(Environment.get_home_dir()); -+ args += "'--include=%s/deja-dup/metadata' ".printf(cachedir); - - string[] excludes1 = {"~/Downloads", "~/.local/share/Trash", "~/.xsession-errors", "~/.thumbnails", "~/.steam/root", "~/.Private", "~/.gvfs", "~/.ccache", "~/.adobe/Flash_Player/AssetCache"}; - foreach (string ex in excludes1) { -diff --git a/libdeja/tools/duplicity/DuplicityJob.vala b/libdeja/tools/duplicity/DuplicityJob.vala -index 3b8addb..8110053 100644 ---- a/libdeja/tools/duplicity/DuplicityJob.vala -+++ b/libdeja/tools/duplicity/DuplicityJob.vala -@@ -310,6 +310,12 @@ internal class DuplicityJob : DejaDup.ToolJob - includes.sort((CompareFunc)cmp_prefix); - excludes.sort((CompareFunc)cmp_prefix); - -+ // TODO: Figure out a more reasonable way to order regexps and files. -+ // For now, just stick them in the front. -+ foreach (string r in exclude_regexps) { -+ saved_argv.append("--exclude=" + r); -+ } -+ - foreach (File i in includes) { - var excludes2 = excludes.copy(); - foreach (File e in excludes2) { diff -Nru deja-dup-37.1/debian/patches/0002-don-t-use-ulimit.patch deja-dup-38.0/debian/patches/0002-don-t-use-ulimit.patch --- deja-dup-37.1/debian/patches/0002-don-t-use-ulimit.patch 2018-03-16 18:31:28.000000000 +0000 +++ deja-dup-38.0/debian/patches/0002-don-t-use-ulimit.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ -From: Jeremy Bicha -Date: Fri, 16 Mar 2018 14:08:41 -0400 -Subject: don't use ulimit - -It doesn't work with webkit2gtk 2.20 - -https://launchpad.net/bugs/1751460 ---- - data/org.gnome.DejaDup.Monitor.desktop.in | 5 +---- - 1 file changed, 1 insertion(+), 4 deletions(-) - -diff --git a/data/org.gnome.DejaDup.Monitor.desktop.in b/data/org.gnome.DejaDup.Monitor.desktop.in -index 631455f..c429c42 100644 ---- a/data/org.gnome.DejaDup.Monitor.desktop.in -+++ b/data/org.gnome.DejaDup.Monitor.desktop.in -@@ -6,10 +6,7 @@ Comment=Schedules backups at regular intervals - - Icon=org.gnome.DejaDup - --# Try to limit memory -- we have reports of runaway deja-dup-monitor processes --# but I can't reproduce it. So until we fix whatever is happening there, try --# this. LP: #1302416 --Exec=sh -c "ulimit -v 1000000; exec @pkglibexecdir@/deja-dup-monitor" -+Exec=@pkglibexecdir@/deja-dup-monitor - - X-GNOME-Autostart-Delay=120 - X-GNOME-AutoRestart=true diff -Nru deja-dup-37.1/debian/patches/series deja-dup-38.0/debian/patches/series --- deja-dup-37.1/debian/patches/series 2018-03-16 18:31:28.000000000 +0000 +++ deja-dup-38.0/debian/patches/series 2018-05-08 22:39:38.000000000 +0000 @@ -1,2 +0,0 @@ -0001-Exclude-snap-cache-dirs.patch -0002-don-t-use-ulimit.patch diff -Nru deja-dup-37.1/debian/watch deja-dup-38.0/debian/watch --- deja-dup-37.1/debian/watch 2018-03-16 18:31:28.000000000 +0000 +++ deja-dup-38.0/debian/watch 2018-05-08 22:39:38.000000000 +0000 @@ -1,4 +1,4 @@ version=4 opts=pgpsigurlmangle=s/$/.asc/ \ https://launchpad.net/@PACKAGE@/+download \ - .*/@PACKAGE@-([\d\.]+[0-9].[\d]+)\.tar\.xz + .*/@PACKAGE@-([\d\.]+[02468].[\d]+)\.tar\.xz diff -Nru deja-dup-37.1/deja-dup/AssistantOperation.vala deja-dup-38.0/deja-dup/AssistantOperation.vala --- deja-dup-37.1/deja-dup/AssistantOperation.vala 2018-01-02 22:42:18.000000000 +0000 +++ deja-dup-38.0/deja-dup/AssistantOperation.vala 2018-04-10 00:59:37.000000000 +0000 @@ -89,6 +89,9 @@ int saved_x; int saved_y; + const int LOGS_LINES_TO_KEEP = 10000; + bool adjustment_at_end = true; + construct { add_custom_config_pages(); @@ -168,7 +171,6 @@ string log_line = prefix + " " + file.get_parse_name(); - bool adjustment_at_end = false; Gtk.Adjustment adjust = progress_scroll.get_vadjustment(); if (adjust.value >= adjust.upper - adjust.page_size || adjust.page_size == 0 || // means never been set, means not realized @@ -178,19 +180,18 @@ var buffer = progress_text.buffer; if (buffer.get_char_count() > 0) log_line = "\n" + log_line; - if (buffer.get_line_count() >= 100 && adjustment_at_end) { - // If we're watching text scroll by, save memory by only keeping last 100 lines - Gtk.TextIter start, line100; - buffer.get_start_iter(out start); - buffer.get_iter_at_line(out line100, buffer.get_line_count() - 100); - buffer.delete(ref start, ref line100); - } - + Gtk.TextIter iter; buffer.get_end_iter(out iter); buffer.insert_text(ref iter, log_line, (int)log_line.length); - if (adjustment_at_end) - adjust.value = adjust.upper; + + if (buffer.get_line_count() >= LOGS_LINES_TO_KEEP && adjustment_at_end) { + // If we're watching text scroll by, don't keep everything in memory + Gtk.TextIter start, cutoff; + buffer.get_start_iter(out start); + buffer.get_iter_at_line(out cutoff, buffer.get_line_count() - LOGS_LINES_TO_KEEP); + buffer.delete(ref start, ref cutoff); + } } protected void set_secondary_label(string text) @@ -203,6 +204,25 @@ secondary_label.hide(); } + void update_autoscroll() + { + if (adjustment_at_end) + { + Gtk.Adjustment adjust = progress_scroll.get_vadjustment(); + adjust.value = adjust.upper - adjust.page_size; + } + } + + bool stop_autoscroll() + { + Gtk.Adjustment adjust = progress_scroll.get_vadjustment(); + + if (adjust.value < adjust.upper - adjust.page_size) + adjustment_at_end = false; + + return false; + } + protected virtual Gtk.Widget make_progress_page() { var page = new Gtk.Grid(); @@ -238,7 +258,11 @@ progress_text = new Gtk.TextView(); progress_text.editable = false; + progress_text.size_allocate.connect(update_autoscroll); progress_scroll = new Gtk.ScrolledWindow(null, null); + progress_scroll.scroll_event.connect(stop_autoscroll); + ((Gtk.Range)progress_scroll.get_vscrollbar()).change_value.connect(stop_autoscroll); + progress_scroll.expand = true; progress_scroll.child = progress_text; progress_scroll.hscrollbar_policy = Gtk.PolicyType.AUTOMATIC; progress_scroll.vscrollbar_policy = Gtk.PolicyType.AUTOMATIC; diff -Nru deja-dup-37.1/deja-dup/help/C/prefs.page deja-dup-38.0/deja-dup/help/C/prefs.page --- deja-dup-37.1/deja-dup/help/C/prefs.page 2018-01-02 22:42:18.000000000 +0000 +++ deja-dup-38.0/deja-dup/help/C/prefs.page 2018-04-10 00:59:37.000000000 +0000 @@ -34,6 +34,7 @@

~/.steam/root (which by default also ignores ~/.local/share/Steam)

~/.thumbnails

~/.xsession-errors

+

~/snap/*/*/.cache

/proc

/run

/sys

diff -Nru deja-dup-37.1/deja-dup/main.vala deja-dup-38.0/deja-dup/main.vala --- deja-dup-37.1/deja-dup/main.vala 2018-01-02 22:42:18.000000000 +0000 +++ deja-dup-38.0/deja-dup/main.vala 2018-04-10 00:59:37.000000000 +0000 @@ -41,10 +41,12 @@ const ActionEntry[] actions = { {"backup", backup}, + {"backup-auto", backup_auto}, {"restore", restore}, {"op-show", op_show}, {"prompt-ok", prompt_ok}, {"prompt-cancel", prompt_cancel}, + {"delay", delay, "s"}, {"help", help}, {"about", about}, {"quit", quit}, @@ -126,12 +128,9 @@ backup_full(options.contains("auto")); } else if (options.contains("delay")) { - var note = new Notification(_("Scheduled backup delayed")); - string body = null; - options.lookup("delay", "s", ref body); - note.set_body(body); - note.set_icon(new ThemedIcon("org.gnome.DejaDup")); - send_notification("backup-status", note); + string reason = null; + options.lookup("delay", "s", ref reason); + send_delay_notification(reason); } else if (options.contains("prompt")) { var toplevel = prompt(this); @@ -215,6 +214,21 @@ Gdk.notify_startup_complete(); } + public void delay(GLib.SimpleAction action, GLib.Variant? parameter) + { + string reason = null; + parameter.get("s", ref reason); + send_delay_notification(reason); + } + + void send_delay_notification(string reason) + { + var note = new Notification(_("Scheduled backup delayed")); + note.set_body(reason); + note.set_icon(new ThemedIcon("org.gnome.DejaDup")); + send_notification("backup-status", note); + } + void help() { unowned List list = get_windows(); @@ -241,6 +255,13 @@ } } + public void backup_auto() + { + if (op == null) { + backup_full(true); + } + } + void backup_full(bool automatic) { assign_op(new AssistantBackup(automatic)); diff -Nru deja-dup-37.1/deja-dup/monitor/monitor.vala deja-dup-38.0/deja-dup/monitor/monitor.vala --- deja-dup-37.1/deja-dup/monitor/monitor.vala 2018-01-02 22:42:18.000000000 +0000 +++ deja-dup-38.0/deja-dup/monitor/monitor.vala 2018-04-10 00:59:37.000000000 +0000 @@ -105,21 +105,27 @@ return date.difference(new DateTime.now_local()); } -static void notify_delay(string reason) +static async void call_remote(string action, string[] args = {}) { + var vargs = new VariantBuilder(new VariantType("av")); + foreach (string arg in args) { + vargs.add("v", new Variant.string(arg)); + } + var platform_args = new VariantBuilder(new VariantType("a{sv}")); try { - var command = DejaDup.nice_prefix("deja-dup --delay"); - string[] argv = command.split(" "); - argv += reason; - - Process.spawn_async(null, argv, null, - SpawnFlags.SEARCH_PATH | - SpawnFlags.STDOUT_TO_DEV_NULL | - SpawnFlags.STDERR_TO_DEV_NULL, - null, null); + var deja = yield new DBusProxy.for_bus(BusType.SESSION, + DBusProxyFlags.NONE, + null, + "org.gnome.DejaDup", + "/org/gnome/DejaDup", + "org.freedesktop.Application", + null); + yield deja.call("ActivateAction", + new Variant("(sava{sv})", action, vargs, platform_args), + DBusCallFlags.NONE, -1, null); } catch (Error e) { - warning("%s\n", e.message); + warning("%s", e.message); } } @@ -150,29 +156,18 @@ if (!ready) { debug("Postponing the backup."); if (!was_reactive && when != null) - notify_delay(when); + yield call_remote("delay", {when}); return; } - try { - debug("Running automatic backup."); - var command = DejaDup.nice_prefix("deja-dup --backup --auto"); - string[] argv = command.split(" "); - - if (DejaDup.in_testing_mode()) { - // fake successful and schedule next run - DejaDup.update_last_run_timestamp(DejaDup.TimestampType.BACKUP); - } - else { - Process.spawn_async(null, argv, null, - SpawnFlags.SEARCH_PATH | - SpawnFlags.STDOUT_TO_DEV_NULL | - SpawnFlags.STDERR_TO_DEV_NULL, - null, null); - } + debug("Running automatic backup."); + + if (DejaDup.in_testing_mode()) { + // fake successful and schedule next run + DejaDup.update_last_run_timestamp(DejaDup.TimestampType.BACKUP); } - catch (Error e) { - warning("%s\n", e.message); + else { + yield call_remote("backup-auto"); } } diff -Nru deja-dup-37.1/libdeja/OperationBackup.vala deja-dup-38.0/libdeja/OperationBackup.vala --- deja-dup-37.1/libdeja/OperationBackup.vala 2018-01-02 22:42:18.000000000 +0000 +++ deja-dup-38.0/libdeja/OperationBackup.vala 2018-04-10 00:59:37.000000000 +0000 @@ -59,10 +59,8 @@ var exclude_list = settings.get_file_list(EXCLUDE_LIST_KEY); // Exclude directories no one wants to backup - var always_excluded = get_always_excluded_dirs(); - foreach (string dir in always_excluded) - job.excludes.prepend(File.new_for_path(dir)); - + add_always_excluded_dirs(ref job.excludes, ref job.exclude_regexps); + foreach (File s in exclude_list) job.excludes.prepend(s); foreach (File s in include_list) @@ -84,17 +82,15 @@ return null; } - List get_always_excluded_dirs() + void add_always_excluded_dirs(ref List files, ref List regexps) { - List rv = new List(); - // User doesn't care about cache string dir = Environment.get_user_cache_dir(); if (dir != null) { - rv.append(dir); + files.prepend(File.new_for_path(dir)); // We also add our special cache dir because if the user still especially // includes the cache dir, we still won't backup our own metadata. - rv.append(Path.build_filename(dir, Config.PACKAGE)); + files.prepend(File.new_for_path(Path.build_filename(dir, Config.PACKAGE))); } // Likewise, user doesn't care about cache-like directories in $HOME. @@ -104,27 +100,26 @@ // When changing this list, remember to update the help documentation too. dir = Environment.get_home_dir(); if (dir != null) { - rv.append(Path.build_filename(dir, ".adobe/Flash_Player/AssetCache")); - rv.append(Path.build_filename(dir, ".ccache")); - rv.append(Path.build_filename(dir, ".gvfs")); - rv.append(Path.build_filename(dir, ".Private")); // encrypted copies of stuff in $HOME - rv.append(Path.build_filename(dir, ".recent-applications.xbel")); - rv.append(Path.build_filename(dir, ".recently-used.xbel")); - rv.append(Path.build_filename(dir, ".steam/root")); - rv.append(Path.build_filename(dir, ".thumbnails")); - rv.append(Path.build_filename(dir, ".xsession-errors")); + files.prepend(File.new_for_path(Path.build_filename(dir, ".adobe/Flash_Player/AssetCache"))); + files.prepend(File.new_for_path(Path.build_filename(dir, ".ccache"))); + files.prepend(File.new_for_path(Path.build_filename(dir, ".gvfs"))); + files.prepend(File.new_for_path(Path.build_filename(dir, ".Private"))); // encrypted copies of stuff in $HOME + files.prepend(File.new_for_path(Path.build_filename(dir, ".recent-applications.xbel"))); + files.prepend(File.new_for_path(Path.build_filename(dir, ".recently-used.xbel"))); + files.prepend(File.new_for_path(Path.build_filename(dir, ".steam/root"))); + files.prepend(File.new_for_path(Path.build_filename(dir, ".thumbnails"))); + files.prepend(File.new_for_path(Path.build_filename(dir, ".xsession-errors"))); + regexps.prepend(Path.build_filename(dir, "snap/*/*/.cache")); } // Skip all of our temporary directories foreach (var tempdir in DejaDup.get_tempdirs()) - rv.append(tempdir); + files.prepend(File.new_for_path(tempdir)); // Skip transient directories - rv.append("/proc"); - rv.append("/run"); - rv.append("/sys"); - - return rv; + files.prepend(File.new_for_path("/proc")); + files.prepend(File.new_for_path("/run")); + files.prepend(File.new_for_path("/sys")); } void fill_metadir() throws Error diff -Nru deja-dup-37.1/libdeja/tests/runner.vala deja-dup-38.0/libdeja/tests/runner.vala --- deja-dup-37.1/libdeja/tests/runner.vala 2018-01-02 22:42:18.000000000 +0000 +++ deja-dup-38.0/libdeja/tests/runner.vala 2018-04-10 00:59:37.000000000 +0000 @@ -191,7 +191,9 @@ args += "collection-status "; if (mode == Mode.STATUS || mode == Mode.NONE || mode == Mode.DRY || mode == Mode.BACKUP) { - args += "'--exclude=%s' '--include=%s/deja-dup/metadata' ".printf(backupdir, cachedir); + args += "'--exclude=%s' ".printf(backupdir); + args += "'--exclude=%s/snap/*/*/.cache' ".printf(Environment.get_home_dir()); + args += "'--include=%s/deja-dup/metadata' ".printf(cachedir); string[] excludes1 = {"~/Downloads", "~/.local/share/Trash", "~/.xsession-errors", "~/.thumbnails", "~/.steam/root", "~/.Private", "~/.gvfs", "~/.ccache", "~/.adobe/Flash_Player/AssetCache"}; foreach (string ex in excludes1) { diff -Nru deja-dup-37.1/libdeja/ToolPlugin.vala deja-dup-38.0/libdeja/ToolPlugin.vala --- deja-dup-37.1/libdeja/ToolPlugin.vala 2018-01-02 22:42:18.000000000 +0000 +++ deja-dup-38.0/libdeja/ToolPlugin.vala 2018-04-10 00:59:37.000000000 +0000 @@ -65,6 +65,7 @@ public List includes; // BACKUP public List excludes; // BACKUP + public List exclude_regexps; // BACKUP protected List _restore_files; public List restore_files { // RESTORE diff -Nru deja-dup-37.1/libdeja/tools/duplicity/DuplicityJob.vala deja-dup-38.0/libdeja/tools/duplicity/DuplicityJob.vala --- deja-dup-37.1/libdeja/tools/duplicity/DuplicityJob.vala 2018-01-02 22:42:18.000000000 +0000 +++ deja-dup-38.0/libdeja/tools/duplicity/DuplicityJob.vala 2018-04-10 00:59:37.000000000 +0000 @@ -310,6 +310,12 @@ includes.sort((CompareFunc)cmp_prefix); excludes.sort((CompareFunc)cmp_prefix); + // TODO: Figure out a more reasonable way to order regexps and files. + // For now, just stick them in the front. + foreach (string r in exclude_regexps) { + saved_argv.append("--exclude=" + r); + } + foreach (File i in includes) { var excludes2 = excludes.copy(); foreach (File e in excludes2) { diff -Nru deja-dup-37.1/meson.build deja-dup-38.0/meson.build --- deja-dup-37.1/meson.build 2018-01-02 22:42:18.000000000 +0000 +++ deja-dup-38.0/meson.build 2018-04-10 00:59:37.000000000 +0000 @@ -17,7 +17,7 @@ # along with Déjà Dup. If not, see . project('deja-dup', ['vala', 'c'], - version: '37.0', + version: '37.1', license: 'GPLv3+', default_options: [ 'warning_level=1', diff -Nru deja-dup-37.1/NEWS deja-dup-38.0/NEWS --- deja-dup-37.1/NEWS 2018-01-02 22:42:18.000000000 +0000 +++ deja-dup-38.0/NEWS 2018-04-10 00:59:37.000000000 +0000 @@ -1,3 +1,9 @@ +Déjà Dup 37.1 +------------- + • Fix crash when restoring missing files + • Clarify the error message when trying to use an smb server without a share name + • Update translations + Déjà Dup 37.0 ------------- • Add new Google Drive backend and make it the new default backend