diff options
Diffstat (limited to 'server/common/src/git.rs')
| -rw-r--r-- | server/common/src/git.rs | 40 |
1 files changed, 34 insertions, 6 deletions
diff --git a/server/common/src/git.rs b/server/common/src/git.rs index e2966e0..74c3247 100644 --- a/server/common/src/git.rs +++ b/server/common/src/git.rs @@ -193,8 +193,34 @@ impl RepoData { .await } + fn canonical_config_name(name: &str) -> String { + let mut ret = String::with_capacity(name.len()); + let mut iter = name.splitn(3, '.'); + ret.push_str(iter.next().unwrap()); + ret.as_mut_str().make_ascii_lowercase(); + if let Some(subsection) = iter.next() { + ret.push('.'); + let offset; + if let Some(value) = iter.next() { + ret.push_str(subsection); + ret.push('.'); + offset = ret.len(); + ret.push_str(value); + } else { + offset = ret.len(); + ret.push_str(subsection); + } + ret.as_mut_str() + .get_mut(offset..) + .unwrap() + .make_ascii_lowercase(); + } + ret + } + async fn config_get(&self, repo: &Repository, name: &str) -> Result<String, Error> { - if let Some(value) = self.config_cache.get(name) { + let name = Self::canonical_config_name(name); + if let Some(value) = self.config_cache.get(&name) { return Ok(value.clone()); } @@ -228,7 +254,9 @@ impl RepoData { let data = self.output(&mut cmd).await?; for key_value in data.split_terminator('\0') { match key_value.split_once('\n') { - Some((key, value)) => self.config_cache.insert(key.to_string(), value.to_string()), + Some((key, value)) => { + self.config_cache.insert(key.to_string(), value.to_string()); + } None => return Err(Error::new("Invalid output from git config list")), }; } @@ -241,18 +269,18 @@ impl RepoData { name: &str, value: &str, ) -> Result<(), Error> { - if let Some(cached_value) = self.config_cache.get(name) { + let name = Self::canonical_config_name(name); + if let Some(cached_value) = self.config_cache.get(&name) { if cached_value == value { return Ok(()); } } let mut cmd = self.git_cmd(repo); - cmd.arg("config").arg("set").arg(name).arg(value); + cmd.arg("config").arg("set").arg(&name).arg(value); self.run(&mut cmd).await?; - self.config_cache - .insert(name.to_string(), value.to_string()); + self.config_cache.insert(name, value.to_string()); Ok(()) } |
