d626e5e7bbbe — Arun Kulshreshtha 1 year, 2 months ago
rust-changelog: don't panic on empty file lists
1 files changed, 19 insertions(+), 4 deletions(-)

M rust/hg-core/src/revlog/changelog.rs
M rust/hg-core/src/revlog/changelog.rs +19 -4
@@ 5,10 5,11 @@ use crate::revlog::{Revlog, RevlogEntry,
 use crate::utils::hg_path::HgPath;
 use crate::vfs::Vfs;
 use crate::{Graph, GraphError, UncheckedRevision};
-use itertools::Itertools;
+use itertools::{Either, Itertools};
 use std::ascii::escape_default;
 use std::borrow::Cow;
 use std::fmt::{Debug, Formatter};
+use std::iter;
 
 /// A specialized `Revlog` to work with changelog data format.
 pub struct Changelog {

          
@@ 228,9 229,15 @@ impl<'changelog> ChangelogRevisionData<'
 
     /// The files changed in this revision.
     pub fn files(&self) -> impl Iterator<Item = &HgPath> {
-        self.bytes[self.timestamp_end + 1..self.files_end]
-            .split(|b| b == &b'\n')
-            .map(HgPath::new)
+        if self.timestamp_end == self.files_end {
+            Either::Left(iter::empty())
+        } else {
+            Either::Right(
+                self.bytes[self.timestamp_end + 1..self.files_end]
+                    .split(|b| b == &b'\n')
+                    .map(HgPath::new),
+            )
+        }
     }
 
     /// The change description.

          
@@ 356,4 363,12 @@ message",
         );
         Ok(())
     }
+
+    #[test]
+    fn test_empty_files_list() {
+        assert!(ChangelogRevisionData::null()
+            .files()
+            .collect_vec()
+            .is_empty());
+    }
 }