tests/test-changelog-exec.t
author Arun Kulshreshtha <akulshreshtha@janestreet.com>
Tue, 30 Aug 2022 15:29:55 -0400
changeset 49491 c6a1beba27e9
parent 49252 4141951dacff
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:
22046
7a9cbb315d84 tests: replace exit 80 with #require
Matt Mackall <mpm@selenic.com>
parents: 17132
diff changeset
     1
#require execbit
7a9cbb315d84 tests: replace exit 80 with #require
Matt Mackall <mpm@selenic.com>
parents: 17132
diff changeset
     2
11875
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
     3
b51a8138292a introduced a regression where we would mention in the
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
     4
changelog executable files added by the second parent of a merge. Test
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
     5
that that doesn't happen anymore
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
     6
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
     7
  $ hg init repo
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
     8
  $ cd repo
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
     9
  $ echo foo > foo
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    10
  $ hg ci -qAm 'add foo'
5227
466323968b23 Avoid adding to the changelog executable files added by the second parent.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    11
11875
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    12
  $ echo bar > bar
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    13
  $ chmod +x bar
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    14
  $ hg ci -qAm 'add bar'
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    15
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    16
manifest of p2:
5227
466323968b23 Avoid adding to the changelog executable files added by the second parent.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    17
11875
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    18
  $ hg manifest
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    19
  bar
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    20
  foo
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    21
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    22
  $ hg up -qC 0
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    23
  $ echo >> foo
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    24
  $ hg ci -m 'change foo'
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    25
  created new head
5227
466323968b23 Avoid adding to the changelog executable files added by the second parent.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    26
11875
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    27
manifest of p1:
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    28
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    29
  $ hg manifest
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    30
  foo
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    31
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    32
  $ hg merge
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    33
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    34
  (branch merge, don't forget to commit)
22492
d5261db0011f commit: catch changed exec bit on files from p1 (issue4382)
Matt Mackall <mpm@selenic.com>
parents: 17132
diff changeset
    35
  $ chmod +x foo
11875
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    36
  $ hg ci -m 'merge'
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    37
22492
d5261db0011f commit: catch changed exec bit on files from p1 (issue4382)
Matt Mackall <mpm@selenic.com>
parents: 17132
diff changeset
    38
this should not mention bar but should mention foo:
5227
466323968b23 Avoid adding to the changelog executable files added by the second parent.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    39
11875
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    40
  $ hg tip -v
22492
d5261db0011f commit: catch changed exec bit on files from p1 (issue4382)
Matt Mackall <mpm@selenic.com>
parents: 17132
diff changeset
    41
  changeset:   3:c53d17ff3380
11875
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    42
  tag:         tip
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    43
  parent:      2:ed1b79f46b9a
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    44
  parent:      1:d394a8db219b
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    45
  user:        test
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    46
  date:        Thu Jan 01 00:00:00 1970 +0000
22492
d5261db0011f commit: catch changed exec bit on files from p1 (issue4382)
Matt Mackall <mpm@selenic.com>
parents: 17132
diff changeset
    47
  files:       foo
11875
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    48
  description:
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    49
  merge
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    50
  
88f5b5c058b5 tests: unify test-changelog-exec
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    51
  
5227
466323968b23 Avoid adding to the changelog executable files added by the second parent.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    52
14182
ec5886db9dc6 tests: fix deprecated use of hg debugdata/debugindex
Sune Foldager <cryo@cyanite.org>
parents: 11875
diff changeset
    53
  $ hg debugindex bar
49252
4141951dacff debugindex: rename the parent column to mention nodeid
Pierre-Yves DAVID <pierre-yves.david@octobus.net>
parents: 49251
diff changeset
    54
     rev linkrev       nodeid    p1-nodeid    p2-nodeid
37283
d4e62df1c73d debugcommands: drop offset and length from debugindex by default
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37282
diff changeset
    55
       0       1 b004912a8510 000000000000 000000000000
16913
f2719b387380 tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents: 14182
diff changeset
    56
f2719b387380 tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents: 14182
diff changeset
    57
  $ cd ..