dir: convert is_excluded to take an index
Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
e799ed408e
commit
a0bba65b10
@ -436,7 +436,7 @@ int cmd_add(int argc, const char **argv, const char *prefix)
|
|||||||
!file_exists(path))) {
|
!file_exists(path))) {
|
||||||
if (ignore_missing) {
|
if (ignore_missing) {
|
||||||
int dtype = DT_UNKNOWN;
|
int dtype = DT_UNKNOWN;
|
||||||
if (is_excluded(&dir, path, &dtype))
|
if (is_excluded(&dir, &the_index, path, &dtype))
|
||||||
dir_add_ignored(&dir, &the_index,
|
dir_add_ignored(&dir, &the_index,
|
||||||
path, pathspec.items[i].len);
|
path, pathspec.items[i].len);
|
||||||
} else
|
} else
|
||||||
|
@ -101,7 +101,8 @@ static int check_ignore(struct dir_struct *dir,
|
|||||||
full_path = pathspec.items[i].match;
|
full_path = pathspec.items[i].match;
|
||||||
exclude = NULL;
|
exclude = NULL;
|
||||||
if (!seen[i]) {
|
if (!seen[i]) {
|
||||||
exclude = last_exclude_matching(dir, full_path, &dtype);
|
exclude = last_exclude_matching(dir, &the_index,
|
||||||
|
full_path, &dtype);
|
||||||
}
|
}
|
||||||
if (!quiet && (exclude || show_non_matching))
|
if (!quiet && (exclude || show_non_matching))
|
||||||
output_exclude(pathspec.items[i].original, exclude);
|
output_exclude(pathspec.items[i].original, exclude);
|
||||||
|
@ -683,7 +683,7 @@ static int filter_by_patterns_cmd(void)
|
|||||||
for_each_string_list_item(item, &del_list) {
|
for_each_string_list_item(item, &del_list) {
|
||||||
int dtype = DT_UNKNOWN;
|
int dtype = DT_UNKNOWN;
|
||||||
|
|
||||||
if (is_excluded(&dir, item->string, &dtype)) {
|
if (is_excluded(&dir, &the_index, item->string, &dtype)) {
|
||||||
*item->string = '\0';
|
*item->string = '\0';
|
||||||
changed++;
|
changed++;
|
||||||
}
|
}
|
||||||
|
@ -322,7 +322,7 @@ static void show_ru_info(void)
|
|||||||
static int ce_excluded(struct dir_struct *dir, const struct cache_entry *ce)
|
static int ce_excluded(struct dir_struct *dir, const struct cache_entry *ce)
|
||||||
{
|
{
|
||||||
int dtype = ce_to_dtype(ce);
|
int dtype = ce_to_dtype(ce);
|
||||||
return is_excluded(dir, ce->name, &dtype);
|
return is_excluded(dir, &the_index, ce->name, &dtype);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void show_files(struct dir_struct *dir)
|
static void show_files(struct dir_struct *dir)
|
||||||
|
16
dir.c
16
dir.c
@ -1204,19 +1204,20 @@ static void prep_exclude(struct dir_struct *dir,
|
|||||||
* undecided.
|
* undecided.
|
||||||
*/
|
*/
|
||||||
struct exclude *last_exclude_matching(struct dir_struct *dir,
|
struct exclude *last_exclude_matching(struct dir_struct *dir,
|
||||||
const char *pathname,
|
struct index_state *istate,
|
||||||
int *dtype_p)
|
const char *pathname,
|
||||||
|
int *dtype_p)
|
||||||
{
|
{
|
||||||
int pathlen = strlen(pathname);
|
int pathlen = strlen(pathname);
|
||||||
const char *basename = strrchr(pathname, '/');
|
const char *basename = strrchr(pathname, '/');
|
||||||
basename = (basename) ? basename+1 : pathname;
|
basename = (basename) ? basename+1 : pathname;
|
||||||
|
|
||||||
prep_exclude(dir, &the_index, pathname, basename-pathname);
|
prep_exclude(dir, istate, pathname, basename-pathname);
|
||||||
|
|
||||||
if (dir->exclude)
|
if (dir->exclude)
|
||||||
return dir->exclude;
|
return dir->exclude;
|
||||||
|
|
||||||
return last_exclude_matching_from_lists(dir, &the_index, pathname, pathlen,
|
return last_exclude_matching_from_lists(dir, istate, pathname, pathlen,
|
||||||
basename, dtype_p);
|
basename, dtype_p);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1225,10 +1226,11 @@ struct exclude *last_exclude_matching(struct dir_struct *dir,
|
|||||||
* scans all exclude lists to determine whether pathname is excluded.
|
* scans all exclude lists to determine whether pathname is excluded.
|
||||||
* Returns 1 if true, otherwise 0.
|
* Returns 1 if true, otherwise 0.
|
||||||
*/
|
*/
|
||||||
int is_excluded(struct dir_struct *dir, const char *pathname, int *dtype_p)
|
int is_excluded(struct dir_struct *dir, struct index_state *istate,
|
||||||
|
const char *pathname, int *dtype_p)
|
||||||
{
|
{
|
||||||
struct exclude *exclude =
|
struct exclude *exclude =
|
||||||
last_exclude_matching(dir, pathname, dtype_p);
|
last_exclude_matching(dir, istate, pathname, dtype_p);
|
||||||
if (exclude)
|
if (exclude)
|
||||||
return exclude->flags & EXC_FLAG_NEGATIVE ? 0 : 1;
|
return exclude->flags & EXC_FLAG_NEGATIVE ? 0 : 1;
|
||||||
return 0;
|
return 0;
|
||||||
@ -1573,7 +1575,7 @@ static enum path_treatment treat_one_path(struct dir_struct *dir,
|
|||||||
(directory_exists_in_index(&the_index, path->buf, path->len) == index_nonexistent))
|
(directory_exists_in_index(&the_index, path->buf, path->len) == index_nonexistent))
|
||||||
return path_none;
|
return path_none;
|
||||||
|
|
||||||
exclude = is_excluded(dir, path->buf, &dtype);
|
exclude = is_excluded(dir, &the_index, path->buf, &dtype);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Excluded? If we don't explicitly want to show
|
* Excluded? If we don't explicitly want to show
|
||||||
|
5
dir.h
5
dir.h
@ -236,9 +236,12 @@ extern int match_pathname(const char *, int,
|
|||||||
const char *, int, int, unsigned);
|
const char *, int, int, unsigned);
|
||||||
|
|
||||||
extern struct exclude *last_exclude_matching(struct dir_struct *dir,
|
extern struct exclude *last_exclude_matching(struct dir_struct *dir,
|
||||||
|
struct index_state *istate,
|
||||||
const char *name, int *dtype);
|
const char *name, int *dtype);
|
||||||
|
|
||||||
extern int is_excluded(struct dir_struct *dir, const char *name, int *dtype);
|
extern int is_excluded(struct dir_struct *dir,
|
||||||
|
struct index_state *istate,
|
||||||
|
const char *name, int *dtype);
|
||||||
|
|
||||||
extern struct exclude_list *add_exclude_list(struct dir_struct *dir,
|
extern struct exclude_list *add_exclude_list(struct dir_struct *dir,
|
||||||
int group_type, const char *src);
|
int group_type, const char *src);
|
||||||
|
@ -1634,7 +1634,7 @@ static int check_ok_to_remove(const char *name, int len, int dtype,
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (o->dir &&
|
if (o->dir &&
|
||||||
is_excluded(o->dir, name, &dtype))
|
is_excluded(o->dir, &the_index, name, &dtype))
|
||||||
/*
|
/*
|
||||||
* ce->name is explicitly excluded, so it is Ok to
|
* ce->name is explicitly excluded, so it is Ok to
|
||||||
* overwrite it.
|
* overwrite it.
|
||||||
|
Reference in New Issue
Block a user