##// END OF EJS Templates
mq: allow to qpop/push with a dirty working copy (issue2780)...
Idan Kamara -
r14256:d04ba50e default
parent child Browse files
Show More
@@ -844,13 +844,16 b' class queue(object):'
844 844 inclsubs.append(s)
845 845 return inclsubs
846 846
847 def localchangesfound(self, refresh=True):
848 if refresh:
849 raise util.Abort(_("local changes found, refresh first"))
850 else:
851 raise util.Abort(_("local changes found"))
852
847 853 def check_localchanges(self, repo, force=False, refresh=True):
848 854 m, a, r, d = repo.status()[:4]
849 855 if (m or a or r or d) and not force:
850 if refresh:
851 raise util.Abort(_("local changes found, refresh first"))
852 else:
853 raise util.Abort(_("local changes found"))
856 self.localchangesfound(refresh)
854 857 return m, a, r, d
855 858
856 859 _reserved = ('series', 'status', 'guards', '.', '..')
@@ -1127,8 +1130,6 b' class queue(object):'
1127 1130 if start == len(self.series):
1128 1131 self.ui.warn(_('patch series already fully applied\n'))
1129 1132 return 1
1130 if not force:
1131 self.check_localchanges(repo, refresh=self.applied)
1132 1133
1133 1134 if exact:
1134 1135 if move:
@@ -1167,6 +1168,19 b' class queue(object):'
1167 1168 end = self.series.index(patch, start) + 1
1168 1169
1169 1170 s = self.series[start:end]
1171
1172 if not force:
1173 mm, aa, rr, dd = repo.status()[:4]
1174 wcfiles = set(mm + aa + rr + dd)
1175 if wcfiles:
1176 for patchname in s:
1177 pf = os.path.join(self.path, patchname)
1178 patchfiles = patchmod.changedfiles(pf, strip=1)
1179 if not wcfiles.isdisjoint(patchfiles):
1180 self.localchangesfound(self.applied)
1181 elif mergeq:
1182 self.check_localchanges(refresh=self.applied)
1183
1170 1184 all_files = set()
1171 1185 try:
1172 1186 if mergeq:
@@ -1247,9 +1261,6 b' class queue(object):'
1247 1261 break
1248 1262 update = needupdate
1249 1263
1250 if not force and update:
1251 self.check_localchanges(repo)
1252
1253 1264 self.applied_dirty = 1
1254 1265 end = len(self.applied)
1255 1266 rev = self.applied[start].node
@@ -1272,6 +1283,12 b' class queue(object):'
1272 1283 qp = self.qparents(repo, rev)
1273 1284 ctx = repo[qp]
1274 1285 m, a, r, d = repo.status(qp, top)[:4]
1286 parentfiles = set(m + a + r + d)
1287 if not force and parentfiles:
1288 mm, aa, rr, dd = repo.status()[:4]
1289 wcfiles = set(mm + aa + rr + dd)
1290 if not wcfiles.isdisjoint(parentfiles):
1291 self.localchangesfound()
1275 1292 if d:
1276 1293 raise util.Abort(_("deletions found between repo revs"))
1277 1294 for f in a:
@@ -163,8 +163,12 b' qpush --exact --force with changes to an'
163 163 $ hg update 1 -q
164 164 $ echo c0 >> f0
165 165 $ hg qpush -e
166 abort: local changes found
167 [255]
166 applying p0
167 now at: p0
168 $ cat f0
169 c0
170 $ hg qpop -aq
171 patch queue now empty
168 172 $ hg qpush -ef
169 173 applying p0
170 174 now at: p0
@@ -178,8 +182,13 b' qpush --exact --force with changes to an'
178 182 $ hg update 1 -q
179 183 $ echo c0 >> f0
180 184 $ hg qpush -e p1
181 abort: local changes found
182 [255]
185 applying p0
186 applying p1
187 now at: p1
188 $ cat f0
189 c0
190 $ hg qpop -aq
191 patch queue now empty
183 192 $ hg qpush -e p1 -f
184 193 applying p0
185 194 applying p1
@@ -1259,6 +1259,47 b' Issue1033: test applying on an empty fil'
1259 1259 now at: changea
1260 1260 $ cd ..
1261 1261
1262 test qpop with local changes, issue2780
1263
1264 $ hg init forcepop
1265 $ cd forcepop
1266 $ echo 1 > 1
1267 $ hg ci -Am 1
1268 adding 1
1269 $ hg qnew foo
1270 $ echo 2 > 2
1271 $ hg add
1272 adding 2
1273
1274 unrelated changes
1275
1276 $ hg qpop
1277 popping foo
1278 patch queue now empty
1279
1280 related changes
1281
1282 $ hg forget 2
1283 $ rm 2
1284 $ hg qpush
1285 applying foo
1286 patch foo is empty
1287 now at: foo
1288 $ echo 2 >> 1
1289 $ hg qrefresh
1290 $ echo 2 >> 1
1291 $ hg qpop
1292 abort: local changes found, refresh first
1293 [255]
1294 $ hg st
1295 M 1
1296
1297 related changes with force
1298 $ hg qpop --force
1299 popping foo
1300 patch queue now empty
1301 $ hg st
1302 $ cd ..
1262 1303
1263 1304 test qpush with --force, issue1087
1264 1305
@@ -1276,16 +1317,9 b' test qpush with --force, issue1087'
1276 1317 $ echo world >> hello.txt
1277 1318
1278 1319
1279 qpush should fail, local changes
1320 apply, should not discard changes with empty patch
1280 1321
1281 1322 $ hg qpush
1282 abort: local changes found
1283 [255]
1284
1285
1286 apply force, should not discard changes with empty patch
1287
1288 $ hg qpush -f
1289 1323 applying empty
1290 1324 patch empty is empty
1291 1325 now at: empty
General Comments 0
You need to be logged in to leave comments. Login now