diff options
Diffstat (limited to 'builtin/check-attr.c')
-rw-r--r-- | builtin/check-attr.c | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/builtin/check-attr.c b/builtin/check-attr.c index dd83397..c1da1d1 100644 --- a/builtin/check-attr.c +++ b/builtin/check-attr.c @@ -1,17 +1,23 @@ -#define USE_THE_INDEX_COMPATIBILITY_MACROS +#define USE_THE_INDEX_VARIABLE #include "builtin.h" -#include "cache.h" #include "config.h" #include "attr.h" +#include "environment.h" +#include "gettext.h" +#include "object-name.h" #include "quote.h" +#include "repository.h" +#include "setup.h" #include "parse-options.h" +#include "write-or-die.h" static int all_attrs; static int cached_attrs; static int stdin_paths; +static char *source; static const char * const check_attr_usage[] = { -N_("git check-attr [-a | --all | <attr>...] [--] <pathname>..."), -N_("git check-attr --stdin [-z] [-a | --all | <attr>...]"), +N_("git check-attr [--source <tree-ish>] [-a | --all | <attr>...] [--] <pathname>..."), +N_("git check-attr --stdin [-z] [--source <tree-ish>] [-a | --all | <attr>...]"), NULL }; @@ -23,6 +29,7 @@ static const struct option check_attr_options[] = { OPT_BOOL(0 , "stdin", &stdin_paths, N_("read file names from stdin")), OPT_BOOL('z', NULL, &nul_term_line, N_("terminate input and output records by a NUL character")), + OPT_STRING(0, "source", &source, N_("<tree-ish>"), N_("which tree-ish to check attributes at")), OPT_END() }; @@ -55,10 +62,10 @@ static void output_attr(struct attr_check *check, const char *file) } } -static void check_attr(const char *prefix, - struct attr_check *check, +static void check_attr(const char *prefix, struct attr_check *check, int collect_all, const char *file) + { char *full_path = prefix_path(prefix, prefix ? strlen(prefix) : 0, file); @@ -73,8 +80,7 @@ static void check_attr(const char *prefix, free(full_path); } -static void check_attr_stdin_paths(const char *prefix, - struct attr_check *check, +static void check_attr_stdin_paths(const char *prefix, struct attr_check *check, int collect_all) { struct strbuf buf = STRBUF_INIT; @@ -105,6 +111,7 @@ static NORETURN void error_with_usage(const char *msg) int cmd_check_attr(int argc, const char **argv, const char *prefix) { struct attr_check *check; + struct object_id initialized_oid; int cnt, i, doubledash, filei; if (!is_bare_repository()) @@ -115,7 +122,10 @@ int cmd_check_attr(int argc, const char **argv, const char *prefix) argc = parse_options(argc, argv, prefix, check_attr_options, check_attr_usage, PARSE_OPT_KEEP_DASHDASH); - if (read_cache() < 0) { + prepare_repo_settings(the_repository); + the_repository->settings.command_requires_full_index = 0; + + if (repo_read_index(the_repository) < 0) { die("invalid cache"); } @@ -176,6 +186,12 @@ int cmd_check_attr(int argc, const char **argv, const char *prefix) } } + if (source) { + if (repo_get_oid_tree(the_repository, source, &initialized_oid)) + die("%s: not a valid tree-ish source", source); + set_git_attr_source(source); + } + if (stdin_paths) check_attr_stdin_paths(prefix, check, all_attrs); else { |