Hi,

It looks good to me.

Maybe use the link to the exact commit in helix (instead of the commit as 
proposed)
https://github.com/helix-editor/helix/commit/de0ef8af15945fb7f761503c615a2d6213d2fd82

ok semarie@ (but let's Maintainer time to reply too).

Thanks.
-- 
Sebastien Marie

On Fri, Sep 15, 2023 at 08:56:31PM +0200, Volker Schlecht wrote:
> 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