В чем разница между: и:: и% операторов mercurial revsets
Revsets поможет упомянуть
"x::y" Диапазон DAG, означающий все наборы изменений, которые являются потомками x и предками y, включая сами x и y. Если первая конечная точка не указана, это эквивалентно "ancestors(y)", если вторая не указана, она эквивалентна "потомкам (x)". Альтернативный синтаксис "x..y".
"x: y" Все наборы изменений с номерами ревизий от x до y, включая оба. Любая конечная точка может быть пропущена, по умолчанию они равны 0 и дают чаевые.
"x% y" Наборы изменений, которые являются предками x, но не предками y (то есть::x -::y). Это сокращенное обозначение "only(x, y)" (см. Ниже). Второй аргумент является необязательным и, если его опустить, эквивалентен "only(x)".
Не ясно, какие результаты дифференцированы. В общем, "x % y" возвращает то, что я хочу выбрать, но я хочу понять других.
1 ответ
Разница между утверждениями может быть очень тонкой, есть "между" и "диапазоном"
возьмите, например, заказанную линейную ревизию от 1 до 5 (в новом фиктивном репо), затем обратите внимание на разницу между 1:5
5:1
1::5
5::1
5:1
дает так же, как 1:5
все между двумя, независимо от того, кто идет первым
Отон 5::1
не дает никаких ревизий вообще, так как их порядок инвертирован, поэтому предки / потомки 1::5
в этом примере даст так же, как 1:5
$ hg init tmptrial
$ cd tmptrial
$ echo 0 > file.txt
$ hg add file.txt
$ hg commit -m 'r0'
$ for i in {1..5} ; do echo $i > file.txt ; hg commit -m r$i ; done
$ hg log -r 1::5 --template "{desc}\n"
$ for range in 1::5 5::1 1:5 5:1 ; do echo -- $range -- ; hg log -r $range --template "{desc}\n" ; done
запустите приведенный выше пример и обратите внимание на пустой вывод 5::1