Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
git add -u: die on unmatched pathspec
author
Junio C Hamano
<gitster@pobox.com>
Tue, 9 Feb 2010 22:30:49 +0000
(17:30 -0500)
committer
Junio C Hamano
<gitster@pobox.com>
Wed, 17 Feb 2010 06:53:33 +0000
(22:53 -0800)
If a pathspec is supplied to 'git add -u' and no path matches
the pattern, fail with an approriate error message and exit code.
Tested-by: Chris Packham <judge.packham@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-add.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
78d553b
)
diff --git
a/builtin-add.c
b/builtin-add.c
index cb6e5906fb76f2460f212c54b557e5ae0ce23579..016987c22420a0389f11920b519b9439528bc7ab 100644
(file)
--- a/
builtin-add.c
+++ b/
builtin-add.c
@@
-41,7
+41,19
@@
static void fill_pathspec_matches(const char **pathspec, char *seen, int specs)
}
}
}
}
-static void prune_directory(struct dir_struct *dir, const char **pathspec, int prefix)
+static char *find_used_pathspec(const char **pathspec)
+{
+ char *seen;
+ int i;
+
+ for (i = 0; pathspec[i]; i++)
+ ; /* just counting */
+ seen = xcalloc(i, 1);
+ fill_pathspec_matches(pathspec, seen, i);
+ return seen;
+}
+
+static char *prune_directory(struct dir_struct *dir, const char **pathspec, int prefix)
{
char *seen;
int i, specs;
{
char *seen;
int i, specs;
@@
-61,13
+73,7
@@
static void prune_directory(struct dir_struct *dir, const char **pathspec, int p
}
dir->nr = dst - dir->entries;
fill_pathspec_matches(pathspec, seen, specs);
}
dir->nr = dst - dir->entries;
fill_pathspec_matches(pathspec, seen, specs);
-
- for (i = 0; i < specs; i++) {
- if (!seen[i] && pathspec[i][0] && !file_exists(pathspec[i]))
- die("pathspec '%s' did not match any files",
- pathspec[i]);
- }
- free(seen);
+ return seen;
}
static void treat_gitlinks(const char **pathspec)
}
static void treat_gitlinks(const char **pathspec)
@@
-283,6
+289,7
@@
int cmd_add(int argc, const char **argv, const char *prefix)
int flags;
int add_new_files;
int require_pathspec;
int flags;
int add_new_files;
int require_pathspec;
+ char *seen = NULL;
git_config(add_config, NULL);
git_config(add_config, NULL);
@@
-342,7
+349,7
@@
int cmd_add(int argc, const char **argv, const char *prefix)
/* This picks up the paths that are not tracked */
baselen = fill_directory(&dir, pathspec);
if (pathspec)
/* This picks up the paths that are not tracked */
baselen = fill_directory(&dir, pathspec);
if (pathspec)
- prune_directory(&dir, pathspec, baselen);
+
seen =
prune_directory(&dir, pathspec, baselen);
}
if (refresh_only) {
}
if (refresh_only) {
@@
-350,6
+357,19
@@
int cmd_add(int argc, const char **argv, const char *prefix)
goto finish;
}
goto finish;
}
+ if (pathspec) {
+ int i;
+ if (!seen)
+ seen = find_used_pathspec(pathspec);
+ for (i = 0; pathspec[i]; i++) {
+ if (!seen[i] && pathspec[i][0]
+ && !file_exists(pathspec[i]))
+ die("pathspec '%s' did not match any files",
+ pathspec[i]);
+ }
+ free(seen);
+ }
+
exit_status |= add_files_to_cache(prefix, pathspec, flags);
if (add_new_files)
exit_status |= add_files_to_cache(prefix, pathspec, flags);
if (add_new_files)