git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Sverre Rabbelier <srabbelier@gmail.com>
To: "Git List" <git@vger.kernel.org>,
	"Daniel Barkalow" <barkalow@iabervon.org>,
	"Ramkumar Ramachandra" <artagnon@gmail.com>,
	"Jonathan Nieder" <jrnieder@gmail.com>
Cc: Sverre Rabbelier <srabbelier@gmail.com>
Subject: [PATCH 01/13] fast-import: add the 'done' command
Date: Sat, 28 Aug 2010 22:45:28 -0500	[thread overview]
Message-ID: <1283053540-27042-2-git-send-email-srabbelier@gmail.com> (raw)
In-Reply-To: <1283053540-27042-1-git-send-email-srabbelier@gmail.com>

Currently the only way to end an import stream is to close it, which
is not desirable when the stream that's being used is shared. For
example, the remote helper infrastructure uses a pipe between it and
the helper process, part of the protocol is to send a fast-import
stream accross. Without a way to end the stream the remote helper
infrastructure is forced to limit itself to have a command that uses
a fast-import stream as it's last command.

Add a trivial 'done' command that causes fast-import to stop reading
from the stream and exit.
---

  Very straightforward. It is handled in parse_feature() instead of
  in parse_one_feature() because I didn't want to allow '--done' as a
  commandline argument. Allowing it would be silly, it surves no
  other purpose than to indicate up front that the stream will
  contain a 'done' command at the end.

  I'm fine too with dropping the feature and just adding the new
  command, whichever is preferred.

 Documentation/git-fast-import.txt |   17 ++++++++++++++++-
 fast-import.c                     |    5 +++++
 2 files changed, 21 insertions(+), 1 deletions(-)

diff --git a/Documentation/git-fast-import.txt b/Documentation/git-fast-import.txt
index 77a0a24..114f919 100644
--- a/Documentation/git-fast-import.txt
+++ b/Documentation/git-fast-import.txt
@@ -293,6 +293,10 @@ and control the current import process.  More detailed discussion
 	creating a new commit and updating the branch to point at
 	the newly created commit.
 
+`done`::
+	Treated as if EOF was read. This command is optional and is
+	not needed to perform an import.
+
 `tag`::
 	Creates an annotated tag object from an existing commit or
 	branch.  Lightweight tags are not supported by this command,
@@ -885,17 +889,20 @@ The <feature> part of the command may be any string matching
 ^[a-zA-Z][a-zA-Z-]*$ and should be understood by fast-import.
 
 Feature work identical as their option counterparts with the
-exception of the import-marks feature, see below.
+exception of the done and import-marks features, see below.
 
 The following features are currently supported:
 
 * date-format
+* done
 * import-marks
 * export-marks
 * relative-marks
 * no-relative-marks
 * force
 
+If the done feature is specified, the done command must be supported.
+
 The import-marks behaves differently from when it is specified as
 commandline option in that only one "feature import-marks" is allowed
 per stream. Also, any --import-marks= specified on the commandline
@@ -928,6 +935,14 @@ not be passed as option:
 * export-marks
 * force
 
+`done`
+~~~~~~
+
+Treated as if EOF was read. This can be used to stop fast-import
+from reading from the stream without closing the file handle. Such
+may be desired if the file handle is used for other purposes other
+than fast-import as well, and closing it is not desired.
+
 Crash Reports
 -------------
 If fast-import is supplied invalid input it will terminate with a
diff --git a/fast-import.c b/fast-import.c
index ddad289..1c3fa7d 100644
--- a/fast-import.c
+++ b/fast-import.c
@@ -2817,6 +2817,9 @@ static void parse_feature(void)
 	if (parse_one_feature(feature, 1))
 		return;
 
+	if (!prefixcmp(feature, "done"))
+		return;
+
 	die("This version of fast-import does not support feature %s.", feature);
 }
 
@@ -2935,6 +2938,8 @@ int main(int argc, const char **argv)
 			parse_new_blob();
 		else if (!prefixcmp(command_buf.buf, "commit "))
 			parse_new_commit();
+		else if (!prefixcmp(command_buf.buf, "done"))
+			break;
 		else if (!prefixcmp(command_buf.buf, "tag "))
 			parse_new_tag();
 		else if (!prefixcmp(command_buf.buf, "reset "))
-- 
1.7.2.1.240.g6a95c3

  reply	other threads:[~2010-08-29  3:46 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-29  3:45 [PATCH 00/13] remote helper improvements Sverre Rabbelier
2010-08-29  3:45 ` Sverre Rabbelier [this message]
2010-08-29 18:59   ` [PATCH 01/13] fast-import: add the 'done' command Daniel Barkalow
2010-08-29 20:23     ` Sverre Rabbelier
2010-08-29 21:24   ` Jonathan Nieder
2010-08-29 21:28     ` Sverre Rabbelier
2010-08-29 22:32       ` Jonathan Nieder
2010-08-30  0:30         ` Sverre Rabbelier
2010-08-30  2:02           ` Jonathan Nieder
2010-08-30  2:08             ` Sverre Rabbelier
2010-08-30  2:12               ` Jonathan Nieder
2011-02-13  9:42   ` Jonathan Nieder
2010-08-29  3:45 ` [PATCH 02/13] fast-export: support done feature Sverre Rabbelier
2010-08-29 19:15   ` Daniel Barkalow
2010-08-29 20:25     ` Sverre Rabbelier
2010-08-29 23:42   ` Tay Ray Chuan
2010-08-30  0:32     ` Sverre Rabbelier
2010-08-29  3:45 ` [PATCH 03/13] transport-helper: factor out push_update_refs_status Sverre Rabbelier
2010-08-29 21:36   ` Jonathan Nieder
2010-08-29 21:45     ` Sverre Rabbelier
2010-08-29  3:45 ` [PATCH 04/13] transport-helper: check status code of finish_command Sverre Rabbelier
2010-08-29 21:52   ` Jonathan Nieder
2010-08-29  3:45 ` [PATCH 05/13] transport-helper: use the new done feature to properly do imports Sverre Rabbelier
2010-08-29 22:02   ` Jonathan Nieder
2010-08-30  0:28     ` Sverre Rabbelier
2010-08-29  3:45 ` [RFC PATCH 06/13] transport-helper: update ref status after push with export Sverre Rabbelier
2010-08-29 22:25   ` Jonathan Nieder
2010-08-30  0:29     ` Sverre Rabbelier
2010-08-29  3:45 ` [PATCH 07/13] transport-helper: change import semantics Sverre Rabbelier
2010-08-29 19:29   ` Daniel Barkalow
2010-08-29 20:26     ` Sverre Rabbelier
2010-08-29  3:45 ` [PATCH 08/13] transport-helper: export should disconnect too Sverre Rabbelier
2010-08-29 19:32   ` Daniel Barkalow
2010-08-29 20:28     ` Sverre Rabbelier
2010-08-29  3:45 ` [PATCH 09/13] transport-helper: Use capname for gitdir capability too Sverre Rabbelier
2010-08-30  1:05   ` Jonathan Nieder
2010-08-29  3:45 ` [PATCH 10/13] transport-helper: implement marks location as capability Sverre Rabbelier
2010-08-29 19:52   ` Daniel Barkalow
2010-08-29 20:17     ` Sverre Rabbelier
2010-08-30  1:31   ` Jonathan Nieder
2010-08-30  1:35     ` Sverre Rabbelier
2010-08-29  3:45 ` [PATCH 11/13] remote-curl: accept empty line as terminator Sverre Rabbelier
2010-08-30  1:39   ` Jonathan Nieder
2010-08-30  2:02     ` Sverre Rabbelier
2010-08-29  3:45 ` [PATCH 12/13] git-remote-testgit: only push for non-local repositories Sverre Rabbelier
2010-08-30  1:48   ` Jonathan Nieder
2010-08-30  1:59     ` Sverre Rabbelier
2010-08-30  2:09       ` Jonathan Nieder
2010-08-29  3:45 ` [PATCH 13/13] git-remote-testgit: fix error handling Sverre Rabbelier
2010-08-30  1:53 ` [PATCH 00/13] remote helper improvements Jonathan Nieder
2010-08-30  2:01   ` Sverre Rabbelier
     [not found] ` <1283137728899-5476616.post@n2.nabble.com>
2010-08-30  5:54   ` Sverre Rabbelier

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

  List information: http://vger.kernel.org/majordomo-info.html

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

  git send-email \
    --in-reply-to=1283053540-27042-2-git-send-email-srabbelier@gmail.com \
    --to=srabbelier@gmail.com \
    --cc=artagnon@gmail.com \
    --cc=barkalow@iabervon.org \
    --cc=git@vger.kernel.org \
    --cc=jrnieder@gmail.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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).