From 52ba03cbb1c718093946f5254187082bd7b32845 Mon Sep 17 00:00:00 2001 From: Rene Scharfe Date: Sat, 10 Jun 2006 16:13:41 +0200 Subject: Built-in git-get-tar-commit-id By being an internal command git-get-commit-id can make use of struct ustar_header and other stuff and stops wasting precious disk space. Note: I recycled one of the two "tar-tree" entries instead of splitting that cleanup into a separate patch. Signed-off-by: Rene Scharfe Signed-off-by: Junio C Hamano diff --git a/Makefile b/Makefile index 5226fa1..2a1e639 100644 --- a/Makefile +++ b/Makefile @@ -144,7 +144,7 @@ SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \ # The ones that do not have to link with lcrypto, lz nor xdiff. SIMPLE_PROGRAMS = \ - git-get-tar-commit-id$X git-mailsplit$X \ + git-mailsplit$X \ git-stripspace$X git-daemon$X # ... and all the rest that could be moved out of bindir to gitexecdir @@ -169,7 +169,7 @@ BUILT_INS = git-log$X git-whatchanged$X git-show$X \ git-grep$X git-add$X git-rm$X git-rev-list$X \ git-check-ref-format$X git-rev-parse$X \ git-init-db$X git-tar-tree$X git-upload-tar$X git-format-patch$X \ - git-ls-files$X git-ls-tree$X \ + git-ls-files$X git-ls-tree$X git-get-tar-commit-id$X \ git-read-tree$X git-commit-tree$X \ git-apply$X git-show-branch$X git-diff-files$X \ git-diff-index$X git-diff-stages$X git-diff-tree$X git-cat-file$X diff --git a/builtin-tar-tree.c b/builtin-tar-tree.c index 7663b9b..58a8ccd 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; +} diff --git a/builtin.h b/builtin.h index ffa9340..b9f36be 100644 --- a/builtin.h +++ b/builtin.h @@ -32,6 +32,7 @@ extern int cmd_check_ref_format(int argc, const char **argv, char **envp); extern int cmd_init_db(int argc, const char **argv, char **envp); extern int cmd_tar_tree(int argc, const char **argv, char **envp); extern int cmd_upload_tar(int argc, const char **argv, char **envp); +extern int cmd_get_tar_commit_id(int argc, const char **argv, char **envp); extern int cmd_ls_files(int argc, const char **argv, char **envp); extern int cmd_ls_tree(int argc, const char **argv, char **envp); extern int cmd_read_tree(int argc, const char **argv, char **envp); diff --git a/get-tar-commit-id.c b/get-tar-commit-id.c deleted file mode 100644 index 4166290..0000000 --- a/get-tar-commit-id.c +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2005 Rene Scharfe - */ -#include -#include -#include - -#define HEADERSIZE 1024 - -int main(int argc, char **argv) -{ - char buffer[HEADERSIZE]; - ssize_t n; - - n = read(0, buffer, HEADERSIZE); - if (n < HEADERSIZE) { - fprintf(stderr, "read error\n"); - return 3; - } - if (buffer[156] != 'g') - return 1; - if (memcmp(&buffer[512], "52 comment=", 11)) - return 1; - n = write(1, &buffer[523], 41); - if (n < 41) { - fprintf(stderr, "write error\n"); - return 2; - } - return 0; -} diff --git a/git.c b/git.c index 6db8f2b..9469d44 100644 --- a/git.c +++ b/git.c @@ -163,7 +163,7 @@ static void handle_internal_command(int argc, const char **argv, char **envp) { "add", cmd_add }, { "rev-list", cmd_rev_list }, { "init-db", cmd_init_db }, - { "tar-tree", cmd_tar_tree }, + { "get-tar-commit-id", cmd_get_tar_commit_id }, { "upload-tar", cmd_upload_tar }, { "check-ref-format", cmd_check_ref_format }, { "ls-files", cmd_ls_files }, -- cgit v0.10.2-6-g49f6