[gnome-builder] git: add tool to test cloning
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] git: add tool to test cloning
- Date: Thu, 6 May 2021 21:19:06 +0000 (UTC)
commit bd9c4a410cb538734b4ea6c222db72dd3b08441a
Author: Christian Hergert <chergert redhat com>
Date: Thu May 6 13:52:04 2021 -0700
git: add tool to test cloning
src/plugins/git/daemon/meson.build | 9 ++-
src/plugins/git/daemon/test-clone.c | 153 ++++++++++++++++++++++++++++++++++++
2 files changed, 159 insertions(+), 3 deletions(-)
---
diff --git a/src/plugins/git/daemon/meson.build b/src/plugins/git/daemon/meson.build
index 3eb30fd85..368326adf 100644
--- a/src/plugins/git/daemon/meson.build
+++ b/src/plugins/git/daemon/meson.build
@@ -89,8 +89,7 @@ gnome_builder_git = executable('gnome-builder-git', gnome_builder_git_sources,
dependencies: gnome_builder_git_deps,
)
-test_git_sources = [
- 'test-git.c',
+test_sources = [
ipc_git_change_monitor_src,
ipc_git_config_src,
ipc_git_progress_src,
@@ -98,7 +97,11 @@ test_git_sources = [
ipc_git_service_src,
]
-test_git = executable('test-git', 'test-git.c', test_git_sources,
+test_git = executable('test-git', 'test-git.c', test_sources,
+ dependencies: [ libgiounix_dep ],
+)
+
+test_clone = executable('test-clone', 'test-clone.c', test_sources,
dependencies: [ libgiounix_dep ],
)
diff --git a/src/plugins/git/daemon/test-clone.c b/src/plugins/git/daemon/test-clone.c
new file mode 100644
index 000000000..d24920cc7
--- /dev/null
+++ b/src/plugins/git/daemon/test-clone.c
@@ -0,0 +1,153 @@
+/* test-git.c
+ *
+ * Copyright 2019 Christian Hergert <chergert redhat com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include <glib-unix.h>
+#include <gio/gunixinputstream.h>
+#include <gio/gunixoutputstream.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <unistd.h>
+
+#include "ipc-git-change-monitor.h"
+#include "ipc-git-config.h"
+#include "ipc-git-progress.h"
+#include "ipc-git-repository.h"
+#include "ipc-git-service.h"
+#include "ipc-git-types.h"
+
+#define PROGRESS_PATH "/org/gnome/Builder/Git/Progress/1"
+
+static GMainLoop *main_loop;
+
+static void
+notify_fraction_cb (IpcGitProgress *progress)
+{
+ g_message ("Fraction = %lf", ipc_git_progress_get_fraction (progress));
+}
+
+static void
+notify_message_cb (IpcGitProgress *progress)
+{
+ g_message ("Message = %s", ipc_git_progress_get_message (progress));
+}
+
+static void
+test_clone_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ g_autoptr(IpcGitProgress) progress = user_data;
+ g_autofree char *location = NULL;
+ g_autoptr(GError) error = NULL;
+
+ if (!ipc_git_service_call_clone_finish (IPC_GIT_SERVICE (object), &location, result, &error))
+ g_error ("Error cloning: %s", error->message);
+ else
+ g_printerr ("Cloning complete: %s\n", location);
+
+ g_main_loop_quit (main_loop);
+}
+
+static void
+test_clone (IpcGitService *service,
+ const char *url,
+ const char *path)
+{
+ g_autoptr(IpcGitProgress) progress = NULL;
+ g_autoptr(IpcGitRepository) repository = NULL;
+ g_autoptr(IpcGitChangeMonitor) monitor = NULL;
+ g_autoptr(IpcGitConfig) config = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GVariant) files = NULL;
+ g_autofree gchar *location = NULL;
+ GVariantDict opts;
+ GDBusConnection *conn;
+
+ g_assert (IPC_IS_GIT_SERVICE (service));
+
+ g_variant_dict_init (&opts, NULL);
+
+ g_message ("Creating local progress object");
+ conn = g_dbus_proxy_get_connection (G_DBUS_PROXY (service));
+ progress = ipc_git_progress_skeleton_new ();
+ g_signal_connect (progress, "notify::fraction", G_CALLBACK (notify_fraction_cb), NULL);
+ g_signal_connect (progress, "notify::message", G_CALLBACK (notify_message_cb), NULL);
+ g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (progress), conn, PROGRESS_PATH, &error);
+ g_assert_no_error (error);
+
+ ipc_git_service_call_clone (service, url, path, NULL, g_variant_dict_end (&opts), PROGRESS_PATH, NULL,
test_clone_cb, g_object_ref (progress));
+}
+
+gint
+main (gint argc,
+ gchar *argv[])
+{
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GIOStream) stream = NULL;
+ g_autoptr(GInputStream) stdout_stream = NULL;
+ g_autoptr(GOutputStream) stdin_stream = NULL;
+ g_autoptr(GDBusConnection) connection = NULL;
+ g_autoptr(GSubprocess) subprocess = NULL;
+ g_autoptr(GSubprocessLauncher) launcher = NULL;
+ g_autoptr(IpcGitService) service = NULL;
+
+ if (argc < 3)
+ {
+ g_printerr ("usage: %s URL PATH\n", argv[0]);
+ return EXIT_FAILURE;
+ }
+
+ launcher = g_subprocess_launcher_new (G_SUBPROCESS_FLAGS_STDIN_PIPE | G_SUBPROCESS_FLAGS_STDOUT_PIPE);
+ subprocess = g_subprocess_launcher_spawn (launcher, &error, "./gnome-builder-git", NULL);
+
+ if (subprocess == NULL)
+ g_error ("%s", error->message);
+
+ main_loop = g_main_loop_new (NULL, FALSE);
+ stdin_stream = g_subprocess_get_stdin_pipe (subprocess);
+ stdout_stream = g_subprocess_get_stdout_pipe (subprocess);
+ stream = g_simple_io_stream_new (stdout_stream, stdin_stream);
+ connection = g_dbus_connection_new_sync (stream,
+ NULL,
+ G_DBUS_CONNECTION_FLAGS_DELAY_MESSAGE_PROCESSING,
+ NULL,
+ NULL,
+ &error);
+ g_assert_no_error (error);
+ g_assert_true (G_IS_DBUS_CONNECTION (connection));
+
+ g_dbus_connection_set_exit_on_close (connection, FALSE);
+ g_dbus_connection_start_message_processing (connection);
+
+ service = ipc_git_service_proxy_new_sync (connection, 0, NULL, "/org/gnome/Builder/Git", NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (IPC_IS_GIT_SERVICE (service));
+
+ g_dbus_proxy_set_default_timeout (G_DBUS_PROXY (service), G_MAXINT);
+
+ test_clone (service, argv[1], argv[2]);
+
+ g_main_loop_run (main_loop);
+
+ while (g_main_context_pending (NULL))
+ g_main_context_iteration (NULL, FALSE);
+
+ return EXIT_SUCCESS;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]