2011-08-30 50 views
1

我有一個Mercurial存儲庫,可成功導出爲「快速導入」格式。但是,當我嘗試導入時,它會因'utf8'錯誤而失敗:Bzr:由於UTF-8錯誤,無法導入Mercurial(Hg)存儲庫

... 
16:02:09 800/2100 commits processed at 199/minute (800) 
16:03:52 900/2100 commits processed at 157/minute (900) 
ABORT: exception occurred processing commit :901 
bzr: ERROR: exceptions.UnicodeDecodeError: 'utf8' codec can't decode byte 0xb9 in position 14: unexpected code byte 

Traceback (most recent call last): 
    File "/usr/lib/pymodules/python2.6/bzrlib/commands.py", line 946, in exception_to_return_code 
    return the_callable(*args, **kwargs) 
    File "/usr/lib/pymodules/python2.6/bzrlib/commands.py", line 1150, in run_bzr 
    ret = run(*run_argv) 
    File "/usr/lib/pymodules/python2.6/bzrlib/commands.py", line 699, in run_argv_aliases 
    return self.run(**all_cmd_args) 
    File "/usr/lib/pymodules/python2.6/bzrlib/commands.py", line 721, in run 
    return self._operation.run_simple(*args, **kwargs) 
    File "/usr/lib/pymodules/python2.6/bzrlib/cleanup.py", line 135, in run_simple 
    self.cleanups, self.func, *args, **kwargs) 
    File "/usr/lib/pymodules/python2.6/bzrlib/cleanup.py", line 165, in _do_with_cleanups 
    result = func(*args, **kwargs) 
    File "/usr/lib/pymodules/python2.6/bzrlib/plugins/fastimport/cmds.py", line 314, in run 
    user_map=user_map) 
    File "/usr/lib/pymodules/python2.6/bzrlib/plugins/fastimport/cmds.py", line 40, in _run 
    return proc.process(p.iter_commands) 
    File "/usr/lib/pymodules/python2.6/bzrlib/plugins/fastimport/processors/generic_processor.py", line 311, in process 
    super(GenericProcessor, self)._process(command_iter) 
    File "/usr/lib/pymodules/python2.6/fastimport/processor.py", line 76, in _process 
    handler(self, cmd) 
    File "/usr/lib/pymodules/python2.6/bzrlib/plugins/fastimport/processors/generic_processor.py", line 536, in commit_handler 
    handler.process() 
    File "/usr/lib/pymodules/python2.6/fastimport/processor.py", line 158, in process 
    handler(self, fc) 
    File "/usr/lib/pymodules/python2.6/bzrlib/plugins/fastimport/bzr_commit_handler.py", line 890, in modify_handler 
    self._modify_item(filecmd.path.decode('utf8'), kind, 
    File "/usr/lib/python2.6/encodings/utf_8.py", line 16, in decode 
    return codecs.utf_8_decode(input, errors, True) 
UnicodeDecodeError: 'utf8' codec can't decode byte 0xb9 in position 14: unexpected code byte 

我在Ubuntu上運行此操作。 bzr版本「2.4.0-1〜bazaar1〜lucid1」和bzr-fastimport版本「0.11.0-1〜lucid1」。

成功轉換此存儲庫的任何想法?

+0

您的存儲庫是否具有不能以unicode顯示的特殊字符的文件名? – bialix

+0

不確定...雖然我確實將資源庫導入到Git中,但這很成功。 – slattery

回答

1

發生此錯誤是因爲輸入流中有無效的數據utf8; Mercurial通常只存儲utf8數據,但較舊的提交可能仍包含utf8無效數據(請參閱https://www.mercurial-scm.org/wiki/EncodingStrategy)。

請針對bzr-fastimport(https://launchpad.net/bzr-fastimport)提交有關此問題的錯誤。它應該更優雅地處理這種情況;大概它會警告你,有utf8無效數據,然後替換utf8無效字符。

作爲一個權宜之計,您可以在/usr/lib/pymodules/python2.6/bzrlib上將path.decode('utf-8')更改爲path.decode('utf-8','replace') /plugins/fastimport/bzr_commit_handler.py第890行。

+1

感謝您的修復,我也必須在895行上做同樣的事情,但它能夠成功導入!運行'pack'後,版本庫比我用Git完成的版本要小很多,甚至比原來的Mercurial版本庫還小。 – slattery

相關問題