summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@dwim.me>2015-06-26 17:45:33 +0200
committerCarlos Martín Nieto <cmn@dwim.me>2015-06-26 17:45:33 +0200
commit3c7a46978deedd012c8a024eff89b539e044f57d (patch)
tree2b25e1119d025aa62bea2b4851cbb319aa76d981
parent14888070b941824b7f6369c60d7600594d215577 (diff)
parent13e5e344a66ede4274d07ff95dcd241156fc2bdc (diff)
downloadlibgit2-3c7a46978deedd012c8a024eff89b539e044f57d.tar.gz
Merge pull request #3262 from libgit2/vmg/prefix-len
Desenfuckenate prefix lookups
-rw-r--r--src/object.c10
-rw-r--r--tests/diff/blob.c28
-rw-r--r--tests/refs/revparse.c15
3 files changed, 34 insertions, 19 deletions
diff --git a/src/object.c b/src/object.c
index a178e0ed3..1073559fd 100644
--- a/src/object.c
+++ b/src/object.c
@@ -129,10 +129,10 @@ int git_object_lookup_prefix(
if (error < 0)
return error;
- if (len > GIT_OID_RAWSZ)
- len = GIT_OID_RAWSZ;
+ if (len > GIT_OID_HEXSZ)
+ len = GIT_OID_HEXSZ;
- if (len == GIT_OID_RAWSZ) {
+ if (len == GIT_OID_HEXSZ) {
git_cached_obj *cached = NULL;
/* We want to match the full id : we can first look up in the cache,
@@ -172,9 +172,9 @@ int git_object_lookup_prefix(
memcpy(short_oid.id, id->id, (len + 1) / 2);
if (len % 2)
short_oid.id[len / 2] &= 0xF0;
- memset(short_oid.id + (len + 1) / 2, 0, (GIT_OID_RAWSZ - len) / 2);
+ memset(short_oid.id + (len + 1) / 2, 0, (GIT_OID_HEXSZ - len) / 2);
- /* If len < GIT_OID_RAWSZ (a strict short oid was given), we have
+ /* If len < GIT_OID_HEXSZ (a strict short oid was given), we have
* 2 options :
* - We always search in the cache first. If we find that short oid is
* ambiguous, we can stop. But in all the other cases, we must then
diff --git a/tests/diff/blob.c b/tests/diff/blob.c
index b0253f6dc..c3933c313 100644
--- a/tests/diff/blob.c
+++ b/tests/diff/blob.c
@@ -33,11 +33,11 @@ void test_diff_blob__initialize(void)
/* tests/resources/attr/root_test4.txt */
cl_git_pass(git_oid_fromstrn(&oid, "a0f7217a", 8));
- cl_git_pass(git_blob_lookup_prefix(&d, g_repo, &oid, 4));
+ cl_git_pass(git_blob_lookup_prefix(&d, g_repo, &oid, 8));
/* alien.png */
cl_git_pass(git_oid_fromstrn(&oid, "edf3dcee", 8));
- cl_git_pass(git_blob_lookup_prefix(&alien, g_repo, &oid, 4));
+ cl_git_pass(git_blob_lookup_prefix(&alien, g_repo, &oid, 8));
}
void test_diff_blob__cleanup(void)
@@ -80,7 +80,7 @@ void test_diff_blob__can_compare_text_blobs(void)
/* tests/resources/attr/root_test3 */
cl_git_pass(git_oid_fromstrn(&c_oid, "c96bbb2c2557a832", 16));
- cl_git_pass(git_blob_lookup_prefix(&c, g_repo, &c_oid, 8));
+ cl_git_pass(git_blob_lookup_prefix(&c, g_repo, &c_oid, 16));
/* Doing the equivalent of a `git diff -U1` on these files */
@@ -163,15 +163,15 @@ void test_diff_blob__can_compare_text_blobs_with_patch(void)
/* tests/resources/attr/root_test1 */
cl_git_pass(git_oid_fromstrn(&a_oid, "45141a79", 8));
- cl_git_pass(git_blob_lookup_prefix(&a, g_repo, &a_oid, 4));
+ cl_git_pass(git_blob_lookup_prefix(&a, g_repo, &a_oid, 8));
/* tests/resources/attr/root_test2 */
cl_git_pass(git_oid_fromstrn(&b_oid, "4d713dc4", 8));
- cl_git_pass(git_blob_lookup_prefix(&b, g_repo, &b_oid, 4));
+ cl_git_pass(git_blob_lookup_prefix(&b, g_repo, &b_oid, 8));
/* tests/resources/attr/root_test3 */
cl_git_pass(git_oid_fromstrn(&c_oid, "c96bbb2c2557a832", 16));
- cl_git_pass(git_blob_lookup_prefix(&c, g_repo, &c_oid, 8));
+ cl_git_pass(git_blob_lookup_prefix(&c, g_repo, &c_oid, 16));
/* Doing the equivalent of a `git diff -U1` on these files */
@@ -437,7 +437,7 @@ void test_diff_blob__can_compare_two_binary_blobs(void)
/* heart.png */
cl_git_pass(git_oid_fromstrn(&h_oid, "de863bff", 8));
- cl_git_pass(git_blob_lookup_prefix(&heart, g_repo, &h_oid, 4));
+ cl_git_pass(git_blob_lookup_prefix(&heart, g_repo, &h_oid, 8));
cl_git_pass(git_diff_blobs(
alien, NULL, heart, NULL, &opts,
@@ -505,7 +505,7 @@ void test_diff_blob__comparing_two_text_blobs_honors_interhunkcontext(void)
/* tests/resources/attr/root_test1 from commit f5b0af1 */
cl_git_pass(git_oid_fromstrn(&old_d_oid, "fe773770", 8));
- cl_git_pass(git_blob_lookup_prefix(&old_d, g_repo, &old_d_oid, 4));
+ cl_git_pass(git_blob_lookup_prefix(&old_d, g_repo, &old_d_oid, 8));
/* Test with default inter-hunk-context (not set) => default is 0 */
cl_git_pass(git_diff_blobs(
@@ -598,7 +598,7 @@ void test_diff_blob__can_compare_blob_to_buffer(void)
/* tests/resources/attr/root_test1 */
cl_git_pass(git_oid_fromstrn(&a_oid, "45141a79", 8));
- cl_git_pass(git_blob_lookup_prefix(&a, g_repo, &a_oid, 4));
+ cl_git_pass(git_blob_lookup_prefix(&a, g_repo, &a_oid, 8));
/* diff from blob a to content of b */
quick_diff_blob_to_str(a, NULL, b_content, 0, NULL);
@@ -640,7 +640,7 @@ void test_diff_blob__can_compare_blob_to_buffer_with_patch(void)
/* tests/resources/attr/root_test1 */
cl_git_pass(git_oid_fromstrn(&a_oid, "45141a79", 8));
- cl_git_pass(git_blob_lookup_prefix(&a, g_repo, &a_oid, 4));
+ cl_git_pass(git_blob_lookup_prefix(&a, g_repo, &a_oid, 8));
/* diff from blob a to content of b */
cl_git_pass(git_patch_from_blob_and_buffer(
@@ -719,10 +719,10 @@ void test_diff_blob__binary_data_comparisons(void)
opts.flags |= GIT_DIFF_INCLUDE_UNMODIFIED;
cl_git_pass(git_oid_fromstrn(&oid, "45141a79", 8));
- cl_git_pass(git_blob_lookup_prefix(&nonbin, g_repo, &oid, 4));
+ cl_git_pass(git_blob_lookup_prefix(&nonbin, g_repo, &oid, 8));
cl_git_pass(git_oid_fromstrn(&oid, "b435cd56", 8));
- cl_git_pass(git_blob_lookup_prefix(&bin, g_repo, &oid, 4));
+ cl_git_pass(git_blob_lookup_prefix(&bin, g_repo, &oid, 8));
/* non-binary to reference content */
@@ -825,11 +825,11 @@ void test_diff_blob__using_path_and_attributes(void)
opts.flags |= GIT_DIFF_INCLUDE_UNMODIFIED;
cl_git_pass(git_oid_fromstrn(&oid, "45141a79", 8));
- cl_git_pass(git_blob_lookup_prefix(&nonbin, g_repo, &oid, 4));
+ cl_git_pass(git_blob_lookup_prefix(&nonbin, g_repo, &oid, 8));
/* 20b: "Hello from the root\n" */
cl_git_pass(git_oid_fromstrn(&oid, "b435cd56", 8));
- cl_git_pass(git_blob_lookup_prefix(&bin, g_repo, &oid, 4));
+ cl_git_pass(git_blob_lookup_prefix(&bin, g_repo, &oid, 8));
/* 33b: "0123456789\n\x01\x02\x03\x04\x05\x06\x07\x08\x09\n0123456789\n" */
/* non-binary to reference content */
diff --git a/tests/refs/revparse.c b/tests/refs/revparse.c
index 3f89b5f77..c22c30440 100644
--- a/tests/refs/revparse.c
+++ b/tests/refs/revparse.c
@@ -812,3 +812,18 @@ void test_refs_revparse__ext_returns_NULL_reference_when_expression_points_at_a_
"0266163a49e280c4f5ed1e08facd36a2bd716bcf",
NULL);
}
+
+void test_refs_revparse__uneven_sizes(void)
+{
+ test_object("a65fedf39aefe402d3bb6e24df4d4f5fe454775",
+ "a65fedf39aefe402d3bb6e24df4d4f5fe4547750");
+
+ test_object("a65fedf39aefe402d3bb6e24df4d4f5fe45477",
+ "a65fedf39aefe402d3bb6e24df4d4f5fe4547750");
+
+ test_object("a65fedf39aefe402d3bb6e24df4d4f5fe4547",
+ "a65fedf39aefe402d3bb6e24df4d4f5fe4547750");
+
+ test_object("a65fedf39aefe402d3bb6e24df4d",
+ "a65fedf39aefe402d3bb6e24df4d4f5fe4547750");
+}