Add "unpack-file" helper that unpacks a sha1 blob into a tmpfile.
This commit is contained in:
parent
e590d694ea
commit
3407bb4940
6
Makefile
6
Makefile
@ -15,7 +15,7 @@ AR=ar
|
||||
|
||||
PROG= update-cache show-diff init-db write-tree read-tree commit-tree \
|
||||
cat-file fsck-cache checkout-cache diff-tree rev-tree show-files \
|
||||
check-files ls-tree merge-base merge-cache
|
||||
check-files ls-tree merge-base merge-cache unpack-file
|
||||
|
||||
all: $(PROG)
|
||||
|
||||
@ -78,6 +78,9 @@ merge-base: merge-base.o $(LIB_FILE) object.o commit.o tree.o blob.o
|
||||
merge-cache: merge-cache.o $(LIB_FILE)
|
||||
$(CC) $(CFLAGS) -o merge-cache merge-cache.o $(LIBS)
|
||||
|
||||
unpack-file: unpack-file.o $(LIB_FILE)
|
||||
$(CC) $(CFLAGS) -o unpack-file unpack-file.o $(LIBS)
|
||||
|
||||
blob.o: $(LIB_H)
|
||||
cat-file.o: $(LIB_H)
|
||||
check-files.o: $(LIB_H)
|
||||
@ -100,6 +103,7 @@ show-files.o: $(LIB_H)
|
||||
tree.o: $(LIB_H)
|
||||
update-cache.o: $(LIB_H)
|
||||
usage.o: $(LIB_H)
|
||||
unpack-file.o: $(LIB_H)
|
||||
write-tree.o: $(LIB_H)
|
||||
|
||||
clean:
|
||||
|
34
unpack-file.c
Normal file
34
unpack-file.c
Normal file
@ -0,0 +1,34 @@
|
||||
#include "cache.h"
|
||||
|
||||
static char *create_temp_file(unsigned char *sha1)
|
||||
{
|
||||
static char path[50];
|
||||
void *buf;
|
||||
char type[100];
|
||||
unsigned long size;
|
||||
int fd;
|
||||
|
||||
buf = read_sha1_file(sha1, type, &size);
|
||||
if (!buf || strcmp(type, "blob"))
|
||||
die("unable to read blob object %s", sha1_to_hex(sha1));
|
||||
|
||||
strcpy(path, ".merge_file_XXXXXX");
|
||||
fd = mkstemp(path);
|
||||
if (fd < 0)
|
||||
die("unable to create temp-file");
|
||||
if (write(fd, buf, size) != size)
|
||||
die("unable to write temp-file");
|
||||
close(fd);
|
||||
return path;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
unsigned char sha1[20];
|
||||
|
||||
if (argc != 2 || get_sha1_hex(argv[1], sha1))
|
||||
usage("unpack-file.c <sha1>");
|
||||
|
||||
puts(create_temp_file(sha1));
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user