git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Steven Grimm <koreth@midwinter.com>
To: Eric Wong <normalperson@yhbt.net>
Cc: git@vger.kernel.org
Subject: Re: [CFT] git-svn - almost a rewrite...
Date: Tue, 06 Feb 2007 00:43:30 -0800	[thread overview]
Message-ID: <45C83FB2.5060500@midwinter.com> (raw)
In-Reply-To: <20070201132934.GB7800@localdomain>

FYI, I tried this with our big Subversion repo and, even without 
--follow-parent, it fixed the problem I reported a while back with files 
not getting deleted from the git repo when they vanished in svn due to a 
branch rename. If I do git-svn fetch with the old version, I see the 
extra files, and with the new version I don't. Nice.

-Steve


Eric Wong wrote:
> I wanted to better support multi-fetch and --follow-parent, but the
> original design of git-svn was strongly biased towards following a
> single path.  I ended up rewriting significant parts of it.
>
> Now git-svn uses .git/config for managing remote fetches (no wildcard
> support yet, unfortunately); making it easy to see what files.  With
> connection minimization (git-svn migrate --minimize), git-svn can now
> avoid unnecessary reconnections to repositories.
>
> With a single connection, git-svn can finally multi-fetch
> chronologically, which means --follow-parent is much less likely to
> fetch redundant information.  Additionally, parents created by
> --follow-parent are no longer tracked on subsequent invocations
> (since we originally just wanted the child), so we avoid waisting
> time fetching things we didn't ask for.
>
> Not strictly --follow-parent, but git-svn can now better track
> paths that have been deleted up to (but not including) the revision
> where it was deleted.
>
> fetch and multi-fetch is much better at figuring out if there's nothing
> to fetch, so repeatedly running 'git-svn multi-fetch' to get the latest
> changes should be noticeably cheaper.
>
> --follow-parent is not yet the default, some more testing from others
> would be nice.  --follow-parent is now greatly improved, as it
> can follow into deleted directories as well as tracking subdirectories
> with no explicit parent at its current level.
>
> graft-branches is gone.  We could still implement merge-tracking the way
> git-svnimport does since we multi-fetch chronologically now...
> Volunteers?
>
> I don't have any hacks using shorter-lived children to reduce memory
> usage anymore.  This was mainly to make development easier, but the Perl
> bindings for SVN 1.4.3 have fixed some memory leak issues from the delta
> editors.
>
> Unfortunately, do_switch() still does not work with SVN 1.4.3.
>
> Sam Vilain's revprops tracking hasn't been merged yet, but I intend to
> support alternate SVN URLs/revnos from both svm:* revprops as well as
> being able to override the repository root path (file:// => http://
> for public distribution).
>
> Repository available here, this is based against Junios git.git master:
>
>   git://git.bogomips.org/git-svn.git
>   http://git.bogomips.org/git-svn.git
>
> I *will* rebase the master here as I see fit...
>
> To take full advantage of remote connection minimization, just run:
> "git-svn migrate --minimize" once and continue to add/edit remote
> refspecs via .git/config.
>
> As great as these changes sound, I don't feel they bring significant
> enough improvement to risk introducing brokeness for 1.5.0.  I would
> like to wait until 1.5.0 has passed before merging into mainline.  I
> still have _not_ used this version of git-svn for any real work yet.
>
> It's way past my bed time so I may have missed a few things or written
> incoherently, but have fun with this anyways :)
>
> ---
>  Documentation/git-svn.txt         |   71 +-
>  git-svn.perl                      | 4257 +++++++++++++++++++------------------
>  t/t9100-git-svn-basic.sh          |   54 +-
>  t/t9101-git-svn-props.sh          |   26 +
>  t/t9103-git-svn-graft-branches.sh |   60 -
>  t/t9104-git-svn-follow-parent.sh  |  126 ++-
>  t/t9105-git-svn-commit-diff.sh    |    9 +
>  t/t9107-git-svn-migrate.sh        |   92 +
>  8 files changed, 2467 insertions(+), 2228 deletions(-)
>
> ---
> Eric Wong (65):
>       git-svn: move authentication prompts into their own namespace
>       git-svn: cleanup: move process_rm around
>       git-svn: cleanup: put SVN workarounds into their own namespace
>       git-svn: cleanup: avoid re-use()ing Git.pm in sub-packages
>       git-svn: add Git::SVN module (to avoid global variables)
>       git-svn: convert 'init' to use Git::SVN
>       git-svn: convert multi-init over to using Git::SVN
>       git-svn: make multi-init capable of reusing the Ra connection
>       git-svn: add a test for show-ignore
>       git-svn: convert show-ignore over to Git::SVN
>       git-svn: moved the 'log' command into its own namespace
>       git-svn: port the 'rebuild' command to use Git::SVN objects
>       git-svn: do not let Git.pm warn if we prematurely close pipes
>       git-svn: convert the 'commit-diff' command to Git::SVN
>       git-svn: get rid of Memoize for now...
>       git-svn: fetch/multi-fetch converted over to Git::SVN module
>       git-svn: switch dcommit to using Git::SVN code
>       git-svn: convert 'set-tree' command to use Git::SVN
>       git-svn: remove graft-branches command
>       git-svn: add support for metadata in .git/config
>       git-svn: fix a regression in dcommit that caused empty log messages
>       git-svn: reuse open SVN::Ra connections by URL
>       git-svn: enable --minimize to simplify the config and connections
>       git-svn: fix --follow-parent to work with Git::SVN
>       git-svn: --follow-parent works with svn-remotes multiple branches
>       git-svn: disallow ambigious local refspecs
>       git-svn: allow --follow-parent on deleted directories
>       git-svn: get rid of additional fetch-arguments
>       git-svn: allow 'init' to work outside of tests
>       git-svn: better error reporting if --follow-parent fails
>       git-svn: 'init' attempts to connect to the repository root if possible
>       git-svn: --follow-parent now works on sub-directories of larger branches
>       git-svn: track writes writes to the index in fetch
>       git-svn: add an odd test case that seems to cause segfaults over HTTP
>       git-svn: avoid tracking change-less revisions
>       git-svn: correctly track revisions made to deleted branches
>       git-svn: fix segfaults from accessing svn_log_changed_path_t
>       git-svn: fix committing to subdirectories, add tests
>       git-svn: avoid an extra svn_ra connection during commits
>       git-svn: simplify usage of the SVN::Git::Editor interface
>       git-svn: cleanup remove unused function
>       git-svn: allow multi-fetch to fetch things chronologically
>       git-svn: correctly track diff-less copies with do_switch
>       git-svn: correctly handle do_{switch,update} in deep directories
>       git-svn: stop using path names as refnames with --follow-parent
>       git-svn: cleanup: move editor-specific variables into the editor namespace
>       git-svn: just use Digest::MD5 instead of requiring it
>       git-svn: reinstate the default SVN error handler after using get_log
>       git-svn: don't rely on do_switch + reparenting with svn(+ssh)://
>       git-svn: fetch tracks initial change with --follow-parent
>       git-svn: remove the 'rebuild' command and make the functionality automatic
>       git-svn: fix several fetch bugs related to repeated invocations
>       git-svn: reinstate --no-metadata, add --svn-remote=, variable cleanups
>       git-svn: gracefully handle --follow-parent failures
>       git-svn: make (multi-)fetch safer but slower
>       git-svn: avoid a huge memory spike with high-numbered revisions
>       git-svn: re-enable repacking flags
>       git-svn: do our best to ensure that our ref and rev_db are consistent
>       git-svn: avoid redundant get_log calls between invocations
>       git-svn: use sys* IO functions for reading rev_db
>       git-svn: don't write to the config file from --follow-parent
>       git-svn: save paths to tags/branches with for future reuse
>       git-svn: migrations default to [svn-remote "git-svn"]
>       git-svn: get rid of revisions_eq check for --follow-parent
>       git-svn: avoid extra get_log calls when refspecs are added for fetching
>
>   

  reply	other threads:[~2007-02-06  8:43 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-02-01 13:29 [CFT] git-svn - almost a rewrite Eric Wong
2007-02-06  8:43 ` Steven Grimm [this message]
2007-02-16  2:09 ` Eric Wong
2007-02-20  9:45 ` Eric Wong
2007-02-23 10:40 ` Eric Wong
2007-02-23 11:14   ` Junio C Hamano

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=45C83FB2.5060500@midwinter.com \
    --to=koreth@midwinter.com \
    --cc=git@vger.kernel.org \
    --cc=normalperson@yhbt.net \
    /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).