git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Johan Herland <johan@herland.net>
To: git@vger.kernel.org
Cc: Johan Herland <johan@herland.net>,
	barkalow@iabervon.org, gitster@pobox.com
Subject: [RFC 05/11] Refactor path name parsing into new function: get_path_str()
Date: Mon, 27 Jul 2009 03:04:13 +0200	[thread overview]
Message-ID: <1248656659-21415-6-git-send-email-johan@herland.net> (raw)
In-Reply-To: <1248656659-21415-1-git-send-email-johan@herland.net>

This is in preparation for adding mark reference capability to path names.

Signed-off-by: Johan Herland <johan@herland.net>
---
 fast-import.c |   60 ++++++++++++++++++++++++++++++--------------------------
 1 files changed, 32 insertions(+), 28 deletions(-)

diff --git a/fast-import.c b/fast-import.c
index 7ef9865..8a7cdc1 100644
--- a/fast-import.c
+++ b/fast-import.c
@@ -1853,6 +1853,24 @@ static void load_branch(struct branch *b)
 	}
 }
 
+static const char *get_path_str(
+	struct strbuf *sb,
+	const char *p,
+	char endc,
+	const char **endp)
+{
+	strbuf_reset(sb);
+	*endp = p;
+	if (!unquote_c_style(sb, p, endp)) {
+		/* successfully unquoted C-style quoted name */
+		p = sb->buf;
+	} else {
+		/* regular path ending at endc */
+		*endp = strchr(p, endc);
+	}
+	return p;
+}
+
 static void file_change_m(struct branch *b)
 {
 	const char *p = command_buf.buf + 2;
@@ -1896,12 +1914,9 @@ static void file_change_m(struct branch *b)
 	if (*p++ != ' ')
 		die("Missing space after SHA1: %s", command_buf.buf);
 
-	strbuf_reset(&uq);
-	if (!unquote_c_style(&uq, p, &endp)) {
-		if (*endp)
-			die("Garbage after path in: %s", command_buf.buf);
-		p = uq.buf;
-	}
+	p = get_path_str(&uq, p, 0, &endp);
+	if (*endp)
+		die("Garbage after path in: %s", command_buf.buf);
 
 	if (S_ISGITLINK(mode)) {
 		if (inline_data)
@@ -1948,12 +1963,9 @@ static void file_change_d(struct branch *b)
 	static struct strbuf uq = STRBUF_INIT;
 	const char *endp;
 
-	strbuf_reset(&uq);
-	if (!unquote_c_style(&uq, p, &endp)) {
-		if (*endp)
-			die("Garbage after path in: %s", command_buf.buf);
-		p = uq.buf;
-	}
+	p = get_path_str(&uq, p, 0, &endp);
+	if (*endp)
+		die("Garbage after path in: %s", command_buf.buf);
 	tree_content_remove(&b->branch_tree, p, NULL);
 }
 
@@ -1966,29 +1978,21 @@ static void file_change_cr(struct branch *b, int rename)
 	struct tree_entry leaf;
 
 	s = command_buf.buf + 2;
-	strbuf_reset(&s_uq);
-	if (!unquote_c_style(&s_uq, s, &endp)) {
-		if (*endp != ' ')
-			die("Missing space after source: %s", command_buf.buf);
-	} else {
-		endp = strchr(s, ' ');
-		if (!endp)
-			die("Missing space after source: %s", command_buf.buf);
+	s = get_path_str(&s_uq, s, ' ', &endp);
+	if (*endp != ' ')
+		die("Missing space after source: %s", command_buf.buf);
+	if (s != s_uq.buf) {
 		strbuf_add(&s_uq, s, endp - s);
+		s = s_uq.buf;
 	}
-	s = s_uq.buf;
 
 	endp++;
 	if (!*endp)
 		die("Missing dest: %s", command_buf.buf);
 
-	d = endp;
-	strbuf_reset(&d_uq);
-	if (!unquote_c_style(&d_uq, d, &endp)) {
-		if (*endp)
-			die("Garbage after dest in: %s", command_buf.buf);
-		d = d_uq.buf;
-	}
+	d = get_path_str(&d_uq, endp, 0, &endp);
+	if (*endp)
+		die("Garbage after dest in: %s", command_buf.buf);
 
 	memset(&leaf, 0, sizeof(leaf));
 	if (rename)
-- 
1.6.4.rc3.138.ga6b98.dirty

  parent reply	other threads:[~2009-07-27  1:06 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-07-27  1:04 [RFC 00/11] Foreign VCS helper program for CVS repositories Johan Herland
2009-07-27  1:04 ` [RFC 01/11] Add specification of git-vcs-* helper programs Johan Herland
2009-07-27  1:04 ` [RFC 02/11] Use a function to determine whether a remote is valid Johan Herland
2009-07-27  1:04 ` [RFC 03/11] Allow programs to not depend on remotes having urls Johan Herland
2009-07-27 18:55   ` Junio C Hamano
2009-07-27 19:33     ` Daniel Barkalow
2009-07-29  8:57   ` Alex Riesen
2009-07-30  0:24     ` Johan Herland
2009-07-27  1:04 ` [RFC 04/11] Add a transport implementation using git-vcs-* helpers Johan Herland
2009-07-27  1:04 ` Johan Herland [this message]
2009-07-27  1:04 ` [RFC 06/11] Add support for mark references as path names Johan Herland
2009-07-27 14:12   ` Shawn O. Pearce
2009-07-27 18:26     ` Johan Herland
2009-07-27 18:35       ` Shawn O. Pearce
2009-07-28  1:43         ` [RFC 06/11 v2] fast-import: Add support for importing commit notes Johan Herland
2009-07-29  2:18           ` Junio C Hamano
2009-07-29  2:41             ` Johan Herland
2009-07-29 14:26               ` Shawn O. Pearce
2009-07-29 16:20                 ` Junio C Hamano
2009-07-30  0:29                   ` Johan Herland
2009-07-30  2:35                     ` Junio C Hamano
2009-07-29 18:56           ` Junio C Hamano
2009-07-29 23:08             ` Johan Herland
2009-07-27  1:04 ` [RFC 07/11] Preliminary clarifications to git-vcs documentation Johan Herland
2009-07-27  1:04 ` [RFC 08/11] Teach foreign transport code to perform the "capabilities" command Johan Herland
2009-07-27  1:04 ` [RFC 09/11] Introduce a 'marks <filename>' feature to the foreign transport code Johan Herland
2009-07-27  1:04 ` [RFC 11/11] Add simple test cases of git-vcs-cvs functionality Johan Herland
2009-07-27 17:27 ` [RFC 00/11] Foreign VCS helper program for CVS repositories Daniel Barkalow
2009-07-27 18:11   ` Johan Herland
2009-07-27 18:58     ` Daniel Barkalow

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=1248656659-21415-6-git-send-email-johan@herland.net \
    --to=johan@herland.net \
    --cc=barkalow@iabervon.org \
    --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).