@ -123,6 +123,23 @@ static void update(int verbose, const char **files)
run_diff_files(&rev, 0);
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)
static int git_add_config(const char *var, const char *value)
{
{
if (!strcmp(var, "core.excludesfile")) {
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 cmd_add(int argc, const char **argv, const char *prefix)
{
{
int i, newfd;
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;
const char **pathspec;
struct dir_struct dir;
struct dir_struct dir;
int add_interactive = 0;
int add_interactive = 0;
@ -191,6 +208,10 @@ int cmd_add(int argc, const char **argv, const char *prefix)
take_worktree_changes = 1;
take_worktree_changes = 1;
continue;
continue;
}
}
if (!strcmp(arg, "--refresh")) {
refresh_only = 1;
continue;
}
usage(builtin_add_usage);
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);
pathspec = get_pathspec(prefix, argv + i);
if (refresh_only) {
refresh(verbose, pathspec);
goto finish;
}
fill_directory(&dir, pathspec, ignored_too);
fill_directory(&dir, pathspec, ignored_too);
if (show_only) {
if (show_only) {