mirror of
https://github.com/libgit2/libgit2.git
synced 2026-06-22 06:26:26 +00:00
Merge pull request #7218 from KoviRobi/main
revparse: Allow `HEAD` abbreviation `@`
This commit is contained in:
@@ -894,6 +894,9 @@ static bool is_valid_normalized_name(const char *name, size_t len)
|
||||
if (i == 0 && c == '^')
|
||||
continue; /* The first character is allowed to be "^" for negative refspecs */
|
||||
|
||||
if (len == 1 && c == '@')
|
||||
return true; /* Abbreviation for HEAD */
|
||||
|
||||
if ((c < 'A' || c > 'Z') && c != '_')
|
||||
return false;
|
||||
}
|
||||
@@ -965,11 +968,16 @@ int git_reference__normalize_name(
|
||||
process_flags &= ~GIT_REFERENCE_FORMAT_REFSPEC_PATTERN;
|
||||
|
||||
if (normalize) {
|
||||
size_t cur_len = git_str_len(buf);
|
||||
/* `<empty>@` (i.e. just `@`) is an alias for `HEAD` */
|
||||
if (segments_count == 0 && segment_len == 1 && current[0] == '@') {
|
||||
git_str_sets(buf, GIT_HEAD_FILE);
|
||||
} else {
|
||||
size_t cur_len = git_str_len(buf);
|
||||
|
||||
git_str_joinpath(buf, git_str_cstr(buf), current);
|
||||
git_str_truncate(buf,
|
||||
cur_len + segment_len + (segments_count ? 1 : 0));
|
||||
git_str_joinpath(buf, git_str_cstr(buf), current);
|
||||
git_str_truncate(buf,
|
||||
cur_len + segment_len + (segments_count ? 1 : 0));
|
||||
}
|
||||
|
||||
if (git_str_oom(buf)) {
|
||||
error = -1;
|
||||
|
||||
@@ -173,6 +173,14 @@ void test_refs_revparse__head(void)
|
||||
test_object("master", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750");
|
||||
}
|
||||
|
||||
void test_refs_revparse__head_abbrev(void)
|
||||
{
|
||||
test_object("@", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750");
|
||||
test_object("@^0", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750");
|
||||
test_object("@~0", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750");
|
||||
test_object("master", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750");
|
||||
}
|
||||
|
||||
void test_refs_revparse__full_refs(void)
|
||||
{
|
||||
test_object("refs/heads/master", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750");
|
||||
|
||||
Reference in New Issue
Block a user