2

Mercurial リポジトリにソフトウェアがあります。

ソフトウェア プロジェクトを Debian パッケージとしてパッケージ化しています。これを行う標準的な方法は、debianサブディレクトリにある Debian パッケージ ファイル用に別のブランチを用意することです。

私が常に抱えている問題の 1 つは、自分がどのブランチにいるかを忘れて、誤って間違ったブランチにコミットしてしまうことです。これは頻繁に発生し、本当に迷惑です。これが発生すると、通常、問題に気付く前にリモートにプッシュし、ローカルとリモートのリポジトリを手動で修正する必要がありますが、これは面倒です。

私が考えることができる唯一のオプションは、間違ったブランチにコミットしようとしている場合に中止する pre-commit フックを持つことです。

具体的には、main ブランチが呼び出されdefault、Debian ファイルを含むブランチが と呼ばれるとしましょうdebian。次にdefault 、コミット内のファイルがdebian ディレクトリからのものではない場合にのみ、ブランチへのコミットが成功するようにします。debianコミット内のすべてのファイルがディレクトリにある場合にのみ、ディレクトリへのコミットが成功するようにしますdebian

Mercurial Hooks の章を読んだり、Hg Book の例を調べたりするのに時間を費やしましたが、これについてどうすればよいかまだわかりません。このような場合は、外部の Python スクリプトを呼び出す必要があるという強い印象を受けました.hg/

4

3 に答える 3

0

@Ry4an のソリューションを出発点として使用し、新しいhglib API を使用して次のスクリプトを作成しました。

#!/usr/bin/python                                                                                                                                                         

# Abort commit to the debian branch if it is not contained in a debian                                                                                                    
# subdirectory                                                                                                                                                            

# Similary abort commit to non-debian branches if it is contained in a                                                                                                    
# debian subdirectory                                                                                                                                                     

import hglib, os, sys
client = hglib.open("/home/faheem/hooktest")
ctx = client['tip']
files = ctx.files()  
branch = ctx.branch()

for f in files:
    d = os.path.dirname(f)
    if branch == "debian" and d != "debian":
        sys.exit("cannot commit %s (file not in 'debian' directory) to 'debian' branch"%f)
    if branch != "debian" and d == "debian":
        sys.exit("cannot commit %s (file in 'debian' directory) to non 'debian' branch"%f)
于 2013-10-10T19:59:03.740 に答える