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 |
|
|
|
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