tests/test-convert-authormap.t
author Arun Kulshreshtha <akulshreshtha@janestreet.com>
Tue, 30 Aug 2022 15:29:55 -0400
changeset 49491 c6a1beba27e9
parent 35393 4441705b7111
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:
7961
52e442fe43f4 convert: Add testcase for convert authormap.
Marti Raudsepp <marti@juffo.org>
parents:
diff changeset
     1
12511
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
     2
  $ cat >> $HGRCPATH <<EOF
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
     3
  > [extensions]
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
     4
  > convert=
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
     5
  > EOF
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
     6
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
     7
Prepare orig repo
7961
52e442fe43f4 convert: Add testcase for convert authormap.
Marti Raudsepp <marti@juffo.org>
parents:
diff changeset
     8
12511
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
     9
  $ hg init orig
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    10
  $ cd orig
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    11
  $ echo foo > foo
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    12
  $ HGUSER='user name' hg ci -qAm 'foo'
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    13
  $ cd ..
7961
52e442fe43f4 convert: Add testcase for convert authormap.
Marti Raudsepp <marti@juffo.org>
parents:
diff changeset
    14
12511
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    15
Explicit --authors
7962
62154415821f convert: fix authormap handling of lines without '='
Marti Raudsepp <marti@juffo.org>
parents: 7961
diff changeset
    16
12511
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    17
  $ cat > authormap.txt <<EOF
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    18
  > user name = Long User Name
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    19
  > 
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    20
  > # comment
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    21
  > this line is ignored
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    22
  > EOF
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    23
  $ hg convert --authors authormap.txt orig new
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    24
  initializing destination new repository
16925
eaf6a6d7f015 convert: lowercase status and abort messages
Martin Geisler <mg@aragost.com>
parents: 15447
diff changeset
    25
  ignoring bad line in author map file authormap.txt: this line is ignored
12511
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    26
  scanning source...
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    27
  sorting...
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    28
  converting...
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    29
  0 foo
35393
4441705b7111 tests: remove (glob) annotations that were only for '\' matches
Matt Harbison <matt_harbison@yahoo.com>
parents: 16948
diff changeset
    30
  writing author map file $TESTTMP/new/.hg/authormap
12511
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    31
  $ cat new/.hg/authormap
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    32
  user name=Long User Name
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    33
  $ hg -Rnew log
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    34
  changeset:   0:d89716e88087
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    35
  tag:         tip
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    36
  user:        Long User Name
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    37
  date:        Thu Jan 01 00:00:00 1970 +0000
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    38
  summary:     foo
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    39
  
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    40
  $ rm -rf new
7961
52e442fe43f4 convert: Add testcase for convert authormap.
Marti Raudsepp <marti@juffo.org>
parents:
diff changeset
    41
12511
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    42
Implicit .hg/authormap
7961
52e442fe43f4 convert: Add testcase for convert authormap.
Marti Raudsepp <marti@juffo.org>
parents:
diff changeset
    43
12511
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    44
  $ hg init new
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    45
  $ mv authormap.txt new/.hg/authormap
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    46
  $ hg convert orig new
35393
4441705b7111 tests: remove (glob) annotations that were only for '\' matches
Matt Harbison <matt_harbison@yahoo.com>
parents: 16948
diff changeset
    47
  ignoring bad line in author map file $TESTTMP/new/.hg/authormap: this line is ignored
12511
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    48
  scanning source...
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    49
  sorting...
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    50
  converting...
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    51
  0 foo
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    52
  $ hg -Rnew log
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    53
  changeset:   0:d89716e88087
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    54
  tag:         tip
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    55
  user:        Long User Name
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    56
  date:        Thu Jan 01 00:00:00 1970 +0000
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    57
  summary:     foo
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
    58