藤原です。
2014年6月25日 18:36 shin ohira <
shin....@gmail.com>:
> mercurialと連携してphabricatorを使おうとしています。
>
> ターゲットマシンでgitを使いにくい状況のため、前準備として他のマシンで
> phabricatorのソースコードをgitからhgにコンバートしようとしたところ
> エラーが発生して途中で変換が止まってしまいます。
>
> このような場合何か回避策はありますでしょうか?
>
> 実行したコマンド
>>
>> git clone
https://github.com/phacility/phabricator.git
>>
>> hg convert phabricator
>
>
> 表示されたメッセージ
>>
>> 4061 Remove legacy support for 'phd repository-launch' and 'phd repository-launch-readonly'
>> 4060 Revert D4359 and apply a better fix
>> 4059 Fix performance problem for large task queues
>> 4058 Use direct inclusion, not submodules, to bring Javelin into Phabricator
>> converting [======================> ] 3692/7751
>> 5m44sfatal: Path '.gitmodules' does not exist in
>> '07767fda00ab4437127ce95aae451632b2b55798'
>>
>> abort: cannot read submodules config file in
>> 07767fda00ab4437127ce95aae451632b2b55798
変換に失敗しているリビジョン 07767fda00ab.... は、.gitmodules によ
る複数リポジトリ連携を廃止して、対象リポジトリを内部に取り込んでい
る模様です。
https://github.com/phacility/phabricator/commit/07767fda00ab4437127ce95aae451632b2b55798
その一方で、hg convert は:
- 親リビジョンとの差分に .gitmodules の差分が含まれる場合、複
数リポジトリ構成があるものと判定
http://selenic.com/repo/hg/file/becb61de90a1/hgext/convert/git.py#l201
- 対象リビジョンから .gitmodules ファイルが取得できない場合は、
問答無用でエラー扱い
http://selenic.com/repo/hg/file/becb61de90a1/hgext/convert/git.py#l168
という処理になっているため、現状では「.gitmodules ファイルの破棄」
には対応していないように思われます。
以上のことから、設定等で云々という回避方法は無いので、当面は暫定的
なソース変更で乗り切るしかないですね(修正提案を別途投げておきま
す)。
hgext/convert/git.py に以下のパッチをあてたものを使用してみてくだ
さい。一応、Mercurial 3.0.1 ベースのソースに適用して、phabricator
からの変換が成功することを確認済みです。
================
diff -r b2dc026a9bd2 hgext/convert/git.py
--- a/hgext/convert/git.py Wed Jun 18 19:46:18 2014 -0500
+++ b/hgext/convert/git.py Wed Jun 25 20:31:20 2014 +0900
@@ -139,8 +139,9 @@ class convert_git(converter_source):
def retrievegitmodules(self, version):
modules, ret = self.gitread("git show %s:%s" % (version,
'.gitmodules'))
if ret:
- raise util.Abort(_('cannot read submodules config file in %s') %
- version)
+ self.ui.warn(_('warning: cannot read submodules config file in %s '
+ '(treat as deleted)\n') % version)
+ modules = ''
self.parsegitmodules(modules)
for m in self.submodules:
node, ret = self.gitread("git rev-parse %s:%s" % (version, m.path))
================
--
----------------------------------------------------------------------
FUJIWARA Katsunori(
flying...@gmail.com)