mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-29 22:00:15 +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;
|
const char *rstr;
|
||||||
revspec->flags = GIT_REVPARSE_RANGE;
|
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);
|
lstr = git__substrdup(spec, dotdot - spec);
|
||||||
rstr = dotdot + 2;
|
rstr = dotdot + 2;
|
||||||
if (dotdot[2] == '.') {
|
if (dotdot[2] == '.') {
|
||||||
@ -899,9 +910,17 @@ int git_revparse(
|
|||||||
rstr++;
|
rstr++;
|
||||||
}
|
}
|
||||||
|
|
||||||
error = git_revparse_single(&revspec->from, repo, lstr);
|
error = git_revparse_single(
|
||||||
if (!error)
|
&revspec->from,
|
||||||
error = git_revparse_single(&revspec->to, repo, rstr);
|
repo,
|
||||||
|
*lstr == '\0' ? "HEAD" : lstr);
|
||||||
|
|
||||||
|
if (!error) {
|
||||||
|
error = git_revparse_single(
|
||||||
|
&revspec->to,
|
||||||
|
repo,
|
||||||
|
*rstr == '\0' ? "HEAD" : rstr);
|
||||||
|
}
|
||||||
|
|
||||||
git__free((void*)lstr);
|
git__free((void*)lstr);
|
||||||
} else {
|
} else {
|
||||||
|
@ -122,6 +122,14 @@ static void test_id(
|
|||||||
test_id_inrepo(spec, expected_left, expected_right, expected_flags, g_repo);
|
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)
|
void test_refs_revparse__initialize(void)
|
||||||
{
|
{
|
||||||
cl_git_pass(git_repository_open(&g_repo, cl_fixture("testrepo.git")));
|
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",
|
"4a202b346bb0fb0db7eff3cffeb3c70babbd2045",
|
||||||
"a65fedf39aefe402d3bb6e24df4d4f5fe4547750",
|
"a65fedf39aefe402d3bb6e24df4d4f5fe4547750",
|
||||||
GIT_REVPARSE_RANGE | GIT_REVPARSE_MERGE_BASE);
|
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)
|
void test_refs_revparse__ext_retrieves_both_the_reference_and_its_target(void)
|
||||||
|
Loading…
Reference in New Issue
Block a user