From 6a1ad32519898a8fa4400e081c2d61fd3af42e2c Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Mon, 25 Dec 2006 17:46:38 -0800 Subject: [PATCH] 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 --- Documentation/git-add.txt | 8 ++++++-- builtin-add.c | 34 +++++++++++++++++++++++++++++----- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/Documentation/git-add.txt b/Documentation/git-add.txt index 2fef0681b..95bea6637 100644 --- a/Documentation/git-add.txt +++ b/Documentation/git-add.txt @@ -7,7 +7,7 @@ git-add - Add file contents to the changeset to be committed next SYNOPSIS -------- -'git-add' [-n] [-v] [--interactive] [--] ... +'git-add' [-n] [-v] [-f] [--interactive] [--] ... DESCRIPTION ----------- @@ -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 -v:: Be verbose. +-f:: + Allow adding otherwise ignored files. + \--interactive:: Add modified contents in the working tree interactively to the index. diff --git a/builtin-add.c b/builtin-add.c index c54c69453..8ed4a6a9f 100644 --- a/builtin-add.c +++ b/builtin-add.c @@ -10,7 +10,7 @@ #include "cache-tree.h" static const char builtin_add_usage[] = -"git-add [-n] [-v] [--interactive] [--] ..."; +"git-add [-n] [-v] [-f] [--interactive] [--] ..."; 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 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) 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) 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) 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) 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); -- 2.30.2