Message ID | 20190127194415.171035-2-sxenos@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v3,1/8] technical doc: add a design doc for the evolve command | expand |
sxenos@google.com writes: > Subject: Re: [PATCH v3 2/8] sha1-array: Implement oid_array_readonly_contains Style: s/: Implement/: implement/ > From: Stefan Xenos <sxenos@gmail.com> This line wants to say "Stefan Xenos <sxenos@google.com>" to match S-o-b below (I am assuming that you are following your employer's open source recommendation to contribute under your corp address). Perhaps you would want user.email set to the corp address? I am taking the above as an indication that the commits we are seeing here have been made under your @gmail.com address and that is why git-send-email is adding the in-body header. > diff --git a/sha1-array.c b/sha1-array.c > index b94e0ec0f5..071fce7e90 100644 > --- a/sha1-array.c > +++ b/sha1-array.c > @@ -26,6 +26,21 @@ static const unsigned char *sha1_access(size_t index, void *table) > return array[index].hash; > } > > +int oid_array_readonly_contains(const struct oid_array* array, > + const struct object_id* oid) > +{ > + int i; Style: blank between decl and first stmt, perhaps? > + if (array->sorted) { > + return sha1_pos(oid->hash, array->oid, array->nr, sha1_access) >= 0; No need for {} around a single statement. > + } > + for (i = 0; i < array->nr; i++) { > + if (hashcmp(array->oid[i].hash, oid->hash) == 0) { > + return 1; Likewise. > + } > + } > + return 0; > +} > ... > diff --git a/t/t0064-sha1-array.sh b/t/t0064-sha1-array.sh > index 5dda570b9a..c1bac6fcdd 100755 > --- a/t/t0064-sha1-array.sh > +++ b/t/t0064-sha1-array.sh > @@ -32,6 +32,28 @@ test_expect_success 'ordered enumeration with duplicate suppression' ' > test_cmp expect actual > ' > > +test_expect_success 'readonly_contains finds existing' ' > + echo 1 > expect && Style: no SP between redirection operator and its target, i.e. echo 1 >expect && > + echoid "" 88 44 aa 55 >> expect && Likewise. echoid "" 88 44 aa 55 >>expect &&
diff --git a/sha1-array.c b/sha1-array.c index b94e0ec0f5..071fce7e90 100644 --- a/sha1-array.c +++ b/sha1-array.c @@ -26,6 +26,21 @@ static const unsigned char *sha1_access(size_t index, void *table) return array[index].hash; } +int oid_array_readonly_contains(const struct oid_array* array, + const struct object_id* oid) +{ + int i; + if (array->sorted) { + return sha1_pos(oid->hash, array->oid, array->nr, sha1_access) >= 0; + } + for (i = 0; i < array->nr; i++) { + if (hashcmp(array->oid[i].hash, oid->hash) == 0) { + return 1; + } + } + return 0; +} + int oid_array_lookup(struct oid_array *array, const struct object_id *oid) { if (!array->sorted) diff --git a/sha1-array.h b/sha1-array.h index 232bf95017..7273bd5151 100644 --- a/sha1-array.h +++ b/sha1-array.h @@ -13,6 +13,8 @@ struct oid_array { void oid_array_append(struct oid_array *array, const struct object_id *oid); int oid_array_lookup(struct oid_array *array, const struct object_id *oid); void oid_array_clear(struct oid_array *array); +int oid_array_readonly_contains(const struct oid_array* array, + const struct object_id* oid); typedef int (*for_each_oid_fn)(const struct object_id *oid, void *data); diff --git a/t/helper/test-sha1-array.c b/t/helper/test-sha1-array.c index ad5e69f9d3..fefb1c984f 100644 --- a/t/helper/test-sha1-array.c +++ b/t/helper/test-sha1-array.c @@ -25,10 +25,16 @@ int cmd__sha1_array(int argc, const char **argv) if (get_oid_hex(arg, &oid)) die("not a hexadecimal SHA1: %s", arg); printf("%d\n", oid_array_lookup(&array, &oid)); + } else if (skip_prefix(line.buf, "readonly_contains ", &arg)) { + if (get_oid_hex(arg, &oid)) + die("not a hexadecimal SHA1: %s", arg); + printf("%d\n", oid_array_readonly_contains(&array, &oid)); } else if (!strcmp(line.buf, "clear")) oid_array_clear(&array); else if (!strcmp(line.buf, "for_each_unique")) oid_array_for_each_unique(&array, print_oid, NULL); + else if (!strcmp(line.buf, "for_each")) + oid_array_for_each(&array, print_oid, NULL); else die("unknown command: %s", line.buf); } diff --git a/t/t0064-sha1-array.sh b/t/t0064-sha1-array.sh index 5dda570b9a..c1bac6fcdd 100755 --- a/t/t0064-sha1-array.sh +++ b/t/t0064-sha1-array.sh @@ -32,6 +32,28 @@ test_expect_success 'ordered enumeration with duplicate suppression' ' test_cmp expect actual ' +test_expect_success 'readonly_contains finds existing' ' + echo 1 > expect && + echoid "" 88 44 aa 55 >> expect && + { + echoid append 88 44 aa 55 && + echoid readonly_contains 55 && + echo for_each + } | test-tool sha1-array >actual && + test_cmp expect actual +' + +test_expect_success 'readonly_contains non-existing query' ' + echo 0 > expect && + echoid "" 88 44 aa 55 >> expect && + { + echoid append 88 44 aa 55 && + echoid readonly_contains 33 && + echo for_each + } | test-tool sha1-array >actual && + test_cmp expect actual +' + test_expect_success 'lookup' ' { echoid append 88 44 aa 55 &&