Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
Please login to access the resource
openSUSE:Backports:SLE-15-SP6
geany-plugins
1178.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 1178.patch of Package geany-plugins
From 668f5d07eef16e227402eab09141c738b315d94b Mon Sep 17 00:00:00 2001 From: Colomban Wendling <ban@herbesfolles.org> Date: Sun, 5 Jun 2022 23:11:20 +0200 Subject: [PATCH 1/3] git-changebar: Simplify libgit2 version checks Introduce a custom macro for libgit2 version checks for them to be both easier to read and write. --- git-changebar/src/gcb-plugin.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/git-changebar/src/gcb-plugin.c b/git-changebar/src/gcb-plugin.c index f8ce20cd6..bee8c865c 100644 --- a/git-changebar/src/gcb-plugin.c +++ b/git-changebar/src/gcb-plugin.c @@ -32,11 +32,19 @@ #include <geany.h> #include <document.h> -#if ! defined (LIBGIT2_VER_MINOR) || ( (LIBGIT2_VER_MAJOR == 0) && (LIBGIT2_VER_MINOR < 22) ) +#ifdef LIBGIT2_VER_MINOR +# define CHECK_LIBGIT2_VERSION(MAJOR, MINOR) \ + ((LIBGIT2_VER_MAJOR == (MAJOR) && LIBGIT2_VER_MINOR >= (MINOR)) || \ + LIBGIT2_VER_MAJOR > (MAJOR)) +#else /* ! defined(LIBGIT2_VER_MINOR) */ +# define CHECK_LIBGIT2_VERSION(MAJOR, MINOR) 0 +#endif + +#if ! CHECK_LIBGIT2_VERSION(0, 22) # define git_libgit2_init git_threads_init # define git_libgit2_shutdown git_threads_shutdown #endif -#if ! defined (LIBGIT2_VER_MINOR) || ( (LIBGIT2_VER_MAJOR == 0) && (LIBGIT2_VER_MINOR < 23) ) +#if ! CHECK_LIBGIT2_VERSION(0, 23) /* 0.23 added @p binary_cb */ # define git_diff_buffers(old_buffer, old_len, old_as_path, \ new_buffer, new_len, new_as_path, options, \ @@ -45,7 +53,7 @@ new_buffer, new_len, new_as_path, options, \ file_cb, hunk_cb, line_cb, payload) #endif -#if ! defined (LIBGIT2_VER_MINOR) || ( (LIBGIT2_VER_MAJOR == 0) && (LIBGIT2_VER_MINOR < 28) ) +#if ! CHECK_LIBGIT2_VERSION(0, 28) # define git_buf_dispose git_buf_free # define git_error_last giterr_last #endif From 5d9f1bc6d010e6b4c6a21af8a39b90922f89a82c Mon Sep 17 00:00:00 2001 From: Colomban Wendling <ban@herbesfolles.org> Date: Sun, 5 Jun 2022 23:22:59 +0200 Subject: [PATCH 2/3] git-changebar: Add support for libgit2 1.4 The buffer API changed a lot in libgit2 1.4, so compatibility is a bit nastier than one could hope for. Fixes #1164. --- git-changebar/src/gcb-plugin.c | 76 ++++++++++++++++++++++++---------- 1 file changed, 54 insertions(+), 22 deletions(-) diff --git a/git-changebar/src/gcb-plugin.c b/git-changebar/src/gcb-plugin.c index bee8c865c..76208cd00 100644 --- a/git-changebar/src/gcb-plugin.c +++ b/git-changebar/src/gcb-plugin.c @@ -219,30 +219,19 @@ static const struct { }; -/* workaround https://github.com/libgit2/libgit2/pull/3187 */ -static int -gcb_git_buf_grow (git_buf *buf, - size_t target_size) -{ - if (buf->asize == 0) { - if (target_size == 0) { - target_size = buf->size; - } - if ((target_size & 7) == 0) { - target_size++; - } - } - return git_buf_grow (buf, target_size); -} -#define git_buf_grow gcb_git_buf_grow - static void buf_zero (git_buf *buf) { if (buf) { buf->ptr = NULL; buf->size = 0; +#if ! CHECK_LIBGIT2_VERSION(1, 4) buf->asize = 0; +#else + /* we don't really need this field, but the documentation states that all + * fields should be set to 0, so fill it as well */ + buf->reserved = 0; +#endif } } @@ -256,6 +245,52 @@ clear_cached_blob_contents (void) G_blob_contents_tag = 0; } +/* similar to old git_blob_filtered_content() but makes sure the caller owns + * the data in the output buffer -- and uses a boolean return */ +static gboolean +get_blob_contents (git_buf *out, + git_blob *blob, + const char *as_path, + int check_for_binary_data) +{ +/* libgit2 1.4 changed buffer API quite a bit */ +#if ! CHECK_LIBGIT2_VERSION(1, 4) + gboolean success = TRUE; + + if (git_blob_filtered_content (out, blob, as_path, + check_for_binary_data) != 0) + return FALSE; + + /* Workaround for https://github.com/libgit2/libgit2/pull/3187 + * We want to own the buffer, which git_buf_grow(buf, 0) was supposed to do, + * but there is a corner case where it doesn't do what it should and + * truncates the buffer contents, so we fix this manually. */ + if (out->asize == 0) { + size_t target_size = out->size; + if ((target_size & 7) == 0) { + target_size++; + } + success = (git_buf_grow (out, target_size) == 0); + } + + return success; +#else /* libgit2 >= 1.4 */ + /* Here we can assume we will always get a buffer we own (at least as of + * 2022-06-05 it is the case), so there's no need for a pendent to the + * previous git_buf_grow() shenanigans. + * This code path does the same as the older git_blob_filtered_content() + * but with non-deprecated API */ + git_blob_filter_options opts = GIT_BLOB_FILTER_OPTIONS_INIT; + + if (check_for_binary_data) + opts.flags |= GIT_BLOB_FILTER_CHECK_FOR_BINARY; + else + opts.flags &= ~GIT_BLOB_FILTER_CHECK_FOR_BINARY; + + return git_blob_filter(out, blob, as_path, &opts) == 0; +#endif +} + /* get the file blob for @relpath at HEAD */ static gboolean repo_get_file_blob_contents (git_repository *repo, @@ -279,11 +314,8 @@ repo_get_file_blob_contents (git_repository *repo, git_blob *blob; if (git_blob_lookup (&blob, repo, git_tree_entry_id (entry)) == 0) { - if (git_blob_filtered_content (contents, blob, relpath, - check_for_binary_data) == 0 && - git_buf_grow (contents, 0) == 0) { - success = TRUE; - } + success = get_blob_contents (contents, blob, relpath, + check_for_binary_data); git_blob_free (blob); } git_tree_entry_free (entry); From b6e5b174e38799f397dff4d61614a8a806bb2338 Mon Sep 17 00:00:00 2001 From: Colomban Wendling <ban@herbesfolles.org> Date: Fri, 17 Jun 2022 13:53:10 +0200 Subject: [PATCH 3/3] git-changebar: Avoid harmless warnings Both GIT_BLOB_FILTER_OPTIONS_INIT and GIT_DIFF_OPTIONS_INIT initializers lead to GCC emitting -Wmissing-field-initializers warnings. Those are harmless in our case, but still annoying and possible one day hiding a legitimate warning. So, use the corresponding initialization functions to avoid this. --- git-changebar/src/gcb-plugin.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/git-changebar/src/gcb-plugin.c b/git-changebar/src/gcb-plugin.c index 76208cd00..dd2f9c19f 100644 --- a/git-changebar/src/gcb-plugin.c +++ b/git-changebar/src/gcb-plugin.c @@ -57,6 +57,9 @@ # define git_buf_dispose git_buf_free # define git_error_last giterr_last #endif +#if ! CHECK_LIBGIT2_VERSION(0, 99) +# define git_diff_options_init git_diff_init_options +#endif GeanyPlugin *geany_plugin; @@ -280,7 +283,9 @@ get_blob_contents (git_buf *out, * previous git_buf_grow() shenanigans. * This code path does the same as the older git_blob_filtered_content() * but with non-deprecated API */ - git_blob_filter_options opts = GIT_BLOB_FILTER_OPTIONS_INIT; + git_blob_filter_options opts; + + git_blob_filter_options_init (&opts, GIT_BLOB_FILTER_OPTIONS_VERSION); if (check_for_binary_data) opts.flags |= GIT_BLOB_FILTER_CHECK_FOR_BINARY; @@ -741,7 +746,7 @@ diff_buf_to_doc (const git_buf *old_buf, void *payload) { ScintillaObject *sci = doc->editor->sci; - git_diff_options opts = GIT_DIFF_OPTIONS_INIT; + git_diff_options opts; gchar *buf; size_t len; gboolean free_buf = FALSE; @@ -761,6 +766,7 @@ diff_buf_to_doc (const git_buf *old_buf, doc->encoding, "UTF-8", NULL); } + git_diff_options_init (&opts, GIT_DIFF_OPTIONS_VERSION); /* no context lines, and no need to bother about binary checks */ opts.context_lines = 0; opts.flags = GIT_DIFF_FORCE_TEXT;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor