1

Mercurial APIのネイティブ Python 実装を使用して、一連の changegroup および commit フックを作成しています。これには、フックが実際に見た最後のリビジョン ID など、フックに固有の特定の情報を保存する必要があります。

すべての外部メタデータがリポジトリ内に保存される方法でこれを行いたいのですが、実際には追跡または無視されません。このデータが履歴の一部にならないようにしたいと思います。

.hg/hgrc私が最初に考えたのは、単純な文字列と整数のみを保存する必要があるため、既存の構成を使用することだけでした。フックが現在使用しているいくつかの構成行はそこにあります。API は、 を介してこの構成を読み取る簡単な手段を提供しますui.config*が、実際に変更または書き込む手段は提供されていないようです。

構成リストを取得して追加または変更し、構成モジュールを使用して記述するのは簡単ですが、API が提供するものを見落としているように感じます。私は、「成熟した API でこれを行う明確な手段がない場合、間違った方法で行っている可能性がある」と考え続けています。

おそらくAPIを使用して、これを行う「適切な」方法はありますか? または、API を使用せずにこの種のデータを管理するために、API 内で見つけられなかったものでしょうhgrcか? 私の主な関心事は、一度にプッシュする複数の人々の間のレースです。

4

1 に答える 1

5

hgrc 構成ファイルは意図的に読み取り専用であり、これらのファイルに書き込むための内部 API はありません。このルールの唯一の例外は、クローンがクローン ソース URL を含むデフォルトの .hg/hgrc を作成することです。だから、いや、それを使おうとしないでください。

この種のことを行う通常の方法は、自分のプライベート ファイルを読み書きすることです。Mercurial 自体がこの名前空間を所有しており、有機的な後方互換性のある方法でその内容を拡張しているため、最善の策は、他の誰かや将来の Mercurial 機能と衝突する可能性が低いサブディレクトリ名を選択し、そこにファイルを隠しておくことです。テキストベースがおすすめです。

便宜上、repo オブジェクトには、repo.wlock() によって保護されている作業状態空間 (.hg/、repo.wopener()) 内のファイルとリポジトリ ストア内のファイル (.hg/store/、 repo.lock() によって保護されている repo.sopener())。

アトミックなファイル書き込みを行うことも可能です:

f = self.wopener("mydata", "w", atomictemp=True)
f.write(somedata)
f.close()

これも必ず読んでください:

https://www.mercurial-scm.org/wiki/LockingDesign

于 2011-10-05T02:46:18.447 に答える