##// END OF EJS Templates
update: make --check abort with dirty subrepos...
Patrick Mezard -
r16491:bfe89d65 stable
parent child Browse files
Show More
@@ -5660,9 +5660,8 b' def update(ui, repo, node=None, rev=None'
5660 rev = cmdutil.finddate(ui, repo, date)
5660 rev = cmdutil.finddate(ui, repo, date)
5661
5661
5662 if check:
5662 if check:
5663 # we could use dirty() but we can ignore merge and branch trivia
5664 c = repo[None]
5663 c = repo[None]
5665 if c.modified() or c.added() or c.removed():
5664 if c.dirty(merge=False, branch=False):
5666 raise util.Abort(_("uncommitted local changes"))
5665 raise util.Abort(_("uncommitted local changes"))
5667 if rev is None:
5666 if rev is None:
5668 rev = repo[repo[None].branch()].rev()
5667 rev = repo[repo[None].branch()].rev()
@@ -940,14 +940,15 b' class workingctx(changectx):'
940 return sorted(self._repo.dirstate.walk(match, self.substate.keys(),
940 return sorted(self._repo.dirstate.walk(match, self.substate.keys(),
941 True, False))
941 True, False))
942
942
943 def dirty(self, missing=False):
943 def dirty(self, missing=False, merge=True, branch=True):
944 "check whether a working directory is modified"
944 "check whether a working directory is modified"
945 # check subrepos first
945 # check subrepos first
946 for s in self.substate:
946 for s in self.substate:
947 if self.sub(s).dirty():
947 if self.sub(s).dirty():
948 return True
948 return True
949 # check current working dir
949 # check current working dir
950 return (self.p2() or self.branch() != self.p1().branch() or
950 return ((merge and self.p2()) or
951 (branch and self.branch() != self.p1().branch()) or
951 self.modified() or self.added() or self.removed() or
952 self.modified() or self.added() or self.removed() or
952 (missing and self.deleted()))
953 (missing and self.deleted()))
953
954
@@ -15,6 +15,11 b''
15 $ hg init
15 $ hg init
16 $ echo foo > foo
16 $ echo foo > foo
17 $ echo zero > a
17 $ echo zero > a
18 $ hg init sub
19 $ echo suba > sub/suba
20 $ hg --cwd sub ci -Am addsuba
21 adding suba
22 $ echo 'sub = sub' > .hgsub
18 $ hg ci -qAm0
23 $ hg ci -qAm0
19 $ echo one > a ; hg ci -m1
24 $ echo one > a ; hg ci -m1
20 $ echo two > a ; hg ci -m2
25 $ echo two > a ; hg ci -m2
@@ -29,44 +34,46 b' Initial repo state:'
29
34
30 $ hg --config 'extensions.graphlog=' \
35 $ hg --config 'extensions.graphlog=' \
31 > glog --template '{rev}:{node|short} {parents} {branches}\n'
36 > glog --template '{rev}:{node|short} {parents} {branches}\n'
32 @ 5:e1bb631146ca b1
37 @ 5:ff252e8273df b1
33 |
38 |
34 o 4:a4fdb3b883c4 0:b608b9236435 b1
39 o 4:d047485b3896 0:60829823a42a b1
35 |
40 |
36 | o 3:4b57d2520816 1:44592833ba9f
41 | o 3:6efa171f091b 1:0786582aa4b1
37 | |
42 | |
38 | | o 2:063f31070f65
43 | | o 2:bd10386d478c
39 | |/
44 | |/
40 | o 1:44592833ba9f
45 | o 1:0786582aa4b1
41 |/
46 |/
42 o 0:b608b9236435
47 o 0:60829823a42a
43
48
44
49
45 Test helper functions:
50 Test helper functions:
46
51
47 $ revtest () {
52 $ revtest () {
48 > msg=$1
53 > msg=$1
49 > dirtyflag=$2 # 'clean' or 'dirty'
54 > dirtyflag=$2 # 'clean', 'dirty' or 'dirtysub'
50 > startrev=$3
55 > startrev=$3
51 > targetrev=$4
56 > targetrev=$4
52 > opt=$5
57 > opt=$5
53 > hg up -qC $startrev
58 > hg up -qC $startrev
54 > test $dirtyflag = dirty && echo dirty > foo
59 > test $dirtyflag = dirty && echo dirty > foo
60 > test $dirtyflag = dirtysub && echo dirty > sub/suba
55 > hg up $opt $targetrev
61 > hg up $opt $targetrev
56 > hg parent --template 'parent={rev}\n'
62 > hg parent --template 'parent={rev}\n'
57 > hg stat
63 > hg stat -S
58 > }
64 > }
59
65
60 $ norevtest () {
66 $ norevtest () {
61 > msg=$1
67 > msg=$1
62 > dirtyflag=$2 # 'clean' or 'dirty'
68 > dirtyflag=$2 # 'clean', 'dirty' or 'dirtysub'
63 > startrev=$3
69 > startrev=$3
64 > opt=$4
70 > opt=$4
65 > hg up -qC $startrev
71 > hg up -qC $startrev
66 > test $dirtyflag = dirty && echo dirty > foo
72 > test $dirtyflag = dirty && echo dirty > foo
73 > test $dirtyflag = dirtysub && echo dirty > sub/suba
67 > hg up $opt
74 > hg up $opt
68 > hg parent --template 'parent={rev}\n'
75 > hg parent --template 'parent={rev}\n'
69 > hg stat
76 > hg stat -S
70 > }
77 > }
71
78
72 Test cases are documented in a table in the update function of merge.py.
79 Test cases are documented in a table in the update function of merge.py.
@@ -99,16 +106,30 b' Cases are run as shown in that table, ro'
99 parent=2
106 parent=2
100 M foo
107 M foo
101
108
109 $ revtest 'none dirtysub linear' dirtysub 1 2
110 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
111 parent=2
112 M sub/suba
113
102 $ revtest 'none dirty same' dirty 2 3
114 $ revtest 'none dirty same' dirty 2 3
103 abort: crosses branches (merge branches or use --clean to discard changes)
115 abort: crosses branches (merge branches or use --clean to discard changes)
104 parent=2
116 parent=2
105 M foo
117 M foo
106
118
119 $ revtest 'none dirtysub same' dirtysub 2 3
120 abort: crosses branches (merge branches or use --clean to discard changes)
121 parent=2
122 M sub/suba
123
107 $ revtest 'none dirty cross' dirty 3 4
124 $ revtest 'none dirty cross' dirty 3 4
108 abort: crosses branches (merge branches or use --clean to discard changes)
125 abort: crosses branches (merge branches or use --clean to discard changes)
109 parent=3
126 parent=3
110 M foo
127 M foo
111
128
129 $ revtest 'none dirtysub cross' dirtysub 3 4
130 abort: crosses branches (merge branches or use --clean to discard changes)
131 parent=3
132 M sub/suba
112
133
113 $ revtest '-C dirty linear' dirty 1 2 -C
134 $ revtest '-C dirty linear' dirty 1 2 -C
114 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
135 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
@@ -119,6 +140,11 b' Cases are run as shown in that table, ro'
119 parent=1
140 parent=1
120 M foo
141 M foo
121
142
143 $ revtest '-c dirtysub linear' dirtysub 1 2 -c
144 abort: uncommitted local changes
145 parent=1
146 M sub/suba
147
122 $ norevtest '-c clean same' clean 2 -c
148 $ norevtest '-c clean same' clean 2 -c
123 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
149 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
124 parent=3
150 parent=3
General Comments 0
You need to be logged in to leave comments. Login now