Branch: refs/heads/master Author: Colomban Wendling ban@herbesfolles.org Committer: Colomban Wendling ban@herbesfolles.org Date: Tue, 13 Nov 2018 07:38:45 UTC Commit: fb39f67f90376f3334dd78a80ef984cc5373bae0 https://github.com/geany/geany/commit/fb39f67f90376f3334dd78a80ef984cc5373ba...
Log Message: ----------- Merge pull request #1991 from b4n/tm-lookup-includes-cleaup
Process files in the order they appear on the command line when generating tags file, instead of a more or less random order.
Closes #1989.
Modified Paths: -------------- src/tagmanager/tm_workspace.c tests/ctags/Makefile.am tests/ctags/process_order.c.tags tests/ctags/process_order_1.h tests/ctags/process_order_2.h tests/ctags/runner.sh
Modified: src/tagmanager/tm_workspace.c 37 lines changed, 5 insertions(+), 32 deletions(-) =================================================================== @@ -370,34 +370,6 @@ gboolean tm_workspace_load_global_tags(const char *tags_file, TMParserType mode) }
-static guint tm_file_inode_hash(gconstpointer key) -{ - GStatBuf file_stat; - const char *filename = (const char*)key; - - if (g_stat(filename, &file_stat) == 0) - { -#ifdef TM_DEBUG - g_message ("Hash for '%s' is '%d'\n", filename, file_stat.st_ino); -#endif - return g_direct_hash ((gpointer)(intptr_t)file_stat.st_ino); - } - - return 0; -} - - -static void tm_move_entries_to_g_list(gpointer key, gpointer value, gpointer user_data) -{ - GList **pp_list = (GList**)user_data; - - if (user_data == NULL) - return; - - *pp_list = g_list_prepend(*pp_list, g_strdup(value)); -} - - static gboolean write_includes_file(const gchar *outf, GList *includes_files) { FILE *fp = g_fopen(outf, "w"); @@ -470,14 +442,14 @@ static gchar *create_temp_file(const gchar *tpl) static GList *lookup_includes(const gchar **includes, gint includes_count) { GList *includes_files = NULL; - GHashTable *table; + GHashTable *table; /* used for deduping */ gint i; #ifdef HAVE_GLOB_H glob_t globbuf; size_t idx_glob; #endif
- table = g_hash_table_new_full(tm_file_inode_hash, g_direct_equal, NULL, g_free); + table = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, NULL);
#ifdef HAVE_GLOB_H globbuf.gl_offs = 0; @@ -515,6 +487,7 @@ static GList *lookup_includes(const gchar **includes, gint includes_count) { gchar *file_name_copy = g_strdup(globbuf.gl_pathv[idx_glob]);
+ includes_files = g_list_prepend(includes_files, file_name_copy); g_hash_table_insert(table, file_name_copy, file_name_copy); #ifdef TM_DEBUG g_message ("Added ...\n"); @@ -535,15 +508,15 @@ static GList *lookup_includes(const gchar **includes, gint includes_count) { gchar* file_name_copy = g_strdup(includes[i]);
+ includes_files = g_list_prepend(includes_files, file_name_copy); g_hash_table_insert(table, file_name_copy, file_name_copy); } } }
- g_hash_table_foreach(table, tm_move_entries_to_g_list, &includes_files); g_hash_table_destroy(table);
- return includes_files; + return g_list_reverse(includes_files); }
static gchar *pre_process_file(const gchar *cmd, const gchar *inf)
Modified: tests/ctags/Makefile.am 10 lines changed, 10 insertions(+), 0 deletions(-) =================================================================== @@ -319,3 +319,13 @@ TAGS_LOG_COMPILER = $(srcdir)/runner.sh
TESTS = $(test_results) EXTRA_DIST = $(test_sources) $(test_results) + +# check processing order of files on the command line +check_processing_order_sources = \ + process_order.c.tags process_order_1.h process_order_2.h +EXTRA_DIST += $(check_processing_order_sources) +.PHONY: check-processing-order +check-processing-order: $(check_processing_order_sources) + srcdir="$(srcdir)" top_builddir="$(top_builddir)" \ + $(srcdir)/runner.sh --result $(check_processing_order_sources:%=$(srcdir)/%) +check-local: check-processing-order
Modified: tests/ctags/process_order.c.tags 7 lines changed, 7 insertions(+), 0 deletions(-) =================================================================== @@ -0,0 +1,7 @@ +# format=tagmanager +I1_E1�4�anon_enum_0�0 +I1_E2�4�anon_enum_0�0 +I2_E1�4�anon_enum_1�0 +I2_E2�4�anon_enum_1�0 +anon_enum_0�2�0 +anon_enum_1�2�0
Modified: tests/ctags/process_order_1.h 4 lines changed, 4 insertions(+), 0 deletions(-) =================================================================== @@ -0,0 +1,4 @@ +enum { + I1_E1, + I1_E2, +};
Modified: tests/ctags/process_order_2.h 4 lines changed, 4 insertions(+), 0 deletions(-) =================================================================== @@ -0,0 +1,4 @@ +enum { + I2_E1, + I2_E2, +};
Modified: tests/ctags/runner.sh 18 lines changed, 15 insertions(+), 3 deletions(-) =================================================================== @@ -17,9 +17,21 @@ mkdir -p "$CONFDIR/filedefs/" || exit 99 cp "${srcdir:-.}"/../../data/filetype_extensions.conf "$CONFDIR" || exit 99 cp "${srcdir:-.}"/../../data/filedefs/filetypes.* "$CONFDIR/filedefs/" || exit 99
-result="$1" -source="${result%.*}" +if [ "$1" = "--result" ]; then + # --result $result $source... + [ $# -gt 2 ] || exit 99 + shift + result="$1" + shift + source="$1" +else + # result is $1 and source is inferred from result + result="$1" + source="${result%.*}" +fi +shift + tagfile="$TMPDIR/test.${source##*.}.tags"
-"$GEANY" -c "$CONFDIR" -P -g "$tagfile" "$source" || exit 1 +"$GEANY" -c "$CONFDIR" -P -g "$tagfile" "$source" "$@" || exit 1 diff -u "$result" "$tagfile" || exit 2
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).