static void on_branch_list_command_data_arrived (AnjutaCommand *command, GtkListStore *push_branch_model) { GList *current_branch; GitBranch *branch; gchar *name; GtkTreeIter iter; current_branch = git_branch_list_command_get_output (GIT_BRANCH_LIST_COMMAND (command)); while (current_branch) { branch = current_branch->data; name = git_branch_get_name (branch); gtk_list_store_append (push_branch_model, &iter); gtk_list_store_set (push_branch_model, &iter, COL_SELECTED, FALSE, COL_NAME, name, -1); g_free (name); current_branch = g_list_next (current_branch); } }
static void on_branch_list_command_data_arrived (AnjutaCommand *command, GitLogPane *self) { GtkListStore *log_branch_combo_model; GList *current_branch; GitBranch *branch; gchar *name; GtkTreeIter iter; log_branch_combo_model = GTK_LIST_STORE (gtk_builder_get_object (self->priv->builder, "log_branch_combo_model")); current_branch = git_branch_list_command_get_output (GIT_BRANCH_LIST_COMMAND (command)); while (current_branch) { branch = current_branch->data; name = git_branch_get_name (branch); gtk_list_store_append (log_branch_combo_model, &iter); if (git_branch_is_active (branch)) { gtk_list_store_set (log_branch_combo_model, &iter, BRANCH_COL_ACTIVE, TRUE, BRANCH_COL_ACTIVE_ICON, GTK_STOCK_APPLY, -1); if (self->priv->active_branch_path != NULL) gtk_tree_path_free (self->priv->active_branch_path); self->priv->active_branch_path = gtk_tree_model_get_path (GTK_TREE_MODEL (log_branch_combo_model), &iter); } else { gtk_list_store_set (log_branch_combo_model, &iter, BRANCH_COL_ACTIVE, FALSE, BRANCH_COL_ACTIVE_ICON, NULL, -1); } gtk_list_store_set (log_branch_combo_model, &iter, BRANCH_COL_NAME, name, -1); g_hash_table_insert (self->priv->branches_table, g_strdup (name), gtk_tree_model_get_path (GTK_TREE_MODEL (log_branch_combo_model), &iter)); g_free (name); current_branch = g_list_next (current_branch); } }
static void on_branch_list_command_data_arrived (AnjutaCommand *command, GitLogPane *self) { GtkListStore *log_branch_combo_model; AnjutaPlugin *plugin; GList *current_branch; GitBranch *branch; gchar *name; GtkTreeIter iter; log_branch_combo_model = GTK_LIST_STORE (gtk_builder_get_object (self->priv->builder, "log_branch_combo_model")); plugin = anjuta_dock_pane_get_plugin (ANJUTA_DOCK_PANE (self)); current_branch = git_branch_list_command_get_output (GIT_BRANCH_LIST_COMMAND (command)); while (current_branch) { branch = current_branch->data; name = git_branch_get_name (branch); gtk_list_store_append (log_branch_combo_model, &iter); if (git_branch_is_active (branch)) { gtk_list_store_set (log_branch_combo_model, &iter, BRANCH_COL_ACTIVE, TRUE, BRANCH_COL_ACTIVE_ICON, GTK_STOCK_APPLY, -1); self->priv->active_branch_iter = iter; } else { gtk_list_store_set (log_branch_combo_model, &iter, BRANCH_COL_ACTIVE, FALSE, BRANCH_COL_ACTIVE_ICON, NULL, -1); } gtk_list_store_set (log_branch_combo_model, &iter, BRANCH_COL_NAME, name, -1); g_hash_table_insert (self->priv->branches_table, g_strdup (name), g_memdup (&iter, sizeof (GtkTreeIter))); g_free (name); current_branch = g_list_next (current_branch); } }
static void git_branch_list_command_handle_output (GitCommand *git_command, const gchar *output) { GitBranchListCommand *self; GMatchInfo *active_match_info; GMatchInfo *regular_match_info; gchar *branch_name; GitBranch *branch; gboolean active; self = GIT_BRANCH_LIST_COMMAND (git_command); active_match_info = NULL; regular_match_info = NULL; branch_name = NULL; branch = NULL; active = FALSE; if (g_regex_match (self->priv->active_branch_regex, output, 0, &active_match_info)) { branch_name = g_match_info_fetch (active_match_info, 1); active = TRUE; } else if (g_regex_match (self->priv->regular_branch_regex, output, 0, ®ular_match_info)) { branch_name = g_match_info_fetch (regular_match_info, 1); } if (branch_name) branch = git_branch_new (branch_name, active); g_free (branch_name); if (active_match_info) g_match_info_free (active_match_info); if (regular_match_info) g_match_info_free (regular_match_info); g_queue_push_head (self->priv->output, branch); anjuta_command_notify_data_arrived (ANJUTA_COMMAND (git_command)); }
static guint git_branch_list_command_run (AnjutaCommand *command) { GitBranchListCommand *self; self = GIT_BRANCH_LIST_COMMAND (command); git_command_add_arg (GIT_COMMAND (command), "branch"); switch (self->priv->type) { case GIT_BRANCH_TYPE_REMOTE: git_command_add_arg (GIT_COMMAND (command), "-r"); break; case GIT_BRANCH_TYPE_ALL: git_command_add_arg (GIT_COMMAND (command), "-a"); break; default: break; } return 0; }
static void git_branch_list_command_finalize (GObject *object) { GitBranchListCommand *self; GList *current_branch; self = GIT_BRANCH_LIST_COMMAND (object); current_branch = self->priv->output->head; g_regex_unref (self->priv->active_branch_regex); g_regex_unref (self->priv->regular_branch_regex); while (current_branch) { g_object_unref (current_branch->data); current_branch = g_list_next (current_branch); } g_queue_free (self->priv->output); g_free (self->priv); G_OBJECT_CLASS (git_branch_list_command_parent_class)->finalize (object); }