fetching packs and storing them as packs
From: Nicolas Pitre <hidden>
Date: 2016-08-11 19:25:56
Subsystem:
the rest · Maintainer:
Linus Torvalds
With the last few patches I just posted it is now possible to receive (fetch) packs, validate them on the fly, complete them if they are thin packs, and store them directly without exploding them into loose objects. There are advantages and inconvenients to both methods, so I think this should become a configuration option and/or even a command line argument to git-fetch. I think there are many more advantages to keeping packs packed hence I think using index-pack should become the default. But I'm a bit tired to play with it and the final integration is for someone else to do. I've tested it lightly using the extremely crude patch below to hook it in the fetch process. Have fun!
diff --git a/fetch-clone.c b/fetch-clone.c
index 76b99af..28796c3 100644
--- a/fetch-clone.c
+++ b/fetch-clone.c@@ -142,7 +142,8 @@ int receive_unpack_pack(int xd[2], const dup2(fd[0], 0); close(fd[0]); close(fd[1]); - execl_git_cmd("unpack-objects", quiet ? "-q" : NULL, NULL); + execl_git_cmd("index-pack", "--stdin", "--fix-thin", + quiet ? NULL : "-v", NULL); die("git-unpack-objects exec failed"); } close(fd[0]);
diff --git a/receive-pack.c b/receive-pack.c
index 1fcf3a9..7f6dc49 100644
--- a/receive-pack.c
+++ b/receive-pack.c@@ -7,7 +7,7 @@ static const char receive_pack_usage[] = "git-receive-pack <git-dir>"; -static const char *unpacker[] = { "unpack-objects", NULL }; +static const char *unpacker[] = { "index-pack", "-v", "--stdin", "--fix-thin", NULL }; static int report_status;