gboolean mkp_project_reload (MkpProject *project, GError **error) { GFile *root_file; GFile *make_file; const gchar **makefile; MkpGroup *group; gboolean ok = TRUE; /* Unload current project */ root_file = g_object_ref (project->root_file); mkp_project_unload (project); project->root_file = root_file; DEBUG_PRINT ("reload project %p root file %p", project, project->root_file); /* shortcut hash tables */ project->groups = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); project->files = g_hash_table_new_full (g_file_hash, (GEqualFunc)g_file_equal, g_object_unref, g_object_unref); project->variables = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify)mkp_variable_free); /* Initialize rules data */ mkp_project_init_rules (project); /* Initialize list styles */ project->space_list = anjuta_token_style_new (NULL, " ", "\n", NULL, 0); project->arg_list = anjuta_token_style_new (NULL, ", ", ",\n ", ")", 0); /* Find make file */ for (makefile = valid_makefiles; *makefile != NULL; makefile++) { if (file_type (root_file, *makefile) == G_FILE_TYPE_REGULAR) { make_file = g_file_get_child (root_file, *makefile); break; } } if (make_file == NULL) { g_set_error (error, IANJUTA_PROJECT_ERROR, IANJUTA_PROJECT_ERROR_DOESNT_EXIST, _("Project doesn't exist or invalid path")); return FALSE; } /* Create group */ group = MKP_GROUP(mkp_group_new (root_file)); anjuta_project_node_append (ANJUTA_PROJECT_NODE(project), ANJUTA_PROJECT_NODE(group)); g_hash_table_insert (project->groups, g_file_get_uri (root_file), group); /* Parse make file */ project_load_makefile (project, make_file, group, error); g_object_unref (make_file); monitors_setup (project); return ok; }
gboolean dir_project_reload (DirProject *project, GError **error) { GFile *root_file; GFile *source_file; DirGroup *group; gboolean ok = TRUE; /* Unload current project */ root_file = g_object_ref (project->root_file); dir_project_unload (project); project->root_file = root_file; DEBUG_PRINT ("reload project %p root file %p", project, project->root_file); /* shortcut hash tables */ project->groups = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); if (g_file_query_file_type (root_file, G_FILE_QUERY_INFO_NONE, NULL) != G_FILE_TYPE_DIRECTORY) { g_set_error (error, IANJUTA_PROJECT_ERROR, IANJUTA_PROJECT_ERROR_DOESNT_EXIST, _("Project doesn't exist or invalid path")); return FALSE; } group = dir_group_new (root_file); g_hash_table_insert (project->groups, g_file_get_uri (root_file), group); project->root_node = group; /* Load source pattern */ source_file = g_file_new_for_path (SOURCES_FILE); project->sources = dir_push_pattern_list (NULL, g_object_ref (root_file), source_file, FALSE, NULL); g_object_unref (source_file); dir_project_list_directory (project, group, NULL); monitors_setup (project); return ok; }