2016-02-16 Carlos Garnacho Release 1.7.3 libtracker-miner: Fix invalid return value warning 2016-02-15 Carlos Garnacho libtracker-miner: Add envvar toggle to force directory updated checks The bugs covered by the last patches might leave leftovers in the DB if tracker-miner-fs updated a directory after it changed between runs, but wouldn't delete contents that were removed from the filesystem. Add this toggle envvar to point people to a solution, if you've seen errors like "UNIQUE constraint failed: nie:DataObject.nie:url" in journald, you're affected by these bugs, and should run tracker-miner-fs once with TRACKER_MINER_FORCE_CHECK_UPDATED set in the environment. Running just once will be enough, enabling this always will incur in startup performance penalties. libtracker-miner: Simplify deleted contents querying in TrackerFileNotifier Now that we perform per-directory crawling+querying, we can just check whether the currently crawled dir was updated, and remove all filtering features from sparql_contents_query_start(). We actually were interpreting the filter incorrectly, because the directories would be added to the updated_dirs array sooner than they would be crawled, so the check for deleted contents was simply forgotten. This simplification fixes such situation. 2016-02-15 Haithem BEN GHORBAL libtracker-data: Fix uninitialized variable usage object_id is not initialized in this branch of code, use the object URI instead. 2016-02-15 Carlos Garnacho libtracker-miner: Detect file type on files coming from store When adding files from the store to the TrackerFileSystem, we must at least detect whether they are folders. Returning "unknown" here meant that TrackerMinerFS wouldn't enable the TRACKER_BULK_MATCH_CHILDREN mask on delete operations for directories, which could leave lingering child nfo:FileDataObjects. This situation could happen if a folder is deleted between runs of tracker-miner-fs, all information we can get comes from the store, as it's no longer there at the time of crawling. libtracker-miner: Use Sparql1.1 in TrackerSparqlBuffer tasks We can use STRSTARTS better than fn:starts-with here. 2016-02-15 Haithem BEN GHORBAL libtracker-miner: Separate currently crawled dir from pending directories The GQueue is passed as a filter to sparql_contents_compose_query(), but it relies on the current file being outside the filter, otherwise it will produce an empty IN() filter. libtracker-miner: Reset of reentry counter is not needed anymore Moreover, an infinite loop may occurs if process-file signal always fails. libtracker-miner: Invalidate files iri recursively in case of file removal Directories must get all children invalidated, because already queued tasks might contain new instances of those same files, in which case they would still find the previous URN. libtracker-miner: Allow to invalidate files iri recursively This will be useful for delete operations. 2016-02-15 Carlos Garnacho libtracker-miner: Proceed into querying if tracker_crawler_start() fails tracker_crawler_start() may return FALSE if the directory doesn't exist or its ::check-directory handlers return FALSE. We must continue in these circumstances into querying the directory as usual, so it's contrasted and eventually deleted by file_notifier_traverse_tree_foreach(). 2016-02-15 Haithem BEN GHORBAL libtracker-miner: Fix some memory leaks of TrackerTask These leaks had huge impact as each TrackerTask had a reference to a GFile, which prevent them to be removed from TrackerFileSystem when calling tracker_file_system_forget_files(). Due to this behavior, adding/removing/re-adding folders resulted in some folders/files not being indexed. libtracker-miner: Add extra reference around file deletion TrackerFileNotifier::file-deleted might have removed the last reference to the given file, make sure it lives a bit longer for the remaining operations to finish. libtracker-miner: Use the interned GFile with tracker_file_system_forget_files() This allow the correponding node to be retrieved from g_object_get_qdata() instead of traversing all the tree, which might imply a performance hit. libtracker-miner: Fix generated Sparql query in sparql_contents_compose_query() If the first element is filtered out it'd append a comma anyway in the query filter. libtracker-miner: Fix "return makes integer from pointer without a cast" warnings libtracker-fts: Fix invalid blob length calculation The blob lenght is defined to be in bytes. Tracker: fix possible dereference of null pointer libtracker-data: remove unnecessary call to tracker_db_manager_get_db_interface() It was done at the end of the function. libtracker-data: Rework ontology_get_fts_properties() All callers require both hashtables, so remove NULL handling for those. Fixes a possible memory leak if fts_properties is NULL. 2016-02-14 Haithem BEN GHORBAL libtracker-miner: Fix variable set but not used warning docs: Fix less-than-zero comparison of an unsigned value libtracker-data: Fix g_warning() missing argument 2016-02-06 RÅ«dolfs Mazurs Update Latvian translation 2016-01-28 Carlos Garnacho libtracker-miner: Do not insert partial/empty sparql on error The check for these errors was done specifically so we could still insert (even if incomplete) data on tracker-extract failures, when we used to communicate with it directly from tracker-miner-fs. Nowadays, tracker-extract is a TrackerDecorator, and tracker-miner-fs should most likely receive only errors here on ENOENT and other errors that affect the file and its info as a whole. In these situations we end up with a task with a completely empty sparql string, which doesn't help much here. libtracker-miner: Pass a builder in UPDATE state to ::remove-file A stateless TrackerSparqlBuilder is not that useful, because there's no API to push the desired state. A TrackerSparqlBuilder created through tracker_sparql_builder_new_update() will allow us to open delete and insert statements, which is what we want here. libtracker-miner: Remove children recursively from queues on directory deleted We use to emit ::file-deleted on topmost directories only when deleting a directory tree. This means we have to remove children recursively too, because we'll otherwise leave stale items that are not direct children of the directory we notified upon. 2016-01-25 Richard Hughes Update the AppData to spec version 0.7+ 2016-01-21 Carlos Garnacho libtracker-common: Use guint64 for free space calculations We need the whole range after the multiplication with st.f_bsize, gsize may overflow here. Also, make the cast to double explicit rather than implicit in get_remaining_space_percentage()