mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-28 17:24:59 +00:00
Merge pull request #4231 from wabain/open-revrange
revparse: support open-ended ranges
This commit is contained in:
commit
119bdd8658
@ -892,6 +892,17 @@ int git_revparse(
|
||||
const char *rstr;
|
||||
revspec->flags = GIT_REVPARSE_RANGE;
|
||||
|
||||
/*
|
||||
* Following git.git, don't allow '..' because it makes command line
|
||||
* arguments which can be either paths or revisions ambiguous when the
|
||||
* path is almost certainly intended. The empty range '...' is still
|
||||
* allowed.
|
||||
*/
|
||||
if (!git__strcmp(spec, "..")) {
|
||||
giterr_set(GITERR_INVALID, "Invalid pattern '..'");
|
||||
return GIT_EINVALIDSPEC;
|
||||
}
|
||||
|
||||
lstr = git__substrdup(spec, dotdot - spec);
|
||||
rstr = dotdot + 2;
|
||||
if (dotdot[2] == '.') {
|
||||
@ -899,9 +910,17 @@ int git_revparse(
|
||||
rstr++;
|
||||
}
|
||||
|
||||
error = git_revparse_single(&revspec->from, repo, lstr);
|
||||
if (!error)
|
||||
error = git_revparse_single(&revspec->to, repo, rstr);
|
||||
error = git_revparse_single(
|
||||
&revspec->from,
|
||||
repo,
|
||||
*lstr == '\0' ? "HEAD" : lstr);
|
||||
|
||||
if (!error) {
|
||||
error = git_revparse_single(
|
||||
&revspec->to,
|
||||
repo,
|
||||
*rstr == '\0' ? "HEAD" : rstr);
|
||||
}
|
||||
|
||||
git__free((void*)lstr);
|
||||
} else {
|
||||
|
@ -122,6 +122,14 @@ static void test_id(
|
||||
test_id_inrepo(spec, expected_left, expected_right, expected_flags, g_repo);
|
||||
}
|
||||
|
||||
static void test_invalid_revspec(const char* invalid_spec)
|
||||
{
|
||||
git_revspec revspec;
|
||||
|
||||
cl_assert_equal_i(
|
||||
GIT_EINVALIDSPEC, git_revparse(&revspec, g_repo, invalid_spec));
|
||||
}
|
||||
|
||||
void test_refs_revparse__initialize(void)
|
||||
{
|
||||
cl_git_pass(git_repository_open(&g_repo, cl_fixture("testrepo.git")));
|
||||
@ -749,6 +757,33 @@ void test_refs_revparse__parses_range_operator(void)
|
||||
"4a202b346bb0fb0db7eff3cffeb3c70babbd2045",
|
||||
"a65fedf39aefe402d3bb6e24df4d4f5fe4547750",
|
||||
GIT_REVPARSE_RANGE | GIT_REVPARSE_MERGE_BASE);
|
||||
|
||||
test_id("HEAD~3..",
|
||||
"4a202b346bb0fb0db7eff3cffeb3c70babbd2045",
|
||||
"a65fedf39aefe402d3bb6e24df4d4f5fe4547750",
|
||||
GIT_REVPARSE_RANGE);
|
||||
|
||||
test_id("HEAD~3...",
|
||||
"4a202b346bb0fb0db7eff3cffeb3c70babbd2045",
|
||||
"a65fedf39aefe402d3bb6e24df4d4f5fe4547750",
|
||||
GIT_REVPARSE_RANGE | GIT_REVPARSE_MERGE_BASE);
|
||||
|
||||
test_id("..HEAD~3",
|
||||
"a65fedf39aefe402d3bb6e24df4d4f5fe4547750",
|
||||
"4a202b346bb0fb0db7eff3cffeb3c70babbd2045",
|
||||
GIT_REVPARSE_RANGE);
|
||||
|
||||
test_id("...HEAD~3",
|
||||
"a65fedf39aefe402d3bb6e24df4d4f5fe4547750",
|
||||
"4a202b346bb0fb0db7eff3cffeb3c70babbd2045",
|
||||
GIT_REVPARSE_RANGE | GIT_REVPARSE_MERGE_BASE);
|
||||
|
||||
test_id("...",
|
||||
"a65fedf39aefe402d3bb6e24df4d4f5fe4547750",
|
||||
"a65fedf39aefe402d3bb6e24df4d4f5fe4547750",
|
||||
GIT_REVPARSE_RANGE | GIT_REVPARSE_MERGE_BASE);
|
||||
|
||||
test_invalid_revspec("..");
|
||||
}
|
||||
|
||||
void test_refs_revparse__ext_retrieves_both_the_reference_and_its_target(void)
|
||||
|
Loading…
Reference in New Issue
Block a user