dir: convert add_excludes 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:
parent
fba92be8f7
commit
473e39307d
29
dir.c
29
dir.c
@ -730,7 +730,7 @@ static void invalidate_directory(struct untracked_cache *uc,
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Given a file with name "fname", read it (either from disk, or from
|
* Given a file with name "fname", read it (either from disk, or from
|
||||||
* the index if "check_index" is non-zero), parse it and store the
|
* an index if 'istate' is non-null), parse it and store the
|
||||||
* exclude rules in "el".
|
* exclude rules in "el".
|
||||||
*
|
*
|
||||||
* If "ss" is not NULL, compute SHA-1 of the exclude file and fill
|
* If "ss" is not NULL, compute SHA-1 of the exclude file and fill
|
||||||
@ -738,7 +738,8 @@ static void invalidate_directory(struct untracked_cache *uc,
|
|||||||
* ss_valid is non-zero, "ss" must contain good value as input.
|
* ss_valid is non-zero, "ss" must contain good value as input.
|
||||||
*/
|
*/
|
||||||
static int add_excludes(const char *fname, const char *base, int baselen,
|
static int add_excludes(const char *fname, const char *base, int baselen,
|
||||||
struct exclude_list *el, int check_index,
|
struct exclude_list *el,
|
||||||
|
struct index_state *istate,
|
||||||
struct sha1_stat *sha1_stat)
|
struct sha1_stat *sha1_stat)
|
||||||
{
|
{
|
||||||
struct stat st;
|
struct stat st;
|
||||||
@ -752,8 +753,8 @@ static int add_excludes(const char *fname, const char *base, int baselen,
|
|||||||
warn_on_inaccessible(fname);
|
warn_on_inaccessible(fname);
|
||||||
if (0 <= fd)
|
if (0 <= fd)
|
||||||
close(fd);
|
close(fd);
|
||||||
if (!check_index ||
|
if (!istate ||
|
||||||
(buf = read_skip_worktree_file_from_index(&the_index, fname, &size, sha1_stat)) == NULL)
|
(buf = read_skip_worktree_file_from_index(istate, fname, &size, sha1_stat)) == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
if (size == 0) {
|
if (size == 0) {
|
||||||
free(buf);
|
free(buf);
|
||||||
@ -785,15 +786,15 @@ static int add_excludes(const char *fname, const char *base, int baselen,
|
|||||||
if (sha1_stat) {
|
if (sha1_stat) {
|
||||||
int pos;
|
int pos;
|
||||||
if (sha1_stat->valid &&
|
if (sha1_stat->valid &&
|
||||||
!match_stat_data_racy(&the_index, &sha1_stat->stat, &st))
|
!match_stat_data_racy(istate, &sha1_stat->stat, &st))
|
||||||
; /* no content change, ss->sha1 still good */
|
; /* no content change, ss->sha1 still good */
|
||||||
else if (check_index &&
|
else if (istate &&
|
||||||
(pos = index_name_pos(&the_index, fname, strlen(fname))) >= 0 &&
|
(pos = index_name_pos(istate, fname, strlen(fname))) >= 0 &&
|
||||||
!ce_stage(the_index.cache[pos]) &&
|
!ce_stage(istate->cache[pos]) &&
|
||||||
ce_uptodate(the_index.cache[pos]) &&
|
ce_uptodate(istate->cache[pos]) &&
|
||||||
!would_convert_to_git(fname))
|
!would_convert_to_git(fname))
|
||||||
hashcpy(sha1_stat->sha1,
|
hashcpy(sha1_stat->sha1,
|
||||||
the_index.cache[pos]->oid.hash);
|
istate->cache[pos]->oid.hash);
|
||||||
else
|
else
|
||||||
hash_sha1_file(buf, size, "blob", sha1_stat->sha1);
|
hash_sha1_file(buf, size, "blob", sha1_stat->sha1);
|
||||||
fill_stat_data(&sha1_stat->stat, &st);
|
fill_stat_data(&sha1_stat->stat, &st);
|
||||||
@ -824,9 +825,9 @@ static int add_excludes(const char *fname, const char *base, int baselen,
|
|||||||
|
|
||||||
int add_excludes_from_file_to_list(const char *fname, const char *base,
|
int add_excludes_from_file_to_list(const char *fname, const char *base,
|
||||||
int baselen, struct exclude_list *el,
|
int baselen, struct exclude_list *el,
|
||||||
int check_index)
|
struct index_state *istate)
|
||||||
{
|
{
|
||||||
return add_excludes(fname, base, baselen, el, check_index, NULL);
|
return add_excludes(fname, base, baselen, el, istate, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct exclude_list *add_exclude_list(struct dir_struct *dir,
|
struct exclude_list *add_exclude_list(struct dir_struct *dir,
|
||||||
@ -858,7 +859,7 @@ static void add_excludes_from_file_1(struct dir_struct *dir, const char *fname,
|
|||||||
if (!dir->untracked)
|
if (!dir->untracked)
|
||||||
dir->unmanaged_exclude_files++;
|
dir->unmanaged_exclude_files++;
|
||||||
el = add_exclude_list(dir, EXC_FILE, fname);
|
el = add_exclude_list(dir, EXC_FILE, fname);
|
||||||
if (add_excludes(fname, "", 0, el, 0, sha1_stat) < 0)
|
if (add_excludes(fname, "", 0, el, NULL, sha1_stat) < 0)
|
||||||
die("cannot use %s as an exclude file", fname);
|
die("cannot use %s as an exclude file", fname);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1166,7 +1167,7 @@ static void prep_exclude(struct dir_struct *dir, const char *base, int baselen)
|
|||||||
strbuf_addbuf(&sb, &dir->basebuf);
|
strbuf_addbuf(&sb, &dir->basebuf);
|
||||||
strbuf_addstr(&sb, dir->exclude_per_dir);
|
strbuf_addstr(&sb, dir->exclude_per_dir);
|
||||||
el->src = strbuf_detach(&sb, NULL);
|
el->src = strbuf_detach(&sb, NULL);
|
||||||
add_excludes(el->src, el->src, stk->baselen, el, 1,
|
add_excludes(el->src, el->src, stk->baselen, el, &the_index,
|
||||||
untracked ? &sha1_stat : NULL);
|
untracked ? &sha1_stat : NULL);
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
|
2
dir.h
2
dir.h
@ -243,7 +243,7 @@ extern int is_excluded(struct dir_struct *dir, 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);
|
||||||
extern int add_excludes_from_file_to_list(const char *fname, const char *base, int baselen,
|
extern int add_excludes_from_file_to_list(const char *fname, const char *base, int baselen,
|
||||||
struct exclude_list *el, int check_index);
|
struct exclude_list *el, struct index_state *istate);
|
||||||
extern void add_excludes_from_file(struct dir_struct *, const char *fname);
|
extern void add_excludes_from_file(struct dir_struct *, const char *fname);
|
||||||
extern void parse_exclude_pattern(const char **string, int *patternlen, unsigned *flags, int *nowildcardlen);
|
extern void parse_exclude_pattern(const char **string, int *patternlen, unsigned *flags, int *nowildcardlen);
|
||||||
extern void add_exclude(const char *string, const char *base,
|
extern void add_exclude(const char *string, const char *base,
|
||||||
|
@ -1251,7 +1251,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
|
|||||||
o->skip_sparse_checkout = 1;
|
o->skip_sparse_checkout = 1;
|
||||||
if (!o->skip_sparse_checkout) {
|
if (!o->skip_sparse_checkout) {
|
||||||
char *sparse = git_pathdup("info/sparse-checkout");
|
char *sparse = git_pathdup("info/sparse-checkout");
|
||||||
if (add_excludes_from_file_to_list(sparse, "", 0, &el, 0) < 0)
|
if (add_excludes_from_file_to_list(sparse, "", 0, &el, NULL) < 0)
|
||||||
o->skip_sparse_checkout = 1;
|
o->skip_sparse_checkout = 1;
|
||||||
else
|
else
|
||||||
o->el = ⪙
|
o->el = ⪙
|
||||||
|
Loading…
Reference in New Issue
Block a user