t1016-compatObjectFormat: add tests to verify the conversion between objects
For now my strategy is simple. Create two identical repositories one in each format. Use fixed timestamps. Verify the dynamically computed compatibility objects from one repository match the objects stored in the other repository. A general limitation of this strategy is that the git when generating signed tags and commits with compatObjectFormat enabled will generate a signature for both formats. To overcome this limitation I have added "test-tool delete-gpgsig" that when fed an signed commit or tag with two signatures deletes one of the signatures. With that in place I can have "git commit" and "git tag" generate signed objects, have my tool delete one, and feed the new object into "git hash-object" to create the kinds of commits and tags git without compatObjectFormat enabled will generate. Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
3afa8d86ac
commit
7673ecd2dc
62
t/helper/test-delete-gpgsig.c
Normal file
62
t/helper/test-delete-gpgsig.c
Normal file
@ -0,0 +1,62 @@
|
||||
#include "test-tool.h"
|
||||
#include "gpg-interface.h"
|
||||
#include "strbuf.h"
|
||||
|
||||
|
||||
int cmd__delete_gpgsig(int argc, const char **argv)
|
||||
{
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
const char *pattern = "gpgsig";
|
||||
const char *bufptr, *tail, *eol;
|
||||
int deleting = 0;
|
||||
size_t plen;
|
||||
|
||||
if (argc >= 2) {
|
||||
pattern = argv[1];
|
||||
argv++;
|
||||
argc--;
|
||||
}
|
||||
|
||||
plen = strlen(pattern);
|
||||
strbuf_read(&buf, 0, 0);
|
||||
|
||||
if (!strcmp(pattern, "trailer")) {
|
||||
size_t payload_size = parse_signed_buffer(buf.buf, buf.len);
|
||||
fwrite(buf.buf, 1, payload_size, stdout);
|
||||
fflush(stdout);
|
||||
return 0;
|
||||
}
|
||||
|
||||
bufptr = buf.buf;
|
||||
tail = bufptr + buf.len;
|
||||
|
||||
while (bufptr < tail) {
|
||||
/* Find the end of the line */
|
||||
eol = memchr(bufptr, '\n', tail - bufptr);
|
||||
if (!eol)
|
||||
eol = tail;
|
||||
|
||||
/* Drop continuation lines */
|
||||
if (deleting && (bufptr < eol) && (bufptr[0] == ' ')) {
|
||||
bufptr = eol + 1;
|
||||
continue;
|
||||
}
|
||||
deleting = 0;
|
||||
|
||||
/* Does the line match the prefix? */
|
||||
if (((bufptr + plen) < eol) &&
|
||||
!memcmp(bufptr, pattern, plen) &&
|
||||
(bufptr[plen] == ' ')) {
|
||||
deleting = 1;
|
||||
bufptr = eol + 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Print all other lines */
|
||||
fwrite(bufptr, 1, (eol - bufptr) + 1, stdout);
|
||||
bufptr = eol + 1;
|
||||
}
|
||||
fflush(stdout);
|
||||
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user