X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=builtin-tar-tree.c;h=58a8ccd4d6af0d755fca28b06a12ca9b8efa5300;hb=0e8a002c59cbaca692dac81320be44c965588291;hp=7663b9bd8e5f10ee45e34752f631d435687cf1b3;hpb=17cf250aff26d3baa6b311a3404f1a932e16cf17;p=git.git diff --git a/builtin-tar-tree.c b/builtin-tar-tree.c index 7663b9bd..58a8ccd4 100644 --- a/builtin-tar-tree.c +++ b/builtin-tar-tree.c @@ -402,3 +402,28 @@ int cmd_tar_tree(int argc, const char **argv, char **envp) return remote_tar(argc, argv); return generate_tar(argc, argv, envp); } + +/* ustar header + extended global header content */ +#define HEADERSIZE (2 * RECORDSIZE) + +int cmd_get_tar_commit_id(int argc, const char **argv, char **envp) +{ + char buffer[HEADERSIZE]; + struct ustar_header *header = (struct ustar_header *)buffer; + char *content = buffer + RECORDSIZE; + ssize_t n; + + n = xread(0, buffer, HEADERSIZE); + if (n < HEADERSIZE) + die("git-get-tar-commit-id: read error"); + if (header->typeflag[0] != 'g') + return 1; + if (memcmp(content, "52 comment=", 11)) + return 1; + + n = xwrite(1, content + 11, 41); + if (n < 41) + die("git-get-tar-commit-id: write error"); + + return 0; +}