git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Shawn O. Pearce" <spearce@spearce.org>
To: Adam Roben <aroben@apple.com>
Cc: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>
Subject: Re: [PATCH 7/9] git-hash-object: Add --stdin-paths option
Date: Tue, 23 Oct 2007 02:10:22 -0400	[thread overview]
Message-ID: <20071023061022.GG14735@spearce.org> (raw)
In-Reply-To: <471D8D34.4050104@apple.com>

Adam Roben <aroben@apple.com> wrote:
> Shawn O. Pearce wrote:
> >Adam Roben <aroben@apple.com> wrote:
> >  
> >>This allows multiple paths to be specified on stdin.
> >
> >git-fast-import wasn't suited to the task?
> 
> I actually considered using fast-import for the whole shebang, but 
> decided that I don't yet understand the workings and structure of 
> git-svn well enough to make such a big change.
> 
> git-svn uses git-hash-object to both determine a file's hash and insert 
> it into the index in one go -- can fast-import do this? Or will it just 
> put it in the index and not give you the hash back? The latter was my 
> impression.

It doesn't currently give you the hash back.  You can sort of get
to it by marking the blob then using the 'checkpoint' command to
dump the marks to a file, which you can read in.  Not good.

It probably wouldn't be very difficult to give fast-import a way
to dump marks back on stdout as they are assigned.  So long as the
frontend either locksteps with fast-import or is willing to monitor
it with a select/poll type of arrangement and read from stdout as
soon as its ready.

Probably a 5 line code change to fast-import.  Like this.  Only Git
won't recognize that object SHA-1 as its in a packfile that has
no index.  You'd need to 'checkpoint' to flush the object out, or
just use all of fast-import for the processing.  So yea, I guess
I can see now how its not suited to this.


--8>--
diff --git a/Documentation/git-fast-import.txt b/Documentation/git-fast-import.txt
index d511967..7fd8b2c 100644
--- a/Documentation/git-fast-import.txt
+++ b/Documentation/git-fast-import.txt
@@ -67,6 +67,10 @@ OPTIONS
 	at checkpoint (or completion) the same path can also be
 	safely given to \--import-marks.
 
+--export-marks-to-stdout::
+	Dumps marks to stdout as soon as they are assigned.
+	Marks are written one per line as `:markid SHA-1`.
+
 --import-marks=<file>::
 	Before processing any input, load the marks specified in
 	<file>.  The input file must exist, must be readable, and
diff --git a/fast-import.c b/fast-import.c
index 6f888f6..619ed05 100644
--- a/fast-import.c
+++ b/fast-import.c
@@ -272,6 +272,7 @@ struct recent_command
 static unsigned long max_depth = 10;
 static off_t max_packsize = (1LL << 32) - 1;
 static int force_update;
+static int marks_to_stdout;
 
 /* Stats and misc. counters */
 static uintmax_t alloc_count;
@@ -561,6 +562,7 @@ static char *pool_strdup(const char *s)
 
 static void insert_mark(uintmax_t idnum, struct object_entry *oe)
 {
+	uintmax_t orig_idnum = idnum;
 	struct mark_set *s = marks;
 	while ((idnum >> s->shift) >= 1024) {
 		s = pool_calloc(1, sizeof(struct mark_set));
@@ -580,6 +582,8 @@ static void insert_mark(uintmax_t idnum, struct object_entry *oe)
 	if (!s->data.marked[idnum])
 		marks_set_count++;
 	s->data.marked[idnum] = oe;
+	if (marks_to_stdout)
+		printf(":%" PRIuMAX " %s\n", orig_idnum, sha1_to_hex(oe->sha1));
 }
 
 static struct object_entry *find_mark(uintmax_t idnum)
@@ -2294,6 +2298,8 @@ int main(int argc, const char **argv)
 			max_active_branches = strtoul(a + 18, NULL, 0);
 		else if (!prefixcmp(a, "--import-marks="))
 			import_marks(a + 15);
+		else if (!prefixcmp(a, "--export-marks-to-stdout"))
+			marks_to_stdout = 1;
 		else if (!prefixcmp(a, "--export-marks="))
 			mark_file = a + 15;
 		else if (!prefixcmp(a, "--export-pack-edges=")) {

-- 
Shawn.

  reply	other threads:[~2007-10-23  6:10 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-10-23  5:46 [PATCH 0/9] Make git-svn fetch ~1.7x faster Adam Roben
2007-10-23  5:46 ` [PATCH 1/9] Add tests for git cat-file Adam Roben
2007-10-23  5:46   ` [PATCH 2/9] git-cat-file: Small refactor of cmd_cat_file Adam Roben
2007-10-23  5:46     ` [PATCH 3/9] git-cat-file: Make option parsing a little more flexible Adam Roben
2007-10-23  5:46       ` [PATCH 4/9] git-cat-file: Add --stdin option Adam Roben
2007-10-23  5:46         ` [PATCH 5/9] git-cat-file: Add --separator option Adam Roben
2007-10-23  5:46           ` [PATCH 6/9] Add tests for git hash-object Adam Roben
2007-10-23  5:46             ` [PATCH 7/9] git-hash-object: Add --stdin-paths option Adam Roben
2007-10-23  5:46               ` [PATCH 8/9] Git.pm: Add command_bidi_pipe and command_close_bidi_pipe Adam Roben
2007-10-23  5:46                 ` [PATCH 9/9] git-svn: Make fetch ~1.7x faster Adam Roben
2007-10-23  7:01                   ` Johannes Sixt
2007-10-24  6:34                   ` Eric Wong
2007-10-24  6:48                     ` Adam Roben
2007-10-23  5:53               ` [PATCH 7/9] git-hash-object: Add --stdin-paths option Shawn O. Pearce
2007-10-23  5:57                 ` Adam Roben
2007-10-23  6:10                   ` Shawn O. Pearce [this message]
2007-10-24  6:11                     ` Eric Wong
2007-10-23  6:59             ` [PATCH 6/9] Add tests for git hash-object Johannes Sixt
2007-10-24  3:43           ` [PATCH 5/9] git-cat-file: Add --separator option Brian Downing
2007-10-24  4:26             ` Adam Roben
2007-10-23  6:59   ` [PATCH 1/9] Add tests for git cat-file Johannes Sixt
2007-10-23  6:08 ` [PATCH 0/9] Make git-svn fetch ~1.7x faster Mike Hommey
2007-10-23  6:13   ` Adam Roben
2007-10-24  0:43   ` Sam Vilain

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=20071023061022.GG14735@spearce.org \
    --to=spearce@spearce.org \
    --cc=aroben@apple.com \
    --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).