Mercurial (hg) update error, abort: No such file o

2019-02-23 12:47发布

问题:

I am unable to update mercurial repos on my machine. I get the following error when I do an update hg up --traceback:

Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 87, in _runcatch
    return _dispatch(req)
  File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 679, in _dispatch
    cmdpats, cmdoptions)
  File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 454, in runcommand
    ret = _runcommand(ui, options, cmd, d)
  File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 733, in _runcommand
    return checkargs()
  File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 687, in checkargs
    return cmdfunc()
  File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 676, in <lambda>
    d = lambda: util.checksignature(func)(ui, *args, **cmdoptions)
  File "/usr/lib/python2.7/dist-packages/mercurial/util.py", line 385, in check
    return func(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/mercurial/commands.py", line 5131, in update
    ret = hg.update(repo, rev)
  File "/usr/lib/python2.7/dist-packages/mercurial/hg.py", line 395, in update
    stats = mergemod.update(repo, node, False, False, None)
  File "/usr/lib/python2.7/dist-packages/mercurial/merge.py", line 554, in update
    stats = applyupdates(repo, action, wc, p2, pa, overwrite)
  File "/usr/lib/python2.7/dist-packages/mercurial/merge.py", line 329, in applyupdates
    subrepo.submerge(repo, wctx, mctx, wctx.ancestor(mctx), overwrite)
  File "/usr/lib/python2.7/dist-packages/mercurial/subrepo.py", line 156, in submerge
    mctx.sub(s).get(r)
  File "/usr/lib/python2.7/dist-packages/mercurial/subrepo.py", line 668, in get
    if self._svnversion >= (1, 5):
  File "/usr/lib/python2.7/dist-packages/mercurial/util.py", line 169, in __get__
    result = self.func(obj)
  File "/usr/lib/python2.7/dist-packages/mercurial/subrepo.py", line 567, in _svnversion
    output, err = self._svncommand(['--version'], filename=None)
  File "/usr/lib/python2.7/dist-packages/mercurial/subrepo.py", line 555, in _svncommand
    universal_newlines=True, env=env, **extrakw)
  File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1239, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory
abort: No such file or directory

I've tried to do rm -rf myrepo and then do hg clone ssh://hg@bitbucket.org/myrepo but that command downloads the repo correctly but I get the same error when hg tries to update the repo to branch default, more specifically I get this:

destination directory: foo
requesting all changes
adding changesets
adding manifests
adding file changes
added 6270 changesets with 20990 changes to 3682 files
updating to branch default
abort: No such file or directory

with trackback, I get an error similar to what I was getting before. I have even tried to re-install mercurial on my system without any luck.

Can you please point to what is the problem. The repo head seems to be alright, (I can clone and update on other machines), and I am able to clone or update other hg repos on my system. Can this have anything to do with subrepos? The trackback suggests it.

My system details: 32-bit Ubuntu 11.10, running mercurial version 1.9.1.

回答1:

It seems that the source repo has an svn subrepo, and you have no subversion client installed (or svn is not in the search path).