Git fork
at reftables-rust 51 lines 1.2 kB view raw
1#define USE_THE_REPOSITORY_VARIABLE 2#include "builtin.h" 3#include "config.h" 4#include "environment.h" 5#include "hex.h" 6#include "object-file.h" 7#include "object-name.h" 8#include "odb.h" 9 10static char *create_temp_file(struct object_id *oid) 11{ 12 static char path[50]; 13 void *buf; 14 enum object_type type; 15 unsigned long size; 16 int fd; 17 18 buf = odb_read_object(the_repository->objects, oid, &type, &size); 19 if (!buf || type != OBJ_BLOB) 20 die("unable to read blob object %s", oid_to_hex(oid)); 21 22 xsnprintf(path, sizeof(path), ".merge_file_XXXXXX"); 23 fd = xmkstemp(path); 24 if (write_in_full(fd, buf, size) < 0) 25 die_errno("unable to write temp-file"); 26 close(fd); 27 free(buf); 28 return path; 29} 30 31static const char usage_msg[] = 32"git unpack-file <blob>"; 33 34int cmd_unpack_file(int argc, 35 const char **argv, 36 const char *prefix UNUSED, 37 struct repository *repo UNUSED) 38{ 39 struct object_id oid; 40 41 show_usage_if_asked(argc, argv, usage_msg); 42 if (argc != 2) 43 usage(usage_msg); 44 if (repo_get_oid(the_repository, argv[1], &oid)) 45 die("Not a valid object name %s", argv[1]); 46 47 repo_config(the_repository, git_default_config, NULL); 48 49 puts(create_temp_file(&oid)); 50 return 0; 51}