Skip to content

Commit

Permalink
git-add -f: allow adding otherwise ignored files.
Browse files Browse the repository at this point in the history
Instead of just warning, refuse to add otherwise ignored files
by default, and allow it with an -f option.

Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Dec 26, 2006
1 parent 1e423f5 commit 6a1ad32
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 7 deletions.
8 changes: 6 additions & 2 deletions Documentation/git-add.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ git-add - Add file contents to the changeset to be committed next

SYNOPSIS
--------
'git-add' [-n] [-v] [--interactive] [--] <file>...
'git-add' [-n] [-v] [-f] [--interactive] [--] <file>...

DESCRIPTION
-----------
Expand All @@ -25,7 +25,8 @@ the commit.
The 'git status' command can be used to obtain a summary of what is included
for the next commit.

This command can be used to add ignored files, but they have to be
This command can be used to add ignored files with `-f` (force)
option, but they have to be
explicitly and exactly specified from the command line. File globbing
and recursive behaviour do not add ignored files.

Expand All @@ -48,6 +49,9 @@ OPTIONS
-v::
Be verbose.

-f::
Allow adding otherwise ignored files.

\--interactive::
Add modified contents in the working tree interactively to
the index.
Expand Down
34 changes: 29 additions & 5 deletions builtin-add.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#include "cache-tree.h"

static const char builtin_add_usage[] =
"git-add [-n] [-v] [--interactive] [--] <filepattern>...";
"git-add [-n] [-v] [-f] [--interactive] [--] <filepattern>...";

static void prune_directory(struct dir_struct *dir, const char **pathspec, int prefix)
{
Expand All @@ -37,9 +37,6 @@ static void prune_directory(struct dir_struct *dir, const char **pathspec, int p
free(entry);
continue;
}
if (entry->ignored_entry)
fprintf(stderr, "warning: '%s' is an ignored path.\n",
entry->name);
*dst++ = entry;
}
dir->nr = dst - dir->entries;
Expand Down Expand Up @@ -94,10 +91,13 @@ static void fill_directory(struct dir_struct *dir, const char **pathspec)

static struct lock_file lock_file;

static const char ignore_warning[] =
"The following paths are ignored by one of your .gitignore files:\n";

int cmd_add(int argc, const char **argv, const char *prefix)
{
int i, newfd;
int verbose = 0, show_only = 0;
int verbose = 0, show_only = 0, ignored_too = 0;
const char **pathspec;
struct dir_struct dir;
int add_interactive = 0;
Expand Down Expand Up @@ -132,6 +132,10 @@ int cmd_add(int argc, const char **argv, const char *prefix)
show_only = 1;
continue;
}
if (!strcmp(arg, "-f")) {
ignored_too = 1;
continue;
}
if (!strcmp(arg, "-v")) {
verbose = 1;
continue;
Expand All @@ -150,6 +154,8 @@ int cmd_add(int argc, const char **argv, const char *prefix)
if (show_only) {
const char *sep = "", *eof = "";
for (i = 0; i < dir.nr; i++) {
if (!ignored_too && dir.entries[i]->ignored_entry)
continue;
printf("%s%s", sep, dir.entries[i]->name);
sep = " ";
eof = "\n";
Expand All @@ -161,6 +167,24 @@ int cmd_add(int argc, const char **argv, const char *prefix)
if (read_cache() < 0)
die("index file corrupt");

if (!ignored_too) {
int has_ignored = -1;
for (i = 0; has_ignored < 0 && i < dir.nr; i++)
if (dir.entries[i]->ignored_entry)
has_ignored = i;
if (0 <= has_ignored) {
fprintf(stderr, ignore_warning);
for (i = has_ignored; i < dir.nr; i++) {
if (!dir.entries[i]->ignored_entry)
continue;
fprintf(stderr, "%s\n", dir.entries[i]->name);
}
fprintf(stderr,
"Use -f if you really want to add them.\n");
exit(1);
}
}

for (i = 0; i < dir.nr; i++)
add_file_to_index(dir.entries[i]->name, verbose);

Expand Down

0 comments on commit 6a1ad32

Please sign in to comment.