diff --git a/crates/tabby-git/src/lib.rs b/crates/tabby-git/src/lib.rs index 90a37b3c3a72..affab71ea926 100644 --- a/crates/tabby-git/src/lib.rs +++ b/crates/tabby-git/src/lib.rs @@ -110,8 +110,16 @@ pub fn sync_refs(root: &Path, url: &str, refs: &Vec) -> anyhow::Result<( } for ref_name in refs { - let branch = ref_name.rsplit('/').next().unwrap_or(ref_name); + let branch = if let Some(branch) = ref_name.strip_prefix("refs/heads/") { + branch + } else if let Some(tag) = ref_name.strip_prefix("refs/tags/") { + tag + } else { + ref_name + }; + // get the current branch name without refs/ prefix + let output = Command::new("git") .current_dir(root) .arg("symbolic-ref") diff --git a/ee/tabby-webserver/src/service/repository/git.rs b/ee/tabby-webserver/src/service/repository/git.rs index 5875d39e35da..de65c81ea642 100644 --- a/ee/tabby-webserver/src/service/repository/git.rs +++ b/ee/tabby-webserver/src/service/repository/git.rs @@ -155,15 +155,28 @@ fn to_git_repository(repo: RepositoryDAO, job_info: JobInfo) -> GitRepository { let refs = if let Some(refs) = &repo.refs { let config_refs: Vec = serde_json::from_str(refs).unwrap_or_default(); - all_refs + config_refs .into_iter() - .filter(|r| { - let ref_name = r.name.rsplit('/').next().unwrap_or(&r.name); - config_refs.iter().any(|cr| cr == ref_name) - }) - .map(|r| GitReference { - name: r.name, - commit: r.commit, + .map(|name| { + let ref_name = all_refs + .iter() + .find(|r| { + r.name == format!("refs/heads/{}", name) + || r.name == format!("refs/tags/{}", name) + }) + .map(|r| r.name.clone()) + .unwrap_or(format!("refs/heads/{}", name)); + + let commit = all_refs + .iter() + .find(|r| r.name == ref_name) + .map(|r| r.commit.clone()) + .unwrap_or_default(); + + GitReference { + name: ref_name, + commit, + } }) .collect() } else { diff --git a/ee/tabby-webserver/src/service/repository/third_party.rs b/ee/tabby-webserver/src/service/repository/third_party.rs index 5c2cb261949b..7592b9389645 100644 --- a/ee/tabby-webserver/src/service/repository/third_party.rs +++ b/ee/tabby-webserver/src/service/repository/third_party.rs @@ -312,14 +312,23 @@ fn to_provided_repository(value: ProvidedRepositoryDAO, job_info: JobInfo) -> Pr config_refs .into_iter() .map(|name| { + let ref_name = all_refs + .iter() + .find(|r| { + r.name == format!("refs/heads/{}", name) + || r.name == format!("refs/tags/{}", name) + }) + .map(|r| r.name.clone()) + .unwrap_or(format!("refs/heads/{}", name)); + let commit = all_refs .iter() - .find(|r| r.name.rsplit('/').next().unwrap_or(&r.name) == name.as_str()) + .find(|r| r.name == ref_name) .map(|r| r.commit.clone()) .unwrap_or_default(); GitReference { - name: format!("refs/heads/{name}"), + name: ref_name, commit, } })