Adam Roben <aroben@xxxxxxxxx> wrote: > Shawn O. Pearce wrote: > >Adam Roben <aroben@xxxxxxxxx> 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. - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html