Convert test-helper tools to use `the_repository->index` instead of `the_index`. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
			
				
	
	
		
			69 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include "test-tool.h"
 | 
						|
#include "gettext.h"
 | 
						|
#include "hex.h"
 | 
						|
#include "tree.h"
 | 
						|
#include "cache-tree.h"
 | 
						|
#include "parse-options.h"
 | 
						|
#include "read-cache-ll.h"
 | 
						|
#include "repository.h"
 | 
						|
#include "setup.h"
 | 
						|
 | 
						|
static char const * const test_cache_tree_usage[] = {
 | 
						|
	N_("test-tool cache-tree <options> (control|prime|update)"),
 | 
						|
	NULL
 | 
						|
};
 | 
						|
 | 
						|
int cmd__cache_tree(int argc, const char **argv)
 | 
						|
{
 | 
						|
	struct object_id oid;
 | 
						|
	struct tree *tree;
 | 
						|
	int empty = 0;
 | 
						|
	int invalidate_qty = 0;
 | 
						|
	int i;
 | 
						|
 | 
						|
	struct option options[] = {
 | 
						|
		OPT_BOOL(0, "empty", &empty,
 | 
						|
			 N_("clear the cache tree before each iteration")),
 | 
						|
		OPT_INTEGER_F(0, "invalidate", &invalidate_qty,
 | 
						|
			      N_("number of entries in the cache tree to invalidate (default 0)"),
 | 
						|
			      PARSE_OPT_NONEG),
 | 
						|
		OPT_END()
 | 
						|
	};
 | 
						|
 | 
						|
	setup_git_directory();
 | 
						|
 | 
						|
	argc = parse_options(argc, argv, NULL, options, test_cache_tree_usage, 0);
 | 
						|
 | 
						|
	if (repo_read_index(the_repository) < 0)
 | 
						|
		die(_("unable to read index file"));
 | 
						|
 | 
						|
	oidcpy(&oid, &the_repository->index->cache_tree->oid);
 | 
						|
	tree = parse_tree_indirect(&oid);
 | 
						|
	if (!tree)
 | 
						|
		die(_("not a tree object: %s"), oid_to_hex(&oid));
 | 
						|
 | 
						|
	if (empty) {
 | 
						|
		/* clear the cache tree & allocate a new one */
 | 
						|
		cache_tree_free(&the_repository->index->cache_tree);
 | 
						|
		the_repository->index->cache_tree = cache_tree();
 | 
						|
	} else if (invalidate_qty) {
 | 
						|
		/* invalidate the specified number of unique paths */
 | 
						|
		float f_interval = (float)the_repository->index->cache_nr / invalidate_qty;
 | 
						|
		int interval = f_interval < 1.0 ? 1 : (int)f_interval;
 | 
						|
		for (i = 0; i < invalidate_qty && i * interval < the_repository->index->cache_nr; i++)
 | 
						|
			cache_tree_invalidate_path(the_repository->index, the_repository->index->cache[i * interval]->name);
 | 
						|
	}
 | 
						|
 | 
						|
	if (argc != 1)
 | 
						|
		usage_with_options(test_cache_tree_usage, options);
 | 
						|
	else if (!strcmp(argv[0], "prime"))
 | 
						|
		prime_cache_tree(the_repository, the_repository->index, tree);
 | 
						|
	else if (!strcmp(argv[0], "update"))
 | 
						|
		cache_tree_update(the_repository->index, WRITE_TREE_SILENT | WRITE_TREE_REPAIR);
 | 
						|
	/* use "control" subcommand to specify no-op */
 | 
						|
	else if (!!strcmp(argv[0], "control"))
 | 
						|
		die(_("Unhandled subcommand '%s'"), argv[0]);
 | 
						|
 | 
						|
	return 0;
 | 
						|
}
 |