From b53258182bf90b4fb922a20d164a02e6f0e9afd1 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Fri, 22 Jan 2010 07:38:03 -0800 Subject: make "git unpack-file" a built-in Signed-off-by: Linus Torvalds Signed-off-by: Junio C Hamano diff --git a/Makefile b/Makefile index c5a1190..88e2f8f 100644 --- a/Makefile +++ b/Makefile @@ -392,7 +392,6 @@ PROGRAMS += git-index-pack$X PROGRAMS += git-pack-redundant$X PROGRAMS += git-shell$X PROGRAMS += git-show-index$X -PROGRAMS += git-unpack-file$X PROGRAMS += git-upload-pack$X PROGRAMS += git-http-backend$X @@ -698,6 +697,7 @@ BUILTIN_OBJS += builtin-stripspace.o BUILTIN_OBJS += builtin-symbolic-ref.o BUILTIN_OBJS += builtin-tag.o BUILTIN_OBJS += builtin-tar-tree.o +BUILTIN_OBJS += builtin-unpack-file.o BUILTIN_OBJS += builtin-unpack-objects.o BUILTIN_OBJS += builtin-update-index.o BUILTIN_OBJS += builtin-update-ref.o diff --git a/builtin-unpack-file.c b/builtin-unpack-file.c new file mode 100644 index 0000000..608590a --- /dev/null +++ b/builtin-unpack-file.c @@ -0,0 +1,38 @@ +#include "cache.h" +#include "blob.h" +#include "exec_cmd.h" + +static char *create_temp_file(unsigned char *sha1) +{ + static char path[50]; + void *buf; + enum object_type type; + unsigned long size; + int fd; + + buf = read_sha1_file(sha1, &type, &size); + if (!buf || type != OBJ_BLOB) + die("unable to read blob object %s", sha1_to_hex(sha1)); + + strcpy(path, ".merge_file_XXXXXX"); + fd = xmkstemp(path); + if (write_in_full(fd, buf, size) != size) + die_errno("unable to write temp-file"); + close(fd); + return path; +} + +int cmd_unpack_file(int argc, const char **argv, const char *prefix) +{ + unsigned char sha1[20]; + + if (argc != 2 || !strcmp(argv[1], "-h")) + usage("git unpack-file "); + if (get_sha1(argv[1], sha1)) + die("Not a valid object name %s", argv[1]); + + git_config(git_default_config, NULL); + + puts(create_temp_file(sha1)); + return 0; +} diff --git a/builtin.h b/builtin.h index 2aaef74..d4fec89 100644 --- a/builtin.h +++ b/builtin.h @@ -103,6 +103,7 @@ extern int cmd_stripspace(int argc, const char **argv, const char *prefix); extern int cmd_symbolic_ref(int argc, const char **argv, const char *prefix); extern int cmd_tag(int argc, const char **argv, const char *prefix); extern int cmd_tar_tree(int argc, const char **argv, const char *prefix); +extern int cmd_unpack_file(int argc, const char **argv, const char *prefix); extern int cmd_unpack_objects(int argc, const char **argv, const char *prefix); extern int cmd_update_index(int argc, const char **argv, const char *prefix); extern int cmd_update_ref(int argc, const char **argv, const char *prefix); diff --git a/git.c b/git.c index 0b8f8a7..832bd2d 100644 --- a/git.c +++ b/git.c @@ -370,6 +370,7 @@ static void handle_internal_command(int argc, const char **argv) { "symbolic-ref", cmd_symbolic_ref, RUN_SETUP }, { "tag", cmd_tag, RUN_SETUP }, { "tar-tree", cmd_tar_tree }, + { "unpack-file", cmd_unpack_file, RUN_SETUP }, { "unpack-objects", cmd_unpack_objects, RUN_SETUP }, { "update-index", cmd_update_index, RUN_SETUP }, { "update-ref", cmd_update_ref, RUN_SETUP }, diff --git a/unpack-file.c b/unpack-file.c deleted file mode 100644 index e9d8934..0000000 --- a/unpack-file.c +++ /dev/null @@ -1,41 +0,0 @@ -#include "cache.h" -#include "blob.h" -#include "exec_cmd.h" - -static char *create_temp_file(unsigned char *sha1) -{ - static char path[50]; - void *buf; - enum object_type type; - unsigned long size; - int fd; - - buf = read_sha1_file(sha1, &type, &size); - if (!buf || type != OBJ_BLOB) - die("unable to read blob object %s", sha1_to_hex(sha1)); - - strcpy(path, ".merge_file_XXXXXX"); - fd = xmkstemp(path); - if (write_in_full(fd, buf, size) != size) - die_errno("unable to write temp-file"); - close(fd); - return path; -} - -int main(int argc, char **argv) -{ - unsigned char sha1[20]; - - git_extract_argv0_path(argv[0]); - - if (argc != 2 || !strcmp(argv[1], "-h")) - usage("git unpack-file "); - if (get_sha1(argv[1], sha1)) - die("Not a valid object name %s", argv[1]); - - setup_git_directory(); - git_config(git_default_config, NULL); - - puts(create_temp_file(sha1)); - return 0; -} -- cgit v0.10.2-6-g49f6