diff: don't run pager if user asked for a diff style exit code
[gitweb.git] / builtin-add.c
index 734547994f3a35e04fc7fdea10396c0c87bc6f0d..82c806acf003e04f2435477eb4624eb72fe4fb32 100644 (file)
@@ -60,7 +60,7 @@ static void fill_directory(struct dir_struct *dir, const char **pathspec,
                path = git_path("info/exclude");
                if (!access(path, R_OK))
                        add_excludes_from_file(dir, path);
-               if (!access(excludes_file, R_OK))
+               if (excludes_file != NULL && !access(excludes_file, R_OK))
                        add_excludes_from_file(dir, excludes_file);
        }
 
@@ -123,6 +123,23 @@ static void update(int verbose, const char **files)
        run_diff_files(&rev, 0);
 }
 
+static void refresh(int verbose, const char **pathspec)
+{
+       char *seen;
+       int i, specs;
+
+       for (specs = 0; pathspec[specs];  specs++)
+               /* nothing */;
+       seen = xcalloc(specs, 1);
+       if (read_cache() < 0)
+               die("index file corrupt");
+       refresh_index(&the_index, verbose ? 0 : REFRESH_QUIET, pathspec, seen);
+       for (i = 0; i < specs; i++) {
+               if (!seen[i])
+                       die("pathspec '%s' did not match any files", pathspec[i]);
+       }
+}
+
 static int git_add_config(const char *var, const char *value)
 {
        if (!strcmp(var, "core.excludesfile")) {
@@ -143,7 +160,7 @@ static const char ignore_warning[] =
 int cmd_add(int argc, const char **argv, const char *prefix)
 {
        int i, newfd;
-       int verbose = 0, show_only = 0, ignored_too = 0;
+       int verbose = 0, show_only = 0, ignored_too = 0, refresh_only = 0;
        const char **pathspec;
        struct dir_struct dir;
        int add_interactive = 0;
@@ -191,6 +208,10 @@ int cmd_add(int argc, const char **argv, const char *prefix)
                        take_worktree_changes = 1;
                        continue;
                }
+               if (!strcmp(arg, "--refresh")) {
+                       refresh_only = 1;
+                       continue;
+               }
                usage(builtin_add_usage);
        }
 
@@ -206,6 +227,11 @@ int cmd_add(int argc, const char **argv, const char *prefix)
        }
        pathspec = get_pathspec(prefix, argv + i);
 
+       if (refresh_only) {
+               refresh(verbose, pathspec);
+               goto finish;
+       }
+
        fill_directory(&dir, pathspec, ignored_too);
 
        if (show_only) {