mirror of
https://github.com/git/git
synced 2024-08-28 20:20:07 +00:00
![Eric W. Biederman](/assets/img/avatar_default.png)
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>
63 lines
1.2 KiB
C
63 lines
1.2 KiB
C
#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;
|
|
}
|