ひよっこ。

I want to…

bzr2.5に更新したら、bash-completionがエラーになっちまった

Posted by hikaruworld : 2012 5月 3

bzrのバージョンを2.5にupdateしたところ、bash_completion
エラーになってしまってちょっと困ってました。
導入した経緯は、ここを参照。

出力されるエラーはこんな感じです。

bash-3.2$ bzr stbzr: ERROR: exceptions.AttributeError: 'module' object has no attribute 'shlex_split_unicode'

Traceback (most recent call last):
  File "/usr/local/Cellar/bazaar/2.5.0/libexec/bzrlib/commands.py", line 920, in exception_to_return_code
    return the_callable(*args, **kwargs)
  File "/usr/local/Cellar/bazaar/2.5.0/libexec/bzrlib/commands.py", line 1131, in run_bzr
    ret = run(*run_argv)
  File "/usr/local/Cellar/bazaar/2.5.0/libexec/bzrlib/commands.py", line 673, in run_argv_aliases
    return self.run(**all_cmd_args)
  File "/usr/local/Cellar/bazaar/2.5.0/libexec/bzrlib/commands.py", line 695, in run
    return self._operation.run_simple(*args, **kwargs)
  File "/usr/local/Cellar/bazaar/2.5.0/libexec/bzrlib/cleanup.py", line 136, in run_simple
    self.cleanups, self.func, *args, **kwargs)
  File "/usr/local/Cellar/bazaar/2.5.0/libexec/bzrlib/cleanup.py", line 166, in _do_with_cleanups
    result = func(*args, **kwargs)
  File "/Users/hoge/.bazaar/plugins/bash_completion/__init__.py", line 62, in run
    bash_completion_function(sys.stdout, **kwargs)
  File "/Users/hoge/.bazaar/plugins/bash_completion/bashcomp.py", line 401, in bash_completion_function
    data = dc.collect()
  File "/Users/hoge/.bazaar/plugins/bash_completion/bashcomp.py", line 303, in collect
    self.aliases()
  File "/Users/hoge/.bazaar/plugins/bash_completion/bashcomp.py", line 317, in aliases
    for token in commands.shlex_split_unicode(expansion):
AttributeError: 'module' object has no attribute 'shlex_split_unicode'

bzr 2.5.0 on python 2.7.3 (Darwin-10.8.0-i386-64bit)
arguments: ['/usr/local/bin/bzr', 'bash-completion']
plugins: bash_completion[1.2.1dev], bzrtools[2.4.1], cd[unknown],
    changelog_merge[2.5.0], colo[0.3.1dev], difftools[0.91.0],
    extmerge[unknown], hello_world[1.2.3dev4], launchpad[2.5.0],
    netrc_credential_store[2.5.0], news_merge[2.5.0], po_merge[2.5.0],
    qbzr[0.21.0dev2], rewrite_interactive[unknown], vimdiff[unknown],
    weave_fmt[2.5.0], xmloutput[0.8.8]
encoding: 'utf-8', fsenc: 'utf-8', lang: 'ja_JP.UTF-8'

shlex_split_unicodeがないって言われているみたいなんだけど、bzrのソースコードを覗いたところ、
確かになくなってしまっています。
log見たけど、2.2辺りで非推奨になってrev6030で消えてしまったみたいです。

ただ、対象の関数が行っている処理自体は大した事なくて、cmdlineモジュールに委譲しているだけでした。

def shlex_split_unicode(unsplit):
    return cmdline.split(unsplit)

という訳で、以下の用にbash_completionを修正。

=== modified file 'bashcomp.py'
--- bashcomp.py	2010-05-29 08:42:48 +0000
+++ bashcomp.py	2012-05-03 12:51:03 +0000
@@ -24,6 +24,7 @@
     help_topics,
     option,
     plugin,
+    cmdline,
 )
 import bzrlib
 import re
@@ -314,7 +315,7 @@
 
     def aliases(self):
         for alias, expansion in config.GlobalConfig().get_aliases().iteritems():
-            for token in commands.shlex_split_unicode(expansion):
+            for token in cmdline.split(expansion):
                 if not token.startswith("-"):
                     self.user_aliases.setdefault(token, set()).add(alias)
                     break

これでOKでした。
以上です。

コメントを残す