mirror of
https://git.proxmox.com/git/libgit2
synced 2026-01-03 19:59:33 +00:00
Parse shorthand refspecs as valid
Relax the ONELEVEL ref naming rules so the refspec parsing code can ask for 'master' to be considered valid.
This commit is contained in:
parent
78bf2944ed
commit
528a4e24c6
@ -422,6 +422,13 @@ typedef enum {
|
||||
* (e.g., foo/<star>/bar but not foo/bar<star>).
|
||||
*/
|
||||
GIT_REF_FORMAT_REFSPEC_PATTERN = (1 << 1),
|
||||
|
||||
/**
|
||||
* Interpret the name as part of a refspec in shorthand form
|
||||
* so the `ONELEVEL` naming rules aren't enforced and 'master'
|
||||
* becomes a valid name.
|
||||
*/
|
||||
GIT_REF_FORMAT_REFSPEC_SHORTHAND = (1 << 2),
|
||||
} git_reference_normalize_t;
|
||||
|
||||
/**
|
||||
|
||||
@ -752,6 +752,7 @@ int git_reference__normalize_name(
|
||||
goto cleanup;
|
||||
|
||||
if ((segments_count == 1 ) &&
|
||||
!(flags & GIT_REF_FORMAT_REFSPEC_SHORTHAND) &&
|
||||
!(is_all_caps_and_underscore(name, (size_t)segment_len) ||
|
||||
((flags & GIT_REF_FORMAT_REFSPEC_PATTERN) && !strcmp("*", name))))
|
||||
goto cleanup;
|
||||
|
||||
@ -60,7 +60,7 @@ int git_refspec__parse(git_refspec *refspec, const char *input, bool is_fetch)
|
||||
|
||||
refspec->pattern = is_glob;
|
||||
refspec->src = git__strndup(lhs, llen);
|
||||
flags = GIT_REF_FORMAT_ALLOW_ONELEVEL
|
||||
flags = GIT_REF_FORMAT_ALLOW_ONELEVEL | GIT_REF_FORMAT_REFSPEC_SHORTHAND
|
||||
| (is_glob ? GIT_REF_FORMAT_REFSPEC_PATTERN : 0);
|
||||
|
||||
if (is_fetch) {
|
||||
|
||||
@ -81,4 +81,7 @@ void test_network_refspecs__parsing(void)
|
||||
|
||||
assert_refspec(GIT_DIRECTION_FETCH, "refs/heads/*/for-linus:refs/remotes/mine/*", true);
|
||||
assert_refspec(GIT_DIRECTION_PUSH, "refs/heads/*/for-linus:refs/remotes/mine/*", true);
|
||||
|
||||
assert_refspec(GIT_DIRECTION_FETCH, "master", true);
|
||||
assert_refspec(GIT_DIRECTION_PUSH, "master", true);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user