[anjuta/libgit2-glib] git: Don't refresh the index more than once when the HEAD or index changes
- From: James Liggett <jrliggett src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [anjuta/libgit2-glib] git: Don't refresh the index more than once when the HEAD or index changes
- Date: Wed, 7 Aug 2013 06:35:35 +0000 (UTC)
commit 075ac7f4529634b090fe39db4cf36727bfa41f2c
Author: James Liggett <jrliggett cox net>
Date: Tue Aug 6 23:19:29 2013 -0700
git: Don't refresh the index more than once when the HEAD or index changes
plugins/git/git-index-refreshable.c | 34 +++++++++++++++++++++++++++++-----
1 files changed, 29 insertions(+), 5 deletions(-)
---
diff --git a/plugins/git/git-index-refreshable.c b/plugins/git/git-index-refreshable.c
index c8d0924..7a00ad5 100644
--- a/plugins/git/git-index-refreshable.c
+++ b/plugins/git/git-index-refreshable.c
@@ -25,18 +25,26 @@ struct _GitIndexRefreshablePrivate
GFileMonitor *index_monitor;
GFileMonitor *head_monitor;
GitCommand *refresh_command;
+ gboolean index_refreshed;
};
static void
+git_index_refreshable_notify_refreshed (GitIndexRefreshable *self)
+{
+ g_signal_emit_by_name (self, "refreshed", NULL);
+}
+
+static void
on_refresh_command_finished (AnjutaTask *task, GitIndexRefreshable *self)
{
g_clear_object (&self->priv->refresh_command);
- g_signal_emit_by_name (self, "refreshed", NULL);
+ git_index_refreshable_notify_refreshed (self);
+ self->priv->index_refreshed = TRUE;
}
static void
-on_file_monitor_changed (GFileMonitor *monitor, GFile *file, GFile *other_file,
- GFileMonitorEvent event, GitIndexRefreshable *self)
+on_index_monitor_changed (GFileMonitor *monitor, GFile *file, GFile *other_file,
+ GFileMonitorEvent event, GitIndexRefreshable *self)
{
/* Handle created and modified events just to cover all possible cases.
* Sometimes git does some odd things... */
@@ -57,6 +65,22 @@ on_file_monitor_changed (GFileMonitor *monitor, GFile *file, GFile *other_file,
}
}
+static void
+on_head_monitor_changed (GFileMonitor *monitor, GFile *file, GFile *other_file,
+ GFileMonitorEvent event, GitIndexRefreshable *self)
+{
+ if (event == G_FILE_MONITOR_EVENT_CHANGED ||
+ event == G_FILE_MONITOR_EVENT_CREATED)
+ {
+ /* Don't refresh the status again if we've already refreshed due to inedex
+ * changes. */
+ if (!self->priv->index_refreshed)
+ git_index_refreshable_notify_refreshed (self);
+
+ self->priv->index_refreshed = FALSE;
+ }
+}
+
static void
git_index_refreshable_start_monitor (IAnjutaRefreshable *obj, GError **err)
{
@@ -96,11 +120,11 @@ git_index_refreshable_start_monitor (IAnjutaRefreshable *obj, GError **err)
if (self->priv->head_monitor)
{
g_signal_connect (G_OBJECT (self->priv->index_monitor), "changed",
- G_CALLBACK (on_file_monitor_changed),
+ G_CALLBACK (on_index_monitor_changed),
obj);
g_signal_connect (G_OBJECT (self->priv->head_monitor), "changed",
- G_CALLBACK (on_file_monitor_changed),
+ G_CALLBACK (on_head_monitor_changed),
obj);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]