git/t/helper/test-partial-clone.c
Jonathan Tan ef830cc434 promisor-remote: teach lazy-fetch in any repo
This is one step towards supporting partial clone submodules.

Even after this patch, we will still lack partial clone submodules
support, primarily because a lot of Git code that accesses submodule
objects does so by adding their object stores as alternates, meaning
that any lazy fetches that would occur in the submodule would be done
based on the config of the superproject, not of the submodule. This also
prevents testing of the functionality in this patch by user-facing
commands. So for now, test this mechanism using a test helper.

Besides that, there is some code that uses the wrapper functions
like has_promisor_remote(). Those will need to be checked to see if they
could support the non-wrapper functions instead (and thus support any
repository, not just the_repository).

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2021-06-28 09:58:01 -07:00

44 lines
1.1 KiB
C

#include "cache.h"
#include "test-tool.h"
#include "repository.h"
#include "object-store.h"
/*
* Prints the size of the object corresponding to the given hash in a specific
* gitdir. This is similar to "git -C gitdir cat-file -s", except that this
* exercises the code that accesses the object of an arbitrary repository that
* is not the_repository. ("git -C gitdir" makes it so that the_repository is
* the one in gitdir.)
*/
static void object_info(const char *gitdir, const char *oid_hex)
{
struct repository r;
struct object_id oid;
unsigned long size;
struct object_info oi = {.sizep = &size};
const char *p;
if (repo_init(&r, gitdir, NULL))
die("could not init repo");
if (parse_oid_hex(oid_hex, &oid, &p))
die("could not parse oid");
if (oid_object_info_extended(&r, &oid, &oi, 0))
die("could not obtain object info");
printf("%d\n", (int) size);
}
int cmd__partial_clone(int argc, const char **argv)
{
setup_git_directory();
if (argc < 4)
die("too few arguments");
if (!strcmp(argv[1], "object-info"))
object_info(argv[2], argv[3]);
else
die("invalid argument '%s'", argv[1]);
return 0;
}