On Tue, 2008-12-16 at 12:54 +0000, Martyn Russell wrote:

I will attach a new patch as soon as Ivan fixed issues #13 and #15

> #1, Didn't we decide to depend on Raptor? If so, we don't need the 
> AC_DEFINE right?
> 
> +# Check for Raptor
> +PKG_CHECK_MODULES(RAPTOR, [raptor], have_raptor=yes, have_raptor=no)
> +AC_SUBST(RAPTOR_CFLAGS)
> +AC_SUBST(RAPTOR_LIBS)
> +
> +if test x$have_raptor == "xyes"; then
> +  AC_DEFINE(HAVE_RAPTOR, 1, [Raptor RDF parsers])
> +fi

It's not decided yet if raptor should become a mandatory dependency in
TRUNK just yet.


> #2. This definitely looks like a leak to me, since the "break" will 
> leave the while() loop and the volume is freed ONLY in the opposite 
> condition. Or am I missing something here?
> 
> +     while (g_hash_table_iter_next (&iter, &key, &value)) {
> +             LibHalVolume  *volume;
> +             const gchar   *udi;
> +             const gchar   *mp;
> +
> +             udi = key;
> +
> +             volume = libhal_volume_from_udi (priv->context, udi);
> +
> +             if (!volume) {
> +                     g_message ("HAL device with udi:'%s' has no volume, "
> +                                "should we delete?",
> +                                udi);
> +                     continue;
> +             }
> +
> +             mp = libhal_volume_get_mount_point (volume);
> +
> +             if (g_strcmp0 (mp, path) != 0) {
> +                     if (g_strrstr (path, mp)) {
> +                             found = TRUE;
> +
> +                             if (mount_point)
> +                                     *mount_point = g_strdup (mp);
> +
> +                             if (available)
> +                                     *available = libhal_volume_is_mounted 
> (volume);
> +                             break;
> +                     }
> +             }
> +
> +             libhal_volume_free (volume);

Ah yes I see it now. Fixed.

> 
> #3. We are checking the same thing twice here:
> 
>       field = tracker_ontology_get_field_by_name (field_name);
> 
> +     if (!field) {
> +             g_warning ("Field name '%s' has isn't described in the 
> ontology", 
> field_name);
> +             return;
> +     }
> +
> +     field = tracker_ontology_get_field_by_name (field_name);
> +
>       g_return_if_fail (TRACKER_IS_FIELD (field));
>       g_return_if_fail (tracker_field_get_multiple_values (field) == TRUE);


Fixed


> #4. I still don't like the Config and Language being static here. We 
> already initialise the data module with them in 
> tracker_data_manager_init (), why not just call 
> tracker_data_manager_get_config() and 
> tracker_data_manager_get_language() respectively?
> 
> +typedef struct {
> +     TrackerService *service;
> +     guint32 iid_value;
> +     TrackerLanguage *language;
> +     TrackerConfig *config;
> +} ForeachInMetadataInfo;
> +
> +static TrackerConfig   *config = NULL;
> +static TrackerLanguage *language = NULL;
> +

Fixed (first time I hear about those methods, but they are indeed
exactly what I needed for this)


> #5. Shouldn't we be adding the Service type == Folder check here before 
> doing anything recursive?
> 
> +     if (service_id != 0) {
> +             tracker_data_update_delete_service (service, service_id);
> +             tracker_data_update_delete_service_recursively (service, (gchar 
> *) path);
> +             tracker_data_update_delete_all_metadata (service, service_id);
> +     }

Fixed


> #6. Extra spaces here, there are further down in the patch for this file 
> too:
> 
> +             GList *list;
> +
> +             for (list = value; list; list = list->next)
> +                     set_metadata (field, list->data, user_data);
> +
> +     }

Fixed

> #7. Can we remove these preprocessor operatives? and/or the debug 
> statement itself? If not, we can always improve the debugging to 
> actually mean something in the context of all the other logging.
> 
> +#ifdef TURTLE_DEBUG
> +             g_debug ("Q ERROR: %s\n", error->message);
> +#endif /* TURTLE_DEBUG */

Fixed

> #8. Since we decided to depend on Raptor, we can remove the #ifdefs in 
> the tracker-turtle.[ch] I think. There are also a lot of code block 
> blank lines which are not necessary.

This is undecided

> #9. Include order should be system, highest dependency -> lowest 
> dependency. i.e. these should be the opposite way round in the 
> tracker-turtle.h:
> 
> +#include <libtracker-data/tracker-data-metadata.h>
> +#include <stdio.h>
> 
> 
> #10. Coding style, indentation, and again, stmt isn't a good name for a 
> public typedef struct, can we call it something sensible like 
> TrackerTurtleStatement? We shouldn't need the #idefs there too if we 
> depend on Raptor.
> 
> +typedef struct {
> +  gconstpointer subject;
> +  gint subject_type;
> +  gconstpointer predicate;
> +  gint predicate_type;
> +  gconstpointer object;
> +  gint object_type;
> +  gpointer object_literal_datatype;
> +  const guchar *object_literal_language;
> +} stmt;
> +#endif

Renamed to TrackerRaptorStatement

> #11. Can we avoid comments in line like this, it looks ugly, it is 
> better to have it above the function or not at all.
> 
> +void        tracker_turtle_add_metadatas   (TurtleFile          *turtle,
> +                                         GPtrArray /* 
> <TrackerTurtleMetadataItem> */ *metadata_items);

Fixed


> #12. There are some serious coding style issues in 
> tracker-removable-device.c. We could probably also use g_strcmp0() in a 
> lot of places to reduce the code down a bit and make it easier to read. 
> That's really not completely necessary though for this patch to get 
> committed.

All strcmp()s are now g_strcmp0()s.


> #13. Is this a leak, looks like only str is freed, not service_type in 
> the if (!field):
> 
> +             gchar *str = NULL;
> +             gchar *uri;
> +             gchar *service_type;
> +
> +             g_value_init (&transform, G_TYPE_STRING);
> +
> +             tracker_db_result_set_get (result_set, 0, &uri, -1);
> +             tracker_db_result_set_get (result_set, 1, &service_type, -1);
> +             tracker_db_result_set_get (result_set, 2, &metadata_id, -1);
> +             tracker_db_result_set_get (result_set, 3, &str, -1);
> +
> +             field = tracker_ontology_get_field_by_id (metadata_id);
> +             if (!field) {
> +                     g_critical ("Field id %d in database but not in 
> tracker-ontology",
> +                                 metadata_id);
> +                     g_free (str);
> +                     return;
> +             }

Ivan will fix this

> #14. There is no need to cast here in trackerd/tracker-main.c for 
> callback_id:
> 
> 
> +     gulong *callback_id = (gulong *)user_data;
> +     GError *error;
> +     static gint counter = 0;

Fixed


> #15. The || condition should be on the right here, also, this whole code 
> block would be nicer in another function I think - which I commented on 
> in my previous mail.
> 
> +     if (flags & TRACKER_DB_MANAGER_FORCE_REINDEX
> +         || g_file_test (get_ttl_backup_filename, G_FILE_TEST_EXISTS)) {
> 

Ivan will fix this


> Other than that, good work guys. I think we should try to get this 
> commit this week!


-- 
Philip Van Hoof, freelance software developer
home: me at pvanhoof dot be 
gnome: pvanhoof at gnome dot org 
http://pvanhoof.be/blog
http://codeminded.be

_______________________________________________
tracker-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/tracker-list

Reply via email to