Show More
@@ -407,15 +407,13 class cg1unpacker(object): | |||
|
407 | 407 | repo.invalidatevolatilesets() |
|
408 | 408 | |
|
409 | 409 | if changesets > 0: |
|
410 | p = lambda: tr.writepending() and repo.root or "" | |
|
411 | 410 | if 'node' not in tr.hookargs: |
|
412 | 411 | tr.hookargs['node'] = hex(cl.node(clstart)) |
|
413 | 412 | hookargs = dict(tr.hookargs) |
|
414 | 413 | else: |
|
415 | 414 | hookargs = dict(tr.hookargs) |
|
416 | 415 | hookargs['node'] = hex(cl.node(clstart)) |
|
417 |
repo.hook('pretxnchangegroup', throw=True, |
|
|
418 | **hookargs) | |
|
416 | repo.hook('pretxnchangegroup', throw=True, **hookargs) | |
|
419 | 417 | |
|
420 | 418 | added = [cl.node(r) for r in xrange(clstart, clend)] |
|
421 | 419 | publishing = repo.publishing() |
@@ -118,6 +118,13 def _exthook(ui, repo, name, cmd, args, | |||
|
118 | 118 | |
|
119 | 119 | starttime = time.time() |
|
120 | 120 | env = {} |
|
121 | ||
|
122 | # make in-memory changes visible to external process | |
|
123 | tr = repo.currenttransaction() | |
|
124 | repo.dirstate.write(tr) | |
|
125 | if tr and tr.writepending(): | |
|
126 | env['HG_PENDING'] = repo.root | |
|
127 | ||
|
121 | 128 | for k, v in args.iteritems(): |
|
122 | 129 | if callable(v): |
|
123 | 130 | v = v() |
@@ -994,8 +994,7 class localrepository(object): | |||
|
994 | 994 | reporef = weakref.ref(self) |
|
995 | 995 | def validate(tr): |
|
996 | 996 | """will run pre-closing hooks""" |
|
997 | pending = lambda: tr.writepending() and self.root or "" | |
|
998 | reporef().hook('pretxnclose', throw=True, pending=pending, | |
|
997 | reporef().hook('pretxnclose', throw=True, | |
|
999 | 998 | txnname=desc, **tr.hookargs) |
|
1000 | 999 | def releasefn(tr, success): |
|
1001 | 1000 | repo = reporef() |
@@ -1682,10 +1681,9 class localrepository(object): | |||
|
1682 | 1681 | n = self.changelog.add(mn, files, ctx.description(), |
|
1683 | 1682 | trp, p1.node(), p2.node(), |
|
1684 | 1683 | user, ctx.date(), ctx.extra().copy()) |
|
1685 | p = lambda: tr.writepending() and self.root or "" | |
|
1686 | 1684 | xp1, xp2 = p1.hex(), p2 and p2.hex() or '' |
|
1687 | 1685 | self.hook('pretxncommit', throw=True, node=hex(n), parent1=xp1, |
|
1688 |
parent2=xp2 |
|
|
1686 | parent2=xp2) | |
|
1689 | 1687 | # set the new commit is proper phase |
|
1690 | 1688 | targetphase = subrepo.newcommitphase(self.ui, ctx) |
|
1691 | 1689 | if targetphase: |
@@ -1865,8 +1863,6 class localrepository(object): | |||
|
1865 | 1863 | hookargs = {} |
|
1866 | 1864 | if tr is not None: |
|
1867 | 1865 | hookargs.update(tr.hookargs) |
|
1868 | pending = lambda: tr.writepending() and self.root or "" | |
|
1869 | hookargs['pending'] = pending | |
|
1870 | 1866 | hookargs['namespace'] = namespace |
|
1871 | 1867 | hookargs['key'] = key |
|
1872 | 1868 | hookargs['old'] = old |
@@ -259,6 +259,60 check line 1 is back | |||
|
259 | 259 | line 2 |
|
260 | 260 | line 3 |
|
261 | 261 | |
|
262 | Test visibility of in-memory dirstate changes outside transaction to | |
|
263 | external hook process | |
|
264 | ||
|
265 | $ cat > $TESTTMP/checkvisibility.sh <<EOF | |
|
266 | > echo "==== \$1:" | |
|
267 | > hg parents --template "{rev}:{node|short}\n" | |
|
268 | > echo "====" | |
|
269 | > EOF | |
|
270 | ||
|
271 | "hg backout --merge REV1" at REV2 below implies steps below: | |
|
272 | ||
|
273 | (1) update to REV1 (REV2 => REV1) | |
|
274 | (2) revert by REV1^1 | |
|
275 | (3) commit backnig out revision (REV3) | |
|
276 | (4) update to REV2 (REV3 => REV2) | |
|
277 | (5) merge with REV3 (REV2 => REV2, REV3) | |
|
278 | ||
|
279 | == test visibility to external preupdate hook | |
|
280 | ||
|
281 | $ hg update -q -C 2 | |
|
282 | $ hg --config extensions.strip= strip 3 | |
|
283 | saved backup bundle to * (glob) | |
|
284 | ||
|
285 | $ cat >> .hg/hgrc <<EOF | |
|
286 | > [hooks] | |
|
287 | > preupdate.visibility = sh $TESTTMP/checkvisibility.sh preupdate | |
|
288 | > EOF | |
|
289 | ||
|
290 | ("-m" is needed to avoid writing dirstte changes out at other than | |
|
291 | invocation of the hook to be examined) | |
|
292 | ||
|
293 | $ hg backout --merge -d '3 0' 1 --tool=true -m 'fixed comment' | |
|
294 | ==== preupdate: | |
|
295 | 2:6ea3f2a197a2 | |
|
296 | ==== | |
|
297 | reverting a | |
|
298 | created new head | |
|
299 | changeset 3:d92a3f57f067 backs out changeset 1:5a50a024c182 | |
|
300 | ==== preupdate: | |
|
301 | 3:d92a3f57f067 | |
|
302 | ==== | |
|
303 | merging with changeset 3:d92a3f57f067 | |
|
304 | ==== preupdate: | |
|
305 | 2:6ea3f2a197a2 | |
|
306 | ==== | |
|
307 | merging a | |
|
308 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved | |
|
309 | (branch merge, don't forget to commit) | |
|
310 | ||
|
311 | $ cat >> .hg/hgrc <<EOF | |
|
312 | > [hooks] | |
|
313 | > preupdate.visibility = | |
|
314 | > EOF | |
|
315 | ||
|
262 | 316 | $ cd .. |
|
263 | 317 | |
|
264 | 318 | backout should not back out subsequent changesets |
@@ -533,6 +533,110 external process | |||
|
533 | 533 | $ hg --cwd b revert --no-backup a |
|
534 | 534 | $ rm -f b/foo |
|
535 | 535 | |
|
536 | == test visibility to precommit external hook | |
|
537 | ||
|
538 | $ cat >> b/.hg/hgrc <<EOF | |
|
539 | > [hooks] | |
|
540 | > precommit.visibility = sh $TESTTMP/checkvisibility.sh | |
|
541 | > EOF | |
|
542 | ||
|
543 | $ (cd b && sh "$TESTTMP/checkvisibility.sh") | |
|
544 | ==== | |
|
545 | VISIBLE 0:80971e65b431 | |
|
546 | ACTUAL 0:80971e65b431 | |
|
547 | ==== | |
|
548 | ||
|
549 | $ hg --cwd b import ../patch1 ../patch2 ../patch3 | |
|
550 | applying ../patch1 | |
|
551 | ==== | |
|
552 | VISIBLE 0:80971e65b431 | |
|
553 | M a | |
|
554 | ACTUAL 0:80971e65b431 | |
|
555 | M a | |
|
556 | ==== | |
|
557 | applying ../patch2 | |
|
558 | ==== | |
|
559 | VISIBLE 1:1d4bd90af0e4 | |
|
560 | M a | |
|
561 | ACTUAL 0:80971e65b431 | |
|
562 | M a | |
|
563 | ==== | |
|
564 | applying ../patch3 | |
|
565 | ==== | |
|
566 | VISIBLE 2:6d019af21222 | |
|
567 | A foo | |
|
568 | ACTUAL 0:80971e65b431 | |
|
569 | M a | |
|
570 | ==== | |
|
571 | ||
|
572 | $ hg --cwd b rollback -q | |
|
573 | $ (cd b && sh "$TESTTMP/checkvisibility.sh") | |
|
574 | ==== | |
|
575 | VISIBLE 0:80971e65b431 | |
|
576 | M a | |
|
577 | ACTUAL 0:80971e65b431 | |
|
578 | M a | |
|
579 | ==== | |
|
580 | $ hg --cwd b revert --no-backup a | |
|
581 | $ rm -f b/foo | |
|
582 | ||
|
583 | $ cat >> b/.hg/hgrc <<EOF | |
|
584 | > [hooks] | |
|
585 | > precommit.visibility = | |
|
586 | > EOF | |
|
587 | ||
|
588 | == test visibility to pretxncommit external hook | |
|
589 | ||
|
590 | $ cat >> b/.hg/hgrc <<EOF | |
|
591 | > [hooks] | |
|
592 | > pretxncommit.visibility = sh $TESTTMP/checkvisibility.sh | |
|
593 | > EOF | |
|
594 | ||
|
595 | $ (cd b && sh "$TESTTMP/checkvisibility.sh") | |
|
596 | ==== | |
|
597 | VISIBLE 0:80971e65b431 | |
|
598 | ACTUAL 0:80971e65b431 | |
|
599 | ==== | |
|
600 | ||
|
601 | $ hg --cwd b import ../patch1 ../patch2 ../patch3 | |
|
602 | applying ../patch1 | |
|
603 | ==== | |
|
604 | VISIBLE 0:80971e65b431 | |
|
605 | M a | |
|
606 | ACTUAL 0:80971e65b431 | |
|
607 | M a | |
|
608 | ==== | |
|
609 | applying ../patch2 | |
|
610 | ==== | |
|
611 | VISIBLE 1:1d4bd90af0e4 | |
|
612 | M a | |
|
613 | ACTUAL 0:80971e65b431 | |
|
614 | M a | |
|
615 | ==== | |
|
616 | applying ../patch3 | |
|
617 | ==== | |
|
618 | VISIBLE 2:6d019af21222 | |
|
619 | A foo | |
|
620 | ACTUAL 0:80971e65b431 | |
|
621 | M a | |
|
622 | ==== | |
|
623 | ||
|
624 | $ hg --cwd b rollback -q | |
|
625 | $ (cd b && sh "$TESTTMP/checkvisibility.sh") | |
|
626 | ==== | |
|
627 | VISIBLE 0:80971e65b431 | |
|
628 | M a | |
|
629 | ACTUAL 0:80971e65b431 | |
|
630 | M a | |
|
631 | ==== | |
|
632 | $ hg --cwd b revert --no-backup a | |
|
633 | $ rm -f b/foo | |
|
634 | ||
|
635 | $ cat >> b/.hg/hgrc <<EOF | |
|
636 | > [hooks] | |
|
637 | > pretxncommit.visibility = | |
|
638 | > EOF | |
|
639 | ||
|
536 | 640 | $ rm -r b |
|
537 | 641 | |
|
538 | 642 |
@@ -242,3 +242,85 dropping status of "file2") | |||
|
242 | 242 | ==== |
|
243 | 243 | 0:25e397dabed2 |
|
244 | 244 | ==== |
|
245 | ||
|
246 | == test visibility to precommit external hook | |
|
247 | ||
|
248 | $ hg update -C -q | |
|
249 | $ rm -f file2 | |
|
250 | $ hg qpush -q second-patch --config hooks.pretxncommit.unexpectedabort= | |
|
251 | now at: second-patch | |
|
252 | $ echo bbbb >> file2 | |
|
253 | ||
|
254 | $ cat >> .hg/hgrc <<EOF | |
|
255 | > [hooks] | |
|
256 | > precommit.checkvisibility = sh "$TESTTMP/checkvisibility.sh" | |
|
257 | > EOF | |
|
258 | ||
|
259 | $ sh "$TESTTMP/checkvisibility.sh" | |
|
260 | ==== | |
|
261 | 1:e30108269082 | |
|
262 | M file2 | |
|
263 | ==== | |
|
264 | ||
|
265 | $ hg qrefresh | |
|
266 | ==== | |
|
267 | 0:25e397dabed2 | |
|
268 | A file2 | |
|
269 | ==== | |
|
270 | transaction abort! | |
|
271 | rollback completed | |
|
272 | refresh interrupted while patch was popped! (revert --all, qpush to recover) | |
|
273 | abort: pretxncommit.unexpectedabort hook exited with status 1 | |
|
274 | [255] | |
|
275 | ||
|
276 | $ sh "$TESTTMP/checkvisibility.sh" | |
|
277 | ==== | |
|
278 | 0:25e397dabed2 | |
|
279 | ==== | |
|
280 | ||
|
281 | $ cat >> .hg/hgrc <<EOF | |
|
282 | > [hooks] | |
|
283 | > precommit.checkvisibility = | |
|
284 | > EOF | |
|
285 | ||
|
286 | == test visibility to pretxncommit external hook | |
|
287 | ||
|
288 | $ hg update -C -q | |
|
289 | $ rm -f file2 | |
|
290 | $ hg qpush -q second-patch --config hooks.pretxncommit.unexpectedabort= | |
|
291 | now at: second-patch | |
|
292 | $ echo bbbb >> file2 | |
|
293 | ||
|
294 | $ cat >> .hg/hgrc <<EOF | |
|
295 | > [hooks] | |
|
296 | > pretxncommit.checkvisibility = sh "$TESTTMP/checkvisibility.sh" | |
|
297 | > # make checkvisibility run before unexpectedabort | |
|
298 | > priority.pretxncommit.checkvisibility = 10 | |
|
299 | > EOF | |
|
300 | ||
|
301 | $ sh "$TESTTMP/checkvisibility.sh" | |
|
302 | ==== | |
|
303 | 1:e30108269082 | |
|
304 | M file2 | |
|
305 | ==== | |
|
306 | ||
|
307 | $ hg qrefresh | |
|
308 | ==== | |
|
309 | 0:25e397dabed2 | |
|
310 | A file2 | |
|
311 | ==== | |
|
312 | transaction abort! | |
|
313 | rollback completed | |
|
314 | refresh interrupted while patch was popped! (revert --all, qpush to recover) | |
|
315 | abort: pretxncommit.unexpectedabort hook exited with status 1 | |
|
316 | [255] | |
|
317 | ||
|
318 | $ sh "$TESTTMP/checkvisibility.sh" | |
|
319 | ==== | |
|
320 | 0:25e397dabed2 | |
|
321 | ==== | |
|
322 | ||
|
323 | $ cat >> .hg/hgrc <<EOF | |
|
324 | > [hooks] | |
|
325 | > pretxncommit.checkvisibility = | |
|
326 | > EOF |
@@ -1011,6 +1011,84 with general delta | |||
|
1011 | 1011 | 7e30d8ac6f23cfc84330fd7e698730374615d21a |
|
1012 | 1012 | $ cd .. |
|
1013 | 1013 | |
|
1014 | Test visibility of in-memory changes inside transaction to external hook | |
|
1015 | ------------------------------------------------------------------------ | |
|
1016 | ||
|
1017 | $ cd repo | |
|
1018 | ||
|
1019 | $ echo xxxx >> x | |
|
1020 | $ hg commit -m "#5: changes to invoke rebase" | |
|
1021 | ||
|
1022 | $ cat > $TESTTMP/checkvisibility.sh <<EOF | |
|
1023 | > echo "==== \$1:" | |
|
1024 | > hg parents --template "VISIBLE {rev}:{node|short}\n" | |
|
1025 | > # test that pending changes are hidden | |
|
1026 | > unset HG_PENDING | |
|
1027 | > hg parents --template "ACTUAL {rev}:{node|short}\n" | |
|
1028 | > echo "====" | |
|
1029 | > EOF | |
|
1030 | ||
|
1031 | $ cat >> .hg/hgrc <<EOF | |
|
1032 | > [defaults] | |
|
1033 | > # to fix hash id of temporary revisions | |
|
1034 | > unshelve = --date '0 0' | |
|
1035 | > EOF | |
|
1036 | ||
|
1037 | "hg unshelve" at REV5 implies steps below: | |
|
1038 | ||
|
1039 | (1) commit changes in the working directory (REV6) | |
|
1040 | (2) unbundle shelved revision (REV7) | |
|
1041 | (3) rebase: merge REV7 into REV6 (REV6 => REV6, REV7) | |
|
1042 | (4) rebase: commit merged revision (REV8) | |
|
1043 | (5) rebase: update to REV6 (REV8 => REV6) | |
|
1044 | (6) update to REV5 (REV6 => REV5) | |
|
1045 | (7) abort transaction | |
|
1046 | ||
|
1047 | == test visibility to external preupdate hook | |
|
1048 | ||
|
1049 | $ cat >> .hg/hgrc <<EOF | |
|
1050 | > [hooks] | |
|
1051 | > preupdate.visibility = sh $TESTTMP/checkvisibility.sh preupdate | |
|
1052 | > EOF | |
|
1053 | ||
|
1054 | $ echo nnnn >> n | |
|
1055 | ||
|
1056 | $ sh $TESTTMP/checkvisibility.sh before-unshelving | |
|
1057 | ==== before-unshelving: | |
|
1058 | VISIBLE 5:703117a2acfb | |
|
1059 | ACTUAL 5:703117a2acfb | |
|
1060 | ==== | |
|
1061 | ||
|
1062 | $ hg unshelve --keep default | |
|
1063 | temporarily committing pending changes (restore with 'hg unshelve --abort') | |
|
1064 | rebasing shelved changes | |
|
1065 | rebasing 7:fcbb97608399 "changes to 'create conflict'" (tip) | |
|
1066 | ==== preupdate: | |
|
1067 | VISIBLE 6:66b86db80ee4 | |
|
1068 | ACTUAL 5:703117a2acfb | |
|
1069 | ==== | |
|
1070 | ==== preupdate: | |
|
1071 | VISIBLE 8:cb2a4e59c2d5 | |
|
1072 | ACTUAL 5:703117a2acfb | |
|
1073 | ==== | |
|
1074 | ==== preupdate: | |
|
1075 | VISIBLE 6:66b86db80ee4 | |
|
1076 | ACTUAL 5:703117a2acfb | |
|
1077 | ==== | |
|
1078 | ||
|
1079 | $ cat >> .hg/hgrc <<EOF | |
|
1080 | > [hooks] | |
|
1081 | > preupdate.visibility = | |
|
1082 | > EOF | |
|
1083 | ||
|
1084 | $ sh $TESTTMP/checkvisibility.sh after-unshelving | |
|
1085 | ==== after-unshelving: | |
|
1086 | VISIBLE 5:703117a2acfb | |
|
1087 | ACTUAL 5:703117a2acfb | |
|
1088 | ==== | |
|
1089 | ||
|
1090 | $ cd .. | |
|
1091 | ||
|
1014 | 1092 | test Abort unshelve always gets user out of the unshelved state |
|
1015 | 1093 | --------------------------------------------------------------- |
|
1016 | 1094 | $ hg init salvage |
General Comments 0
You need to be logged in to leave comments.
Login now