git: 01025d932b43 - main - devel/geany-plugin-git-changebar: Fix build with libgit2 1.5.0
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 25 Nov 2022 16:25:16 UTC
The branch main has been updated by madpilot:
URL: https://cgit.FreeBSD.org/ports/commit/?id=01025d932b437ac790a9511a9d36d7f0717772b1
commit 01025d932b437ac790a9511a9d36d7f0717772b1
Author: Guido Falsi <madpilot@FreeBSD.org>
AuthorDate: 2022-11-25 16:23:05 +0000
Commit: Guido Falsi <madpilot@FreeBSD.org>
CommitDate: 2022-11-25 16:23:05 +0000
devel/geany-plugin-git-changebar: Fix build with libgit2 1.5.0
Import patches from upstream master branch to fix build with recently
committed libgit2 1.5.0.
Reported by: fallout
Obtained from: https://github.com/geany/geany-plugins/commit/668f5d07eef16e227402eab09141c738b315d94b
https://github.com/geany/geany-plugins/commit/5d9f1bc6d010e6b4c6a21af8a39b90922f89a82c
---
.../files/patch-git-changebar_src_gcb-plugin.c | 137 +++++++++++++++++++++
1 file changed, 137 insertions(+)
diff --git a/devel/geany-plugin-git-changebar/files/patch-git-changebar_src_gcb-plugin.c b/devel/geany-plugin-git-changebar/files/patch-git-changebar_src_gcb-plugin.c
new file mode 100644
index 000000000000..50e1498290e3
--- /dev/null
+++ b/devel/geany-plugin-git-changebar/files/patch-git-changebar_src_gcb-plugin.c
@@ -0,0 +1,137 @@
+--- git-changebar/src/gcb-plugin.c.orig 2021-09-19 13:29:36 UTC
++++ 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
+@@ -211,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
+ }
+ }
+
+@@ -248,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,
+@@ -271,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);