# HG changeset patch # User Arun Kulshreshtha # Date 1706652842 0 # Node ID d626e5e7bbbe485d3e2f251d1888ebc6230f159d # Parent e7be2ddfb4c2a7ac594614d50bcd6f310f1a962e rust-changelog: don't panic on empty file lists diff -r e7be2ddfb4c2 -r d626e5e7bbbe rust/hg-core/src/revlog/changelog.rs --- a/rust/hg-core/src/revlog/changelog.rs Wed Jan 24 13:49:29 2024 -0300 +++ b/rust/hg-core/src/revlog/changelog.rs Tue Jan 30 22:14:02 2024 +0000 @@ -5,10 +5,11 @@ 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 @@ /// The files changed in this revision. pub fn files(&self) -> impl Iterator { - 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 @@ ); Ok(()) } + + #[test] + fn test_empty_files_list() { + assert!(ChangelogRevisionData::null() + .files() + .collect_vec() + .is_empty()); + } }