Browse Source

git-add -f: allow adding otherwise ignored files.

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>
maint
Junio C Hamano 18 years ago
parent
commit
6a1ad32519
  1. 8
      Documentation/git-add.txt
  2. 34
      builtin-add.c

8
Documentation/git-add.txt

@ -7,7 +7,7 @@ git-add - Add file contents to the changeset to be committed next @@ -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
-----------
@ -25,7 +25,8 @@ the commit. @@ -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.

@ -48,6 +49,9 @@ OPTIONS @@ -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.

34
builtin-add.c

@ -10,7 +10,7 @@ @@ -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)
{
@ -37,9 +37,6 @@ static void prune_directory(struct dir_struct *dir, const char **pathspec, int p @@ -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;
@ -94,10 +91,13 @@ static void fill_directory(struct dir_struct *dir, const char **pathspec) @@ -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;
@ -132,6 +132,10 @@ int cmd_add(int argc, const char **argv, const char *prefix) @@ -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;
@ -150,6 +154,8 @@ int cmd_add(int argc, const char **argv, const char *prefix) @@ -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";
@ -161,6 +167,24 @@ int cmd_add(int argc, const char **argv, const char *prefix) @@ -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);


Loading…
Cancel
Save