builtin/show-index: provide options to determine hash algo
show-index is capable of reading any possible index file whether or not the index is inside a repository. However, because our index files lack metadata about the hash algorithm in use, it's not possible to autodetect the algorithm that a particular index file is using. In order to allow us to read index files of any algorithm, let's set up the .git directory gently so that we default to the algorithm for the current repository, and add an --object-format option to allow users to override this setting and continue to run show-index outside of a repository altogether. Let's also document this new option so that people can find it and use it. Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
1610dda8ae
commit
88a09a557c
@ -1,9 +1,12 @@
|
||||
#include "builtin.h"
|
||||
#include "cache.h"
|
||||
#include "pack.h"
|
||||
#include "parse-options.h"
|
||||
|
||||
static const char show_index_usage[] =
|
||||
"git show-index";
|
||||
static const char *const show_index_usage[] = {
|
||||
"git show-index [--object-format=<hash-algorithm>]",
|
||||
NULL
|
||||
};
|
||||
|
||||
int cmd_show_index(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
@ -11,10 +14,26 @@ int cmd_show_index(int argc, const char **argv, const char *prefix)
|
||||
unsigned nr;
|
||||
unsigned int version;
|
||||
static unsigned int top_index[256];
|
||||
const unsigned hashsz = the_hash_algo->rawsz;
|
||||
unsigned hashsz;
|
||||
const char *hash_name = NULL;
|
||||
int hash_algo;
|
||||
const struct option show_index_options[] = {
|
||||
OPT_STRING(0, "object-format", &hash_name, N_("hash-algorithm"),
|
||||
N_("specify the hash algorithm to use")),
|
||||
OPT_END()
|
||||
};
|
||||
|
||||
argc = parse_options(argc, argv, prefix, show_index_options, show_index_usage, 0);
|
||||
|
||||
if (hash_name) {
|
||||
hash_algo = hash_algo_by_name(hash_name);
|
||||
if (hash_algo == GIT_HASH_UNKNOWN)
|
||||
die(_("Unknown hash algorithm"));
|
||||
repo_set_hash_algo(the_repository, hash_algo);
|
||||
}
|
||||
|
||||
hashsz = the_hash_algo->rawsz;
|
||||
|
||||
if (argc != 1)
|
||||
usage(show_index_usage);
|
||||
if (fread(top_index, 2 * 4, 1, stdin) != 1)
|
||||
die("unable to read header");
|
||||
if (top_index[0] == htonl(PACK_IDX_SIGNATURE)) {
|
||||
|
Reference in New Issue
Block a user