How do I skip subversion revisions with hgsvn pull?
I'm trying to use Mercurial as a front end for Subversion, and have a strong interest in having all branches etc intact so I can see common changes etc.
However, all of my subversion repositories create rather large issues for mercurial (1.8 with TortoiseHg 2.0 unfortunately, the ppa's seem to have deleted the older revisions...). The issues are varied and present far too much annoyance to list (or figure out).
How do I skip a svn revision that hg clone
or hg pull
complains about? Or do I just have to recursively get fewer and fewer revisions until I get a successful clone?
Also, I've tried working around this by exporting the patch from svn and applying it to my working directory; the exact same issue occurs (but at least now I've got something to look at...)
Issues I'm getting (but not specifically on topic for the question...)
Existing file overwrite attempt:
Achieved by hg init
, set svn url and hg pull
pulling from svn+http://subversion/src/...
[r5061] StephenK: Updated properties
/home/stephenk/hgsubversion/hgsubversion/wrappers.py:337: DeprecationWarning: BaseException.message ha开发者_C百科s been deprecated as of Python 2.6
ui.status('%s\n' % e.message)
This Subversion server is older than 1.4.0, and cannot satisfy replay requests.
In light of that, I'll fall back and do diffs, but it won't do as good a job. You should really upgrade your server.
[r5061] StephenK: Updated properties
file Synchronisation/stephenk.properties already exists
1 out of 1 hunks FAILED -- saving rejects to file Synchronisation/stephenk.properties.rej
General Hunk issues:
Achieved by hg clone
[r82] Louis:
patching file src/main/.../Configuration.java
Hunk #1 FAILED at 10
Hunk #2 FAILED at 27
Hunk #3 FAILED at 81
3 out of 3 hunks FAILED -- saving rejects to file src/main/.../Configuration.java.rej
Common error text:
** unknown exception encountered, please report by visiting
** http://mercurial.selenic.com/wiki/BugTracker
** Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) [GCC 4.4.3]
** Mercurial Distributed SCM (version 1.8)
** Extensions loaded: hgsubversion
Traceback (most recent call last):
File "/usr/bin/hg", line 38, in <module>
mercurial.dispatch.run()
File "/usr/lib/pymodules/python2.6/mercurial/dispatch.py", line 16, in run
sys.exit(dispatch(sys.argv[1:]))
File "/usr/lib/pymodules/python2.6/mercurial/dispatch.py", line 36, in dispatch
return _runcatch(u, args)
File "/usr/lib/pymodules/python2.6/mercurial/dispatch.py", line 58, in _runcatch
return _dispatch(ui, args)
File "/usr/lib/pymodules/python2.6/mercurial/dispatch.py", line 601, in _dispatch
cmdpats, cmdoptions)
File "/usr/lib/pymodules/python2.6/mercurial/dispatch.py", line 406, in runcommand
ret = _runcommand(ui, options, cmd, d)
File "/usr/lib/pymodules/python2.6/mercurial/dispatch.py", line 655, in _runcommand
return checkargs()
File "/usr/lib/pymodules/python2.6/mercurial/dispatch.py", line 609, in checkargs
return cmdfunc()
File "/usr/lib/pymodules/python2.6/mercurial/dispatch.py", line 598, in <lambda>
d = lambda: util.checksignature(func)(ui, *args, **cmdoptions)
File "/usr/lib/pymodules/python2.6/mercurial/util.py", line 433, in check
return func(*args, **kwargs)
File "/usr/lib/pymodules/python2.6/mercurial/extensions.py", line 133, in wrap
util.checksignature(origfn), *args, **kwargs)
File "/usr/lib/pymodules/python2.6/mercurial/util.py", line 433, in check
return func(*args, **kwargs)
File "/home/stephenk/hgsubversion/hgsubversion/wrappers.py", line 457, in clone
orig(ui, source, dest, **opts)
File "/usr/lib/pymodules/python2.6/mercurial/util.py", line 433, in check
return func(*args, **kwargs)
File "/usr/lib/pymodules/python2.6/mercurial/commands.py", line 825, in clone
branch=opts.get('branch'))
File "/usr/lib/pymodules/python2.6/mercurial/extensions.py", line 178, in wrap
return wrapper(origfn, *args, **kwargs)
File "/home/stephenk/hgsubversion/hgsubversion/wrappers.py", line 448, in hgclonewrapper
data['srcrepo'], data['dstrepo'] = orig(ui, origsource, dest, **opts)
File "/usr/lib/pymodules/python2.6/mercurial/hg.py", line 335, in clone
dest_repo.clone(src_repo, heads=revs, stream=stream)
File "/usr/lib/pymodules/python2.6/mercurial/localrepo.py", line 2014, in clone
return self.pull(remote, heads)
File "/home/stephenk/hgsubversion/hgsubversion/svnrepo.py", line 48, in wrapper
return fn(self, *args, **opts)
File "/home/stephenk/hgsubversion/hgsubversion/svnrepo.py", line 63, in pull
return wrappers.pull(self, remote, heads, force)
File "/home/stephenk/hgsubversion/hgsubversion/wrappers.py", line 325, in pull
firstrun)
File "/home/stephenk/hgsubversion/hgsubversion/stupid.py", line 592, in convert_rev
ui, svn, meta, b, branches[b], r, parentctx)
File "/home/stephenk/hgsubversion/hgsubversion/stupid.py", line 159, in diff_branchrev
{}, strip=0)
File "/usr/lib/pymodules/python2.6/mercurial/patch.py", line 1108, in applydiff
eolmode=eolmode)
File "/usr/lib/pymodules/python2.6/mercurial/patch.py", line 1135, in _applydiff
rejects += closefile()
File "/usr/lib/pymodules/python2.6/mercurial/patch.py", line 1122, in closefile
current_file.write_rej()
File "/usr/lib/pymodules/python2.6/mercurial/patch.py", line 519, in write_rej
fp = self.opener(fname, 'w')
TypeError: 'NoneType' object is not callable
I'm on ubuntu, really want to have a ppa to manage it for me, and am getting frustrated with this interoperability. I'm thinking I may have to try a hg+git+svn double bridge or something
Consider upgrading the server to 1.4.x or later - things should work way way better then...
It looks (from the stack traces) like you've found some bugs in the diff+patch code we use to work around a lack of replay in old svn versions, but it's impossible to know what the problem is without a test repo we can play with.
...and today it works... Perhaps I was doing two hg pull
operations from svn at once? I'm pretty sure one will fail, but it's the best I can go on for now...
精彩评论