##// END OF EJS Templates
revpair: restrict odd-range handling to top-level x:y expression (issue4774)...
Yuya Nishihara -
r26020:cc3a30ff default
parent child Browse files
Show More
@@ -690,6 +690,11 b" def revsingle(repo, revspec, default='.'"
690 raise util.Abort(_('empty revision set'))
690 raise util.Abort(_('empty revision set'))
691 return repo[l.last()]
691 return repo[l.last()]
692
692
693 def _pairspec(revspec):
694 tree = revset.parse(revspec)
695 tree = revset.optimize(tree, True)[1] # fix up "x^:y" -> "(x^):y"
696 return tree and tree[0] in ('range', 'rangepre', 'rangepost', 'rangeall')
697
693 def revpair(repo, revs):
698 def revpair(repo, revs):
694 if not revs:
699 if not revs:
695 return repo.dirstate.p1(), None
700 return repo.dirstate.p1(), None
@@ -711,13 +716,12 b' def revpair(repo, revs):'
711 if first is None:
716 if first is None:
712 raise util.Abort(_('empty revision range'))
717 raise util.Abort(_('empty revision range'))
713
718
714 if first == second and len(revs) == 1 and _revrangesep not in revs[0]:
719 # if top-level is range expression, the result must always be a pair
720 if first == second and len(revs) == 1 and not _pairspec(revs[0]):
715 return repo.lookup(first), None
721 return repo.lookup(first), None
716
722
717 return repo.lookup(first), repo.lookup(second)
723 return repo.lookup(first), repo.lookup(second)
718
724
719 _revrangesep = ':'
720
721 def revrange(repo, revs):
725 def revrange(repo, revs):
722 """Yield revision as strings from a list of revision specifications."""
726 """Yield revision as strings from a list of revision specifications."""
723 allspecs = []
727 allspecs = []
@@ -31,19 +31,53 b' Testing diff --change'
31
31
32 $ cd ..
32 $ cd ..
33
33
34 Test dumb revspecs (issue3474)
34 Test dumb revspecs: top-level "x:y", "x:", ":y" and ":" ranges should be handled
35 as pairs even if x == y, but not for "f(x:y)" nor "x::y" (issue3474, issue4774)
35
36
36 $ hg clone -q a dumbspec
37 $ hg clone -q a dumbspec
37 $ cd dumbspec
38 $ cd dumbspec
38 $ echo "wdir" > file.txt
39 $ echo "wdir" > file.txt
39
40
40 $ hg diff -r 2:2
41 $ hg diff -r 2:2
42 $ hg diff -r 2:.
43 $ hg diff -r 2:
44 $ hg diff -r :0
45 $ hg diff -r '2:first(2:2)'
46 $ hg diff -r 'first(2:2)' --nodates
47 diff -r bf5ff72eb7e0 file.txt
48 --- a/file.txt
49 +++ b/file.txt
50 @@ -1,1 +1,1 @@
51 -third
52 +wdir
53 $ hg diff -r 2::2 --nodates
54 diff -r bf5ff72eb7e0 file.txt
55 --- a/file.txt
56 +++ b/file.txt
57 @@ -1,1 +1,1 @@
58 -third
59 +wdir
41 $ hg diff -r "2 and 1"
60 $ hg diff -r "2 and 1"
42 abort: empty revision range
61 abort: empty revision range
43 [255]
62 [255]
44
63
45 $ cd ..
64 $ cd ..
46
65
66 $ hg clone -qr0 a dumbspec-rev0
67 $ cd dumbspec-rev0
68 $ echo "wdir" > file.txt
69
70 $ hg diff -r :
71 $ hg diff -r 'first(:)' --nodates
72 diff -r 4bb65dda5db4 file.txt
73 --- a/file.txt
74 +++ b/file.txt
75 @@ -1,1 +1,1 @@
76 -first
77 +wdir
78
79 $ cd ..
80
47 Testing diff --change when merge:
81 Testing diff --change when merge:
48
82
49 $ cd a
83 $ cd a
@@ -1515,10 +1515,16 b' test usage in revpair (with "+")'
1515 (single rev)
1515 (single rev)
1516
1516
1517 $ hg diff -r 'tip^' -r 'tip^'
1517 $ hg diff -r 'tip^' -r 'tip^'
1518 $ hg diff -r 'tip^::tip^ or tip^'
1518 $ hg diff -r 'tip^:tip^'
1519
1519
1520 (single rev that does not looks like a range)
1520 (single rev that does not looks like a range)
1521
1521
1522 $ hg diff -r 'tip^::tip^ or tip^'
1523 diff -r d5d0dcbdc4d9 .hgtags
1524 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1525 +++ b/.hgtags * (glob)
1526 @@ -0,0 +1,1 @@
1527 +e0cc66ef77e8b6f711815af4e001a6594fde3ba5 1.0
1522 $ hg diff -r 'tip^ or tip^'
1528 $ hg diff -r 'tip^ or tip^'
1523 diff -r d5d0dcbdc4d9 .hgtags
1529 diff -r d5d0dcbdc4d9 .hgtags
1524 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1530 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
General Comments 0
You need to be logged in to leave comments. Login now