[gnome-builder/wip/chergert/vcs-plugins] plugins: start extracting VCS implementations into plugins



commit e56f2708c12ae9bb1ddc570e2bcacfbbcdb5ba2a
Author: Christian Hergert <christian hergert me>
Date:   Sat Aug 22 20:52:11 2015 -0700

    plugins: start extracting VCS implementations into plugins

 configure.ac                                       |    1 +
 libide/Makefile.am                                 |   10 -----
 libide/ide-vcs.c                                   |   37 +++++++++-----------
 libide/ide-vcs.h                                   |    9 ++---
 libide/ide.c                                       |   12 ------
 libide/ide.h                                       |    3 --
 plugins/Makefile.am                                |    1 +
 plugins/fallback/Makefile.am                       |    2 +
 plugins/fallback/fallback.plugin                   |    1 -
 .../fallback}/ide-directory-vcs.c                  |   27 ++++++++------
 .../fallback}/ide-directory-vcs.h                  |    5 +--
 plugins/git/Makefile.am                            |   26 ++++++++++++++
 .../git/git-plugin.c                               |   23 +++++-------
 plugins/git/git.plugin                             |    8 ++++
 .../git/ide-git-buffer-change-monitor.c            |    0
 .../git/ide-git-buffer-change-monitor.h            |    0
 {libide => plugins}/git/ide-git-remote-callbacks.c |    5 +--
 {libide => plugins}/git/ide-git-remote-callbacks.h |    0
 {libide => plugins}/git/ide-git-vcs.c              |   20 ++++++----
 {libide => plugins}/git/ide-git-vcs.h              |    5 +--
 20 files changed, 100 insertions(+), 95 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 9f06494..0764551 100644
--- a/configure.ac
+++ b/configure.ac
@@ -402,6 +402,7 @@ AC_CONFIG_FILES([
        plugins/device-manager/Makefile
        plugins/fallback/Makefile
        plugins/file-search/Makefile
+       plugins/git/Makefile
        plugins/gnome-code-assistance/Makefile
        plugins/html-completion/Makefile
        plugins/jedi/Makefile
diff --git a/libide/Makefile.am b/libide/Makefile.am
index 4a25409..fb0b1f8 100644
--- a/libide/Makefile.am
+++ b/libide/Makefile.am
@@ -7,16 +7,10 @@ pkglibdir = $(libdir)/gnome-builder
 pkglib_LTLIBRARIES = libide-1.0.la
 
 libide_1_0_la_public_sources = \
-       directory/ide-directory-vcs.c \
-       directory/ide-directory-vcs.h \
        doap/ide-doap-person.c \
        doap/ide-doap-person.h \
        doap/ide-doap.c \
        doap/ide-doap.h \
-       git/ide-git-remote-callbacks.c \
-       git/ide-git-remote-callbacks.h \
-       git/ide-git-vcs.c \
-       git/ide-git-vcs.h \
        ide-back-forward-item.c \
        ide-back-forward-item.h \
        ide-back-forward-list.c \
@@ -185,8 +179,6 @@ libide_1_0_la_SOURCES = \
        editorconfig/ide-editorconfig-file-settings.c \
        editorconfig/ide-editorconfig-file-settings.h \
        gconstructor.h \
-       git/ide-git-buffer-change-monitor.c \
-       git/ide-git-buffer-change-monitor.h \
        gjs/ide-gjs-script.cpp \
        gjs/ide-gjs-script.h \
        gsettings/ide-gsettings-file-settings.c \
@@ -255,10 +247,8 @@ libide_1_0_la_includes = \
        -I$(top_srcdir)/contrib/search \
        -I$(top_srcdir)/contrib/xml \
        -I$(srcdir) \
-       -I$(srcdir)/directory \
        -I$(srcdir)/doap \
        -I$(srcdir)/editorconfig \
-       -I$(srcdir)/git \
        -I$(srcdir)/gjs \
        -I$(srcdir)/gsettings \
        -I$(srcdir)/local \
diff --git a/libide/ide-vcs.c b/libide/ide-vcs.c
index 0648c69..f3f7ce3 100644
--- a/libide/ide-vcs.c
+++ b/libide/ide-vcs.c
@@ -20,15 +20,10 @@
 #include "ide-buffer-change-monitor.h"
 #include "ide-vcs.h"
 
-G_DEFINE_ABSTRACT_TYPE (IdeVcs, ide_vcs, IDE_TYPE_OBJECT)
+G_DEFINE_INTERFACE (IdeVcs, ide_vcs, IDE_TYPE_OBJECT)
 
 static void
-ide_vcs_class_init (IdeVcsClass *klass)
-{
-}
-
-static void
-ide_vcs_init (IdeVcs *self)
+ide_vcs_default_init (IdeVcsInterface *iface)
 {
 }
 
@@ -39,8 +34,8 @@ ide_vcs_is_ignored (IdeVcs  *self,
 {
   g_return_val_if_fail (IDE_IS_VCS (self), FALSE);
 
-  if (IDE_VCS_GET_CLASS (self)->is_ignored)
-    return IDE_VCS_GET_CLASS (self)->is_ignored (self, file, error);
+  if (IDE_VCS_GET_IFACE (self)->is_ignored)
+    return IDE_VCS_GET_IFACE (self)->is_ignored (self, file, error);
 
   return FALSE;
 }
@@ -59,8 +54,8 @@ ide_vcs_get_working_directory (IdeVcs *self)
 {
   g_return_val_if_fail (IDE_IS_VCS (self), NULL);
 
-  if (IDE_VCS_GET_CLASS (self)->get_working_directory)
-    return IDE_VCS_GET_CLASS (self)->get_working_directory (self);
+  if (IDE_VCS_GET_IFACE (self)->get_working_directory)
+    return IDE_VCS_GET_IFACE (self)->get_working_directory (self);
 
   return NULL;
 }
@@ -82,8 +77,8 @@ ide_vcs_get_buffer_change_monitor (IdeVcs    *self,
   g_return_val_if_fail (IDE_IS_VCS (self), NULL);
   g_return_val_if_fail (IDE_IS_BUFFER (buffer), NULL);
 
-  if (IDE_VCS_GET_CLASS (self)->get_buffer_change_monitor)
-    ret = IDE_VCS_GET_CLASS (self)->get_buffer_change_monitor (self, buffer);
+  if (IDE_VCS_GET_IFACE (self)->get_buffer_change_monitor)
+    ret = IDE_VCS_GET_IFACE (self)->get_buffer_change_monitor (self, buffer);
 
   g_return_val_if_fail (!ret || IDE_IS_BUFFER_CHANGE_MONITOR (ret), NULL);
 
@@ -97,15 +92,17 @@ ide_vcs_new_async (IdeContext           *context,
                    GAsyncReadyCallback   callback,
                    gpointer              user_data)
 {
-  ide_object_new_async (IDE_VCS_EXTENSION_POINT,
-                        io_priority,
-                        cancellable,
-                        callback,
-                        user_data,
-                        "context", context,
-                        NULL);
+  ide_object_new_for_extension_async (IDE_TYPE_VCS, NULL, NULL,
+                                      io_priority, cancellable, callback, user_data,
+                                      "context", context,
+                                      NULL);
 }
 
+/**
+ * ide_vcs_new_finish:
+ *
+ * Returns: (transfer full): A new #IdeVcs or %NULL and @error is set.
+ */
 IdeVcs *
 ide_vcs_new_finish (GAsyncResult  *result,
                     GError       **error)
diff --git a/libide/ide-vcs.h b/libide/ide-vcs.h
index 48f0181..d37f8bd 100644
--- a/libide/ide-vcs.h
+++ b/libide/ide-vcs.h
@@ -25,14 +25,13 @@
 
 G_BEGIN_DECLS
 
-#define IDE_TYPE_VCS            (ide_vcs_get_type())
-#define IDE_VCS_EXTENSION_POINT "org.gnome.libide.extensions.vcs"
+#define IDE_TYPE_VCS (ide_vcs_get_type())
 
-G_DECLARE_DERIVABLE_TYPE (IdeVcs, ide_vcs, IDE, VCS, IdeObject)
+G_DECLARE_INTERFACE (IdeVcs, ide_vcs, IDE, VCS, IdeObject)
 
-struct _IdeVcsClass
+struct _IdeVcsInterface
 {
-  IdeObjectClass parent;
+  GTypeInterface parent_iface;
 
   GFile                  *(*get_working_directory)     (IdeVcs     *self);
   IdeBufferChangeMonitor *(*get_buffer_change_monitor) (IdeVcs     *self,
diff --git a/libide/ide.c b/libide/ide.c
index 70d5441..041e8cc 100644
--- a/libide/ide.c
+++ b/libide/ide.c
@@ -24,10 +24,8 @@
 #include "gconstructor.h"
 #include "ide.h"
 
-#include "ide-directory-vcs.h"
 #include "ide-editorconfig-file-settings.h"
 #include "ide-file-settings.h"
-#include "ide-git-vcs.h"
 #include "ide-gjs-script.h"
 #include "ide-gsettings-file-settings.h"
 #include "ide-modelines-file-settings.h"
@@ -81,7 +79,6 @@ ide_init_ctor (void)
 
   g_io_extension_point_register (IDE_FILE_SETTINGS_EXTENSION_POINT);
   g_io_extension_point_register (IDE_SCRIPT_EXTENSION_POINT);
-  g_io_extension_point_register (IDE_VCS_EXTENSION_POINT);
 
   g_io_extension_point_implement (IDE_FILE_SETTINGS_EXTENSION_POINT,
                                   IDE_TYPE_MODELINES_FILE_SETTINGS,
@@ -106,15 +103,6 @@ ide_init_ctor (void)
                                   IDE_SCRIPT_EXTENSION_POINT".py",
                                   -100);
 
-  g_io_extension_point_implement (IDE_VCS_EXTENSION_POINT,
-                                  IDE_TYPE_GIT_VCS,
-                                  IDE_VCS_EXTENSION_POINT".git",
-                                  -100);
-  g_io_extension_point_implement (IDE_VCS_EXTENSION_POINT,
-                                  IDE_TYPE_DIRECTORY_VCS,
-                                  IDE_VCS_EXTENSION_POINT".directory",
-                                  -200);
-
   modeline_parser_init ();
 
   ggit_init ();
diff --git a/libide/ide.h b/libide/ide.h
index e6689af..e3b5e4e 100644
--- a/libide/ide.h
+++ b/libide/ide.h
@@ -94,11 +94,8 @@ G_BEGIN_DECLS
 #include "ide-vcs.h"
 #include "ide-vcs-uri.h"
 
-#include "directory/ide-directory-vcs.h"
 #include "doap/ide-doap-person.h"
 #include "doap/ide-doap.h"
-#include "git/ide-git-remote-callbacks.h"
-#include "git/ide-git-vcs.h"
 #include "local/ide-local-device.h"
 #include "theatrics/ide-animation.h"
 #include "util/ide-line-reader.h"
diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index 9faf082..db08651 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -8,6 +8,7 @@ SUBDIRS = \
        device-manager \
        fallback \
        file-search \
+       git \
        gnome-code-assistance \
        html-completion \
        jedi \
diff --git a/plugins/fallback/Makefile.am b/plugins/fallback/Makefile.am
index 11e8637..474995e 100644
--- a/plugins/fallback/Makefile.am
+++ b/plugins/fallback/Makefile.am
@@ -6,6 +6,8 @@ libfallback_plugin_la_SOURCES = \
        fallback-plugin.c \
        ide-directory-build-system.c \
        ide-directory-build-system.h \
+       ide-directory-vcs.c \
+       ide-directory-vcs.h \
        $(NULL)
 
 libfallback_plugin_la_CFLAGS = \
diff --git a/plugins/fallback/fallback.plugin b/plugins/fallback/fallback.plugin
index c733bee..1fce652 100644
--- a/plugins/fallback/fallback.plugin
+++ b/plugins/fallback/fallback.plugin
@@ -6,4 +6,3 @@ Authors=Christian Hergert <christian hergert me>
 Copyright=Copyright © 2015 Christian Hergert
 Builtin=true
 Hidden=true
-X-Build-System-Priority=10000000
diff --git a/libide/directory/ide-directory-vcs.c b/plugins/fallback/ide-directory-vcs.c
similarity index 92%
rename from libide/directory/ide-directory-vcs.c
rename to plugins/fallback/ide-directory-vcs.c
index ea50434..b5e4fdd 100644
--- a/libide/directory/ide-directory-vcs.c
+++ b/plugins/fallback/ide-directory-vcs.c
@@ -16,6 +16,8 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#define G_LOG_DOMAIN "directory-vcs"
+
 #include <glib/gi18n.h>
 
 #include "ide-context.h"
@@ -24,18 +26,16 @@
 
 struct _IdeDirectoryVcs
 {
-  IdeVcs  parent_instance;
-
-  GFile  *working_directory;
+  IdeObject  parent_instance;
+  GFile     *working_directory;
 };
 
-#define LOAD_MAX_FILES 5000
-
 static void async_initable_iface_init (GAsyncInitableIface *iface);
+static void vcs_iface_init (IdeVcsInterface *iface);
 
-G_DEFINE_TYPE_EXTENDED (IdeDirectoryVcs, ide_directory_vcs, IDE_TYPE_VCS, 0,
-                        G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_INITABLE,
-                                               async_initable_iface_init))
+G_DEFINE_TYPE_EXTENDED (IdeDirectoryVcs, ide_directory_vcs, IDE_TYPE_OBJECT, 0,
+                        G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_INITABLE, async_initable_iface_init)
+                        G_IMPLEMENT_INTERFACE (IDE_TYPE_VCS, vcs_iface_init))
 
 static GFile *
 ide_directory_vcs_get_working_directory (IdeVcs *vcs)
@@ -91,14 +91,17 @@ ide_directory_vcs_dispose (GObject *object)
 }
 
 static void
+vcs_iface_init (IdeVcsInterface *iface)
+{
+  iface->get_working_directory = ide_directory_vcs_get_working_directory;
+  iface->is_ignored = ide_directory_vcs_is_ignored;
+}
+
+static void
 ide_directory_vcs_class_init (IdeDirectoryVcsClass *klass)
 {
-  IdeVcsClass *vcs_class = IDE_VCS_CLASS (klass);
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-  vcs_class->get_working_directory = ide_directory_vcs_get_working_directory;
-  vcs_class->is_ignored = ide_directory_vcs_is_ignored;
-
   object_class->dispose = ide_directory_vcs_dispose;
 }
 
diff --git a/libide/directory/ide-directory-vcs.h b/plugins/fallback/ide-directory-vcs.h
similarity index 87%
copy from libide/directory/ide-directory-vcs.h
copy to plugins/fallback/ide-directory-vcs.h
index e0a6e78..f3911fa 100644
--- a/libide/directory/ide-directory-vcs.h
+++ b/plugins/fallback/ide-directory-vcs.h
@@ -19,14 +19,13 @@
 #ifndef IDE_DIRECTORY_VCS_H
 #define IDE_DIRECTORY_VCS_H
 
-#include "ide-vcs.h"
+#include <ide.h>
 
 G_BEGIN_DECLS
 
 #define IDE_TYPE_DIRECTORY_VCS (ide_directory_vcs_get_type())
 
-G_DECLARE_FINAL_TYPE (IdeDirectoryVcs, ide_directory_vcs,
-                      IDE, DIRECTORY_VCS, IdeVcs)
+G_DECLARE_FINAL_TYPE (IdeDirectoryVcs, ide_directory_vcs, IDE, DIRECTORY_VCS, IdeObject)
 
 G_END_DECLS
 
diff --git a/plugins/git/Makefile.am b/plugins/git/Makefile.am
new file mode 100644
index 0000000..603dc11
--- /dev/null
+++ b/plugins/git/Makefile.am
@@ -0,0 +1,26 @@
+plugindir = $(libdir)/gnome-builder/plugins
+plugin_LTLIBRARIES = libgit-plugin.la
+plugin_DATA = git.plugin
+
+libgit_plugin_la_SOURCES = \
+       git-plugin.c \
+       ide-git-buffer-change-monitor.c \
+       ide-git-buffer-change-monitor.h \
+       ide-git-remote-callbacks.c \
+       ide-git-remote-callbacks.h \
+       ide-git-vcs.c \
+       ide-git-vcs.h \
+       $(NULL)
+
+libgit_plugin_la_CFLAGS = \
+       $(BUILDER_CFLAGS) \
+       -I$(top_srcdir)/libide \
+       -I$(top_srcdir)/contrib/egg \
+       $(NULL)
+
+libgit_plugin_la_LDFLAGS = \
+       -avoid-version \
+       -module \
+       $(NULL)
+
+-include $(top_srcdir)/git.mk
diff --git a/libide/directory/ide-directory-vcs.h b/plugins/git/git-plugin.c
similarity index 68%
rename from libide/directory/ide-directory-vcs.h
rename to plugins/git/git-plugin.c
index e0a6e78..23b1bbc 100644
--- a/libide/directory/ide-directory-vcs.h
+++ b/plugins/git/git-plugin.c
@@ -1,4 +1,4 @@
-/* ide-directory-vcs.h
+/* git-plugin.c
  *
  * Copyright (C) 2015 Christian Hergert <christian hergert me>
  *
@@ -16,18 +16,13 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef IDE_DIRECTORY_VCS_H
-#define IDE_DIRECTORY_VCS_H
+#include <libpeas/peas.h>
+#include <ide.h>
 
-#include "ide-vcs.h"
+#include "ide-git-vcs.h"
 
-G_BEGIN_DECLS
-
-#define IDE_TYPE_DIRECTORY_VCS (ide_directory_vcs_get_type())
-
-G_DECLARE_FINAL_TYPE (IdeDirectoryVcs, ide_directory_vcs,
-                      IDE, DIRECTORY_VCS, IdeVcs)
-
-G_END_DECLS
-
-#endif /* IDE_DIRECTORY_VCS_H */
+void
+peas_register_types (PeasObjectModule *module)
+{
+  peas_object_module_register_extension_type (module, IDE_TYPE_VCS, IDE_TYPE_GIT_VCS);
+}
diff --git a/plugins/git/git.plugin b/plugins/git/git.plugin
new file mode 100644
index 0000000..5ef4602
--- /dev/null
+++ b/plugins/git/git.plugin
@@ -0,0 +1,8 @@
+[Plugin]
+Module=git-plugin
+Name=Git
+Description=Provides git integration with Builder.
+Authors=Christian Hergert <christian hergert me>
+Copyright=Copyright © 2015 Christian Hergert
+Builtin=true
+Hidden=true
diff --git a/libide/git/ide-git-buffer-change-monitor.c b/plugins/git/ide-git-buffer-change-monitor.c
similarity index 100%
rename from libide/git/ide-git-buffer-change-monitor.c
rename to plugins/git/ide-git-buffer-change-monitor.c
diff --git a/libide/git/ide-git-buffer-change-monitor.h b/plugins/git/ide-git-buffer-change-monitor.h
similarity index 100%
rename from libide/git/ide-git-buffer-change-monitor.h
rename to plugins/git/ide-git-buffer-change-monitor.h
diff --git a/libide/git/ide-git-remote-callbacks.c b/plugins/git/ide-git-remote-callbacks.c
similarity index 98%
rename from libide/git/ide-git-remote-callbacks.c
rename to plugins/git/ide-git-remote-callbacks.c
index 9d8b996..98d1611 100644
--- a/libide/git/ide-git-remote-callbacks.c
+++ b/plugins/git/ide-git-remote-callbacks.c
@@ -17,12 +17,9 @@
  */
 
 #include <glib/gi18n.h>
+#include <ide.h>
 
-#include "ide-animation.h"
-#include "ide-debug.h"
 #include "ide-git-remote-callbacks.h"
-#include "ide-macros.h"
-#include "ide-progress.h"
 
 #define ANIMATION_DURATION_MSEC 250
 
diff --git a/libide/git/ide-git-remote-callbacks.h b/plugins/git/ide-git-remote-callbacks.h
similarity index 100%
rename from libide/git/ide-git-remote-callbacks.h
rename to plugins/git/ide-git-remote-callbacks.h
diff --git a/libide/git/ide-git-vcs.c b/plugins/git/ide-git-vcs.c
similarity index 96%
rename from libide/git/ide-git-vcs.c
rename to plugins/git/ide-git-vcs.c
index f6e098a..9249987 100644
--- a/libide/git/ide-git-vcs.c
+++ b/plugins/git/ide-git-vcs.c
@@ -35,7 +35,7 @@
 
 struct _IdeGitVcs
 {
-  IdeVcs parent_instance;
+  IdeObject       parent_instance;
 
   GgitRepository *repository;
   GgitRepository *change_monitor_repository;
@@ -50,6 +50,7 @@ struct _IdeGitVcs
 };
 
 static void     g_async_initable_init_interface (GAsyncInitableIface  *iface);
+static void     ide_vcs_iface_init              (IdeVcsInterface      *iface);
 static void     ide_git_vcs_reload_async        (IdeGitVcs            *self,
                                                  GCancellable         *cancellable,
                                                  GAsyncReadyCallback   callback,
@@ -59,8 +60,8 @@ static gboolean ide_git_vcs_reload_finish       (IdeGitVcs            *self,
                                                  GError              **error);
 
 G_DEFINE_TYPE_EXTENDED (IdeGitVcs, ide_git_vcs, IDE_TYPE_VCS, 0,
-                        G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_INITABLE,
-                                               g_async_initable_init_interface))
+                        G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_INITABLE, g_async_initable_init_interface)
+                        G_IMPLEMENT_INTERFACE (IDE_TYPE_VCS, ide_vcs_iface_init))
 
 enum {
   PROP_0,
@@ -361,18 +362,21 @@ ide_git_vcs_get_property (GObject    *object,
 }
 
 static void
+ide_vcs_iface_init (IdeVcsInterface *iface)
+{
+  iface->get_working_directory = ide_git_vcs_get_working_directory;
+  iface->get_buffer_change_monitor = ide_git_vcs_get_buffer_change_monitor;
+  iface->is_ignored = ide_git_vcs_is_ignored;
+}
+
+static void
 ide_git_vcs_class_init (IdeGitVcsClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
-  IdeVcsClass *vcs_class = IDE_VCS_CLASS (klass);
 
   object_class->dispose = ide_git_vcs_dispose;
   object_class->get_property = ide_git_vcs_get_property;
 
-  vcs_class->get_working_directory = ide_git_vcs_get_working_directory;
-  vcs_class->get_buffer_change_monitor = ide_git_vcs_get_buffer_change_monitor;
-  vcs_class->is_ignored = ide_git_vcs_is_ignored;
-
   /**
    * IdeGitVcs:repository:
    *
diff --git a/libide/git/ide-git-vcs.h b/plugins/git/ide-git-vcs.h
similarity index 91%
rename from libide/git/ide-git-vcs.h
rename to plugins/git/ide-git-vcs.h
index 24c4683..d7b62ba 100644
--- a/libide/git/ide-git-vcs.h
+++ b/plugins/git/ide-git-vcs.h
@@ -20,14 +20,13 @@
 #define IDE_GIT_VCS_H
 
 #include <libgit2-glib/ggit.h>
-
-#include "ide-vcs.h"
+#include <ide.h>
 
 G_BEGIN_DECLS
 
 #define IDE_TYPE_GIT_VCS (ide_git_vcs_get_type())
 
-G_DECLARE_FINAL_TYPE (IdeGitVcs, ide_git_vcs, IDE, GIT_VCS, IdeVcs)
+G_DECLARE_FINAL_TYPE (IdeGitVcs, ide_git_vcs, IDE, GIT_VCS, IdeObject)
 
 GgitRepository *ide_git_vcs_get_repository (IdeGitVcs *vcs);
 


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