Revert "magic pathspec: add ":(icase)path" to match case insensitively"

This reverts commit d0546e2d48, which
was only meant to be a Proof-of-concept used during the discussion.

The real implementation of the feature needs to wait until we migrate
all the code to use "struct pathspec", not "char **", to represent
richer semantics given to pathspec.
This commit is contained in:
Junio C Hamano
2011-05-10 10:23:41 -07:00
parent d0546e2d48
commit 6d94292710
2 changed files with 6 additions and 32 deletions

View File

@ -319,13 +319,10 @@ top `/`;;
The magic word `top` (mnemonic: `/`) makes the pattern match The magic word `top` (mnemonic: `/`) makes the pattern match
from the root of the working tree, even when you are running from the root of the working tree, even when you are running
the command from inside a subdirectory. the command from inside a subdirectory.
icase;;
The magic word `icase` (there is no mnemonic for it) makes the
pattern match case insensitively. E.g. `:(icase)makefile` matches
both `Makefile` and `makefile`.
-- --
+ +
It is envisioned that we will support more types of magic in later Currently only the slash `/` is recognized as the "magic signature",
but it is envisioned that we will support more types of magic in later
versions of git. versions of git.
[[def_parent]]parent:: [[def_parent]]parent::

31
setup.c
View File

@ -136,12 +136,12 @@ void verify_non_filename(const char *prefix, const char *arg)
* Possible future magic semantics include stuff like: * Possible future magic semantics include stuff like:
* *
* { PATHSPEC_NOGLOB, '!', "noglob" }, * { PATHSPEC_NOGLOB, '!', "noglob" },
* { PATHSPEC_ICASE, '\0', "icase" },
* { PATHSPEC_RECURSIVE, '*', "recursive" }, * { PATHSPEC_RECURSIVE, '*', "recursive" },
* { PATHSPEC_REGEXP, '\0', "regexp" }, * { PATHSPEC_REGEXP, '\0', "regexp" },
* *
*/ */
#define PATHSPEC_FROMTOP (1<<0) #define PATHSPEC_FROMTOP (1<<0)
#define PATHSPEC_ICASE (1<<1)
struct pathspec_magic { struct pathspec_magic {
unsigned bit; unsigned bit;
@ -149,7 +149,6 @@ struct pathspec_magic {
const char *name; const char *name;
} pathspec_magic[] = { } pathspec_magic[] = {
{ PATHSPEC_FROMTOP, '/', "top" }, { PATHSPEC_FROMTOP, '/', "top" },
{ PATHSPEC_ICASE, '\0', "icase" },
}; };
/* /*
@ -169,8 +168,7 @@ const char *prefix_pathspec(const char *prefix, int prefixlen, const char *elt)
{ {
unsigned magic = 0; unsigned magic = 0;
const char *copyfrom = elt; const char *copyfrom = elt;
const char *retval; int i;
int i, free_source = 0;
if (elt[0] != ':') { if (elt[0] != ':') {
; /* nothing to do */ ; /* nothing to do */
@ -224,31 +222,10 @@ const char *prefix_pathspec(const char *prefix, int prefixlen, const char *elt)
copyfrom++; copyfrom++;
} }
if (magic & PATHSPEC_ICASE) {
struct strbuf sb = STRBUF_INIT;
for (i = 0; copyfrom[i]; i++) {
int ch = copyfrom[i];
if (('a' <= ch && ch <= 'z') ||
('A' <= ch && ch <= 'Z')) {
strbuf_addf(&sb, "[%c%c]",
tolower(ch), toupper(ch));
} else {
strbuf_addch(&sb, ch);
}
}
if (sb.len) {
free_source = 1;
copyfrom = strbuf_detach(&sb, NULL);
}
}
if (magic & PATHSPEC_FROMTOP) if (magic & PATHSPEC_FROMTOP)
retval = xstrdup(copyfrom); return xstrdup(copyfrom);
else else
retval = prefix_path(prefix, prefixlen, copyfrom); return prefix_path(prefix, prefixlen, copyfrom);
if (free_source)
free((char *)copyfrom);
return retval;
} }
const char **get_pathspec(const char *prefix, const char **pathspec) const char **get_pathspec(const char *prefix, const char **pathspec)