2011-12-04 11 views
1

簡潔に:Mercurialバンドルからコミット日付を抽出する

Mercurialバンドルはどのファイル形式ですか? コミットの日付情報を抽出するにはどうすればよいですか?

全体的な話:

私はHgSubversionを使用し始めました。 このMercurial拡張機能を使用すると、Mercurialレポで作業し、Subversionからプッシュ&プルできます。

昨日私は2ヶ月分の変更をSubversionに送り返しました。 二つの驚き:200のコミットのため

  • hg push必要な約2時間。
  • オリジナルhg commitの日付は失われ、hg pushの日付に置き換えられました。

私はexplanation for the push slowness on the mailing listを見つけました。 さて、私は簡単にそれに適応することができます:早く押し、頻繁に押してください。 にはが分かります。

元のコミット日が失われてしまったことに私は失望しています。 ほとんどのシナリオでHgSubversionによって制定された日付の置き換えがわかります。 しかし、私のシナリオでは意味がありません。

元のコミット日付は、のストリップバックアップファイルに含まれています。 これらのファイルは.hg/strip-backup/にあります。彼らはバンドルと呼ばれるようです。 (Subversionへのプッシュ中に、 サブツリーがツリー から削除され、hg pushによって作成されたSVNコミットがMercurialに引き戻された後に再作成されたときに作成されます。 上記の「遅さ」リンクを参照してください。 PatrickMézardsのコメントのため) バンドルから日付を抽出し、次にreset the svn:date in Subversionを抽出できました。

しかし、バンドルに含まれている情報にはどうすればアクセスできますか? 既知の圧縮形式には見えません。

$ mkdir bundle 
$ cd bundle 
$ cp ~/RepoHgSvn/.hg/strip-backup/ecbe9ff1cf0b-backup.hg . 
$ file ecbe9ff1cf0b-backup.hg 
ecbe9ff1cf0b-backup.hg: Mercurial changeset bundle (bzip2 compressed) 
# Okay then ... 
$ bzip2 -d ecbe9ff1cf0b-backup.hg 
bzip2: Can't guess original name for ecbe9ff1cf0b-backup.hg 
     -- using ecbe9ff1cf0b-backup.hg.out 
bzip2: ecbe9ff1cf0b-backup.hg is not a bzip2 file. 
# Okay, the file utility often goes wrong ... 
$ mv ecbe9ff1cf0b-backup.hg ecb.bz2 
$ bzip2 -d ecb.bz2 
bzip2: ecb.bz2 is not a bzip2 file. 
$ mv ecb.bz2 ecb.gz 
$ gzip -d ecb.gz 
gzip: ecb.gz: not in gzip format 
$ mv ecb.gz ecb.zip 
$ unzip ecb.zip 
Archive: ecb.zip 
    End-of-central-directory signature not found. 
$ 7z l ecb.zip 
Error: ecb.zip: is not supported archive 

バンドルはどのようなファイル形式で、どのようにコミット日付情報を抽出できますか?

答えて

1

あなたは、あなたはSVNのリビジョンは、元のリビジョンに沿っているレポを持って

mkdir foo 
cd foo 
hg init 
hg pull ~/RepoHgSvn 
hg pull ~/RepoHgSvn/.hg/strip-backup/ecbe9ff1cf0b-backup.hg 

によって古いリビジョンでリポジトリを得ることができます。

しかし、svnでコミット日付を変更すると、元のsvnリポジトリのクローンをやり直す必要があります。これは、リポジトリ内のチェンジセットをサブバージョンにプッシュした場所のメタデータがsvnプロパティの変更後に間違っているためです現在のsvnクローンはすべてのリビジョンがプッシュタイムに設定されており、変更されたリビジョンを再フェッチすることは不可能かもしれません)。

+0

ありがとうございました。実際のバックアップには、後続のコミットのすべての元のコミット日付が含まれます。私は誤ってすべてのバックアップファイルを調べなければならないと思っていました。 recloningに関する通知にも感謝します。 Mercurialリポジトリに間違った日付があることを認めない限り、実際にそれを行う必要があります。 Subversionからリビジョンを取り戻す前に、コミット日付を設定することにHgSubversionを騙すことができれば、ちょうどいいでしょう。私が時間を見つけたら、ソースを見てみましょう。 – Lumi