理论上会不会出现, 2 个 pull request 都能通过测试,都不经修改直接 merge 后,反而通过不了测试?

2016-09-06 19:19:48 +08:00
 vghdjgh
2944 次点击
所在节点    git
15 条回复
winkidney
2016-09-06 19:28:13 +08:00
会的,两个组合起来触发一个 bug 。
单个基于当前分支的修改都能过,两个一起会触发 bug 。
说明测试有没有 cover 到的 情况
binux
2016-09-06 19:28:16 +08:00
a=1;
a= !a;
assert(a)

1.patch
- a=!a;

2.patch
- a=1;
+ a=0;
msg7086
2016-09-06 19:32:22 +08:00
merge request 的测试必须要在当前版本上测。
你第一次 merge 以后,测试结果已经无效了,必须重新跑两遍测试才行。
binux
2016-09-06 19:32:28 +08:00
你甚至可以要求原来的测试也能通过

a=True
b=True
assert a or b

a.patch
- a=True
+ a=False

b.patch
- b=True
+ b=False
vghdjgh
2016-09-06 20:54:54 +08:00
现在好多开源项目,都是 pull request 隔好几周才 merge ,中间也有其它 pull request , merge 前不会重新运行 CI , merge 后看来还是有隐患的
9hills
2016-09-06 20:59:43 +08:00
一般 merge 后还会触发一次构建。
vghdjgh
2016-09-06 21:24:30 +08:00
@9hills 刚才试了一下,至少 travis CI 的界面上确实会触发一次 build 的。
奇怪的是, Github 的 pull request 界面却没有地方会显示 merge 后那一个 build 的结果,显示的一直是 merge 前 build 的结果,页面上也没有跳过去的链接。
我之前一直都没注意到 merge 后那一个 build ,估计别人也不容易注意到 merge 后的结果。
9hills
2016-09-06 21:58:26 +08:00
@vghdjgh 是的,这个 merge 后的构建多数版本控制工具是不显示的。

但是假如构建系统和发布系统打通,那么发布系统上应该显示这个主干是不可发布的。
Senorsen
2016-09-06 22:00:49 +08:00
GitHub 等平台可以开项目设置,要求 PR 必须含有保护分支所有 commit (新),还可以要求必须通过指定测试,才可以 merge 回保护分支,就可以解决 lz 的问题
vghdjgh
2016-09-06 23:07:37 +08:00
@Senorsen 你说的是保证 merge 前通过测试,我在讨论的是 merge 后的那次测试是不是也能通过、能不能保证一定通过。

我刚才发现, travis CI 会对 merge 后的那次测试结果提供 email 通知的,可以算是一种机制吧。
Senorsen
2016-09-07 01:26:04 +08:00
@vghdjgh 我是指,比如可以设置成这样,要求保护 master 分支,满足两个条件
1. 只有通过指导测试(如 travis-ci )的 commit 才能合并到 master
2. 想合并到 master 分支的 PR ,必须没有 behind master 的 commit ,即合并前就保证 patch-1 分支与合并到 master 后的效果一致

通过同时应用两个规则,即保证 merge 后的代码也可以通过测试
Senorsen
2016-09-07 01:26:48 +08:00
上边一处 typo : 指导测试 -> 指定测试
Senorsen
2016-09-07 01:30:33 +08:00
Require branches to be up to date before merging
vghdjgh
2016-09-07 06:51:37 +08:00
@Senorsen 确实有这样的设置,选中“ Require status checks to pass before merging ”后才会显示这个选项
Senorsen
2016-09-07 11:03:01 +08:00
@vghdjgh 是的,没错~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/304390

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX