Find a change by hash prefix. This searches through all stored changes to find one whose hash starts with the given prefix. Useful for CLI commands that allow abbreviated hashes. # Arguments `prefix` - The hash prefix (case-insensitive, at least 2 characters) # Returns `Ok(Some(hash))` - Found a unique matching change `Ok(None)` - No change matched the prefix `Err(_)` - Multiple changes match
(&self, prefix: &str)
| 1003 | /// } |
| 1004 | /// ``` |
| 1005 | pub fn find_change_by_prefix(&self, prefix: &str) -> Result<Option<Hash>, RepositoryError> { |
| 1006 | let prefix_upper = prefix.to_uppercase(); |
| 1007 | let mut matches = Vec::new(); |
| 1008 | |
| 1009 | for result in self.iter_changes() { |
| 1010 | let hash = result?; |
| 1011 | let hash_str = hash.to_base32(); |
| 1012 | if hash_str.starts_with(&prefix_upper) { |
| 1013 | matches.push(hash); |
| 1014 | // If we find more than one, it's ambiguous |
| 1015 | if matches.len() > 1 { |
| 1016 | return Err(RepositoryError::AmbiguousHash { |
| 1017 | prefix: prefix.to_string(), |
| 1018 | matches: matches.iter().map(|h| h.to_base32()).collect(), |
| 1019 | }); |
| 1020 | } |
| 1021 | } |
| 1022 | } |
| 1023 | |
| 1024 | Ok(matches.into_iter().next()) |
| 1025 | } |
| 1026 | |
| 1027 | // ========================================================================= |
| 1028 | // Provenance Graph Operations |
no test coverage detected