From c2e6f9ff7e7f3ab9739fe1027c2290c0dd2cca69 Mon Sep 17 00:00:00 2001 From: Stephan Dilly Date: Mon, 5 Jul 2021 00:18:45 +0200 Subject: [PATCH] filetree paniced on non utf8 files/paths --- CHANGELOG.md | 1 + asyncgit/src/sync/tree.rs | 5 +++-- filetreelist/src/filetree.rs | 6 ++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 57cf4d72..87110608 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - openssl vendoring broken on macos ([#772](https://github.com/extrawurst/gitui/issues/772)) - amend and other commands not shown in help ([#778](https://github.com/extrawurst/gitui/issues/778)) - focus locked on commit msg details in narrow term sizes ([#780](https://github.com/extrawurst/gitui/issues/780)) +- non-utf8 file/path names broke filetree ([#802](https://github.com/extrawurst/gitui/issues/802)) ## [0.16.1] - 2021-06-06 diff --git a/asyncgit/src/sync/tree.rs b/asyncgit/src/sync/tree.rs index 4ee4087b..c975689a 100644 --- a/asyncgit/src/sync/tree.rs +++ b/asyncgit/src/sync/tree.rs @@ -1,4 +1,4 @@ -use super::{utils::bytes2string, CommitId}; +use super::CommitId; use crate::{ error::{Error, Result}, sync::utils::repo, @@ -101,7 +101,8 @@ fn tree_recurse( out.reserve(tree.len()); for e in tree { - let path = path.join(bytes2string(e.name_bytes())?); + let p = String::from_utf8_lossy(e.name_bytes()); + let path = path.join(p.to_string()); match e.kind() { Some(git2::ObjectType::Blob) => { let id = e.id(); diff --git a/filetreelist/src/filetree.rs b/filetreelist/src/filetree.rs index a04b7bf7..d0a19a6b 100644 --- a/filetreelist/src/filetree.rs +++ b/filetreelist/src/filetree.rs @@ -55,8 +55,10 @@ impl FileTree { /// pub fn collapse_but_root(&mut self) { - self.items.collapse(0, true); - self.items.expand(0, false); + if !self.is_empty() { + self.items.collapse(0, true); + self.items.expand(0, false); + } } /// iterates visible elements starting from `start_index_visual`