From d3970754f1faad662d83b27c0d73b01da8fac31b Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Tue, 16 Apr 2024 21:25:53 -0400 Subject: [PATCH] Support filenames without directories in IndexFile This can't happen I don't think, but we should definitely not panic when it does. --- src/index.rs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/index.rs b/src/index.rs index 66d5935..559dcce 100755 --- a/src/index.rs +++ b/src/index.rs @@ -112,14 +112,16 @@ impl IndexFile { pub fn calculate_hash(path: &str) -> u64 { let lowercase = path.to_lowercase(); - let pos = lowercase.rfind('/').unwrap(); + if let Some(pos) = lowercase.rfind('/') { + let (directory, filename) = lowercase.split_at(pos); - let (directory, filename) = lowercase.split_at(pos); + let directory_crc = CRC.checksum(directory.as_bytes()); + let filename_crc = CRC.checksum(filename[1..filename.len()].as_bytes()); - let directory_crc = CRC.checksum(directory.as_bytes()); - let filename_crc = CRC.checksum(filename[1..filename.len()].as_bytes()); - - (directory_crc as u64) << 32 | (filename_crc as u64) + (directory_crc as u64) << 32 | (filename_crc as u64) + } else { + CRC.checksum(lowercase.as_bytes()) as u64 + } } // TODO: turn into traits?