git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>,
	Michael J Gruber <git@drmicha.warpmail.net>
Cc: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH] pathspec: reserve some letters after a colon pathspec
Date: Wed, 23 Mar 2011 22:32:33 +0700	[thread overview]
Message-ID: <1300894353-19386-1-git-send-email-pclouds@gmail.com> (raw)
In-Reply-To: <bc49592f5e524a0d12aa55eeca1c5ca659b6525f.1298974647.git.git@drmicha.warpmail.net>

Pathspec ':something' means 'something' at top directory. Limit it a
bit so that ':<non-alnum>something' can be reserved for future
extensions. ':\<non-alnum>something' can be used to achieve
':something' before this patch.

All non-alphanumeric chars on the en_US keyboard, except \ and ., are
currently reserved.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 This is the better, non-whitespace-damaged version. While I mark
 colon_pathspec_type() static, you can export it to use in git-attr.c

 setup.c |   31 +++++++++++++++++++++++++++++--
 1 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/setup.c b/setup.c
index 3bbb01a..684abb5 100644
--- a/setup.c
+++ b/setup.c
@@ -123,6 +123,27 @@ void verify_non_filename(const char *prefix, const char *arg)
 	    "Use '--' to separate filenames from revisions", arg);
 }
 
+static int colon_pathspec_type(const char **pathspec)
+{
+	const char *reserved = "~`!@#$%^&*()-_=+[{]}|;:'\",<>/?";
+	const char *s = *pathspec;
+	int ret;
+
+	if (*s++ != ':')
+		return -1;
+	if (*s == '\\') {
+		s++;
+		ret = 0;
+	}
+	else if (*s && strchr(reserved, *s))
+		ret = -1;
+	else
+		ret = 0;
+
+	*pathspec = s;
+	return ret;
+}
+
 const char **get_pathspec(const char *prefix, const char **pathspec)
 {
 	const char *entry = *pathspec;
@@ -145,8 +166,14 @@ const char **get_pathspec(const char *prefix, const char **pathspec)
 	prefixlen = prefix ? strlen(prefix) : 0;
 	while (*src) {
 		const char *p;
-		if ((*src)[0] == ':')
-			p = prefix_path(NULL, 0, (*src)+1);
+
+		if ((*src)[0] == ':') {
+			const char **s = src;
+			if (colon_pathspec_type(s) != 0)
+				die("Pathspec syntax ':%c' is not supported. %s"
+				    "Quote it for literally match.", (*s)[0], *s);
+			p = prefix_path(NULL, 0, *s);
+		}
 		else
 			p = prefix_path(prefix, prefixlen, *src);
 		*(dst++) = p;
-- 
1.7.4.74.g639db

  parent reply	other threads:[~2011-03-23 15:32 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-28  0:17 git-grep to operate across who repository and not just CWD? David Chanters
2011-02-28  9:27 ` Michael J Gruber
2011-02-28 15:27   ` Jay Soffian
2011-02-28 18:32     ` Junio C Hamano
2011-02-28 18:38       ` Junio C Hamano
2011-02-28 22:25   ` Phil Hord
2011-03-01  8:05     ` Michael J Gruber
2011-03-01  8:16       ` Nguyen Thai Ngoc Duy
2011-03-01  8:54         ` Michael J Gruber
2011-03-01  9:32           ` Nguyen Thai Ngoc Duy
2011-03-01  9:44             ` Nguyen Thai Ngoc Duy
2011-03-01  9:53               ` [PATCH/POC 0/2] grep --full-tree Michael J Gruber
2011-03-01  9:53                 ` [PATCH/RFC 1/2] grep: --full-tree Michael J Gruber
2011-03-01  9:53                 ` [PATCH/RFC 2/2] grep: make --full-tree work with pathspecs Michael J Gruber
2011-03-01 19:20                   ` Junio C Hamano
2011-03-01 10:21               ` [PATCH/alternative/raw and rough] setup.c: denote repo wide pathspecs by ':' Michael J Gruber
2011-03-01 11:13                 ` Nguyen Thai Ngoc Duy
2011-03-01 11:16                   ` Michael J Gruber
2011-03-01 11:50                     ` Nguyen Thai Ngoc Duy
2011-03-01 11:57                       ` Michael J Gruber
2011-03-01 12:08                         ` Nguyen Thai Ngoc Duy
2011-03-01 14:50                           ` Junio C Hamano
2011-03-01 15:01                             ` Michael J Gruber
2011-03-01 20:00                               ` Junio C Hamano
2011-03-02 12:34                               ` Sverre Rabbelier
2011-03-02 12:57                                 ` Nguyen Thai Ngoc Duy
2011-03-02 13:12                                   ` Michael J Gruber
2011-03-02 16:53                                     ` Junio C Hamano
2011-03-02 17:31                                       ` Michael J Gruber
2011-03-03  2:42                                         ` Miles Bader
2011-03-03  3:52                                           ` Junio C Hamano
2011-03-03  3:44                                       ` Phil Hord
2011-03-03  8:20                                         ` Michael J Gruber
2011-03-01 16:25                             ` Phil Hord
2011-03-01 18:31                             ` James Pickens
2011-03-02  0:12                     ` Nguyen Thai Ngoc Duy
2011-03-03  3:51                       ` Phil Hord
2011-03-03  8:21                         ` Michael J Gruber
2011-03-01 11:49                 ` Michael J Gruber
2011-03-01 13:05                   ` Phil Hord
2011-03-23 15:32                 ` Nguyễn Thái Ngọc Duy [this message]
2011-03-23 18:04                   ` [PATCH] pathspec: reserve some letters after a colon pathspec Junio C Hamano
2011-03-24  7:15                     ` Michael J Gruber
2011-03-24  7:49                       ` Nguyen Thai Ngoc Duy
2011-03-24  8:12                         ` Junio C Hamano
2011-03-24 14:46                       ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1300894353-19386-1-git-send-email-pclouds@gmail.com \
    --to=pclouds@gmail.com \
    --cc=git@drmicha.warpmail.net \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).