9

「Simulator」と呼ばれるプラットフォームニュートラルなMercurialコードリポジトリがあります

ビルド前に特定のプラットフォームの最適化を対象とするパッチを適用したい。

ガイドによると、ガード付きのパッチを使用することでこれを実現できます。

  • Windows Experimental.patch + windows
  • Unix Experimental.patch + unix
  • Mac Experimental.patch + mac

ただし、パッチキューにはwindows-memory-optimization.patch + windows、unix-memory-optimization.patch + unix、windows-io-experimental-bug-fix.patch + windows、などなど。シリーズファイルでグループとして整理しましたが、ファイルが大きくなり、qseries/qappliedを使用すると管理できなくなります。

代わりに、Windows、UNIX、Mac用のキューが必要です。

パッチを次のように整理できるようにします。

  • Windowsパッチスタック:memory-opt.patch、io-opt.patchなど
  • Unixパッチスタック:disk.patch、graphics.patchなど
  • Macパッチスタック:io-fix.patch、io-opt.patch、experimental.patchなど

次に、シミュレータリポジトリの内外で各プラットフォームのパッチスタックを交換します。これにより、Windowsパッチスタックで作業し、さまざまなサブシステム最適化パッチをポップ/プッシュして、UNIXまたはMacパッチスタックとは独立して作業できるようになります。

各プラットフォームに固有の3つの異なるリポジトリを作成し、パッチスタックをそのように維持する以外は、それができるようには見えません。

.hg / patchsディレクトリをリポジトリに手動でコピーしたり、リポジトリからコピーしたりする以外に、パッチスタックの「交換」を実行する方法はありますか?

4

3 に答える 3

17

Mercurialキューの興味深い使用:)

ここでは、すでにどこかで水銀キューをバージョン管理していると仮定します。これを行う方法がわからない/わからない場合は、hgbookの関連セクションを参照してください。パッチを適用せずに作業を段階的に共同作業/保存するのに最適な方法です。

3つの名前付きブランチ

MQリポジトリに、プラットフォームごとに1つずつ、合計3つの異なる名前付きブランチを維持できるはずです。

プラットフォームを切り替えるには、アクティブなブランチを切り替えるだけです。

(とalias mq='hg -R $(hg root)/.hg/patches'

まず、Windowsブランチを作成します。

$ mq branch windows
marked working directory as branch windows

作成されましたが、まだコミットされていません。

いくつかのことを行い、パッチを追加します。

$ hg qnew windowspatch
... do some stuff

更新、ポップ、コミット:

$ hg qref
$ hg qpop -a
$ mq ci -m 'new windows branch'

これで、デフォルトのブランチと新しいWindowsブランチができました。

$ mq branches
windows                       65:5fd4ef0b96c9
default                       64:06c1a56a3c08 (inactive)

次に、Unixブランチを作成します。

最初に、基本のデフォルトブランチに切り替えます。

$ mq up default
1 files updated, 0 files merged, 1 files removed, 0 files unresolved

新しいUNIXブランチを作成し、UNIX固有のパッチを追加します。

$ mq branch unix
marked working directory as branch unix
$ hg qnew unixpatch
... blahblah
$ hg qref
$ hg qpop -a
$ mq ci -m 'adding unix branch'
$ mq branches
unix                          66:c51bb2c7b413
windows                       65:5fd4ef0b96c9
default                       64:06c1a56a3c08 (inactive)

使用法

qpop -amqリポジトリを操作する前に忘れないでください...

すべてのWindowsパッチをプッシュします

$ mq up windows
xx files updated, yy files merged, zz files removed, ww files unresolved
$ hg qpush -a

3つの物理リポジトリ

3つの別々の(水銀キュー)ブランチを維持することは少し怖いように見えるかもしれません。その場合は、3つの異なるMQリポジトリを使用できます。プラットフォームごとに1つ、それぞれが異なる場所でバージョン管理されています。

例えば ​​:

$ cd mqs
$ hg qclone mq-windows windows
$ hg qclone mq-unix unix
$ hg qclone mq-mac mac

さまざまなプラットフォームで作業するには、フォルダ(リポジトリ)を切り替えるだけです。概念は最初のアプローチに似ています。ただし、1つのMQリポジトリに3つの内部ブランチを配置する代わりに、3つの個別のMQリポジトリを使用します。

于 2009-06-09T15:48:02.493 に答える
5

「mq」と同等のWindowsエイリアスを作成するには、「hg.exe」と同じディレクトリにバッチファイル(「C:\ ProgramFiles \ TortoiseHg」など)を作成し、「mq.cmd」という名前を付けて貼り付けます。コード:

@echo off
FOR /F "tokens=1 delims=" %%A in ('hg root') do SET hgRoot=%%A
hg -R %hgRoot%/.hg/patches %1 %2 %3 %4 %5 %6 %7 %8 %9
于 2009-09-05T00:23:17.573 に答える
5

私はこの質問が古いことを知っていますが、誰かが別の解決策があることを知りたいと思うかもしれません。質問が出された時点ではこれは不可能だったと思いますが、この状況に関する詳細情報は次のとおりです。MQの複数のパッチキュー

于 2010-11-21T20:30:42.870 に答える