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>

Brandon Williams committed May 5, 2017 at 12:53 UTC 473e39307d8c9db93bd08d82898e7fff7002c8cb
3 files changed +17 -16
dir.c
+15 -14
@@ -730,7 +730,7 @@ static void invalidate_directory(struct untracked_cache *uc,
730
731 /*
732 * Given a file with name "fname", read it (either from disk, or from
733 - * the index if "check_index" is non-zero), parse it and store the
733 + * an index if 'istate' is non-null), parse it and store the
734 * exclude rules in "el".
735 *
736 * 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,
738 * ss_valid is non-zero, "ss" must contain good value as input.
739 */
740 static int add_excludes(const char *fname, const char *base, int baselen,
741 - struct exclude_list *el, int check_index,
741 + struct exclude_list *el,
742 + struct index_state *istate,
743 struct sha1_stat *sha1_stat)
744 {
745 struct stat st;
@@ -752,8 +753,8 @@ static int add_excludes(const char *fname, const char *base, int baselen,
753 warn_on_inaccessible(fname);
754 if (0 <= fd)
755 close(fd);
755 - if (!check_index ||
756 - (buf = read_skip_worktree_file_from_index(&the_index, fname, &size, sha1_stat)) == NULL)
756 + if (!istate ||
757 + (buf = read_skip_worktree_file_from_index(istate, fname, &size, sha1_stat)) == NULL)
758 return -1;
759 if (size == 0) {
760 free(buf);
@@ -785,15 +786,15 @@ static int add_excludes(const char *fname, const char *base, int baselen,
786 if (sha1_stat) {
787 int pos;
788 if (sha1_stat->valid &&
788 - !match_stat_data_racy(&the_index, &sha1_stat->stat, &st))
789 + !match_stat_data_racy(istate, &sha1_stat->stat, &st))
790 ; /* no content change, ss->sha1 still good */
790 - else if (check_index &&
791 - (pos = index_name_pos(&the_index, fname, strlen(fname))) >= 0 &&
792 - !ce_stage(the_index.cache[pos]) &&
793 - ce_uptodate(the_index.cache[pos]) &&
791 + else if (istate &&
792 + (pos = index_name_pos(istate, fname, strlen(fname))) >= 0 &&
793 + !ce_stage(istate->cache[pos]) &&
794 + ce_uptodate(istate->cache[pos]) &&
795 !would_convert_to_git(fname))
796 hashcpy(sha1_stat->sha1,
796 - the_index.cache[pos]->oid.hash);
797 + istate->cache[pos]->oid.hash);
798 else
799 hash_sha1_file(buf, size, "blob", sha1_stat->sha1);
800 fill_stat_data(&sha1_stat->stat, &st);
@@ -824,9 +825,9 @@ static int add_excludes(const char *fname, const char *base, int baselen,
825
826 int add_excludes_from_file_to_list(const char *fname, const char *base,
827 int baselen, struct exclude_list *el,
827 - int check_index)
828 + struct index_state *istate)
829 {
829 - return add_excludes(fname, base, baselen, el, check_index, NULL);
830 + return add_excludes(fname, base, baselen, el, istate, NULL);
831 }
832
833 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,
859 if (!dir->untracked)
860 dir->unmanaged_exclude_files++;
861 el = add_exclude_list(dir, EXC_FILE, fname);
861 - if (add_excludes(fname, "", 0, el, 0, sha1_stat) < 0)
862 + if (add_excludes(fname, "", 0, el, NULL, sha1_stat) < 0)
863 die("cannot use %s as an exclude file", fname);
864 }
865
@@ -1166,7 +1167,7 @@ static void prep_exclude(struct dir_struct *dir, const char *base, int baselen)
1167 strbuf_addbuf(&sb, &dir->basebuf);
1168 strbuf_addstr(&sb, dir->exclude_per_dir);
1169 el->src = strbuf_detach(&sb, NULL);
1169 - add_excludes(el->src, el->src, stk->baselen, el, 1,
1170 + add_excludes(el->src, el->src, stk->baselen, el, &the_index,
1171 untracked ? &sha1_stat : NULL);
1172 }
1173 /*
dir.h
+1 -1
@@ -243,7 +243,7 @@ extern int is_excluded(struct dir_struct *dir, const char *name, int *dtype);
243 extern struct exclude_list *add_exclude_list(struct dir_struct *dir,
244 int group_type, const char *src);
245 extern int add_excludes_from_file_to_list(const char *fname, const char *base, int baselen,
246 - struct exclude_list *el, int check_index);
246 + struct exclude_list *el, struct index_state *istate);
247 extern void add_excludes_from_file(struct dir_struct *, const char *fname);
248 extern void parse_exclude_pattern(const char **string, int *patternlen, unsigned *flags, int *nowildcardlen);
249 extern void add_exclude(const char *string, const char *base,
unpack-trees.c
+1 -1
@@ -1251,7 +1251,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
1251 o->skip_sparse_checkout = 1;
1252 if (!o->skip_sparse_checkout) {
1253 char *sparse = git_pathdup("info/sparse-checkout");
1254 - if (add_excludes_from_file_to_list(sparse, "", 0, &el, 0) < 0)
1254 + if (add_excludes_from_file_to_list(sparse, "", 0, &el, NULL) < 0)
1255 o->skip_sparse_checkout = 1;
1256 else
1257 o->el = &el;