anjuta r4491 - in trunk: . plugins/symbol-db



Author: mcora
Date: Sat Dec 27 14:11:04 2008
New Revision: 4491
URL: http://svn.gnome.org/viewvc/anjuta?rev=4491&view=rev

Log:
	* plugins/symbol-db/plugin.c
	(on_editor_buffer_symbols_update_timeout), (on_editor_saved):
	* plugins/symbol-db/symbol-db-engine-core.c (on_scan_files_end_1),
	(sdb_engine_init), (symbol_db_engine_set_ctags_path),
	(symbol_db_engine_new), (sdb_engine_add_new_scope_definition),
	(sdb_engine_second_pass_update_scope_1):
	* plugins/symbol-db/symbol-db-engine-core.h:
	fixed #565701 â Anjuta hangs if ctags not installed

	* plugins/symbol-db/symbol-db-engine-queries.c
	(symbol_db_engine_find_symbol_by_name_pattern):
	* plugins/symbol-db/symbol-db-engine-queries.h:
	* plugins/symbol-db/symbol-db-engine-utils.c
	(symbol_db_glist_compare_func):
	* plugins/symbol-db/symbol-db-prefs.c (on_listall_exit):
	* plugins/symbol-db/symbol-db-system.c
	(sdb_system_files_visit_dir):
	* plugins/symbol-db/symbol-db-view.c (symbol_db_view_row_expanded):
	code cleaning. strcmp () -> g_strcmp0 ().
	Improved query symbol_db_engine_find_symbol_by_name_pattern().

Modified:
   trunk/ChangeLog
   trunk/plugins/symbol-db/plugin.c
   trunk/plugins/symbol-db/symbol-db-engine-core.c
   trunk/plugins/symbol-db/symbol-db-engine-core.h
   trunk/plugins/symbol-db/symbol-db-engine-queries.c
   trunk/plugins/symbol-db/symbol-db-engine-queries.h
   trunk/plugins/symbol-db/symbol-db-engine-utils.c
   trunk/plugins/symbol-db/symbol-db-prefs.c
   trunk/plugins/symbol-db/symbol-db-system.c
   trunk/plugins/symbol-db/symbol-db-view.c

Modified: trunk/plugins/symbol-db/plugin.c
==============================================================================
--- trunk/plugins/symbol-db/plugin.c	(original)
+++ trunk/plugins/symbol-db/plugin.c	Sat Dec 27 14:11:04 2008
@@ -183,7 +183,7 @@
 	 */
 	for (i = 0; i < sdb_plugin->buffer_update_files->len; i++)
 	{
-		if (strcmp (g_ptr_array_index (sdb_plugin->buffer_update_files, i),
+		if (g_strcmp0 (g_ptr_array_index (sdb_plugin->buffer_update_files, i),
 					 local_path) == 0)
 		{
 			/* hey we found it */
@@ -292,7 +292,7 @@
 	
 	for (i = 0; i < sdb_plugin->buffer_update_files->len; i++)
 	{
-		if (strcmp (g_ptr_array_index (sdb_plugin->buffer_update_files, i),
+		if (g_strcmp0 (g_ptr_array_index (sdb_plugin->buffer_update_files, i),
 					 local_filename) == 0)
 		{
 			DEBUG_PRINT ("already scanning");

Modified: trunk/plugins/symbol-db/symbol-db-engine-core.c
==============================================================================
--- trunk/plugins/symbol-db/symbol-db-engine-core.c	(original)
+++ trunk/plugins/symbol-db/symbol-db-engine-core.c	Sat Dec 27 14:11:04 2008
@@ -1530,11 +1530,22 @@
 static void
 on_scan_files_end_1 (AnjutaLauncher * launcher, int child_pid,
 				   int exit_status, gulong time_taken_in_seconds,
-				   gpointer data)
+				   gpointer user_data)
 {
-	DEBUG_PRINT ("%s", "***** ctags ended *****");
-}
+	SymbolDBEngine *dbe = (SymbolDBEngine *) user_data;
+	SymbolDBEnginePriv *priv;
+
+	g_return_if_fail (user_data != NULL);
+	
+	priv = dbe->priv;	
+	
+	DEBUG_PRINT ("***** ctags ended *****");
+	
+	if (priv->shutting_down == TRUE)
+		return;
 
+	priv->ctags_path = NULL;
+}
 
 static void
 sdb_engine_ctags_launcher_create (SymbolDBEngine * dbe)
@@ -2173,7 +2184,7 @@
 
 	DYN_QUERY_POPULATE_INIT_NODE(sdbe->priv->dyn_query_list,
 								 	DYN_PREP_QUERY_FIND_SYMBOL_NAME_BY_PATTERN,
-									FALSE);
+									TRUE);
 
 	DYN_QUERY_POPULATE_INIT_NODE(sdbe->priv->dyn_query_list,
 									DYN_PREP_QUERY_FIND_SYMBOL_BY_NAME_PATTERN_FILTERED,			
@@ -2495,13 +2506,13 @@
 	return our_type;
 }
 
-void 
+gboolean
 symbol_db_engine_set_ctags_path (SymbolDBEngine * dbe, const gchar * ctags_path)
 {
 	SymbolDBEnginePriv *priv;
 
-	g_return_if_fail (dbe != NULL);
-	g_return_if_fail (ctags_path != NULL);
+	g_return_val_if_fail (dbe != NULL, FALSE);
+	g_return_val_if_fail (ctags_path != NULL, FALSE);
 	
 	priv = dbe->priv;
 	
@@ -2510,13 +2521,13 @@
 	{
 		g_warning ("symbol_db_engine_set_ctags_path (): Wrong path for ctags. Keeping "
 				   "the old value %s", priv->ctags_path);
-		return;
+		return priv->ctags_path != NULL;
 	}	
 	
 	/* have we already got it? */
 	if (priv->ctags_path != NULL && 
-		strcmp (priv->ctags_path, ctags_path) == 0)
-		return;
+		g_strcmp0 (priv->ctags_path, ctags_path) == 0)
+		return TRUE;
 
 	/* free the old value */
 	g_free (priv->ctags_path);
@@ -2536,6 +2547,7 @@
 	
 	/* set the new one */
 	priv->ctags_path = g_strdup (ctags_path);	
+	return TRUE;
 }
 
 SymbolDBEngine *
@@ -2551,7 +2563,10 @@
 	priv->mutex = g_mutex_new ();
 
 	/* set the mandatory ctags_path */
-	symbol_db_engine_set_ctags_path (sdbe, ctags_path);
+	if (!symbol_db_engine_set_ctags_path (sdbe, ctags_path))
+	{
+		return NULL;
+	}
 		
 	return sdbe;
 }
@@ -3723,8 +3738,8 @@
 	scope = tag_entry->name;
 
 	/* filter out 'variable' and 'member' kinds. They define no scope. */
-	if (strcmp (tag_entry->kind, "variable") == 0 ||
-		strcmp (tag_entry->kind, "member") == 0)
+	if (g_strcmp0 (tag_entry->kind, "variable") == 0 ||
+		g_strcmp0 (tag_entry->kind, "member") == 0)
 	{
 		return -1;
 	}
@@ -4033,7 +4048,7 @@
 		/* handle special typedef case. Usually we have something like struct:my_foo.
 		 * splitting we have [0]-> struct [1]-> my_foo
 		 */
-		if (strcmp (token_name, "typedef") == 0)
+		if (g_strcmp0 (token_name, "typedef") == 0)
 		{
 			free_token_name = TRUE;
 			token_name = g_strdup (tmp_str_splitted[0]);

Modified: trunk/plugins/symbol-db/symbol-db-engine-core.h
==============================================================================
--- trunk/plugins/symbol-db/symbol-db-engine-core.h	(original)
+++ trunk/plugins/symbol-db/symbol-db-engine-core.h	Sat Dec 27 14:11:04 2008
@@ -79,7 +79,7 @@
 /**
  * Set a new path for ctags executable.
  */ 
-void 
+gboolean
 symbol_db_engine_set_ctags_path (SymbolDBEngine *dbe,
 								  const gchar * ctags_path);
 

Modified: trunk/plugins/symbol-db/symbol-db-engine-queries.c
==============================================================================
--- trunk/plugins/symbol-db/symbol-db-engine-queries.c	(original)
+++ trunk/plugins/symbol-db/symbol-db-engine-queries.c	Sat Dec 27 14:11:04 2008
@@ -1705,11 +1705,9 @@
 												priv->project_directory);	
 }
 
-/**
- * Use this function to find symbols names by patterns like '%foo_func%'
- * that will return a family of my_foo_func_1, your_foo_func_2 etc
- * @pattern must not be NULL.
- */
+#define DYN_FIND_SYMBOL_NAME_BY_PATTERN_EXTRA_PAR_EXACT_MATCH_YES			0x010000
+#define DYN_FIND_SYMBOL_NAME_BY_PATTERN_EXTRA_PAR_EXACT_MATCH_NO			0x020000
+
 SymbolDBEngineIterator *
 symbol_db_engine_find_symbol_by_name_pattern (SymbolDBEngine *dbe, 
 									const gchar *pattern, SymExtraInfo sym_info)
@@ -1722,8 +1720,9 @@
 	GdaHolder *param;
 	const DynChildQueryNode *dyn_node;
 	GValue *ret_value;
-	gboolean ret_bool;
-	
+	gboolean ret_bool;	
+	const gchar *match_str;
+	gint other_parameters;
 	
 	g_return_val_if_fail (dbe != NULL, NULL);
 	priv = dbe->priv;
@@ -1733,8 +1732,24 @@
 		g_mutex_lock (priv->mutex);
 	}
 
+	other_parameters = 0;
+	
+	/* check for match */
+	if (g_strrstr (pattern, "%") == NULL)
+	{
+		other_parameters |= 
+			DYN_FIND_SYMBOL_NAME_BY_PATTERN_EXTRA_PAR_EXACT_MATCH_YES;
+		match_str = " = ## /* name:'pattern' type:gchararray */";
+	}
+	else
+	{
+		other_parameters |= 
+			DYN_FIND_SYMBOL_NAME_BY_PATTERN_EXTRA_PAR_EXACT_MATCH_NO;
+		match_str = " LIKE ## /* name:'pattern' type:gchararray */";
+	}
+	
 	if ((dyn_node = sdb_engine_get_dyn_query_node_by_id (dbe, 
-		DYN_PREP_QUERY_FIND_SYMBOL_NAME_BY_PATTERN, sym_info, 0)) == NULL)
+		DYN_PREP_QUERY_FIND_SYMBOL_NAME_BY_PATTERN, sym_info, other_parameters)) == NULL)
 	{
 		/* info_data contains the stuff after SELECT and befor FROM */
 		info_data = g_string_new ("");
@@ -1751,12 +1766,11 @@
 			"symbol.name AS name, symbol.file_position AS file_position, "
 			"symbol.is_file_scope AS is_file_scope, symbol.signature AS signature "
 			"%s FROM symbol "
-			"%s WHERE symbol.name LIKE ## /* name:'pattern' type:gchararray */", 
-									 info_data->str, join_data->str);
+			"%s WHERE symbol.name %s", info_data->str, join_data->str, match_str);
 		
 		dyn_node = sdb_engine_insert_dyn_query_node_by_id (dbe, 
 						DYN_PREP_QUERY_FIND_SYMBOL_NAME_BY_PATTERN,
-						sym_info, 0,
+						sym_info, other_parameters,
 						query_str);
 		
 		g_free (query_str);

Modified: trunk/plugins/symbol-db/symbol-db-engine-queries.h
==============================================================================
--- trunk/plugins/symbol-db/symbol-db-engine-queries.h	(original)
+++ trunk/plugins/symbol-db/symbol-db-engine-queries.h	Sat Dec 27 14:11:04 2008
@@ -40,8 +40,8 @@
 /**
  * Use this function to find symbols names by patterns like '%foo_func%'
  * that will return a family of my_foo_func_1, your_foo_func_2 etc
- * @name must not be NULL.
- * @name must include the optional '%' character to have a wider match, e.g. "foo_func%"
+ * @param pattern must not be NULL.
+ * It must include the optional '%' character to have a wider match, e.g. "foo_func%"
  */
 SymbolDBEngineIterator *
 symbol_db_engine_find_symbol_by_name_pattern (SymbolDBEngine *dbe, 

Modified: trunk/plugins/symbol-db/symbol-db-engine-utils.c
==============================================================================
--- trunk/plugins/symbol-db/symbol-db-engine-utils.c	(original)
+++ trunk/plugins/symbol-db/symbol-db-engine-utils.c	Sat Dec 27 14:11:04 2008
@@ -52,7 +52,7 @@
 gint 
 symbol_db_glist_compare_func (gconstpointer a, gconstpointer b)
 {
-	return strcmp ((const gchar*)a, (const gchar*)b);
+	return g_strcmp0 ((const gchar*)a, (const gchar*)b);
 }
 
 gint

Modified: trunk/plugins/symbol-db/symbol-db-prefs.c
==============================================================================
--- trunk/plugins/symbol-db/symbol-db-prefs.c	(original)
+++ trunk/plugins/symbol-db/symbol-db-prefs.c	Sat Dec 27 14:11:04 2008
@@ -125,12 +125,6 @@
 	DEBUG_PRINT ("%s", "on_gconf_notify_prefs ()");
 }
 
-static gint 
-pkg_list_compare (gconstpointer a, gconstpointer b)
-{
-	return strcmp ((const gchar*)a, (const gchar*)b);
-}
-
 static void
 on_listall_output (AnjutaLauncher * launcher,
 					AnjutaLauncherOutputType output_type,
@@ -213,7 +207,7 @@
 		return;
 	}
 
-	priv->pkg_list = g_list_sort (priv->pkg_list, pkg_list_compare);
+	priv->pkg_list = g_list_sort (priv->pkg_list, symbol_db_glist_compare_func);
 	item = priv->pkg_list;
 	
 	while (item != NULL)

Modified: trunk/plugins/symbol-db/symbol-db-system.c
==============================================================================
--- trunk/plugins/symbol-db/symbol-db-system.c	(original)
+++ trunk/plugins/symbol-db/symbol-db-system.c	Sat Dec 27 14:11:04 2008
@@ -348,8 +348,8 @@
 			
 			if (info->type == GNOME_VFS_FILE_TYPE_DIRECTORY) 
 			{				
-				if (strcmp (info->name, ".") == 0 ||
-					strcmp (info->name, "..") == 0)
+				if (g_strcmp0 (info->name, ".") == 0 ||
+					g_strcmp0 (info->name, "..") == 0)
 					continue;
 
 				gchar *tmp = g_strdup_printf ("%s/%s", uri, info->name);

Modified: trunk/plugins/symbol-db/symbol-db-view.c
==============================================================================
--- trunk/plugins/symbol-db/symbol-db-view.c	(original)
+++ trunk/plugins/symbol-db/symbol-db-view.c	Sat Dec 27 14:11:04 2008
@@ -1233,7 +1233,7 @@
 		iter_node = SYMBOL_DB_ENGINE_ITERATOR_NODE (iterator);
 		symbol_kind = symbol_db_engine_iterator_node_get_symbol_extra_string (
 							iter_node, SYMINFO_KIND);
-		if (strcmp (symbol_kind, "namespace") == 0)
+		if (g_strcmp0 (symbol_kind, "namespace") == 0)
 		{
 			sdb_view_namespace_row_expanded (dbv, dbe, expanded_iter, 
 											 expanded_symbol_id);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]