Code

branch --merged/--no-merged: allow specifying arbitrary commit
[git.git] / builtin-add.c
index 522519ec865c7fb00caf98b7935338d036175894..9930cf53f5e94cb7389e7c0b2b760b113a366e51 100644 (file)
@@ -100,15 +100,16 @@ static void update_callback(struct diff_queue_struct *q,
                case DIFF_STATUS_UNMERGED:
                case DIFF_STATUS_MODIFIED:
                case DIFF_STATUS_TYPE_CHANGED:
-                       if (add_file_to_cache(path, data->flags & ADD_FILES_VERBOSE)) {
-                               if (!(data->flags & ADD_FILES_IGNORE_ERRORS))
+                       if (add_file_to_cache(path, data->flags)) {
+                               if (!(data->flags & ADD_CACHE_IGNORE_ERRORS))
                                        die("updating files failed");
                                data->add_errors++;
                        }
                        break;
                case DIFF_STATUS_DELETED:
-                       remove_file_from_cache(path);
-                       if (data->flags & ADD_FILES_VERBOSE)
+                       if (!(data->flags & ADD_CACHE_PRETEND))
+                               remove_file_from_cache(path);
+                       if (data->flags & (ADD_CACHE_PRETEND|ADD_CACHE_VERBOSE))
                                printf("remove '%s'\n", path);
                        break;
                }
@@ -199,19 +200,29 @@ static struct option builtin_add_options[] = {
        OPT_GROUP(""),
        OPT_BOOLEAN('i', "interactive", &add_interactive, "interactive picking"),
        OPT_BOOLEAN('p', "patch", &patch_interactive, "interactive patching"),
-       OPT_BOOLEAN('f', NULL, &ignored_too, "allow adding otherwise ignored files"),
-       OPT_BOOLEAN('u', NULL, &take_worktree_changes, "update tracked files"),
+       OPT_BOOLEAN('f', "force", &ignored_too, "allow adding otherwise ignored files"),
+       OPT_BOOLEAN('u', "update", &take_worktree_changes, "update tracked files"),
        OPT_BOOLEAN( 0 , "refresh", &refresh_only, "don't add, only refresh the index"),
        OPT_BOOLEAN( 0 , "ignore-errors", &ignore_add_errors, "just skip files which cannot be added because of errors"),
        OPT_END(),
 };
 
+static int add_config(const char *var, const char *value, void *cb)
+{
+       if (!strcasecmp(var, "add.ignore-errors")) {
+               ignore_add_errors = git_config_bool(var, value);
+               return 0;
+       }
+       return git_default_config(var, value, cb);
+}
+
 int cmd_add(int argc, const char **argv, const char *prefix)
 {
        int exit_status = 0;
        int i, newfd;
        const char **pathspec;
        struct dir_struct dir;
+       int flags;
 
        argc = parse_options(argc, argv, builtin_add_options,
                          builtin_add_usage, 0);
@@ -220,22 +231,19 @@ int cmd_add(int argc, const char **argv, const char *prefix)
        if (add_interactive)
                exit(interactive_add(argc, argv, prefix));
 
-       git_config(git_default_config);
+       git_config(add_config, NULL);
 
        newfd = hold_locked_index(&lock_file, 1);
 
+       flags = ((verbose ? ADD_CACHE_VERBOSE : 0) |
+                (show_only ? ADD_CACHE_PRETEND : 0) |
+                (ignore_add_errors ? ADD_CACHE_IGNORE_ERRORS : 0));
+
        if (take_worktree_changes) {
-               int flags = 0;
                const char **pathspec;
                if (read_cache() < 0)
                        die("index file corrupt");
                pathspec = get_pathspec(prefix, argv);
-
-               if (verbose)
-                       flags |= ADD_FILES_VERBOSE;
-               if (ignore_add_errors)
-                       flags |= ADD_FILES_IGNORE_ERRORS;
-
                exit_status = add_files_to_cache(prefix, pathspec, flags);
                goto finish;
        }
@@ -254,17 +262,6 @@ int cmd_add(int argc, const char **argv, const char *prefix)
 
        fill_directory(&dir, pathspec, ignored_too);
 
-       if (show_only) {
-               const char *sep = "", *eof = "";
-               for (i = 0; i < dir.nr; i++) {
-                       printf("%s%s", sep, dir.entries[i]->name);
-                       sep = " ";
-                       eof = "\n";
-               }
-               fputs(eof, stdout);
-               return 0;
-       }
-
        if (read_cache() < 0)
                die("index file corrupt");
 
@@ -278,7 +275,7 @@ int cmd_add(int argc, const char **argv, const char *prefix)
        }
 
        for (i = 0; i < dir.nr; i++)
-               if (add_file_to_cache(dir.entries[i]->name, verbose)) {
+               if (add_file_to_cache(dir.entries[i]->name, flags)) {
                        if (!ignore_add_errors)
                                die("adding files failed");
                        exit_status = 1;