为何不同写法的Mercurial Revset查询会得到不同结果?
差异原因解析
这两个revset返回不同结果的核心是变更集集合的排序规则不一样,导致first()选取的目标变更不同:
针对命令
hg log -r "first(date('Nov 2022'))":date('Nov 2022')筛选出2022年11月提交的所有变更集后,Mercurial会默认按提交日期降序排列这个集合(最新提交的变更排在最前面)。first()直接取这个排序后的第一个元素,也就是11月里提交时间最晚的变更(对应你例子里11月4日的2177号变更)。针对命令
hg log -r "first(sort(date('Nov 2022'),date))":
你通过sort(date('Nov 2022'), date)对筛选出的11月变更集做了重新排序,这里的date参数指定按提交日期升序排列(最早提交的变更排在最前面)。排序完成后再用first(),取到的就是11月里提交时间最早的变更(对应你例子里11月2日的2180号变更)。
本质上前者取的是11月最新提交的变更,后者取的是11月最早提交的变更,结果自然不同。
内容的提问来源于stack exchange,提问作者Lazy Badger
相关产品推荐
相关产品推荐

