首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >推流/拉取前自动触发Hg仓库校验,无需编程

推流/拉取前自动触发Hg仓库校验,无需编程
EN

Stack Overflow用户
提问于 2019-04-16 17:40:54
回答 2查看 144关注 0票数 3

我们发现我们的Hg存储库在几周前就被破坏了。这种损坏似乎已经蔓延:所有克隆(中央存储库和用户存储库)都以同样的方式损坏,非常严重。我认为,如果我们当时进行核实,我们就可以阻止它。

是否有一些Hg设置会导致每次推流都会进行验证,并在验证失败的情况下阻止推流?我知道我可以在Python中将其实现为一个钩子,但是有没有更简单的解决方案呢?

还有没有可能做相反的事情:确保在拉取之前验证远程存储库?

顺便说一句,我使用的是Windows10,我们使用的是TortoiseHg。

更新:我试着按照乔迪的建议创建钩子。Hg现在挂起等待锁定。这是我所看到的:

代码语言:javascript
复制
c:\Users\username\test-hook>hg init
c:\Users\username\test-hook>cd ..
c:\Users\username>hg clone test-hook test-hook-clone
updating to branch default
0 files updated, 0 files merged, 0 files removed, 0 files unresolved

# At this point I edited clone repository settings to include
# [hooks]
# preoutgoing = hg verify
#
# Then I created a test.txt file and "added" it via TortoiseHg context menu.

c:\Users\username\test-hook-clone>hg commit
c:\Users\username\test-hook-clone>hg status

c:\Users\username\test-hook-clone>hg outgoing
comparing with c:\Users\username\test-hook
searching for changes
changeset:   0:a61d33af6cdb
tag:         tip
user:        username
date:        Mon May 06 20:32:54 2019 +0200
summary:     test file added

c:\Users\username\test-hook-clone>hg push -verbose
pushing to c:\Users\username\test-hook
searching for changes
running hook preoutgoing: hg verify
waiting for lock on repository c:\Users\username\test-hook-clone held by process '16840' on host 'LT407233'
EN

回答 2

Stack Overflow用户

发布于 2019-04-19 00:38:04

为了回答您的问题,钩子不必用Python编写。在适当的服务器的hgrc (在存储库级别或系统级别)中,只需设置

代码语言:javascript
复制
[hooks]
preoutgoing = hg verify
preincoming = hg verify

这可能会显著减慢所有的pull和push操作,但也许您愿意牺牲速度来换取正确性。

当客户端尝试从损坏的存储库中提取时,这将导致输出如下所示:

代码语言:javascript
复制
$ hg clone http://localhost:9000 sample-repo
requesting all changes
remote: abort: preoutgoing hook exited with status 1

在服务器日志中,您应该看到类似以下内容的输出

代码语言:javascript
复制
127.0.0.1 - - [18/Apr/2019 12:41:09] "GET /?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=lheads+%3Bknown+nodes%3D x-hgproto-1:0.1 0.2 comp=zstd,zlib,none,bzip2 partial-pull
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
 a@0: broken revlog! (index data/a.i is corrupted)
warning: orphan data file 'data/a.i'
checked 2 changesets with 1 changes to 2 files
1 warnings encountered!
1 integrity errors encountered!
(first damaged changeset appears to be 0)
票数 4
EN

Stack Overflow用户

发布于 2019-05-07 08:27:31

您可以启用服务器端选项来对所有传入内容执行更多验证,只需在服务器上设置server.validate=yes选项即可。

最简单的方法是通过添加以下两行在服务器全局hgrc或存储库.hg/hgrc文件中启用它:

代码语言:javascript
复制
[server]
validate = yes

这是一个服务器选项,但您也可以在客户端使用它。它也应该验证pull。

(顺便问一下,您看到的是哪种腐败?)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55705093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档