我正在尝试使用检查提交的更改组或 pretxnchangegroup 挂钩创建一个 Mercurial 存储库,可能对其进行一些更改,然后提交更改。我的钩子做了类似的事情:
#!/bin/sh
if ! grep -q foobar foobar; then
echo foobar >> foobar
hg add foobar
hg commit -m 'added foobar to foobar'
fi
但是当我推送到具有钩子的远程存储库时,它会挂起等待锁,我必须杀死它:
$ hg push
pushing to /tmp/a
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
foobar already tracked!
waiting for lock on repository /tmp/a held by 'duck:18140'
^Ctransaction abort!
rollback completed
interrupted!
interrupted!
这是有道理的,因为我知道更改组必须在存储库上持有写锁,钩子内的提交也必须如此。但是我该如何解决这个问题呢?
我可以想到两种可能可行的方法,但不知道它们是否可行:
- 如果在更改组完成并释放锁之后运行了一个钩子,我可以在那里运行提交。
- 将变更集附加到传入的变更组。