bundle-uri: quiet failed unbundlings
When downloading a list of bundles in "all" mode, Git has no understanding of the dependencies between the bundles. Git attempts to unbundle the bundles in some order, but some may not pass the verify_bundle() step because of missing prerequisites. This is passed as error messages to the user, even when they eventually succeed in later attempts after their dependent bundles are unbundled. Add a new VERIFY_BUNDLE_QUIET flag to verify_bundle() that avoids the error messages from the missing prerequisite commits. The method still returns the number of missing prerequisit commits, allowing callers to unbundle() to notice that the bundle failed to apply. Use this flag in bundle-uri.c and test that the messages go away for 'git clone --bundle-uri' commands. Signed-off-by: Derrick Stolee <derrickstolee@github.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
89bd7fedf9
commit
70334fc3eb
@ -120,7 +120,7 @@ static int cmd_bundle_verify(int argc, const char **argv, const char *prefix) {
|
||||
}
|
||||
close(bundle_fd);
|
||||
if (verify_bundle(the_repository, &header,
|
||||
quiet ? 0 : VERIFY_BUNDLE_VERBOSE)) {
|
||||
quiet ? VERIFY_BUNDLE_QUIET : VERIFY_BUNDLE_VERBOSE)) {
|
||||
ret = 1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
@ -308,7 +308,8 @@ static int unbundle_from_file(struct repository *r, const char *file)
|
||||
* a reachable ref pointing to the new tips, which will reach
|
||||
* the prerequisite commits.
|
||||
*/
|
||||
if ((result = unbundle(r, &header, bundle_fd, NULL, 0)))
|
||||
if ((result = unbundle(r, &header, bundle_fd, NULL,
|
||||
VERIFY_BUNDLE_QUIET)))
|
||||
return 1;
|
||||
|
||||
/*
|
||||
|
10
bundle.c
10
bundle.c
@ -216,7 +216,10 @@ int verify_bundle(struct repository *r,
|
||||
add_pending_object(&revs, o, name);
|
||||
continue;
|
||||
}
|
||||
if (++ret == 1)
|
||||
ret++;
|
||||
if (flags & VERIFY_BUNDLE_QUIET)
|
||||
continue;
|
||||
if (ret == 1)
|
||||
error("%s", message);
|
||||
error("%s %s", oid_to_hex(oid), name);
|
||||
}
|
||||
@ -243,7 +246,10 @@ int verify_bundle(struct repository *r,
|
||||
assert(o); /* otherwise we'd have returned early */
|
||||
if (o->flags & SHOWN)
|
||||
continue;
|
||||
if (++ret == 1)
|
||||
ret++;
|
||||
if (flags & VERIFY_BUNDLE_QUIET)
|
||||
continue;
|
||||
if (ret == 1)
|
||||
error("%s", message);
|
||||
error("%s %s", oid_to_hex(oid), name);
|
||||
}
|
||||
|
1
bundle.h
1
bundle.h
@ -32,6 +32,7 @@ int create_bundle(struct repository *r, const char *path,
|
||||
|
||||
enum verify_bundle_flags {
|
||||
VERIFY_BUNDLE_VERBOSE = (1 << 0),
|
||||
VERIFY_BUNDLE_QUIET = (1 << 1),
|
||||
};
|
||||
|
||||
int verify_bundle(struct repository *r, struct bundle_header *header,
|
||||
|
@ -99,7 +99,10 @@ test_expect_success 'clone bundle list (file, no heuristic)' '
|
||||
uri = file://$(pwd)/clone-from/bundle-4.bundle
|
||||
EOF
|
||||
|
||||
git clone --bundle-uri="file://$(pwd)/bundle-list" clone-from clone-list-file &&
|
||||
git clone --bundle-uri="file://$(pwd)/bundle-list" \
|
||||
clone-from clone-list-file 2>err &&
|
||||
! grep "Repository lacks these prerequisite commits" err &&
|
||||
|
||||
git -C clone-from for-each-ref --format="%(objectname)" >oids &&
|
||||
git -C clone-list-file cat-file --batch-check <oids &&
|
||||
|
||||
@ -141,7 +144,10 @@ test_expect_success 'clone bundle list (file, all mode, some failures)' '
|
||||
EOF
|
||||
|
||||
GIT_TRACE2_PERF=1 \
|
||||
git clone --bundle-uri="file://$(pwd)/bundle-list" clone-from clone-all-some &&
|
||||
git clone --bundle-uri="file://$(pwd)/bundle-list" \
|
||||
clone-from clone-all-some 2>err &&
|
||||
! grep "Repository lacks these prerequisite commits" err &&
|
||||
|
||||
git -C clone-from for-each-ref --format="%(objectname)" >oids &&
|
||||
git -C clone-all-some cat-file --batch-check <oids &&
|
||||
|
||||
@ -169,7 +175,10 @@ test_expect_success 'clone bundle list (file, all mode, all failures)' '
|
||||
uri = file://$(pwd)/clone-from/bundle-5.bundle
|
||||
EOF
|
||||
|
||||
git clone --bundle-uri="file://$(pwd)/bundle-list" clone-from clone-all-fail &&
|
||||
git clone --bundle-uri="file://$(pwd)/bundle-list" \
|
||||
clone-from clone-all-fail 2>err &&
|
||||
! grep "Repository lacks these prerequisite commits" err &&
|
||||
|
||||
git -C clone-from for-each-ref --format="%(objectname)" >oids &&
|
||||
git -C clone-all-fail cat-file --batch-check <oids &&
|
||||
|
||||
@ -195,7 +204,10 @@ test_expect_success 'clone bundle list (file, any mode)' '
|
||||
uri = file://$(pwd)/clone-from/bundle-5.bundle
|
||||
EOF
|
||||
|
||||
git clone --bundle-uri="file://$(pwd)/bundle-list" clone-from clone-any-file &&
|
||||
git clone --bundle-uri="file://$(pwd)/bundle-list" \
|
||||
clone-from clone-any-file 2>err &&
|
||||
! grep "Repository lacks these prerequisite commits" err &&
|
||||
|
||||
git -C clone-from for-each-ref --format="%(objectname)" >oids &&
|
||||
git -C clone-any-file cat-file --batch-check <oids &&
|
||||
|
||||
@ -284,7 +296,10 @@ test_expect_success 'clone bundle list (HTTP, no heuristic)' '
|
||||
uri = $HTTPD_URL/bundle-4.bundle
|
||||
EOF
|
||||
|
||||
git clone --bundle-uri="$HTTPD_URL/bundle-list" clone-from clone-list-http &&
|
||||
git clone --bundle-uri="$HTTPD_URL/bundle-list" \
|
||||
clone-from clone-list-http 2>err &&
|
||||
! grep "Repository lacks these prerequisite commits" err &&
|
||||
|
||||
git -C clone-from for-each-ref --format="%(objectname)" >oids &&
|
||||
git -C clone-list-http cat-file --batch-check <oids
|
||||
'
|
||||
|
Loading…
Reference in New Issue
Block a user