gpt4 book ai didi

version-control - 预先提交 mercurial 钩子(Hook)以停止提交到错误的分支

转载 作者:行者123 更新时间:2023-12-04 04:38:49 24 4
gpt4 key购买 nike

我在 Mercurial 存储库中有一个软件。

我将我的软件项目打包为 Debian 包。
似乎执行此操作的标准方法是
Debian 软件包文件的单独分支,
住在debian子目录。

我一直遇到的一个问题是我忘记了我是哪个分支
打开并意外提交到错误的分支。有时候是这样的
经常,真的很烦。发生这种情况时,我通常
在意识到问题之前推送到远程,然后有
手动修复本地和远程存储库,即
一种痛苦。

我能想到的唯一选择是有一个预提交钩子(Hook)
如果我试图提交到错误的分支,则会中止。

具体来说,假设主分支称为 default和分支
包含 Debian 文件的名称为 debian .然后我想提交到 default只有当提交中的文件都不是来自 debian 时,分支才会成功。
目录。我想要提交到 debian只有当所有目录都成功时
提交中的文件位于 debian目录。

我花了一些时间阅读有关 Mercurial Hooks 的章节并浏览示例
在 Hg Book 中,但仍然不知道如何去做。我确实得到了强烈的印象
对于这样的事情,我应该调用外部 Python 脚本,可能
.hg/ .

最佳答案

是的,你在那个 precommit钩子(Hook)可以做到这一点。如果您想在 bash 中执行此操作,则可以使用以下内容:

#!/bin/bash
revs=$(hg log -r "$HG_NODE:tip" --template '{rev} ') #Intentional space after {rev}
rc=0
for rev in $revs
do
files=$(hg log -r $rev --template '{files}')
#Above will include discards. So you cannot 'hg cat' them all. So you may want
# files=$(hg log -r $rev --template '{file_mods} {file_adds}')
branch=$(hg log -r $rev --template '{branch}')
for file in $files
do
if [ branch == "debian" ] && [ "$(echo $file | grep -v "debian")" != "" ] ; then
echo "ERROR: Non debian file in debian branch."
exit 1
fi
if [ branch != "debian" ] && [ "$(echo $file | grep "debian")" != "" ] ; then
echo "ERROR: debian file in non-debian branch."
exit 1
fi
done
done
exit $rc

那些 if/grep 行几乎肯定是错误的,但你明白了。

关于version-control - 预先提交 mercurial 钩子(Hook)以停止提交到错误的分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19234473/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com