The first entry wins, all the subsequent entries will be discarded. Signed-off-by: Alex Riesen <raa.lkml@xxxxxxxxx> --- martin f krafft, Wed, Aug 29, 2007 10:11:22 +0200: > when using git-add from a script, the following fails: > > $ git commit -m. foo foo > error: pathspec 'foo' did not match any file(s) known to git. > Did you forget to 'git add'? > > I am bringing this up in the context of > http://bugs.debian.org/439992, where debcommit.pl would duplicate > a file argument under certain conditions. It's since been fixed, but > I wonder whether git-commit could be made more robust in the > presence of duplicate arguments? Or is this behaviour by choice? > Don't think so. Looks like accident. The patch below fixes it, by introducing a costly argument duplication check. Shouldn't be a problem for a normal use (git-ls-files expects globs, not pathnames). setup.c | 21 +++++++++++++++++---- 1 files changed, 17 insertions(+), 4 deletions(-) diff --git a/setup.c b/setup.c index 06004f1..b13b628 100644 --- a/setup.c +++ b/setup.c @@ -111,10 +111,19 @@ void verify_non_filename(const char *prefix, const char *arg) die("'%s': %s", arg, strerror(errno)); } +static const char **has_pathspec(const char **start, const char **end, const char *spec) +{ + const char **p; + for (p = start; p != end; ++p) + if (!strcmp(*p, spec)) + return p; + return NULL; +} + const char **get_pathspec(const char *prefix, const char **pathspec) { const char *entry = *pathspec; - const char **p; + const char **in, **out; int prefixlen; if (!prefix && !entry) @@ -128,11 +137,15 @@ const char **get_pathspec(const char *prefix, const char **pathspec) } /* Otherwise we have to re-write the entries.. */ - p = pathspec; + in = out = pathspec; prefixlen = prefix ? strlen(prefix) : 0; do { - *p = prefix_path(prefix, prefixlen, entry); - } while ((entry = *++p) != NULL); + const char *spec = prefix_path(prefix, prefixlen, entry); + if (!has_pathspec(pathspec, out, spec)) + *out++ = spec; + } while ((entry = *++in) != NULL); + if (in != out) + *out = NULL; return (const char **) pathspec; } -- 1.5.3.rc7.24.g0e57 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html