ls-files: add --sparse option
Existing callers to 'git ls-files' are expecting file names, not directories. It is best to expand a sparse index to show all of the contained files in this case. However, expert users may want to inspect the contents of the index itself including which directories are sparse. Add a --sparse option to allow users to request this information. During testing, I noticed that options such as --modified did not affect the output when the files in question were outside the sparse-checkout definition. Tests are added to document this preexisting behavior and how it remains unchanged with the sparse index and the --sparse option. Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
5a4e0547e2
commit
78087097b8
@ -37,6 +37,7 @@ static int debug_mode;
|
||||
static int show_eol;
|
||||
static int recurse_submodules;
|
||||
static int skipping_duplicates;
|
||||
static int show_sparse_dirs;
|
||||
|
||||
static const char *prefix;
|
||||
static int max_prefix_len;
|
||||
@ -315,8 +316,10 @@ static void show_files(struct repository *repo, struct dir_struct *dir)
|
||||
|
||||
if (!(show_cached || show_stage || show_deleted || show_modified))
|
||||
return;
|
||||
/* TODO: audit for interaction with sparse-index. */
|
||||
ensure_full_index(repo->index);
|
||||
|
||||
if (!show_sparse_dirs)
|
||||
ensure_full_index(repo->index);
|
||||
|
||||
for (i = 0; i < repo->index->cache_nr; i++) {
|
||||
const struct cache_entry *ce = repo->index->cache[i];
|
||||
struct stat st;
|
||||
@ -670,6 +673,8 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix)
|
||||
OPT_BOOL(0, "debug", &debug_mode, N_("show debugging data")),
|
||||
OPT_BOOL(0, "deduplicate", &skipping_duplicates,
|
||||
N_("suppress duplicate entries")),
|
||||
OPT_BOOL(0, "sparse", &show_sparse_dirs,
|
||||
N_("show sparse directories in the presence of a sparse index")),
|
||||
OPT_END()
|
||||
};
|
||||
int ret = 0;
|
||||
@ -677,6 +682,9 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix)
|
||||
if (argc == 2 && !strcmp(argv[1], "-h"))
|
||||
usage_with_options(ls_files_usage, builtin_ls_files_options);
|
||||
|
||||
prepare_repo_settings(the_repository);
|
||||
the_repository->settings.command_requires_full_index = 0;
|
||||
|
||||
prefix = cmd_prefix;
|
||||
if (prefix)
|
||||
prefix_len = strlen(prefix);
|
||||
|
Reference in New Issue
Block a user