2011-12-24 17 views
3

私は水銀でPuTTYの韓国語版を管理します。PuTTYのsvnリポジトリをMercurialリポジトリに変換する

のMercurialリポジトリの要件:

  • 私たちは、PuTTYのSVNリポジトリから最新のリビジョンを追跡することができるはずです。
  • 押す必要はありません。

私の計画は、オリジナルのトランクとブランチを、水銀リポジトリにブランチとして持ち、私自身のブランチを追加することです。 私はhgsubversionを使用して、最初の変換後に連続的にプルします。

PuTTYリポジトリ(http://svn.tartarus.org/sgt/)は標準レイアウトのではなくであり、さらに悪いことに、他のプロジェクトも含まれています。 DVCS変換ツールは標準のレイアウトリポジトリではうまく動作しますが、非標準のものではうまく動作しません。

だから私のような、それは "標準" にするためにディレクトリをマップする必要があります。

  • /putty =>/trunk
  • /putty-0.xx =>/tags/0.xx
  • /putty-branch-0.xx =>/branches/0.xx
  • は、他のすべてのディレクトリを無視

トランクにリリースに必要なすべてのリビジョンがある場合、トランクのみの変換は問題ありません。 残念ながら、バージョン0.62はパテントブランチ0.61ブランチでリリースされています!だから私は最新のリビジョンを取得できませんでした。 :(

私は水銀変換前の元のSVNリポジトリの標準を変換するsvnsyncsvnadmin dumpsvndumpfilterを使用しようとしている

、しかし、ディレクトリは、私が好きな手動マッピングは、彼らでは不可能である。(それとも私にはわかりません。どのようにそれらにそれを行うには)

任意の提案やコメント

答えて

1

は、私は、リポジトリを見ていました。あなたは、svndumpfilterを使用して履歴全体のファイルの名前を変更することはできないので、ダンプファイルに名前を変更する小さなスクリプトを書きました。唯一の難しい部分は、tagsbranchesフォルダの作成を追加することでした。

  1. がダウンロードlatest Putty SVN dump file

    $ wget http://www.chiark.greenend.org.uk/~sgtatham/putty/putty-svn.dump.gz 
    
  2. 修正スクリプトを使用してダンプファイル:

    $ zcat putty-svn.dump.gz | fix-dump.py > fixed.dump 
    
  3. 負荷スクリプトを使用するには、cronジョブまたはことに類似を行う必要がありますそれを新しい空のリポジトリに入れます:

    $ svnadmin create putty 
    $ svnadmin load putty < fixed.dump 
    
  4. はMercurialのリポジトリにSubversionリポジトリを変換します

    $ HGの変換ファイル:// $ PWD /パテ

は、私の知る限り見ることができるように、ブランチやタグが正しく作成されます。

(インクリメンタルコンバージョン)を継続して取得するように求められます。幸いにも、hg converthgsubversionの両方がこれをサポートしています。チェンジセットをMercurialに変換する前に、毎日ステップ1から3をやり直す必要があります。これは、最初の3つのステップが確定的であるために機能します。つまり、あなたのputty SVNリポジトリは、パテの開発者がそこで管理している適切な分岐名とタグ名を使用して直接パーデット開発者が作業したかのように動作します。

スクリプトは以下の通りです:

 
#!/usr/bin/python 

import sys, re 

moves = [(r"^Node(-copyfrom|)?-path: %s" % pattern, r"Node\1-path: %s" % repl) 
     for (pattern, repl) in [(r"putty-branch-(0\...)", r"branches/\2"), 
           (r"putty-(0\...)", r"tags/\2"), 
           (r"putty(/|\n)", r"trunk\2")]] 

empty_dir_template = """\ 
Node-path: %s 
Node-kind: dir 
Node-action: add 
Prop-content-length: 10 
Content-length: 10 

PROPS-END\n\n""" 

created_dirs = False 
for line in sys.stdin: 
    if not created_dirs and line == "Node-path: putty\n": 
     sys.stdout.write(empty_dir_template % "tags") 
     sys.stdout.write(empty_dir_template % "branches") 
     created_dirs = True 
    for pattern, repl in moves: 
     line, count = re.subn(pattern, repl, line, 1) 
     if count > 0: break 
    sys.stdout.write(line) 
0

私だけリリースされたソースコードではなく、すべてのリビジョンを追跡することを決定した

だから、結果はここにある:?。https://bitbucket.org/daybreaker/iputty/changesets

これを行うには

は、私が(例えば)これらの手順に従っています

svn ls -R svn://svn.tartarus.org/sgt/putty-0.58 > 58.txt 
svn ls -R svn://svn.tartarus.org/sgt/putty-0.59 > 59.txt 
svn ls -R svn://svn.tartarus.org/sgt/putty-0.60 > 60.txt 
svn ls -R svn://svn.tartarus.org/sgt/putty-0.61 > 61.txt 
svn ls -R svn://svn.tartarus.org/sgt/putty-0.62 > 62.txt 

hg init iputty 
cd iputty 
svn export --force svn://svn.tartarus.org/sgt/putty-0.58 . 
hg branch original 
hg add 
hg commit -m 'Imported PuTTY 0.58 release.' 
svn export --force svn://svn.tartarus.org/sgt/putty-0.59 . 
diff -U3 ../58.txt ../59.txt 
hg add (added files from diff) 
hg rm (removed files from diff) 
hg commit -m 'Imported PuTTY 0.59 release.' 
(repeat this for the remaining releases) 

hg up -r(rev# of 0.60 release) 
svn export --force (URL of my own modified PuTTY repository) . 
hg branch default 
hg commit -m 'Imported the most recent dPuTTY source code. blah blah' 
関連する問題