Skip to content

Commit

Permalink
Turn the flags in struct dir_struct into a single variable
Browse files Browse the repository at this point in the history
By having flags represented as bits in the new member variable 'flags',
it will be easier to use parse_options when dir_struct is involved.

Signed-off-by: Johannes Schindelin <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
dscho authored and gitster committed Feb 18, 2009
1 parent 81d3fe9 commit 7c4c97c
Show file tree
Hide file tree
Showing 9 changed files with 33 additions and 29 deletions.
2 changes: 1 addition & 1 deletion builtin-add.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ static void fill_directory(struct dir_struct *dir, const char **pathspec,
/* Set up the default git porcelain excludes */
memset(dir, 0, sizeof(*dir));
if (!ignored_too) {
dir->collect_ignored = 1;
dir->flags |= DIR_COLLECT_IGNORED;
setup_standard_excludes(dir);
}

Expand Down
2 changes: 1 addition & 1 deletion builtin-checkout.c
Original file line number Diff line number Diff line change
Expand Up @@ -405,7 +405,7 @@ static int merge_working_tree(struct checkout_opts *opts,
topts.verbose_update = !opts->quiet;
topts.fn = twoway_merge;
topts.dir = xcalloc(1, sizeof(*topts.dir));
topts.dir->show_ignored = 1;
topts.dir->flags |= DIR_SHOW_IGNORED;
topts.dir->exclude_per_dir = ".gitignore";
tree = parse_tree_indirect(old->commit->object.sha1);
init_tree_desc(&trees[0], tree->buffer, tree->size);
Expand Down
4 changes: 2 additions & 2 deletions builtin-clean.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ int cmd_clean(int argc, const char **argv, const char *prefix)

memset(&dir, 0, sizeof(dir));
if (ignored_only)
dir.show_ignored = 1;
dir.flags |= DIR_SHOW_IGNORED;

if (ignored && ignored_only)
die("-x and -X cannot be used together");
Expand All @@ -69,7 +69,7 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
die("clean.requireForce%s set and -n or -f not given; "
"refusing to clean", config_set ? "" : " not");

dir.show_other_directories = 1;
dir.flags |= DIR_SHOW_OTHER_DIRECTORIES;

if (!ignored)
setup_standard_excludes(&dir);
Expand Down
14 changes: 8 additions & 6 deletions builtin-ls-files.c
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,8 @@ static void show_files(struct dir_struct *dir, const char *prefix)
for (i = 0; i < active_nr; i++) {
struct cache_entry *ce = active_cache[i];
int dtype = ce_to_dtype(ce);
if (excluded(dir, ce->name, &dtype) != dir->show_ignored)
if (excluded(dir, ce->name, &dtype) !=
!!(dir->flags & DIR_SHOW_IGNORED))
continue;
if (show_unmerged && !ce_stage(ce))
continue;
Expand All @@ -189,7 +190,8 @@ static void show_files(struct dir_struct *dir, const char *prefix)
struct stat st;
int err;
int dtype = ce_to_dtype(ce);
if (excluded(dir, ce->name, &dtype) != dir->show_ignored)
if (excluded(dir, ce->name, &dtype) !=
!!(dir->flags & DIR_SHOW_IGNORED))
continue;
if (ce->ce_flags & CE_UPDATE)
continue;
Expand Down Expand Up @@ -432,7 +434,7 @@ int cmd_ls_files(int argc, const char **argv, const char *prefix)
continue;
}
if (!strcmp(arg, "-i") || !strcmp(arg, "--ignored")) {
dir.show_ignored = 1;
dir.flags |= DIR_SHOW_IGNORED;
require_work_tree = 1;
continue;
}
Expand All @@ -446,11 +448,11 @@ int cmd_ls_files(int argc, const char **argv, const char *prefix)
continue;
}
if (!strcmp(arg, "--directory")) {
dir.show_other_directories = 1;
dir.flags |= DIR_SHOW_OTHER_DIRECTORIES;
continue;
}
if (!strcmp(arg, "--no-empty-directory")) {
dir.hide_empty_directories = 1;
dir.flags |= DIR_HIDE_EMPTY_DIRECTORIES;
continue;
}
if (!strcmp(arg, "-u") || !strcmp(arg, "--unmerged")) {
Expand Down Expand Up @@ -542,7 +544,7 @@ int cmd_ls_files(int argc, const char **argv, const char *prefix)
ps_matched = xcalloc(1, num);
}

if (dir.show_ignored && !exc_given) {
if ((dir.flags & DIR_SHOW_IGNORED) && !exc_given) {
fprintf(stderr, "%s: --ignored needs some exclude pattern\n",
argv[0]);
exit(1);
Expand Down
2 changes: 1 addition & 1 deletion builtin-merge.c
Original file line number Diff line number Diff line change
Expand Up @@ -636,7 +636,7 @@ static int checkout_fast_forward(unsigned char *head, unsigned char *remote)
memset(&opts, 0, sizeof(opts));
memset(&t, 0, sizeof(t));
memset(&dir, 0, sizeof(dir));
dir.show_ignored = 1;
dir.flags |= DIR_SHOW_IGNORED;
dir.exclude_per_dir = ".gitignore";
opts.dir = &dir;

Expand Down
2 changes: 1 addition & 1 deletion builtin-read-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
die("more than one --exclude-per-directory are given.");

dir = xcalloc(1, sizeof(*opts.dir));
dir->show_ignored = 1;
dir->flags |= DIR_SHOW_IGNORED;
dir->exclude_per_dir = arg + 24;
opts.dir = dir;
/* We do not need to nor want to do read-directory
Expand Down
17 changes: 9 additions & 8 deletions dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -487,14 +487,14 @@ static enum directory_treatment treat_directory(struct dir_struct *dir,
return recurse_into_directory;

case index_gitdir:
if (dir->show_other_directories)
if (dir->flags & DIR_SHOW_OTHER_DIRECTORIES)
return ignore_directory;
return show_directory;

case index_nonexistent:
if (dir->show_other_directories)
if (dir->flags & DIR_SHOW_OTHER_DIRECTORIES)
break;
if (!dir->no_gitlinks) {
if (!(dir->flags & DIR_NO_GITLINKS)) {
unsigned char sha1[20];
if (resolve_gitlink_ref(dirname, "HEAD", sha1) == 0)
return show_directory;
Expand All @@ -503,7 +503,7 @@ static enum directory_treatment treat_directory(struct dir_struct *dir,
}

/* This is the "show_other_directories" case */
if (!dir->hide_empty_directories)
if (!(dir->flags & DIR_HIDE_EMPTY_DIRECTORIES))
return show_directory;
if (!read_directory_recursive(dir, dirname, dirname, len, 1, simplify))
return ignore_directory;
Expand Down Expand Up @@ -601,15 +601,15 @@ static int read_directory_recursive(struct dir_struct *dir, const char *path, co

dtype = DTYPE(de);
exclude = excluded(dir, fullname, &dtype);
if (exclude && dir->collect_ignored
if (exclude && (dir->flags & DIR_COLLECT_IGNORED)
&& in_pathspec(fullname, baselen + len, simplify))
dir_add_ignored(dir, fullname, baselen + len);

/*
* Excluded? If we don't explicitly want to show
* ignored files, ignore it
*/
if (exclude && !dir->show_ignored)
if (exclude && !(dir->flags & DIR_SHOW_IGNORED))
continue;

if (dtype == DT_UNKNOWN)
Expand All @@ -621,7 +621,7 @@ static int read_directory_recursive(struct dir_struct *dir, const char *path, co
* even if we don't ignore them, since the
* directory may contain files that we do..
*/
if (!exclude && dir->show_ignored) {
if (!exclude && (dir->flags & DIR_SHOW_IGNORED)) {
if (dtype != DT_DIR)
continue;
}
Expand All @@ -634,7 +634,8 @@ static int read_directory_recursive(struct dir_struct *dir, const char *path, co
len++;
switch (treat_directory(dir, fullname, baselen + len, simplify)) {
case show_directory:
if (exclude != dir->show_ignored)
if (exclude != !!(dir->flags
& DIR_SHOW_IGNORED))
continue;
break;
case recurse_into_directory:
Expand Down
12 changes: 7 additions & 5 deletions dir.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,13 @@ struct exclude_stack {
struct dir_struct {
int nr, alloc;
int ignored_nr, ignored_alloc;
unsigned int show_ignored:1,
show_other_directories:1,
hide_empty_directories:1,
no_gitlinks:1,
collect_ignored:1;
enum {
DIR_SHOW_IGNORED = 1<<0,
DIR_SHOW_OTHER_DIRECTORIES = 1<<1,
DIR_HIDE_EMPTY_DIRECTORIES = 1<<2,
DIR_NO_GITLINKS = 1<<3,
DIR_COLLECT_IGNORED = 1<<4
} flags;
struct dir_entry **entries;
struct dir_entry **ignored;

Expand Down
7 changes: 3 additions & 4 deletions wt-status.c
Original file line number Diff line number Diff line change
Expand Up @@ -250,10 +250,9 @@ static void wt_status_print_untracked(struct wt_status *s)

memset(&dir, 0, sizeof(dir));

if (!s->untracked) {
dir.show_other_directories = 1;
dir.hide_empty_directories = 1;
}
if (!s->untracked)
dir.flags |=
DIR_SHOW_OTHER_DIRECTORIES | DIR_HIDE_EMPTY_DIRECTORIES;
setup_standard_excludes(&dir);

read_directory(&dir, ".", "", 0, NULL);
Expand Down

0 comments on commit 7c4c97c

Please sign in to comment.