tree-sitter-cli: build: add support for git submodules (#422)
The .git file can contain a reference to the actual git directory as is commonly the case for a submodule[1]. When this is the case, read the .git file to discover the actual git directory. * cli/build.rs: Read the .git file to discover the git directory [1] https://git-scm.com/docs/gitrepository-layout
This commit is contained in:
parent
13c0aa7dbb
commit
276d3cb5ad
1 changed files with 10 additions and 2 deletions
12
cli/build.rs
12
cli/build.rs
|
|
@ -25,7 +25,15 @@ fn read_git_sha() -> Option<String> {
|
|||
}
|
||||
}
|
||||
|
||||
let git_head_path = git_path.join("HEAD");
|
||||
let git_dir_path;
|
||||
if git_path.is_dir() {
|
||||
git_dir_path = git_path;
|
||||
} else if let Ok(git_path_content) = fs::read_to_string(&git_path) {
|
||||
git_dir_path = repo_path.join(git_path_content.get("gitdir: ".len()..).unwrap().trim_end());
|
||||
} else {
|
||||
return None;
|
||||
}
|
||||
let git_head_path = git_dir_path.join("HEAD");
|
||||
if let Some(path) = git_head_path.to_str() {
|
||||
println!("cargo:rerun-if-changed={}", path);
|
||||
}
|
||||
|
|
@ -37,7 +45,7 @@ fn read_git_sha() -> Option<String> {
|
|||
// If we're on a branch, read the SHA from the ref file.
|
||||
if head_content.starts_with("ref: ") {
|
||||
head_content.replace_range(0.."ref: ".len(), "");
|
||||
let ref_filename = git_path.join(&head_content);
|
||||
let ref_filename = git_dir_path.join(&head_content);
|
||||
if let Some(path) = ref_filename.to_str() {
|
||||
println!("cargo:rerun-if-changed={}", path);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue