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 06/11] Add support for mark references as path names
Date: Mon, 27 Jul 2009 03:04:14 +0200	[thread overview]
Message-ID: <1248656659-21415-7-git-send-email-johan@herland.net> (raw)
In-Reply-To: <1248656659-21415-1-git-send-email-johan@herland.net>

When using a mark reference as a path name, the mark reference will be
expanded to the 40-byte hex version of the object name associated with the
mark. This is useful e.g. when importing notes objects (where the filenames
in a notes tree are the object names of the annotated objects).

Signed-off-by: Johan Herland <johan@herland.net>
---
 Documentation/git-fast-import.txt |    9 +++++++--
 fast-import.c                     |   11 +++++++++--
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/Documentation/git-fast-import.txt b/Documentation/git-fast-import.txt
index c2f483a..bbc8b78 100644
--- a/Documentation/git-fast-import.txt
+++ b/Documentation/git-fast-import.txt
@@ -487,12 +487,17 @@ in octal.  Git only supports the following modes:
 
 In both formats `<path>` is the complete path of the file to be added
 (if not already existing) or modified (if already existing).
+`<path>` may also be a mark reference (`:<idnum>`) set by a prior
+command, which will expand to a full 40-byte SHA-1 of the Git object
+associated with the mark. This is useful e.g. when importing commit
+notes (the filenames in a notes commit are the object names of the
+annotated commits).
 
 A `<path>` string must use UNIX-style directory separators (forward
 slash `/`), may contain any byte other than `LF`, and must not
-start with double quote (`"`).
+start with double quote (`"`) or colon (`:`).
 
-If an `LF` or double quote must be encoded into `<path>` shell-style
+If an `LF`, double quote or colon must be encoded into `<path>` shell-style
 quoting should be used, e.g. `"path/with\n and \" in it"`.
 
 The value of `<path>` must be in canonical form. That is it must not:
diff --git a/fast-import.c b/fast-import.c
index 8a7cdc1..3edfcf0 100644
--- a/fast-import.c
+++ b/fast-import.c
@@ -85,13 +85,13 @@ Format of STDIN stream:
      # common escapes of 'c' (e..g \n, \t, \\, \") or \nnn where nnn
      # is the signed byte value in octal.  Note that the only
      # characters which must actually be escaped to protect the
-     # stream formatting is: \, " and LF.  Otherwise these values
+     # stream formatting is: \, ", : and LF.  Otherwise these values
      # are UTF8.
      #
   ref_str     ::= ref;
   sha1exp_str ::= sha1exp;
   tag_str     ::= tag;
-  path_str    ::= path    | '"' quoted(path)    '"' ;
+  path_str    ::= path | '"' quoted(path) '"' | idnum;
   mode        ::= '100644' | '644'
                 | '100755' | '755'
                 | '120000'
@@ -1864,6 +1864,13 @@ static const char *get_path_str(
 	if (!unquote_c_style(sb, p, endp)) {
 		/* successfully unquoted C-style quoted name */
 		p = sb->buf;
+	} else if (*p == ':') {
+		/* resolve mark reference */
+		char *x;
+		struct object_entry *pe = find_mark(strtoumax(p + 1, &x, 10));
+		*endp = x;
+		strbuf_add(sb, sha1_to_hex(pe->sha1), 40);
+		p = sb->buf;
 	} else {
 		/* regular path ending at endc */
 		*endp = strchr(p, endc);
-- 
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 ` [RFC 05/11] Refactor path name parsing into new function: get_path_str() Johan Herland
2009-07-27  1:04 ` Johan Herland [this message]
2009-07-27 14:12   ` [RFC 06/11] Add support for mark references as path names 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-7-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).