summaryrefslogtreecommitdiff
path: root/server/common/src
diff options
context:
space:
mode:
Diffstat (limited to 'server/common/src')
-rw-r--r--server/common/src/git.rs40
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(())
}