Mercurial 与 OS X 10.6.3 下的 Truecrypt 加密分区冲突的修复方法

31 阅读2分钟

在使用 Mercurial 版本控制系统管理位于 TrueCrypt 加密分区上的项目时,用户可能会遇到以下错误:

unknown exception encountered, details follow
** report bug details to http://mercurial.selenic.com/bts/
** or mercurial@selenic.com
** Mercurial Distributed SCM (version 1.5.2+20100502)
** Extensions loaded: 
Traceback (most recent call last):
  File "/usr/local/bin/hg", line 27, in <module>
    mercurial.dispatch.run()
  File "/Library/Python/2.6/site-packages/mercurial/dispatch.py", line 16, in run
    sys.exit(dispatch(sys.argv[1:]))
  File "/Library/Python/2.6/site-packages/mercurial/dispatch.py", line 30, in dispatch
    return _runcatch(u, args)
  File "/Library/Python/2.6/site-packages/mercurial/dispatch.py", line 50, in _runcatch
    return _dispatch(ui, args)
  File "/Library/Python/2.6/site-packages/mercurial/dispatch.py", line 470, in _dispatch
    return runcommand(lui, repo, cmd, fullargs, ui, options, d)
  File "/Library/Python/2.6/site-packages/mercurial/dispatch.py", line 340, in runcommand
    ret = _runcommand(ui, options, cmd, d)
  File "/Library/Python/2.6/site-packages/mercurial/dispatch.py", line 521, in _runcommand
    return checkargs()
  File "/Library/Python/2.6/site-packages/mercurial/dispatch.py", line 475, in checkargs
    return cmdfunc()
  File "/Library/Python/2.6/site-packages/mercurial/dispatch.py", line 469, in <lambda>
    d = lambda: util.checksignature(func)(ui, *args, **cmdoptions)
  File "/Library/Python/2.6/site-packages/mercurial/util.py", line 401, in check
    return func(*args, **kwargs)
  File "/Library/Python/2.6/site-packages/mercurial/commands.py", line 3332, in update
    return hg.update(repo, rev)
  File "/Library/Python/2.6/site-packages/mercurial/hg.py", line 362, in update
    stats = _merge.update(repo, node, False, False, None)
  File "/Library/Python/2.6/site-packages/mercurial/merge.py", line 495, in update
    _checkunknown(wc, p2)
  File "/Library/Python/2.6/site-packages/mercurial/merge.py", line 77, in _checkunknown
    for f in wctx.unknown():
  File "/Library/Python/2.6/site-packages/mercurial/context.py", line 660, in unknown
    return self._status[4]
  File "/Library/Python/2.6/site-packages/mercurial/util.py", line 156, in __get__
    result = self.func(obj)
  File "/Library/Python/2.6/site-packages/mercurial/context.py", line 622, in _status
    return self._repo.status(unknown=True)
  File "/Library/Python/2.6/site-packages/mercurial/localrepo.py", line 1023, in status
    if (f not in ctx1 or ctx2.flags(f) != ctx1.flags(f)
  File "/Library/Python/2.6/site-packages/mercurial/context.py", line 694, in flags
    flag = findflag(self._parents[0])
  File "/Library/Python/2.6/site-packages/mercurial/context.py", line 690, in findflag
    return ff(path)
  File "/Library/Python/2.6/site-packages/mercurial/dirstate.py", line 145, in f
    if 'x' in fallback(x):
TypeError: argument of type 'NoneType' is not iterable

该错误是由于 Mercurial 版本 1.5.2 中的一个 bug 导致的。

解决方案

要解决此问题,用户可以将 Mercurial 升级到 1.5.3 或更高版本。

以下是在 OS X 10.6.3 上安装 Mercurial 1.5.3 的步骤:

  1. 下载 Mercurial 1.5.3 安装程序。
  2. 双击安装程序并按照屏幕上的说明进行安装。
  3. 安装完成后,打开终端并输入以下命令:
hg --version

如果输出结果显示 Mercurial 版本为 1.5.3 或更高版本,则安装成功。

代码例子

如果用户遇到其他 Mercurial 问题,可以使用以下命令生成错误报告:

hg debuginstall --debug

该命令将生成一个包含 Mercurial 调试信息的日志文件。用户可以将日志文件发送给 Mercurial 开发团队以帮助他们解决问题。