# HG changeset patch # User Arun Kulshreshtha # Date 2024-01-30 22:14:02 # Node ID d626e5e7bbbe485d3e2f251d1888ebc6230f159d # Parent e7be2ddfb4c2a7ac594614d50bcd6f310f1a962e rust-changelog: don't panic on empty file lists diff --git a/rust/hg-core/src/revlog/changelog.rs b/rust/hg-core/src/revlog/changelog.rs --- a/rust/hg-core/src/revlog/changelog.rs +++ b/rust/hg-core/src/revlog/changelog.rs @@ -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 { - 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()); + } }