gint main (gint argc, gchar *argv[]) { g_autoptr(GDBusConnection) connection = NULL; g_autoptr(IpcGitService) service = NULL; g_autoptr(GOutputStream) stdout_stream = NULL; g_autoptr(GInputStream) stdin_stream = NULL; g_autoptr(GIOStream) stream = NULL; g_autoptr(GMainLoop) main_loop = NULL; g_autoptr(GError) error = NULL; g_set_prgname ("gnome-builder-git"); g_set_application_name ("gnome-builder-git"); prctl (PR_SET_PDEATHSIG, SIGTERM); signal (SIGPIPE, SIG_IGN); ggit_init (); g_log_set_handler (NULL, G_LOG_LEVEL_MASK, log_func, NULL); if (!g_unix_set_fd_nonblocking (STDIN_FILENO, TRUE, &error) || !g_unix_set_fd_nonblocking (STDOUT_FILENO, TRUE, &error)) goto error; main_loop = g_main_loop_new (NULL, FALSE); stdin_stream = g_unix_input_stream_new (STDIN_FILENO, FALSE); stdout_stream = g_unix_output_stream_new (STDOUT_FILENO, FALSE); stream = g_simple_io_stream_new (stdin_stream, stdout_stream); if (!(connection = create_connection (stream, main_loop, &error))) goto error; service = ipc_git_service_impl_new (); if (!g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (service), connection, "/org/gnome/Builder/Git", &error)) goto error; g_dbus_connection_start_message_processing (connection); g_main_loop_run (main_loop); return EXIT_SUCCESS; error: if (error != NULL) g_printerr ("%s\n", error->message); return EXIT_FAILURE; }
static void ide_init_ctor (void) { GgitFeatureFlags ggit_flags; g_irepository_prepend_search_path (LIBDIR"/gnome-builder/girepository-1.0"); g_type_ensure (IDE_TYPE_CONTEXT); g_type_ensure (IDE_TYPE_VCS); 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, IDE_FILE_SETTINGS_EXTENSION_POINT".modelines", -100); g_io_extension_point_implement (IDE_FILE_SETTINGS_EXTENSION_POINT, IDE_TYPE_EDITORCONFIG_FILE_SETTINGS, IDE_FILE_SETTINGS_EXTENSION_POINT".editorconfig", -200); g_io_extension_point_implement (IDE_FILE_SETTINGS_EXTENSION_POINT, IDE_TYPE_GSETTINGS_FILE_SETTINGS, IDE_FILE_SETTINGS_EXTENSION_POINT".gsettings", -300); #ifdef ENABLE_GJS_SCRIPTING g_io_extension_point_implement (IDE_SCRIPT_EXTENSION_POINT, IDE_TYPE_GJS_SCRIPT, IDE_SCRIPT_EXTENSION_POINT".gjs", -100); #endif #ifdef ENABLE_PYTHON_SCRIPTING g_io_extension_point_implement (IDE_SCRIPT_EXTENSION_POINT, IDE_TYPE_PYGOBJECT_SCRIPT, IDE_SCRIPT_EXTENSION_POINT".py", -100); #endif 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 (); ggit_flags = ggit_get_features (); if ((ggit_flags & GGIT_FEATURE_THREADS) == 0) { g_error (_("Builder requires libgit2-glib with threading support.")); exit (EXIT_FAILURE); } if ((ggit_flags & GGIT_FEATURE_SSH) == 0) { g_error (_("Builder requires libgit2-glib with SSH support.")); exit (EXIT_FAILURE); } _ide_thread_pool_init (); _ide_battery_monitor_init (); }
int main (int argc, char *argv[]) { GFile *file; GgitRepository *repo; GgitRevisionWalker *revwalker; GgitRef *head; GgitOId *oid; gint64 n_revisions = 10; GError *err = NULL; ggit_init (); if (argc < 2 || argc > 3) { g_print ("Usage: %s path_to_git_repository [N_REVISIONS]\n", argv[0]); return 1; } if (argc == 3) { n_revisions = g_ascii_strtoll (argv[2], NULL, 10); if (n_revisions < -1) { g_printerr ("Error: invalid number of " "revisions: %" G_GINT64_FORMAT "\n", n_revisions); return 1; } } file = g_file_new_for_path (argv[1]); if (!g_file_query_exists (file, NULL)) { g_object_unref (file); g_printerr ("Error: invalid git repository: %s\n", argv[1]); return 1; } repo = ggit_repository_open (file, &err); g_assert_no_error (err); revwalker = ggit_revision_walker_new (repo, &err); g_assert_no_error (err); ggit_revision_walker_set_sort_mode (revwalker, GGIT_SORT_TIME | GGIT_SORT_TOPOLOGICAL); head = ggit_repository_get_head (repo, &err); g_assert_no_error (err); oid = ggit_ref_get_target (head); ggit_revision_walker_push (revwalker, oid, &err); g_assert_no_error (err); ggit_oid_free (oid); g_object_unref (head); while ((oid = ggit_revision_walker_next (revwalker, &err)) != NULL) { GgitCommit *commit; gchar *oid_str; GgitSignature *author; GgitSignature *committer; gchar *author_str; gchar *committer_str; const gchar *subject; const gchar *message; GgitCommitParents *commit_parents; commit = GGIT_COMMIT (ggit_repository_lookup (repo, oid, GGIT_TYPE_COMMIT, &err)); g_assert_no_error (err); oid_str = ggit_oid_to_string (oid); author = ggit_commit_get_author (commit); committer = ggit_commit_get_committer (commit); author_str = signature_to_string (author); committer_str = signature_to_string (committer); subject = ggit_commit_get_subject (commit); message = ggit_commit_get_message (commit); g_print ("SHA: %s\n" "Author: %s\n" "Committer: %s\n" "Subject: %s\n" "Message: %s\n", oid_str, author_str, committer_str, subject, message); commit_parents = ggit_commit_get_parents (commit); if (ggit_commit_parents_get_size (commit_parents) > 0) { GgitCommit *parent_commit; GgitTree *commit_tree; GgitTree *parent_tree; GgitDiff *diff; parent_commit = ggit_commit_parents_get (commit_parents, 0); commit_tree = ggit_commit_get_tree (commit); parent_tree = ggit_commit_get_tree (parent_commit); diff = ggit_diff_new_tree_to_tree (repo, parent_tree, commit_tree, NULL, &err); g_assert_no_error (err); ggit_diff_print (diff, GGIT_DIFF_FORMAT_PATCH, diff_print_cb, NULL, &err); g_assert_no_error (err); g_object_unref (diff); g_object_unref (parent_tree); g_object_unref (commit_tree); g_object_unref (parent_commit); } g_print ("----------------------------------------\n"); g_object_unref (commit_parents); g_free (committer_str); g_free (author_str); g_object_unref (committer); g_object_unref (author); g_free (oid_str); g_object_unref (commit); ggit_oid_free (oid); if (n_revisions != -1 && --n_revisions == 0) { break; } } g_assert_no_error (err); g_object_unref (revwalker); g_object_unref (repo); g_object_unref (file); return 0; }
static void ide_init_ctor (void) { GgitFeatureFlags ggit_flags; g_type_ensure (IDE_TYPE_CONTEXT); g_type_ensure (IDE_TYPE_BUILD_SYSTEM); g_type_ensure (IDE_TYPE_VCS); g_io_extension_point_register (IDE_BUILD_SYSTEM_EXTENSION_POINT); g_io_extension_point_register (IDE_FILE_SETTINGS_EXTENSION_POINT); g_io_extension_point_register (IDE_LANGUAGE_EXTENSION_POINT); g_io_extension_point_register (IDE_PROJECT_MINER_EXTENSION_POINT); g_io_extension_point_register (IDE_SCRIPT_EXTENSION_POINT); g_io_extension_point_register (IDE_SEARCH_PROVIDER_EXTENSION_POINT); g_io_extension_point_register (IDE_SERVICE_EXTENSION_POINT); g_io_extension_point_register (IDE_VCS_EXTENSION_POINT); g_io_extension_point_implement (IDE_BUILD_SYSTEM_EXTENSION_POINT, IDE_TYPE_AUTOTOOLS_BUILD_SYSTEM, IDE_BUILD_SYSTEM_EXTENSION_POINT".autotools", -100); g_io_extension_point_implement (IDE_BUILD_SYSTEM_EXTENSION_POINT, IDE_TYPE_DIRECTORY_BUILD_SYSTEM, IDE_BUILD_SYSTEM_EXTENSION_POINT".directory", -200); g_io_extension_point_implement (IDE_FILE_SETTINGS_EXTENSION_POINT, IDE_TYPE_EDITORCONFIG_FILE_SETTINGS, IDE_FILE_SETTINGS_EXTENSION_POINT".editorconfig", -100); g_io_extension_point_implement (IDE_FILE_SETTINGS_EXTENSION_POINT, IDE_TYPE_GSETTINGS_FILE_SETTINGS, IDE_FILE_SETTINGS_EXTENSION_POINT".gsettings", -200); g_io_extension_point_implement (IDE_LANGUAGE_EXTENSION_POINT, IDE_TYPE_C_LANGUAGE, IDE_LANGUAGE_EXTENSION_POINT".c", 0); g_io_extension_point_implement (IDE_LANGUAGE_EXTENSION_POINT, IDE_TYPE_HTML_LANGUAGE, IDE_LANGUAGE_EXTENSION_POINT".html", 0); g_io_extension_point_implement (IDE_LANGUAGE_EXTENSION_POINT, IDE_TYPE_PYTHON_LANGUAGE, IDE_LANGUAGE_EXTENSION_POINT".python", 0); g_io_extension_point_implement (IDE_LANGUAGE_EXTENSION_POINT, IDE_TYPE_XML_LANGUAGE, IDE_LANGUAGE_EXTENSION_POINT".xml", 0); g_io_extension_point_implement (IDE_LANGUAGE_EXTENSION_POINT, IDE_TYPE_VALA_LANGUAGE, IDE_LANGUAGE_EXTENSION_POINT".vala", 0); g_io_extension_point_implement (IDE_PROJECT_MINER_EXTENSION_POINT, IDE_TYPE_AUTOTOOLS_PROJECT_MINER, IDE_PROJECT_MINER_EXTENSION_POINT".autotools", 0); g_io_extension_point_implement (IDE_SCRIPT_EXTENSION_POINT, IDE_TYPE_GJS_SCRIPT, IDE_SCRIPT_EXTENSION_POINT".gjs", -100); g_io_extension_point_implement (IDE_SCRIPT_EXTENSION_POINT, IDE_TYPE_PYGOBJECT_SCRIPT, IDE_SCRIPT_EXTENSION_POINT".py", -100); g_io_extension_point_implement (IDE_SEARCH_PROVIDER_EXTENSION_POINT, IDE_TYPE_DEVHELP_SEARCH_PROVIDER, IDE_SEARCH_PROVIDER_EXTENSION_POINT".devhelp", -100); g_io_extension_point_implement (IDE_SEARCH_PROVIDER_EXTENSION_POINT, IDE_TYPE_GIT_SEARCH_PROVIDER, IDE_SEARCH_PROVIDER_EXTENSION_POINT".git", -100); g_io_extension_point_implement (IDE_SERVICE_EXTENSION_POINT, IDE_TYPE_CLANG_SERVICE, IDE_SERVICE_EXTENSION_POINT".clang", -100); g_io_extension_point_implement (IDE_SERVICE_EXTENSION_POINT, IDE_TYPE_GCA_SERVICE, IDE_SERVICE_EXTENSION_POINT".gca", -200); 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 (); ggit_flags = ggit_get_features (); if ((ggit_flags & GGIT_FEATURE_THREADS) == 0) { g_error (_("Builder requires libgit2-glib with threading support.")); exit (EXIT_FAILURE); } if ((ggit_flags & GGIT_FEATURE_SSH) == 0) { g_error (_("Builder requires libgit2-glib with SSH support.")); exit (EXIT_FAILURE); } }