diff options
author | Philip Van Hoof <philip@codeminded.be> | 2017-01-30 23:55:26 +0100 |
---|---|---|
committer | Philip Van Hoof <philip@codeminded.be> | 2017-01-30 23:55:26 +0100 |
commit | 64c227461348df4125c3931127f057ca83921094 (patch) | |
tree | c9bb42f8e228c02d031c1dd6c583876a68356319 | |
parent | df3670694f7bb944d5a2e48c2e89f90ca68d38ef (diff) | |
download | tracker-domain-ontologies.tar.gz |
Domain-ontologies: allow more flexibility on locations. Example:domain-ontologies
/opt/tracker/share# cat tracker/domain-ontologies/test.rule
[DomainOntology]
DataLocation=%HOME%/.cache/test/data
CacheLocation=%HOME%/.cache/test/cache
OntologyLocation=%SHAREDIR%/tracker/ontologies
Domain=test
DBusPath=/test
OntologyName=test
-rw-r--r-- | src/libtracker-data/libtracker-data.vapi | 4 | ||||
-rw-r--r-- | src/libtracker-data/tracker-data-backup.c | 106 | ||||
-rw-r--r-- | src/libtracker-data/tracker-data-backup.h | 6 | ||||
-rw-r--r-- | src/libtracker-data/tracker-data-manager.c | 113 | ||||
-rw-r--r-- | src/libtracker-data/tracker-data-manager.h | 12 | ||||
-rw-r--r-- | src/libtracker-data/tracker-data-update.c | 5 | ||||
-rw-r--r-- | src/libtracker-data/tracker-db-journal.c | 19 | ||||
-rw-r--r-- | src/libtracker-data/tracker-db-journal.h | 2 | ||||
-rw-r--r-- | src/libtracker-data/tracker-db-manager.c | 126 | ||||
-rw-r--r-- | src/libtracker-data/tracker-db-manager.h | 10 | ||||
-rw-r--r-- | src/tracker-store/tracker-backup.vala | 2 | ||||
-rw-r--r-- | src/tracker-store/tracker-main.vala | 63 | ||||
-rw-r--r-- | src/tracker/tracker-reset.c | 4 | ||||
-rw-r--r-- | tests/libtracker-data/tracker-db-journal.c | 6 |
14 files changed, 297 insertions, 181 deletions
diff --git a/src/libtracker-data/libtracker-data.vapi b/src/libtracker-data/libtracker-data.vapi index 930e1afd1..dd641e5be 100644 --- a/src/libtracker-data/libtracker-data.vapi +++ b/src/libtracker-data/libtracker-data.vapi @@ -224,12 +224,12 @@ namespace Tracker { public delegate void BackupFinished (GLib.Error error); public void backup_save (GLib.File destination, owned BackupFinished callback); - public void backup_restore (GLib.File journal, string? loc, string? domain, string? ontology_name, [CCode (array_length = false)] string[]? test_schema, BusyCallback busy_callback) throws GLib.Error; + public void backup_restore (GLib.File journal, string? cache_location, string? data_location, string? ontology_location, [CCode (array_length = false)] string[]? test_schema, BusyCallback busy_callback) throws GLib.Error; } [CCode (cheader_filename = "libtracker-data/tracker-data-manager.h")] namespace Data.Manager { - public bool init (DBManagerFlags flags, string? loc, string? domain, string? ontology_name, [CCode (array_length = false)] string[]? test_schema, out bool first_time, bool journal_check, bool restoring_backup, uint select_cache_size, uint update_cache_size, BusyCallback? busy_callback, string? busy_status) throws DBInterfaceError, DBJournalError; + public bool init (DBManagerFlags flags, string? cache_location, string? data_location, string? ontology_location, [CCode (array_length = false)] string[]? test_schema, out bool first_time, bool journal_check, bool restoring_backup, uint select_cache_size, uint update_cache_size, BusyCallback? busy_callback, string? busy_status) throws DBInterfaceError, DBJournalError; public void shutdown (); } diff --git a/src/libtracker-data/tracker-data-backup.c b/src/libtracker-data/tracker-data-backup.c index dc4a5b559..5065f1fdd 100644 --- a/src/libtracker-data/tracker-data-backup.c +++ b/src/libtracker-data/tracker-data-backup.c @@ -343,20 +343,28 @@ dir_move_from_temp (const gchar *path) } static void -move_to_temp (void) +move_to_temp (const gchar* cache_location, const gchar* data_location) { gchar *data_dir, *cache_dir; g_message ("Moving all database files to temporary location"); - data_dir = g_build_filename (g_get_user_data_dir (), - "tracker", - "data", - NULL); - - cache_dir = g_build_filename (g_get_user_cache_dir (), - "tracker", - NULL); + if (data_location == NULL) { + data_dir = g_build_filename (g_get_user_data_dir (), + "tracker", + "data", + NULL); + } else { + data_dir = g_strdup (data_location); + } + + if (cache_location == NULL) { + cache_dir = g_build_filename (g_get_user_cache_dir (), + "tracker", + NULL); + } else { + cache_dir = g_strdup(cache_location); + } dir_move_to_temp (data_dir); dir_move_to_temp (cache_dir); @@ -366,22 +374,34 @@ move_to_temp (void) } static void -remove_temp (void) +remove_temp (const gchar* cache_location, const gchar* data_location) { gchar *tmp_data_dir, *tmp_cache_dir; g_message ("Removing all database files from temporary location"); - tmp_data_dir = g_build_filename (g_get_user_data_dir (), - "tracker", - "data", - "tmp", - NULL); + if (data_location == NULL) { + tmp_data_dir = g_build_filename (g_get_user_data_dir (), + "tracker", + "data", + "tmp", + NULL); + } else { + tmp_data_dir = g_build_filename (data_location, + "tmp", + NULL); + } - tmp_cache_dir = g_build_filename (g_get_user_cache_dir (), - "tracker", - "tmp", - NULL); + if (cache_location == NULL) { + tmp_cache_dir = g_build_filename (g_get_user_cache_dir (), + "tracker", + "tmp", + NULL); + } else { + tmp_cache_dir = g_build_filename (cache_location, + "tmp", + NULL); + } dir_remove_files (tmp_data_dir); dir_remove_files (tmp_cache_dir); @@ -394,20 +414,28 @@ remove_temp (void) } static void -restore_from_temp (void) +restore_from_temp (const gchar* cache_location, const gchar* data_location) { gchar *data_dir, *cache_dir; g_message ("Restoring all database files from temporary location"); - data_dir = g_build_filename (g_get_user_data_dir (), - "tracker", - "data", - NULL); + if (data_location == NULL) { + data_dir = g_build_filename (g_get_user_data_dir (), + "tracker", + "data", + NULL); + } else { + data_dir = g_strdup (data_location); + } - cache_dir = g_build_filename (g_get_user_cache_dir (), - "tracker", - NULL); + if (cache_location == NULL) { + cache_dir = g_build_filename (g_get_user_cache_dir (), + "tracker", + NULL); + } else { + cache_dir = g_strdup (cache_location); + } dir_move_from_temp (data_dir); dir_move_from_temp (cache_dir); @@ -555,9 +583,9 @@ tracker_data_backup_save (GFile *destination, void tracker_data_backup_restore (GFile *journal, - const gchar *loc, - const gchar *domain, - const gchar *ontology_name, + const gchar *cache_location, + const gchar *data_location, + const gchar *ontology_location, const gchar **test_schemas, TrackerBusyCallback busy_callback, gpointer busy_user_data, @@ -593,7 +621,7 @@ tracker_data_backup_restore (GFile *journal, tracker_data_manager_shutdown (); - move_to_temp (); + move_to_temp (cache_location, data_location); #ifndef DISABLE_JOURNAL argv = g_new0 (char*, 6); @@ -656,7 +684,7 @@ tracker_data_backup_restore (GFile *journal, &info->error); #endif /* DISABLE_JOURNAL */ - tracker_db_manager_init_locations (loc, domain, ontology_name); + tracker_db_manager_init_locations (cache_location, data_location); /* Re-set the DB version file, so that its mtime changes. The mtime of this * file will change only when the whole DB is recreated (after a hard reset @@ -669,7 +697,7 @@ tracker_data_backup_restore (GFile *journal, tracker_db_manager_set_need_mtime_check (TRUE); #ifndef DISABLE_JOURNAL - tracker_db_journal_init (NULL, FALSE, &n_error); + tracker_db_journal_init (NULL, cache_location, data_location, FALSE, &n_error); if (n_error) { if (!info->error) { @@ -683,9 +711,9 @@ tracker_data_backup_restore (GFile *journal, } if (info->error) { - restore_from_temp (); + restore_from_temp (cache_location, data_location); } else { - remove_temp (); + remove_temp (cache_location, data_location); } tracker_db_journal_shutdown (&n_error); @@ -697,7 +725,7 @@ tracker_data_backup_restore (GFile *journal, } #endif /* DISABLE_JOURNAL */ - tracker_data_manager_init (flags, loc, domain, ontology_name, test_schemas, + tracker_data_manager_init (flags, cache_location, data_location, ontology_location, test_schemas, &is_first, TRUE, TRUE, select_cache_size, update_cache_size, busy_callback, busy_user_data, @@ -707,7 +735,11 @@ tracker_data_backup_restore (GFile *journal, if (internal_error) { restore_from_temp (); - tracker_data_manager_init (flags, test_schemas, &is_first, TRUE, TRUE, + tracker_data_manager_init (flags, + cache_location, + data_location, + ontology_location, + test_schemas, &is_first, TRUE, TRUE, select_cache_size, update_cache_size, busy_callback, busy_user_data, "Restoring backup", &internal_error); diff --git a/src/libtracker-data/tracker-data-backup.h b/src/libtracker-data/tracker-data-backup.h index e3060e6b8..e02bbc054 100644 --- a/src/libtracker-data/tracker-data-backup.h +++ b/src/libtracker-data/tracker-data-backup.h @@ -48,9 +48,9 @@ void tracker_data_backup_save (GFile *destination, gpointer user_data, GDestroyNotify destroy); void tracker_data_backup_restore (GFile *journal, - const gchar *loc, - const gchar *domain, - const gchar *ontology_name, + const gchar *cache_location, + const gchar *data_location, + const gchar *ontology_location, const gchar **test_schema, TrackerBusyCallback busy_callback, gpointer busy_user_data, diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c index 98a62cb96..e204a946b 100644 --- a/src/libtracker-data/tracker-data-manager.c +++ b/src/libtracker-data/tracker-data-manager.c @@ -66,9 +66,9 @@ #define ZLIBBUFSIZ 8192 static gchar *ontologies_dir; -static gchar *ontology_name_stored; -static gchar *loc_stored; -static gchar *domain_stored; +static gchar *ontology_location_stored; +static gchar *cache_location_stored; +static gchar *data_location_stored; static gboolean initialized; static gboolean reloading = FALSE; #ifndef DISABLE_JOURNAL @@ -3540,7 +3540,9 @@ tracker_data_manager_reload (TrackerBusyCallback busy_callback, /* And initialize it again, this actually triggers index recreation. */ status = tracker_data_manager_init (flags, - loc_stored, domain_stored, ontology_name_stored, + cache_location_stored, + data_location_stored, + ontology_location_stored, NULL, &is_first, TRUE, @@ -3676,11 +3678,21 @@ tracker_data_manager_init_fts (TrackerDBInterface *iface, #endif } +const gchar * tracker_data_manager_get_cache_location() +{ + return cache_location_stored; +} + +const gchar * tracker_data_manager_get_data_location () +{ + return data_location_stored; +} + gboolean tracker_data_manager_init (TrackerDBManagerFlags flags, - const gchar *loc, - const gchar *domain, - const gchar *ontology_name, + const gchar *cache_location, + const gchar *data_location, + const gchar *ontology_location, const gchar **test_schemas, gboolean *first_time, gboolean journal_check, @@ -3739,7 +3751,8 @@ tracker_data_manager_init (TrackerDBManagerFlags flags, #endif if (!tracker_db_manager_init (flags, - loc, domain, ontology_name, + cache_location, + data_location, &is_first_time_index, restoring_backup, FALSE, @@ -3809,40 +3822,47 @@ tracker_data_manager_init (TrackerDBManagerFlags flags, env_path = g_getenv ("TRACKER_DB_ONTOLOGIES_DIR"); - g_free (loc_stored); - - if (loc != NULL) - loc_stored = g_strdup(loc); + g_free (cache_location_stored); + if (cache_location != NULL) + cache_location_stored = g_strdup(cache_location); else - loc_stored = NULL; + cache_location_stored = NULL; - g_free (ontology_name_stored); + g_free (ontology_location_stored); + if (ontology_location != NULL) + ontology_location_stored = g_strdup(ontology_location); + else + ontology_location_stored = NULL; - if (ontology_name != NULL) - ontology_name_stored = g_strdup(ontology_name); + g_free (data_location_stored); + if (data_location != NULL) + data_location_stored = g_strdup(data_location); else - ontology_name = NULL; + data_location_stored = NULL; - if (domain == NULL) - domain = "tracker"; - g_free (domain_stored); - domain_stored = g_strdup(domain); if (G_LIKELY (!env_path)) { - if (ontology_name == NULL) { - ontologies_dir = g_build_filename (SHAREDIR, - domain, - "ontologies", - NULL); + if (ontology_location == NULL) { + /* SHAREDIR/tracker/ontologies */ + ontologies_dir = g_build_filename (SHAREDIR, "tracker", + "ontologies", NULL); } else { - ontologies_dir = g_build_filename (SHAREDIR, - domain, - "ontologies", - ontology_name, - NULL); + /* Typically SHAREDIR/tracker/domain-ontologies/domain/ontology-name */ + ontologies_dir = g_strdup (ontology_location); } + + /* TODO: support GResource here */ if (!g_file_test (ontologies_dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) { - g_critical ("%s is not a directory with an ontology", ontologies_dir); + g_set_error (error, TRACKER_DATA_ONTOLOGY_ERROR, + TRACKER_DATA_ONTOLOGY_NOT_FOUND, + "'%s' is not a ontology location", ontologies_dir); + tracker_db_manager_shutdown (); + tracker_ontologies_shutdown (); + if (!reloading) { + tracker_locale_shutdown (); + } + tracker_data_update_shutdown (); + return FALSE; } } else { ontologies_dir = g_strdup (env_path); @@ -3860,8 +3880,8 @@ tracker_data_manager_init (TrackerDBManagerFlags flags, } else { if (internal_error) { if (!g_error_matches (internal_error, - TRACKER_DB_JOURNAL_ERROR, - TRACKER_DB_JOURNAL_ERROR_BEGIN_OF_JOURNAL)) { + TRACKER_DB_JOURNAL_ERROR, + TRACKER_DB_JOURNAL_ERROR_BEGIN_OF_JOURNAL)) { g_propagate_error (error, internal_error); tracker_db_manager_shutdown (); @@ -3893,7 +3913,8 @@ tracker_data_manager_init (TrackerDBManagerFlags flags, if (!read_journal) { /* Truncate journal as it does not even contain a single valid transaction * or is explicitly ignored (journal_check == FALSE, only for test cases) */ - tracker_db_journal_init (NULL, TRUE, &internal_error); + tracker_db_journal_init (NULL, cache_location, data_location, + TRUE, &internal_error); if (internal_error) { g_propagate_error (error, internal_error); @@ -3916,6 +3937,8 @@ tracker_data_manager_init (TrackerDBManagerFlags flags, GError *ontology_error = NULL; gchar *ontology_path; g_debug ("Loading ontology %s", (char *) l->data); + + /* TODO: support GResource here */ ontology_path = g_build_filename (ontologies_dir, l->data, NULL); load_ontology_file_from_path (ontology_path, &max_id, @@ -4027,6 +4050,7 @@ tracker_data_manager_init (TrackerDBManagerFlags flags, /* store ontology in database */ for (l = sorted; l; l = l->next) { + /* TODO: support GResource here */ gchar *ontology_path = g_build_filename (ontologies_dir, l->data, NULL); import_ontology_path (ontology_path, FALSE, !journal_check); g_free (ontology_path); @@ -4072,7 +4096,8 @@ tracker_data_manager_init (TrackerDBManagerFlags flags, if (!read_only) { #ifndef DISABLE_JOURNAL - tracker_db_journal_init (NULL, FALSE, &internal_error); + tracker_db_journal_init (NULL, cache_location, data_location, + FALSE, &internal_error); if (internal_error) { g_propagate_error (error, internal_error); @@ -4142,6 +4167,7 @@ tracker_data_manager_init (TrackerDBManagerFlags flags, for (l = sorted; l; l = l->next) { gchar *ontology_path; + /* TODO: support GResource here */ ontology_path = g_build_filename (ontologies_dir, l->data, NULL); ontos = g_list_append (ontos, ontology_path); } @@ -4301,7 +4327,9 @@ tracker_data_manager_init (TrackerDBManagerFlags flags, tracker_data_manager_shutdown (); return tracker_data_manager_init (flags | TRACKER_DB_MANAGER_DO_NOT_CHECK_ONTOLOGY, - loc, domain, ontology_name, + cache_location, + data_location, + ontology_location, test_schemas, first_time, journal_check, @@ -4392,7 +4420,9 @@ tracker_data_manager_init (TrackerDBManagerFlags flags, tracker_data_manager_shutdown (); return tracker_data_manager_init (flags | TRACKER_DB_MANAGER_DO_NOT_CHECK_ONTOLOGY, - loc, domain, ontology_name, + cache_location, + data_location, + ontology_location, test_schemas, first_time, journal_check, @@ -4500,7 +4530,9 @@ tracker_data_manager_init (TrackerDBManagerFlags flags, tracker_data_manager_shutdown (); return tracker_data_manager_init (flags | TRACKER_DB_MANAGER_DO_NOT_CHECK_ONTOLOGY, - loc, domain, ontology_name, + cache_location, + data_location, + ontology_location, test_schemas, first_time, journal_check, @@ -4619,7 +4651,8 @@ tracker_data_manager_init (TrackerDBManagerFlags flags, in_journal_replay = FALSE; /* open journal for writing */ - tracker_db_journal_init (NULL, FALSE, &internal_error); + tracker_db_journal_init (NULL, cache_location, data_location, + FALSE, &internal_error); if (internal_error) { g_hash_table_unref (uri_id_map); diff --git a/src/libtracker-data/tracker-data-manager.h b/src/libtracker-data/tracker-data-manager.h index 5d0958c15..0dcd21070 100644 --- a/src/libtracker-data/tracker-data-manager.h +++ b/src/libtracker-data/tracker-data-manager.h @@ -41,14 +41,15 @@ G_BEGIN_DECLS #define TRACKER_DATA_ONTOLOGY_ERROR (tracker_data_ontology_error_quark ()) typedef enum { - TRACKER_DATA_UNSUPPORTED_ONTOLOGY_CHANGE + TRACKER_DATA_UNSUPPORTED_ONTOLOGY_CHANGE, + TRACKER_DATA_ONTOLOGY_NOT_FOUND, } TrackerDataOntologyError; GQuark tracker_data_ontology_error_quark (void); gboolean tracker_data_manager_init (TrackerDBManagerFlags flags, - const gchar *loc, - const gchar *domain, - const gchar *ontology_name, + const gchar *ontology_location, + const gchar *cache_location, + const gchar *data_location, const gchar **test_schema, gboolean *first_time, gboolean journal_check, @@ -66,6 +67,9 @@ gboolean tracker_data_manager_reload (TrackerBusyCallback bu const gchar *busy_operation, GError **error); +const gchar * tracker_data_manager_get_cache_location(); +const gchar * tracker_data_manager_get_data_location (); + gboolean tracker_data_manager_init_fts (TrackerDBInterface *interface, gboolean create); diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c index 4ae923e17..886dcdd01 100644 --- a/src/libtracker-data/tracker-data-update.c +++ b/src/libtracker-data/tracker-data-update.c @@ -3837,7 +3837,10 @@ tracker_data_replay_journal (TrackerBusyCallback busy_callback, size = tracker_db_journal_reader_get_size_of_correct (); tracker_db_journal_reader_shutdown (); - tracker_db_journal_init (NULL, FALSE, &n_error); + const gchar *cache_location = tracker_data_manager_get_cache_location(); + const gchar *data_location = tracker_data_manager_get_data_location(); + + tracker_db_journal_init (NULL, cache_location, data_location, FALSE, &n_error); if (n_error) { g_clear_error (&journal_error); /* This is fatal (journal file not writable, etc) */ diff --git a/src/libtracker-data/tracker-db-journal.c b/src/libtracker-data/tracker-db-journal.c index d82f7caee..d7e4fc376 100644 --- a/src/libtracker-data/tracker-db-journal.c +++ b/src/libtracker-data/tracker-db-journal.c @@ -564,6 +564,8 @@ db_journal_writer_init (JournalWriter *jwriter, gboolean tracker_db_journal_init (const gchar *filename, + const gchar *cache_location, + const gchar *data_location, gboolean truncate, GError **error) { @@ -575,12 +577,17 @@ tracker_db_journal_init (const gchar *filename, g_return_val_if_fail (writer.journal == 0, FALSE); if (filename == NULL) { - /* Used mostly for testing */ - filename_use = g_build_filename (g_get_user_data_dir (), - "tracker", - "data", - TRACKER_DB_JOURNAL_FILENAME, - NULL); + if (data_location == NULL) { + filename_use = g_build_filename (g_get_user_data_dir (), + "tracker", + "data", + TRACKER_DB_JOURNAL_FILENAME, + NULL); + } else { + filename_use = g_build_filename (data_location, + TRACKER_DB_JOURNAL_FILENAME, + NULL); + } filename_free = (gchar *) filename_use; } else { filename_use = filename; diff --git a/src/libtracker-data/tracker-db-journal.h b/src/libtracker-data/tracker-db-journal.h index d93efb86c..f016409b6 100644 --- a/src/libtracker-data/tracker-db-journal.h +++ b/src/libtracker-data/tracker-db-journal.h @@ -60,6 +60,8 @@ GQuark tracker_db_journal_error_quark (void); * Writer API */ gboolean tracker_db_journal_init (const gchar *filename, + const gchar *cache_location, + const gchar *data_location, gboolean truncate, GError **error); gboolean tracker_db_journal_shutdown (GError **error); diff --git a/src/libtracker-data/tracker-db-manager.c b/src/libtracker-data/tracker-db-manager.c index a615f2557..7b3f651d7 100644 --- a/src/libtracker-data/tracker-db-manager.c +++ b/src/libtracker-data/tracker-db-manager.c @@ -156,9 +156,8 @@ static gboolean locations_initialized; static gchar *data_dir = NULL; static gchar *user_data_dir = NULL; static gchar *in_use_filename = NULL; -static gchar *in_use_loc = NULL; -static gchar *in_use_domain = NULL; -static gchar *in_use_ontology_name = NULL; +static gchar *in_use_cache_location = NULL; +static gchar *in_use_data_location = NULL; static gpointer db_type_enum_class_pointer; static TrackerDBManagerFlags old_flags = 0; static guint s_cache_size; @@ -659,7 +658,7 @@ tracker_db_manager_locale_changed (GError **error) * to check for locale mismatches for initializing the database. */ if (!locations_initialized) { - tracker_db_manager_init_locations (in_use_loc, in_use_domain, in_use_ontology_name); + tracker_db_manager_init_locations (in_use_cache_location, in_use_data_location); } /* Get current collation locale */ @@ -788,7 +787,7 @@ db_recreate_all (GError **error) } void -tracker_db_manager_init_locations (const char *loc, const gchar *domain, const char *ontology_name) +tracker_db_manager_init_locations (const char *cache_location, const gchar *data_location) { const gchar *dir; guint i; @@ -797,25 +796,25 @@ tracker_db_manager_init_locations (const char *loc, const gchar *domain, const c return; } - if (loc == NULL) { - loc = "tracker"; + if (data_location == NULL) { + user_data_dir = g_build_filename (g_get_user_data_dir (), + "tracker", + "data", + NULL); + + } else { + user_data_dir = g_strdup (data_location); } - user_data_dir = g_build_filename (g_get_user_data_dir (), - loc, - "data", - NULL); /* For DISABLE_JOURNAL case we should use g_get_user_data_dir here. For now * keeping this as-is */ - if (ontology_name == NULL) { + if (cache_location == NULL) { data_dir = g_build_filename (g_get_user_cache_dir (), - loc, + "tracker", NULL); } else { - data_dir = g_build_filename (g_get_user_cache_dir (), - loc, ontology_name, - NULL); + data_dir = g_strdup (cache_location); } for (i = 1; i < G_N_ELEMENTS (dbs); i++) { @@ -860,9 +859,8 @@ perform_recreate (gboolean *first_time, GError **error) static gboolean db_manager_init_unlocked (TrackerDBManagerFlags flags, - const gchar *loc, - const gchar *domain, - const gchar *ontology_name, + const gchar *cache_location, + const gchar *data_location, gboolean *first_time, gboolean restoring_backup, gboolean shared_cache, @@ -911,35 +909,31 @@ db_manager_init_unlocked (TrackerDBManagerFlags flags, old_flags = flags; - g_free (in_use_filename); - g_free (in_use_loc); - g_free (in_use_domain); - g_free (in_use_ontology_name); - - if (loc == NULL) - loc = "tracker"; - in_use_loc = g_strdup (loc); - - if (domain == NULL) - domain = "tracker"; - in_use_domain = g_strdup (domain); + g_free (in_use_cache_location); + if (cache_location == NULL) + in_use_cache_location = NULL; + else + in_use_cache_location = g_strdup (cache_location); - if (ontology_name == NULL) - in_use_ontology_name = NULL; + g_free (in_use_data_location); + if (data_location == NULL) + in_use_data_location = NULL; else - in_use_ontology_name = g_strdup (ontology_name); + in_use_data_location = g_strdup (data_location); + + tracker_db_manager_init_locations (cache_location, data_location); - tracker_db_manager_init_locations (loc, domain, ontology_name); - if (ontology_name == NULL) { + g_free (in_use_filename); + if (data_location == NULL) { + /* ~/.cache/tracker/data/ */ in_use_filename = g_build_filename (g_get_user_data_dir (), - loc, + "tracker", "data", IN_USE_FILENAME, NULL); } else { - in_use_filename = g_build_filename (g_get_user_data_dir (), - loc, ontology_name, - "data", + /* ~/.cache/cache_location/ontology-name/data/ */ + in_use_filename = g_build_filename (data_location, IN_USE_FILENAME, NULL); } @@ -1068,17 +1062,14 @@ db_manager_init_unlocked (TrackerDBManagerFlags flags, g_message ("Loading databases files..."); #ifndef DISABLE_JOURNAL - if (ontology_name == NULL) { + if (data_location == NULL) { journal_filename = g_build_filename (g_get_user_data_dir (), - loc, + "tracker", "data", TRACKER_DB_JOURNAL_FILENAME, NULL); } else { - journal_filename = g_build_filename (g_get_user_data_dir (), - loc, - ontology_name, - "data", + journal_filename = g_build_filename (data_location, TRACKER_DB_JOURNAL_FILENAME, NULL); } @@ -1288,9 +1279,8 @@ db_manager_init_unlocked (TrackerDBManagerFlags flags, gboolean tracker_db_manager_init (TrackerDBManagerFlags flags, - const gchar *loc, - const gchar *domain, - const gchar *ontology_name, + const gchar *cache_location, + const gchar *data_location, gboolean *first_time, gboolean restoring_backup, gboolean shared_cache, @@ -1305,7 +1295,7 @@ tracker_db_manager_init (TrackerDBManagerFlags flags, g_mutex_lock (&init_mutex); - retval = db_manager_init_unlocked (flags, loc, domain, ontology_name, + retval = db_manager_init_unlocked (flags, cache_location, data_location, first_time, restoring_backup, shared_cache, select_cache_size, update_cache_size, @@ -1559,8 +1549,13 @@ tracker_db_manager_has_enough_space (void) inline static gchar * get_first_index_filename (void) { - return g_build_filename (g_get_user_cache_dir (), - "tracker", + if (in_use_cache_location == NULL) { + return g_build_filename (g_get_user_cache_dir (), + "tracker", + FIRST_INDEX_FILENAME, + NULL); + } + return g_build_filename (in_use_cache_location, FIRST_INDEX_FILENAME, NULL); } @@ -1631,8 +1626,13 @@ tracker_db_manager_set_first_index_done (gboolean done) inline static gchar * get_last_crawl_filename (void) { - return g_build_filename (g_get_user_cache_dir (), - "tracker", + if (in_use_cache_location == NULL) { + return g_build_filename (g_get_user_cache_dir (), + "tracker", + LAST_CRAWL_FILENAME, + NULL); + } + return g_build_filename (in_use_cache_location, LAST_CRAWL_FILENAME, NULL); } @@ -1715,8 +1715,13 @@ tracker_db_manager_set_last_crawl_done (gboolean done) inline static gchar * get_need_mtime_check_filename (void) { - return g_build_filename (g_get_user_cache_dir (), - "tracker", + if (in_use_cache_location == NULL) { + return g_build_filename (g_get_user_cache_dir (), + "tracker", + NEED_MTIME_CHECK_FILENAME, + NULL); + } + return g_build_filename (in_use_cache_location, NEED_MTIME_CHECK_FILENAME, NULL); } @@ -1805,8 +1810,13 @@ tracker_db_manager_set_need_mtime_check (gboolean needed) inline static gchar * get_parser_sha1_filename (void) { - return g_build_filename (g_get_user_cache_dir (), - "tracker", + if (in_use_cache_location == NULL) { + return g_build_filename (g_get_user_cache_dir (), + "tracker", + PARSER_SHA1_FILENAME, + NULL); + } + return g_build_filename (in_use_cache_location, PARSER_SHA1_FILENAME, NULL); } diff --git a/src/libtracker-data/tracker-db-manager.h b/src/libtracker-data/tracker-db-manager.h index 1df3e1c50..a992773c5 100644 --- a/src/libtracker-data/tracker-db-manager.h +++ b/src/libtracker-data/tracker-db-manager.h @@ -53,9 +53,8 @@ typedef enum { GType tracker_db_get_type (void) G_GNUC_CONST; gboolean tracker_db_manager_init (TrackerDBManagerFlags flags, - const gchar *loc, - const gchar *domain, - const gchar *ontology_name, + const gchar *cache_location, + const gchar *data_location, gboolean *first_time, gboolean restoring_backup, gboolean shared_cache, @@ -70,9 +69,8 @@ void tracker_db_manager_remove_all (gboolean void tracker_db_manager_optimize (void); const gchar * tracker_db_manager_get_file (TrackerDB db); TrackerDBInterface *tracker_db_manager_get_db_interface (void); -void tracker_db_manager_init_locations (const gchar *loc, - const gchar *domain, - const gchar *ontology_name); +void tracker_db_manager_init_locations (const gchar *cache_location, + const gchar *data_location); gboolean tracker_db_manager_has_enough_space (void); void tracker_db_manager_create_version_file (void); void tracker_db_manager_remove_version_file (void); diff --git a/src/tracker-store/tracker-backup.vala b/src/tracker-store/tracker-backup.vala index ee6a4f819..4c1b2e882 100644 --- a/src/tracker-store/tracker-backup.vala +++ b/src/tracker-store/tracker-backup.vala @@ -84,7 +84,7 @@ public class Tracker.Backup : Object { var notifier = (Status) (Tracker.DBus.get_object (typeof (Status))); var busy_callback = notifier.get_callback (); - // TODO: set loc, domain and ontology_name here from store session + // TODO: set cache_location, data_location and ontology_location here from store session Data.backup_restore (journal, null, null, null, null, busy_callback); request.end (); diff --git a/src/tracker-store/tracker-main.vala b/src/tracker-store/tracker-main.vala index 95fd705d6..96bc03ffa 100644 --- a/src/tracker-store/tracker-main.vala +++ b/src/tracker-store/tracker-main.vala @@ -46,10 +46,12 @@ License which can be viewed at: static bool readonly_mode; static string domain_ontology; static string cache_location; + static string data_location; + static string ontology_location; + static string dbus_path; static string domain; static string ontology_name; - static string dbus_path; - + const OptionEntry entries[] = { /* Daemon options */ { "version", 'V', 0, OptionArg.NONE, ref version, N_("Displays version information"), null }, @@ -59,10 +61,12 @@ License which can be viewed at: { "force-reindex", 'r', 0, OptionArg.NONE, ref force_reindex, N_("Force a re-index of all content"), null }, { "readonly-mode", 'n', 0, OptionArg.NONE, ref readonly_mode, N_("Only allow read based actions on the database"), null }, { "domain-ontology", 'd', 0, OptionArg.STRING, ref domain_ontology, N_("Load a specified domain ontology"), null }, - { "cache-location", 'c', 0, OptionArg.STRING, ref cache_location, N_("Override cache location to be used"), null }, - { "domain", 'm', 0, OptionArg.STRING, ref domain, N_("Override domain to be used"), null }, - { "ontology-name", 'n', 0, OptionArg.STRING, ref ontology_name, N_("Override ontology to be used"), null }, + { "domain", 'a', 0, OptionArg.STRING, ref domain, N_("Override domain to be used"), null }, + { "ontology-name", 'o', 0, OptionArg.STRING, ref ontology_name, N_("Override ontology name to be used"), null }, { "dbus-path", 'p', 0, OptionArg.STRING, ref dbus_path, N_("Override DBus path to be used"), null }, + { "cache-location", 'c', 0, OptionArg.STRING, ref cache_location, N_("Override cache location to be used"), null }, + { "data-location", 'm', 0, OptionArg.STRING, ref data_location, N_("Override data location to be used"), null }, + { "ontology-location", 'n', 0, OptionArg.STRING, ref ontology_location, N_("Override ontology location to be used"), null }, { null } }; @@ -78,13 +82,17 @@ License which can be viewed at: if (domain_ontology != null) message (" Domain ontology........................ %s", domain_ontology); - message (" Cache location......................... %s", - cache_location != null ? cache_location : "tracker"); - message (" Domain ................................ %s", - domain != null ? domain : "org.freedesktop.Tracker1"); - + if (domain != null) + message (" Domain................................. %s", domain); if (ontology_name != null) - message (" Ontology name ......................... %s", ontology_name); + message (" Ontology name.......................... %s", ontology_name); + + if (cache_location != null) + message (" Cache location......................... %s", cache_location); + if (data_location != null) + message (" Data location.......................... %s", data_location); + if (ontology_location != null) + message (" Ontology location...................... %s", ontology_location); } static void do_shutdown () { @@ -230,9 +238,9 @@ License which can be viewed at: keyfile.load_from_file (keyfile_path, GLib.KeyFileFlags.NONE); try { - string? loaded_domain = keyfile.get_string ("DomainOntology", "Domain"); - if (domain == null) - domain = loaded_domain; + string? loaded_data_location = keyfile.get_string ("DomainOntology", "DataLocation"); + if (data_location == null) + data_location = loaded_data_location; } catch (KeyFileError m) {} try { @@ -242,9 +250,9 @@ License which can be viewed at: } catch (KeyFileError m) {} try { - string? loaded_ontology_name = keyfile.get_string ("DomainOntology", "OntologyName"); - if (ontology_name == null) - ontology_name = loaded_ontology_name; + string? loaded_ontology_location = keyfile.get_string ("DomainOntology", "OntologyLocation"); + if (ontology_location == null) + ontology_location = loaded_ontology_location; } catch (KeyFileError m) {} try { @@ -253,6 +261,18 @@ License which can be viewed at: dbus_path = loaded_dbus_path; } catch (KeyFileError m) {} + try { + string? loaded_domain = keyfile.get_string ("DomainOntology", "Domain"); + if (domain == null) + domain = loaded_domain; + } catch (KeyFileError m) {} + + try { + string? loaded_ontology_name = keyfile.get_string ("DomainOntology", "OntologyName"); + if (ontology_name == null) + ontology_name = loaded_ontology_name; + } catch (KeyFileError m) {} + } catch (KeyFileError ke) { critical("Loading " + keyfile_path + " " + ke.message); } catch (FileError fe) { @@ -325,7 +345,14 @@ License which can be viewed at: bool is_first_time_index; try { - Tracker.Data.Manager.init (flags, cache_location, domain, ontology_name, + string final_cache_location = cache_location != null ? cache_location.replace ("%HOME%", Environment.get_home_dir()).replace("%SHAREDIR%", SHAREDIR) : null; + string final_data_location = data_location != null ? data_location.replace ("%HOME%", Environment.get_home_dir()).replace("%SHAREDIR%", SHAREDIR) : null; + string final_ontology_location = ontology_location != null ? ontology_location.replace ("%HOME%", Environment.get_home_dir()).replace("%SHAREDIR%", SHAREDIR) : null; + + Tracker.Data.Manager.init (flags, + final_cache_location, + final_data_location, + final_ontology_location, null, out is_first_time_index, true, diff --git a/src/tracker/tracker-reset.c b/src/tracker/tracker-reset.c index 0f248caaf..e32a05b9f 100644 --- a/src/tracker/tracker-reset.c +++ b/src/tracker/tracker-reset.c @@ -293,7 +293,7 @@ reset_run (void) /* Clean up (select_cache_size and update_cache_size don't matter here) */ if (!tracker_db_manager_init (TRACKER_DB_MANAGER_REMOVE_ALL, - NULL, NULL, NULL, /* locl, domain and ontology-name */ + NULL, NULL, /* cache_location, data_location */ NULL, FALSE, FALSE, @@ -310,7 +310,7 @@ reset_run (void) return EXIT_FAILURE; } #ifndef DISABLE_JOURNAL - tracker_db_journal_init (NULL, FALSE, NULL); + tracker_db_journal_init (NULL, NULL, NULL, FALSE, NULL); #endif /* DISABLE_JOURNAL */ tracker_db_manager_remove_all (hard_reset); diff --git a/tests/libtracker-data/tracker-db-journal.c b/tests/libtracker-data/tracker-db-journal.c index bea18132c..a0e56f0e0 100644 --- a/tests/libtracker-data/tracker-db-journal.c +++ b/tests/libtracker-data/tracker-db-journal.c @@ -33,7 +33,7 @@ test_init_and_shutdown (void) /* check double init/shutdown */ tracker_db_journal_set_rotating (FALSE, G_MAXSIZE, NULL); - result = tracker_db_journal_init (NULL, FALSE, &error); + result = tracker_db_journal_init (NULL, NULL, NULL, FALSE, &error); g_assert_no_error (error); g_assert (result == TRUE); @@ -42,7 +42,7 @@ test_init_and_shutdown (void) g_assert (result == TRUE); tracker_db_journal_set_rotating (FALSE, G_MAXSIZE, NULL); - result = tracker_db_journal_init (NULL, FALSE, &error); + result = tracker_db_journal_init (NULL, NULL, NULL, FALSE, &error); g_assert_no_error (error); g_assert (result == TRUE); @@ -64,7 +64,7 @@ test_write_functions (void) g_unlink (path); tracker_db_journal_set_rotating (FALSE, G_MAXSIZE, NULL); - tracker_db_journal_init (path, FALSE, &error); + tracker_db_journal_init (path, NULL, NULL, FALSE, &error); g_assert_no_error (error); filename = tracker_db_journal_get_filename (); |