Cc: Maintainer

Seems like editors/helix has a bug when building with lang/rust > 1.70.
See

https://github.com/rust-lang/rust/issues/112171#issuecomment-1575573079
https://github.com/helix-editor/helix/pull/7227

for details.

This backports the upstream patch, which fixes the issue for me (amd64).

ok?
Index: Makefile
===================================================================
RCS file: /cvs/ports/editors/helix/Makefile,v
retrieving revision 1.4
diff -u -p -r1.4 Makefile
--- Makefile	19 May 2023 16:24:08 -0000	1.4
+++ Makefile	15 Sep 2023 18:52:16 -0000
@@ -2,6 +2,7 @@ COMMENT =	modal text editor
 
 VER =		23.05
 DISTNAME =	helix-${VER}
+REVISION =	0
 
 CATEGORIES =	editors
 
Index: patches/patch-helix-vcs_src_diff_line_cache_rs
===================================================================
RCS file: patches/patch-helix-vcs_src_diff_line_cache_rs
diff -N patches/patch-helix-vcs_src_diff_line_cache_rs
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-helix-vcs_src_diff_line_cache_rs	15 Sep 2023 18:52:16 -0000
@@ -0,0 +1,60 @@
+Backport upstream compatibility fix for rust >= 1.71
+https://github.com/helix-editor/helix/pull/7227/commits/269f637847140ddb9537efde4968bd92c91c9e1e
+Index: helix-vcs/src/diff/line_cache.rs
+--- helix-vcs/src/diff/line_cache.rs.orig
++++ helix-vcs/src/diff/line_cache.rs
+@@ -20,8 +20,8 @@ use super::{MAX_DIFF_BYTES, MAX_DIFF_LINES};
+ /// A cache that stores the `lines` of a rope as a vector.
+ /// It allows safely reusing the allocation of the vec when updating the rope
+ pub(crate) struct InternedRopeLines {
+-    diff_base: Rope,
+-    doc: Rope,
++    diff_base: Box<Rope>,
++    doc: Box<Rope>,
+     num_tokens_diff_base: u32,
+     interned: InternedInput<RopeSlice<'static>>,
+ }
+@@ -34,8 +34,8 @@ impl InternedRopeLines {
+                 after: Vec::with_capacity(doc.len_lines()),
+                 interner: Interner::new(diff_base.len_lines() + doc.len_lines()),
+             },
+-            diff_base,
+-            doc,
++            diff_base: Box::new(diff_base),
++            doc: Box::new(doc),
+             // will be populated by update_diff_base_impl
+             num_tokens_diff_base: 0,
+         };
+@@ -44,19 +44,19 @@ impl InternedRopeLines {
+     }
+ 
+     pub fn doc(&self) -> Rope {
+-        self.doc.clone()
++        Rope::clone(&*self.doc)
+     }
+ 
+     pub fn diff_base(&self) -> Rope {
+-        self.diff_base.clone()
++        Rope::clone(&*self.diff_base)
+     }
+ 
+     /// Updates the `diff_base` and optionally the document if `doc` is not None
+     pub fn update_diff_base(&mut self, diff_base: Rope, doc: Option<Rope>) {
+         self.interned.clear();
+-        self.diff_base = diff_base;
++        self.diff_base = Box::new(diff_base);
+         if let Some(doc) = doc {
+-            self.doc = doc
++            self.doc = Box::new(doc)
+         }
+         if !self.is_too_large() {
+             self.update_diff_base_impl();
+@@ -74,7 +74,7 @@ impl InternedRopeLines {
+             .interner
+             .erase_tokens_after(self.num_tokens_diff_base.into());
+ 
+-        self.doc = doc;
++        self.doc = Box::new(doc);
+         if self.is_too_large() {
+             self.interned.after.clear();
+         } else {

Reply via email to