summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2017-02-18 16:06:02 +0100
committerRico Tzschichholz <ricotz@ubuntu.com>2017-02-18 16:15:11 +0100
commit1a15b1c17aa5656fd2c541e5abfe904029865f41 (patch)
treefea3cbad06a77f1d60c716ab2a0802e5386be691
parent4451e8c90386106ce10c42c56bb693d16d2d16ba (diff)
downloadzeitgeist-1a15b1c17aa5656fd2c541e5abfe904029865f41.tar.gz
Add --vacuum option to daemon
Based on patch by Marco Trevisan (https://launchpad.net/bugs/919801)
-rw-r--r--src/zeitgeist-daemon.vala41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/zeitgeist-daemon.vala b/src/zeitgeist-daemon.vala
index 8d1f7db6..966fdc1b 100644
--- a/src/zeitgeist-daemon.vala
+++ b/src/zeitgeist-daemon.vala
@@ -37,6 +37,7 @@ namespace Zeitgeist
private static bool show_version_info = false;
private static bool show_options = false;
private static bool no_datahub = false;
+ private static bool perform_vacuum = false;
private static bool replace_mode = false;
private static bool quit_daemon = false;
private static string log_level = "";
@@ -56,6 +57,10 @@ namespace Zeitgeist
"Do not start zeitgeist-datahub automatically", null
},
{
+ "vacuum", 0, 0, OptionArg.NONE, out perform_vacuum,
+ "Perform VACUUM on database and exit", null
+ },
+ {
"no-passive-loggers", 0, OptionFlags.HIDDEN, OptionArg.NONE,
out no_datahub, null, null
},
@@ -456,6 +461,38 @@ namespace Zeitgeist
instance.do_quit ();
}
+ static int vacuum ()
+ {
+ Sqlite.Database database;
+
+ if (Utils.using_in_memory_database ())
+ warning ("Using in-memory database, no VACUUM needed");
+
+ unowned string db_path = Utils.get_database_file_path ();
+ debug ("Opening database file at %s", db_path);
+
+ int rc = Sqlite.Database.open_v2 (db_path, out database, Sqlite.OPEN_READWRITE);
+ if (rc != Sqlite.OK)
+ {
+ warning ("Failed to open database \"%s\" (%s)", db_path, database.errmsg ());
+ return rc;
+ }
+
+ stdout.printf ("Performing VACUUM operation... ");
+ stdout.flush ();
+ rc = database.exec ("VACUUM");
+ if (rc != Sqlite.OK)
+ {
+ stdout.printf ("FAIL\n");
+ warning (database.errmsg ());
+ return rc;
+ }
+
+ stdout.printf ("OK\n");
+
+ return 0;
+ }
+
static int main (string[] args)
{
Posix.signal (Posix.SIGHUP, safe_exit);
@@ -489,6 +526,10 @@ namespace Zeitgeist
return 0;
}
+ if (perform_vacuum)
+ {
+ return vacuum ();
+ }
Logging.setup_logging (log_level, log_file);