tests/test-confused-revert.t
author Arun Kulshreshtha <akulshreshtha@janestreet.com>
Tue, 30 Aug 2022 15:29:55 -0400
changeset 49491 c6a1beba27e9
parent 45827 8d72e29ad1e0
child 49621 55c6ebd11cb9
permissions -rw-r--r--
bisect: avoid copying ancestor list for non-merge commits During a bisection, hg needs to compute a list of all ancestors for every candidate commit. This is accomplished via a bottom-up traversal of the set of candidates, during which each revision's ancestor list is populated using the ancestor list of its parent(s). Previously, this involved copying the entire list, which could be very long in if the bisection range was large. To help improve this, we can observe that each candidate commit is visited exactly once, at which point its ancestor list is copied into its children's lists and then dropped. In the case of non-merge commits, a commit's ancestor list consists exactly of its parent's list plus itself. This means that we can trivially reuse the parent's existing list for one of its non-merge children, which avoids copying entirely if that commit is the parent's only child. This makes bisections over linear ranges of commits much faster. During some informal testing in the large publicly-available `mozilla-central` repository, this noticeably sped up bisections over large ranges of history: Setup: $ cd mozilla-central $ hg bisect --reset $ hg bisect --good 0 $ hg log -r tip -T '{rev}\n' 628417 Test: $ time hg bisect --bad tip --noupdate Before: real 3m35.927s user 3m35.553s sys 0m0.319s After: real 1m41.142s user 1m40.810s sys 0m0.285s
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12284
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
     1
  $ hg init
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
     2
  $ echo foo > a
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
     3
  $ hg add a
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
     4
  $ hg commit -m "1"
1449
30146be3437c Add test-confused-revert, fix permissions on test-revert
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     5
12284
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
     6
  $ echo bar > b
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
     7
  $ hg add b
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
     8
  $ hg remove a
1449
30146be3437c Add test-confused-revert, fix permissions on test-revert
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     9
12284
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    10
Should show a removed and b added:
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    11
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    12
  $ hg status
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    13
  A b
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    14
  R a
1449
30146be3437c Add test-confused-revert, fix permissions on test-revert
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    15
12284
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    16
  $ hg revert --all
39405
cb70501d8b71 revert: fix the inconsistency of status msgs in --interactive mode
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 28963
diff changeset
    17
  forgetting b
12284
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    18
  undeleting a
1449
30146be3437c Add test-confused-revert, fix permissions on test-revert
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    19
12284
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    20
Should show b unknown and a back to normal:
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    21
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    22
  $ hg status
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    23
  ? b
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    24
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    25
  $ rm b
1449
30146be3437c Add test-confused-revert, fix permissions on test-revert
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    26
12284
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    27
  $ hg co -C 0
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    28
  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    29
  $ echo foo-a > a
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    30
  $ hg commit -m "2a"
1449
30146be3437c Add test-confused-revert, fix permissions on test-revert
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    31
12284
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    32
  $ hg co -C 0
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    33
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    34
  $ echo foo-b > a
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    35
  $ hg commit -m "2b"
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    36
  created new head
1449
30146be3437c Add test-confused-revert, fix permissions on test-revert
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    37
12284
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    38
  $ HGMERGE=true hg merge 1
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    39
  merging a
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    40
  0 files updated, 1 files merged, 0 files removed, 0 files unresolved
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    41
  (branch merge, don't forget to commit)
1449
30146be3437c Add test-confused-revert, fix permissions on test-revert
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    42
12284
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    43
Should show foo-b:
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    44
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    45
  $ cat a
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    46
  foo-b
1449
30146be3437c Add test-confused-revert, fix permissions on test-revert
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    47
12284
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    48
  $ echo bar > b
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    49
  $ hg add b
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    50
  $ rm a
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    51
  $ hg remove a
1449
30146be3437c Add test-confused-revert, fix permissions on test-revert
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    52
12284
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    53
Should show a removed and b added:
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    54
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    55
  $ hg status
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    56
  A b
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    57
  R a
1449
30146be3437c Add test-confused-revert, fix permissions on test-revert
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    58
12284
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    59
Revert should fail:
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    60
13022
3fd4e4e81382 revert: improve merge advice and favor its error over all
timeless <timeless@gmail.com>
parents: 12316
diff changeset
    61
  $ hg revert
14903
a934b9249574 revert: restore check for uncommitted merge (issue2915) (BC)
Matt Mackall <mpm@selenic.com>
parents: 14721
diff changeset
    62
  abort: uncommitted merge with no revision specified
28963
fc1d75e7a98d graft: use single quotes around command hint
timeless <timeless@mozdev.org>
parents: 14903
diff changeset
    63
  (use 'hg update' or see 'hg help revert')
45827
8d72e29ad1e0 errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 39405
diff changeset
    64
  [10]
1449
30146be3437c Add test-confused-revert, fix permissions on test-revert
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    65
12284
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    66
Revert should be ok now:
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    67
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    68
  $ hg revert -r2 --all
39405
cb70501d8b71 revert: fix the inconsistency of status msgs in --interactive mode
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 28963
diff changeset
    69
  forgetting b
12284
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    70
  undeleting a
1449
30146be3437c Add test-confused-revert, fix permissions on test-revert
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    71
12284
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    72
Should show b unknown and a marked modified (merged):
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    73
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    74
  $ hg status
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    75
  M a
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    76
  ? b
2214
6c6c0e5595a2 make test-confused-revert check working dir with two parents.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1933
diff changeset
    77
12284
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    78
Should show foo-b:
1449
30146be3437c Add test-confused-revert, fix permissions on test-revert
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    79
12284
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    80
  $ cat a
f7eb190310ef tests: unify test-confused-revert
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    81
  foo-b
1449
30146be3437c Add test-confused-revert, fix permissions on test-revert
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    82