Control: tags 1021127 + patch
Control: tags 1021127 + pending

Dear maintainer,

I've prepared an NMU for geany-plugins (versioned as 1.38+dfsg-1.1) and 
uploaded it to DELAYED/4. Please feel free to tell me if I should cancel it.

cu
Adrian
diff -Nru geany-plugins-1.38+dfsg/debian/changelog geany-plugins-1.38+dfsg/debian/changelog
--- geany-plugins-1.38+dfsg/debian/changelog	2021-10-18 06:58:39.000000000 +0300
+++ geany-plugins-1.38+dfsg/debian/changelog	2022-10-15 12:38:19.000000000 +0300
@@ -1,3 +1,11 @@
+geany-plugins (1.38+dfsg-1.1) unstable; urgency=medium
+
+  * Non-maintainer upload.
+  * Backport upstream fix for FTBFS with libgit 2 >= 1.4.
+    (Closes: #1021127)
+
+ -- Adrian Bunk <b...@debian.org>  Sat, 15 Oct 2022 12:38:19 +0300
+
 geany-plugins (1.38+dfsg-1) unstable; urgency=medium
 
   * [c6c9f0b] Update signing-key.asc
diff -Nru geany-plugins-1.38+dfsg/debian/patches/0001-git-changebar-Simplify-libgit2-version-checks.patch geany-plugins-1.38+dfsg/debian/patches/0001-git-changebar-Simplify-libgit2-version-checks.patch
--- geany-plugins-1.38+dfsg/debian/patches/0001-git-changebar-Simplify-libgit2-version-checks.patch	1970-01-01 02:00:00.000000000 +0200
+++ geany-plugins-1.38+dfsg/debian/patches/0001-git-changebar-Simplify-libgit2-version-checks.patch	2022-10-15 12:35:31.000000000 +0300
@@ -0,0 +1,49 @@
+From 668f5d07eef16e227402eab09141c738b315d94b Mon Sep 17 00:00:00 2001
+From: Colomban Wendling <b...@herbesfolles.org>
+Date: Sun, 5 Jun 2022 23:11:20 +0200
+Subject: 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 f8ce20cd..bee8c865 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
+-- 
+2.30.2
+
diff -Nru geany-plugins-1.38+dfsg/debian/patches/0002-git-changebar-Add-support-for-libgit2-1.4.patch geany-plugins-1.38+dfsg/debian/patches/0002-git-changebar-Add-support-for-libgit2-1.4.patch
--- geany-plugins-1.38+dfsg/debian/patches/0002-git-changebar-Add-support-for-libgit2-1.4.patch	1970-01-01 02:00:00.000000000 +0200
+++ geany-plugins-1.38+dfsg/debian/patches/0002-git-changebar-Add-support-for-libgit2-1.4.patch	2022-10-15 12:35:31.000000000 +0300
@@ -0,0 +1,124 @@
+From 5d9f1bc6d010e6b4c6a21af8a39b90922f89a82c Mon Sep 17 00:00:00 2001
+From: Colomban Wendling <b...@herbesfolles.org>
+Date: Sun, 5 Jun 2022 23:22:59 +0200
+Subject: 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 bee8c865..76208cd0 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);
+-- 
+2.30.2
+
diff -Nru geany-plugins-1.38+dfsg/debian/patches/series geany-plugins-1.38+dfsg/debian/patches/series
--- geany-plugins-1.38+dfsg/debian/patches/series	2021-10-18 06:58:39.000000000 +0300
+++ geany-plugins-1.38+dfsg/debian/patches/series	2022-10-15 12:38:18.000000000 +0300
@@ -1,3 +1,5 @@
 debian-doc-locations.patch
 Fix-empty-DHPLUG_DATA_DIR.patch
 Move-libgeanypluginutils-to-pkglibdir.patch
+0001-git-changebar-Simplify-libgit2-version-checks.patch
+0002-git-changebar-Add-support-for-libgit2-1.4.patch

Reply via email to