From: Jeff Hostetler <jeffhost@microsoft.com>
To: git@vger.kernel.org
Cc: jeffhost@microsoft.com, peff@peff.net, gitster@pobox.com,
markbt@efaref.net, benpeart@microsoft.com,
jonathantanmy@google.com, Jeff Hostetler <git@jeffhostetler.com>
Subject: [PATCH 07/10] index-pack: add --allow-partial option to relax blob existence checks
Date: Wed, 8 Mar 2017 17:38:02 +0000 [thread overview]
Message-ID: <1488994685-37403-8-git-send-email-jeffhost@microsoft.com> (raw)
In-Reply-To: <1488994685-37403-1-git-send-email-jeffhost@microsoft.com>
From: Jeff Hostetler <git@jeffhostetler.com>
Teach index-pack to optionally not complain when there are missing
blobs. This is for use following a partial clone or fetch when
the server omitted certain blobs.
Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
---
builtin/index-pack.c | 20 ++++++++++++++++++--
1 file changed, 18 insertions(+), 2 deletions(-)
diff --git a/builtin/index-pack.c b/builtin/index-pack.c
index f4b87c6..8f99408 100644
--- a/builtin/index-pack.c
+++ b/builtin/index-pack.c
@@ -13,7 +13,7 @@
#include "thread-utils.h"
static const char index_pack_usage[] =
-"git index-pack [-v] [-o <index-file>] [--keep | --keep=<msg>] [--verify] [--strict] (<pack-file> | --stdin [--fix-thin] [<pack-file>])";
+"git index-pack [-v] [-o <index-file>] [--keep | --keep=<msg>] [--verify] [--allow-partial] [--strict] (<pack-file> | --stdin [--fix-thin] [<pack-file>])";
struct object_entry {
struct pack_idx_entry idx;
@@ -81,6 +81,9 @@ static int show_resolving_progress;
static int show_stat;
static int check_self_contained_and_connected;
+static int allow_partial;
+static struct trace_key trace_partial = TRACE_KEY_INIT(PARTIAL);
+
static struct progress *progress;
/* We always read in 4kB chunks. */
@@ -220,9 +223,18 @@ static unsigned check_object(struct object *obj)
if (!(obj->flags & FLAG_CHECKED)) {
unsigned long size;
int type = sha1_object_info(obj->oid.hash, &size);
- if (type <= 0)
+ if (type <= 0) {
+ if (allow_partial > 0 && obj->type == OBJ_BLOB) {
+ /* Assume a previous partial clone/fetch omitted it. */
+ trace_printf_key(
+ &trace_partial, "omitted blob '%s'\n",
+ oid_to_hex(&obj->oid));
+ obj->flags |= FLAG_CHECKED;
+ return 0;
+ }
die(_("did not receive expected object %s"),
oid_to_hex(&obj->oid));
+ }
if (type != obj->type)
die(_("object %s: expected type %s, found %s"),
oid_to_hex(&obj->oid),
@@ -1718,6 +1730,10 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)
die(_("bad %s"), arg);
} else if (skip_prefix(arg, "--max-input-size=", &arg)) {
max_input_size = strtoumax(arg, NULL, 10);
+ } else if (!strcmp(arg, "--allow-partial")) {
+ allow_partial = 1;
+ } else if (!strcmp(arg, "--no-allow-partial")) {
+ allow_partial = 0;
} else
usage(index_pack_usage);
continue;
--
2.7.4
next prev parent reply other threads:[~2017-03-08 17:45 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-08 17:37 [PATCH 00/10] RFC Partial Clone and Fetch Jeff Hostetler
2017-03-08 17:37 ` [PATCH 01/10] pack-objects: eat CR in addition to LF after fgets Jeff Hostetler
2017-03-09 7:01 ` Jeff King
2017-03-09 15:46 ` Jeff Hostetler
2017-03-08 17:37 ` [PATCH 02/10] pack-objects: add --partial-by-size=n --partial-special Jeff Hostetler
2017-03-08 18:47 ` Junio C Hamano
2017-03-08 20:21 ` Jeff Hostetler
2017-03-09 7:04 ` Jeff King
2017-03-10 17:58 ` Brandon Williams
2017-03-10 18:03 ` Jeff King
2017-03-10 19:38 ` Junio C Hamano
2017-03-10 19:47 ` Jeff King
2017-03-09 7:31 ` Jeff King
2017-03-09 18:26 ` Jeff Hostetler
2017-03-08 17:37 ` [PATCH 03/10] pack-objects: test for --partial-by-size --partial-special Jeff Hostetler
2017-03-09 7:35 ` Jeff King
2017-03-09 18:11 ` Johannes Sixt
2017-03-08 17:37 ` [PATCH 04/10] upload-pack: add partial (sparse) fetch Jeff Hostetler
2017-03-09 7:48 ` Jeff King
2017-03-09 18:34 ` Jeff Hostetler
2017-03-09 19:09 ` Jeff King
2017-03-08 17:38 ` [PATCH 05/10] fetch-pack: add partial-by-size and partial-special Jeff Hostetler
2017-03-08 17:38 ` [PATCH 06/10] rev-list: add --allow-partial option to relax connectivity checks Jeff Hostetler
2017-03-08 18:55 ` Junio C Hamano
2017-03-08 20:10 ` Jeff Hostetler
2017-03-09 7:56 ` Jeff King
2017-03-09 18:38 ` Jeff Hostetler
2017-03-08 17:38 ` Jeff Hostetler [this message]
2017-03-08 17:38 ` [PATCH 08/10] fetch: add partial-by-size and partial-special arguments Jeff Hostetler
2017-03-08 17:38 ` [PATCH 09/10] clone: " Jeff Hostetler
2017-03-08 17:38 ` [PATCH 10/10] ls-partial: created command to list missing blobs Jeff Hostetler
-- strict thread matches above, loose matches on Subject: below --
2017-03-08 18:50 [PATCH 00/10] RFC Partial Clone and Fetch git
2017-03-08 18:50 ` [PATCH 07/10] index-pack: add --allow-partial option to relax blob existence checks git
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1488994685-37403-8-git-send-email-jeffhost@microsoft.com \
--to=jeffhost@microsoft.com \
--cc=benpeart@microsoft.com \
--cc=git@jeffhostetler.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jonathantanmy@google.com \
--cc=markbt@efaref.net \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).