显示"默认路径"?

时间:2017-04-04 19:25:40

标签: mercurial

我可以看到命名分支何时通过this command合并到default

hg log -r "children(ancestor(default, b21341)) and merge()" --template "{node|short} ({branch}) was merged on {date|date} -- {desc}\n"

但这显示如下:

836230f2cbc3 (b21341) was merged on Tue Mar 28 09:51:28 2017 -0700 -- terrible terrible merge
65a95167a306 (default) was merged on Tue Mar 28 09:30:06 2017 -0700 -- Merged b30695 into default

如果您阅读了这些精彩的提交消息,您会注意到第二个实际上是"将 b30695 合并为默认值"即使我试图找出b21341如何违约。

那么,如果我试图弄清b21341如何合并到b30695我还有两个更改集:

hg log -r "children(ancestor(b30695, b21341)) and merge()" --template "{node|short} ({branch}) was merged on {date|date} -- {desc}\n"  
2e082d1b45e9 (b27369) was merged on Mon Mar 27 09:49:22 2017 -0700 -- merged in stable
73752628d887 (b29454) was merged on Mon Mar 27 11:28:41 2017 -0700 -- merge stable

等等。

我想要的是graph b21341如何合并为默认值。也就是说,它应该显示它所合并的所有不同命名分支的路径,直到它进入default

是否有查询会这样做?

我在想这样的事情

hg log -G -r "b21341:default and merge()" -T "{node|short} ({branch}) | {date|date} | {desc}"

但它看起来并不合适。我希望看到b21341合并到的分支的名称,但仅当该分支最终合并到default时。一旦合并到默认值(上面的查询将要出现),图表也应该终止

torek's suggestion收益:

$ hg log -G -r "descendants(ancestor(default, b21341)) and merge()" -T "{revset('p2(%d)', rev) % '{node|short} ({branch})'} => {node|short} ({branch}) | {date|date} | {desc|strip|firstline|strip}\n"
o    c461c6d7e725 (default) => f30e9413ff25 (default) | Tue Apr 04 12:17:20 2017 -0700 | merge
|\
| o    87e6f6864404 (default) => 682511875e7d (default) | Tue Apr 04 09:07:52 2017 -0700 | Automated merge
| |\
| | o  45ad99aabab6 (default) => a58e849eb198 (default) | Tue Apr 04 08:55:12 2017 -0700 | rpt-14
| |/
| o  36414f2bcbc2 (default) => a2c949bf13fc (default) | Mon Apr 03 20:49:27 2017 -0700 | merge
| |
| o  119a1960a61d (default) => 47fb25095be8 (default) | Mon Apr 03 20:34:25 2017 -0700 | merge
| |
| o    9c0a22b21d09 (default) => 84208df5a215 (default) | Mon Apr 03 20:17:39 2017 -0700 | merge
| |\
| o |  a9a51ef9230d (default) => 857ba78f4fdf (default) | Mon Apr 03 19:59:38 2017 -0700 | Automated merge
| |/
| o    c62e4f3565f6 (default) => f91b349e50b8 (default) | Mon Apr 03 19:39:37 2017 -0700 | Automated merge
| |\
| o |  ab9848c00bbc (default) => c62e4f3565f6 (default) | Mon Apr 03 19:07:48 2017 -0700 | fetch fixees. merged in
| |/
| o    714b6a6f826a (default) => 4a3e91baa604 (default) | Mon Apr 03 16:59:49 2017 -0700 | merge
| |\
| o |  c201b33f3ef5 (default) => 714b6a6f826a (default) | Mon Apr 03 16:27:37 2017 -0700 | ->Fetch updates
| |/
| o  4d0584f3722b (default) => 48e3df894646 (default) | Mon Apr 03 14:14:40 2017 -0700 | Automated merge
| |
| o  cc26a1fe435a (default) => 75eab9550876 (default) | Fri Mar 31 16:29:14 2017 -0700 | merge
| |
| o  2010d6c42271 (default) => 360677ad2709 (default) | Fri Mar 31 13:47:14 2017 -0700 | Mergey merge
| |
| o    c3013d9c21b0 (default) => d5f420767672 (default) | Fri Mar 31 12:42:27 2017 -0700 | Automated merge
| |\
| o |  d5fb7882ded8 (default) => c3013d9c21b0 (default) | Fri Mar 31 12:35:50 2017 -0700 | merge
| |/
| o  f6333f8b1927 (default) => 0ff996beb803 (default) | Fri Mar 31 11:07:56 2017 -0700 | Automated merge
| |
| o    12d521d98f45 (b28197) => 0aab8dd2b4c2 (default) | Thu Mar 30 14:36:29 2017 -0700 | Merged b28197 into default
| |\
| o \    8cc3cfdf55d1 (b30630) => 35f0a6f2c4f6 (default) | Thu Mar 30 14:36:26 2017 -0700 | Merged b30630 into default
| |\ \
| o \ \    c2b23ec72ff3 (b27477) => 5b6367131b36 (default) | Thu Mar 30 14:36:23 2017 -0700 | Merged b27477 into default
| |\ \ \
| | o \ \    95c0db6914cd (b28675) => bb46978c48c4 (default) | Thu Mar 30 14:32:09 2017 -0700 | Merged b28675 into default
| | |\ \ \
| | o \ \ \    866073c5de8e (b28336) => 80b486aaf058 (default) | Thu Mar 30 14:32:06 2017 -0700 | Merged b28336 into default
| | |\ \ \ \
| | o \ \ \ \    fcc5c3791172 (b30353) => 605a51c52f65 (default) | Thu Mar 30 14:30:28 2017 -0700 | Merged b30353 into default
| | |\ \ \ \ \
+---o | | | | |  1446674834b8 (b30774) => e2aed3cc1b97 (default) | Thu Mar 30 14:30:25 2017 -0700 | Merged b30774 into default
| | | | | | | |
+---o | | | | |  32a22fb906b1 (b28867) => 6b4824d7c988 (default) | Thu Mar 30 14:30:22 2017 -0700 | Merged b28867 into default
| | | | | | | |
o | | | | | | |    d3fbf05d250f (b30590) => 8b52881b125f (default) | Tue Mar 28 16:28:06 2017 -0700 | Merged b30590 into default
|\ \ \ \ \ \ \ \
o \ \ \ \ \ \ \ \    bade429fce2f (b30287) => f5a0585d38ac (default) | Tue Mar 28 15:25:47 2017 -0700 | Merged b30287 into default
|\ \ \ \ \ \ \ \ \
o \ \ \ \ \ \ \ \ \    65a95167a306 (default) => 784f90350d9f (default) | Tue Mar 28 10:39:38 2017 -0700 | Merged namespace fix
|\ \ \ \ \ \ \ \ \ \
+-------o | | | | | |  65a95167a306 (default) => c2b23ec72ff3 (b27477) | Tue Mar 28 10:36:48 2017 -0700 | Merged in default
| | | | | | | | | | |
o | | | | | | | | | |    2fa39946baa0 (b30695) => 65a95167a306 (default) | Tue Mar 28 09:30:06 2017 -0700 | Merged b30695 into default
|\ \ \ \ \ \ \ \ \ \ \
+-----------------------o  766f032973cf (default) => 836230f2cbc3 (b21341) | Tue Mar 28 09:51:28 2017 -0700 | terrible terrible merge
| | | | | | | | | | | | |
o | | | | | | | | | | | |    c1bbe7368498 (default) => 766f032973cf (default) | Tue Mar 28 09:22:44 2017 -0700 | moving stable merginess
|\ \ \ \ \ \ \ \ \ \ \ \ \

但这并不是对的。

  1. 它跟踪默认值到现在 - 我希望它在分支进入默认值时立即停止
  2. 它没有清楚地说明b21341是如何违约的。在底部附近,我看到默认被合并到b21341但我仍然无法看到b21341被合并到其他地方。

1 个答案:

答案 0 :(得分:1)

根据您的文字更新,它听起来像您想要"合并在DAG范围内,从defaultb21341的合并基础开始并持续到,但不超过,一些可能难以指定的节点。" (虽然你可能想要一个完全不同的起点,Mercurial可以给你一个,但Git不能。)

任何基于提交图的操作都存在问题。我们知道在哪里开始查看图表:它是"所有提交属于分支b21341"或" defaultb21341"的合并基础。因为Mercurial记得在哪个分支中进行任何给定的提交,我们可以区分这两种情况,我们可以在非常简单的情况下说明:

...--A--o--...--D--o--...--F--...--H  (default)
      \        /          /
       B--o---C--o--...--E--...--G    (b21341)

在这里,"有趣"提交为A,这是分支b21341default转出的点; Bb21341本身的第一次提交; C,这是b21341default的共同祖先; Ddefault上的合并提交,带来b21341; E,这是最后共同祖先; F,这是另一个合并; Gb21341中的头; H;和defaultE中的头部。 (这假定在每个命名分支中都有一个头部,但情况不一定如此,但如果我们有多个未命名的头部,则很难谈论它们!)

在Mercurial中,我们总能找到所有这些有趣的提交。 (我们不能在Git中,它不记得提交提交的分支:--first-parent左边的所有内容都在两个分支上.Git有一个技巧可以帮助,即仅使用E,但要使用它,你必须练习良好的合并规则,这并非每个人都这样做。)找到它们的表达方式可能会变得冗长而复杂,但它总是可能

如果您想从提交ancestor(default, b21341)开始,那么它就是您一直使用的表达式:B。从first(b21341)开始很容易,它是C。查找default似乎有点困难(它是一组提交中的第一个提交合并"向上"朝向或进入first(something),所以b21341,但是指定 设置很难,或者至少是难以理解的),我不打算在这里尝试。

在这种情况下,当然,default不会将直接合并到F中,而是通过某些中介或中介。因此,我们有一个不同的"有趣的"虽然我将保留H...-----------------F--...-G-...-H (default) . / / . E----... (some branch) . / . D--... (yet another branch) \ / B--...--C--... (b21341) ,但添加新的单个字母表示新的有趣提交:

C

认为你的"有趣的"提交以ancestor(default, b21341)开头,再次只是default。出于压缩显示的目的,我只绘制了向上导回到D的向上合并,但是在每个中间分支上可能存在任意数量的非合并提交,即在E之前和在我们希望跳过的G之前。我们希望跳过的其他合并,例如C,因为它们不在default的直接路径上:即我们想要的当我们点击位于C 上的合并且first(descendants(ancestor(default, b21341)) and merge() and branch(default)) 的后代时停止:

(ancestor(default, b21341)::first(descendants(ancestor(default, b21341)) and merge() and branch(default))) and merge()

所以我觉得这里的revset表达式有点可怕:-):

'{node|short} ({revset(p2node) % "{node|short} {branch}"} => {branch}) {desc}'

选择了我们的提交节点或节点后,我们可以显示它们/但是我们喜欢使用模板。我不确定是否有更有效的方法:

F

但是,如果我们选择提交E并希望查看E的节点ID以及E分支提交F,那么我们想要的是什么{1}}的分支名称(default当然是C)。

如果有其他合并"在"之间Fhg log -G -r '(ancestor(default, b21341) :: \ first(descendants(ancestor(default, b21341)) and \ merge() and branch(default))) and merge()' -T \ '{node|short} ({revset(p2node) % "{node|short} {branch}"} => {branch}) {desc}' ,例如,如果两个中间分支彼此合并多次,您将选择所有这些分支。没有编写实际的Python代码就很难避免。不过,这里的模板应该很好地识别它们。

将这些全部放在一起并分解长队:

{{1}}

当然我没有测试过,因为我没有您的存储库。