git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 00/12] vcs-svn: incremental import

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Mar 6, 2011, 22:54 UTC
Message-ID
<20110306225419.GA24327@elie>
In-Reply-To
<20101210102007.GA26298@burratino>
Hi again,
Jonathan Nieder wrote:
> Using David's "ls" command we can eliminate the in-memory repo_tree
> and rely on the target repository for information about old revs.

Here's a reroll. Aside from the aspects already mentioned (which avoid a dependency on the mostly orthogonal topic of support for text deltas), the original patch #10 has been split into smaller, more easily digestible pieces.

Most of the credit for this incarnation of the series belongs to David, who heroically streamlined it and untangled it from other topics.

Patch 1 changes the mark numbers for blobs to be ridiculously high, to make room for memorable commit marks (:1 for r1, :2 for r2, etc). Patch 2 brings those commit marks into existence, as mentioned before.

Patches 3-5 simplify the repo-tree API somewhat. They are somewhat minimal; patches on top of this series offering further simplification would be very welcome.

Patch 6 is a bit sneaky.  We want svn-fe's output to change from
	<import blob>
	<import blob>
	...
	<import blob>
	<import commit, using blobs>
to
	<commit header>
	M 100644 inline one/path
	<import blob>
	M 100644 inline another/path
	...
	<commit footer (progress update)>

since the latter allows svn-fe to maintain much less state. But that's a big change, so patch 6 introduces a stepping stone on the way there:

	<comment that will become commit header>
	<import blob>
	...
	<import commit; this will become the commit footer>

That paves the way for patches 7-11, which teach svn-fe to rely on the fast-import backend for information about previously imported blobs, at long last.

The visible effects should be:
 - svn-fe _requires_ a backchannel from the fast-import
   backend now.  You can't do
	svn-fe <dump >stream &&
	fast-import <stream
   in two steps any more.
 - Given one dump that picks up where another left off, svn-fe
   can continue the import.  Use
	git fast-import --relative-marks \
		--import-marks-if-exists=svn-revs \
		--export-marks=svn-revs \
		--cat-blob-fd=3 3>backchannel
   for both imports.

I'm not happy about the loss of usability but I'm happy about the gain in functionality. A good next step might be to build a simple remote helper to make this comfortable to use.

Thoughts? Improvements? Complaints? Despite the deficiencies just mentioned I'm tempted to push this out soon. Feedback in either direction would be welcome.

David Barr (3):
  vcs-svn: set up channel to read fast-import cat-blob response
  vcs-svn: quote paths correctly for ls command
  vcs-svn: use mark from previous import for parent commit
Jonathan Nieder (9):
  vcs-svn: use higher mark numbers for blobs
  vcs-svn: save marks for imported commits
  vcs-svn: introduce repo_read_path to check the content at a path
  vcs-svn: handle_node: use repo_read_path
  vcs-svn: simplify repo_modify_path and repo_copy
  vcs-svn: add a comment before each commit
  vcs-svn: allow input errors to be detected promptly
  vcs-svn: eliminate repo_tree structure
  vcs-svn: handle filenames with dq correctly
 contrib/svn-fe/svn-fe.txt |    6 +-
 t/t9010-svn-fe.sh         |  217 +++++++++++++++++++------
 vcs-svn/fast_export.c     |  145 +++++++++++++++--
 vcs-svn/fast_export.h     |   39 +++--
 vcs-svn/line_buffer.c     |    5 +
 vcs-svn/line_buffer.h     |    1 +
 vcs-svn/repo_tree.c       |  386 ++++++++-------------------------------------
 vcs-svn/repo_tree.h       |    5 +-
 vcs-svn/string_pool.c     |   13 ++-
 vcs-svn/string_pool.h     |    3 +-
 vcs-svn/svndump.c         |  106 +++++++++----
 11 files changed, 490 insertions(+), 436 deletions(-)
 rewrite vcs-svn/fast_export.h (75%)
 rewrite vcs-svn/repo_tree.c (96%)
Previous: Jonathan NiederNext: Jonathan Nieder
Message 19 of 37 in “vcs-svn: prepare for (implement?) incremental import”
  1. 00/10 vcs-svn: prepare for (implement?) incremental importJonathan Nieder, Dec 10, 2010
  2. 01/10 vcs-svn: use higher mark numbers for blobsJonathan Nieder, Dec 10, 2010
  3. 02/10 vcs-svn: save marks for imported commitsJonathan Nieder, Dec 10, 2010
  4. Jonathan NiederMar 6, 2011
  5. 03/10 vcs-svn: introduce cat_mark function to retrieve a marked blobJonathan Nieder, Dec 10, 2010
  6. 04/10 vcs-svn: make apply_delta caller retrieve preimageJonathan Nieder, Dec 10, 2010
  7. 05/10 vcs-svn: split off function to export result from delta applicationJonathan Nieder, Dec 10, 2010
  8. 06/10 vcs-svn: do not rely on marks for old blobsJonathan Nieder, Dec 10, 2010
  9. 07/10 vcs-svn: split off function to make 'ls' requestsJonathan Nieder, Dec 10, 2010
  10. 08/10 vcs-svn: prepare to eliminate repo_tree structureJonathan Nieder, Dec 10, 2010
  11. vcs-svn: prepare to eliminate repo_tree structureJonathan Nieder, Mar 6, 2011
  12. David BarrMar 6, 2011
  13. 09/10 vcs-svn: simplifications for repo_modify_path et alJonathan Nieder, Dec 10, 2010
  14. 10/10 vcs-svn: eliminate repo_tree structureJonathan Nieder, Dec 10, 2010
  15. 12/10 vcs-svn: quote paths correctly for ls commandDavid Michael Barr, Dec 11, 2010
  16. vcs-svn: quote all paths passed to fast-importJonathan Nieder, Dec 11, 2010
  17. 13/10 vcs-svn: use mark from previous import for parent commitDavid Michael Barr, Dec 12, 2010
  18. Jonathan NiederDec 12, 2010
  19. 00/12 vcs-svn: incremental importJonathan Nieder, Mar 6, 2011
  20. 01/12 vcs-svn: use higher mark numbers for blobsJonathan Nieder, Mar 6, 2011
  21. Junio C HamanoMar 8, 2011
  22. Jonathan NiederMar 9, 2011
  23. 02/12 vcs-svn: save marks for imported commitsJonathan Nieder, Mar 6, 2011
  24. 03/12 vcs-svn: introduce repo_read_path to check the content at a pathJonathan Nieder, Mar 6, 2011
  25. 04/12 vcs-svn: handle_node: use repo_read_pathJonathan Nieder, Mar 6, 2011
  26. 05/12 vcs-svn: simplify repo_modify_path and repo_copyJonathan Nieder, Mar 6, 2011
  27. 06/12 vcs-svn: add a comment before each commitJonathan Nieder, Mar 6, 2011
  28. 07/12 vcs-svn: allow input errors to be detected promptlyJonathan Nieder, Mar 6, 2011
  29. 08/12 vcs-svn: set up channel to read fast-import cat-blob responseJonathan Nieder, Mar 6, 2011
  30. 09/12 vcs-svn: eliminate repo_tree structureJonathan Nieder, Mar 6, 2011
  31. 10/12 vcs-svn: quote paths correctly for ls commandJonathan Nieder, Mar 6, 2011
  32. 11/12 vcs-svn: handle filenames with dq correctlyJonathan Nieder, Mar 6, 2011
  33. 12/12 vcs-svn: use mark from previous import for parent commitJonathan Nieder, Mar 6, 2011
  34. Sverre RabbelierMar 7, 2011
  35. Jonathan NiederMar 7, 2011
  36. fast-import: treat filemodify with empty tree as deleteJonathan Nieder, Dec 11, 2010
  37. vcs-svn: avoid git-isms in fast-import streamJonathan Nieder, Dec 11, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.