tests/test-pull-r.t
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
Fri, 29 Mar 2013 22:57:16 +0900
changeset 18993 0fd0612dc855
parent 16913 f2719b387380
child 25425 9263f86b9681
permissions -rw-r--r--
annotate: increase refcount of each revisions correctly (issue3841) Before this patch, refcount (managed in "needed") of parents of each revisions in "visit" is increased, only when parent is not annotated yet (examined by "p not in hist"). But this causes less refcount of the revision like "A" in the tree below ("A" is assumed as the second parent of "C"): A --- B --- C \ / \-----/ Steps of annotation for "C" in this case are shown below: 1. for "C" 1.1 increase refcount of "B" 1.2 increase refcount of "A" (=> 1) 1.3 defer annotation for "C" 2. for "A" 2.1 annotate for "A" (=> put result into "hist[A]") 2.2 clear "pcache[A]" ("pcache[A] = []") 3. for "B" 3.1 not increase refcount of "A", because "A not in hist" is False 3.2 annotate for "B" 3.3 decrease refcount of "A" (=> 0) 3.4 delete "hist[A]", even though "A" is still needed by "C" 3.5 clear "pcache[B]" 4. for "C", again 4.1 not increase refcount of "B", because "B not in hist" is False 4.2 increase refcount of "A" (=> 1) 4.3 defer annotation for "C" 5. for "A", again 5.1 annotate for "A" (=> put result into "hist[A]", again) 5.2 clear "pcache[A]" 6. for "C", once again 6.1 not increase refcount of "B", because "B not in hist" is False 6.2 not increase refcount of "A", because "A not in hist" is False 6.3 annotate for "C" 6.4 decrease refcount of "A", and delete "hist[A]" 6.5 decrease refcount of "B", and delete "hist[B]" 6.6 clear "pcache[C]" At step (5.1), annotation for "A" mis-recognizes that all lines are created at "A", because "pcache[A]" already cleared at step (2.2) prevents from scanning ancestors of "A". So, annotation for "C" or its descendants loses information about "A" or its ancestors. The root cause of this problem is that refcount of "A" is decreased at step (3.3), even though it isn't increased at step (3.1). To increase refcount correctly, this patch increases refcount of each parents of each revisions: - regardless of "p not in hist" or not, and - only once for each revisions in "visit" (by "not pcached") In fact, this problem should occur only on legacy repositories in which a filelog includes the merging between the revision and its ancestor (as the second parent), because: - tree is scanned in depth-first without such merging, revisions in "visit" refer different revisions as parent each other - recent Mercurial doesn't allow such merging changelog and manifest can include such merging someway, but filelogs can't, because "localrepository._filecommit()" converts such merging request to linear history. This patch tests merging cases below: these cases are from filelog of "mercurial/commands.py" in the repository of Mercurial itself. - both parents are same 10 --- 11 --- 12 \_/ filelogrev: changesetid: 10 00ea3613f82c 11 fc4a6e5b5812 12 4f802588cdfb - the second parent is also ancestor of the first one 37 --- 38 --- 39 --- 40 \________/ filelogrev: changesetid: 37 f8d56da6ac8f 38 38919e1c254d 39 d3400605d246 40 f06a4a3b86a7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12279
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
     1
  $ hg init repo
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
     2
  $ cd repo
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
     3
  $ echo foo > foo
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
     4
  $ hg ci -qAm 'add foo'
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
     5
  $ echo >> foo
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
     6
  $ hg ci -m 'change foo'
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
     7
  $ hg up -qC 0
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
     8
  $ echo bar > bar
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
     9
  $ hg ci -qAm 'add bar'
5221
8ede77c2d008 pull -r: pass the revisions as the heads argument of findincoming
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    10
12279
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    11
  $ hg log
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    12
  changeset:   2:effea6de0384
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    13
  tag:         tip
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    14
  parent:      0:bbd179dfa0a7
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    15
  user:        test
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    16
  date:        Thu Jan 01 00:00:00 1970 +0000
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    17
  summary:     add bar
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    18
  
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    19
  changeset:   1:ed1b79f46b9a
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    20
  user:        test
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    21
  date:        Thu Jan 01 00:00:00 1970 +0000
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    22
  summary:     change foo
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    23
  
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    24
  changeset:   0:bbd179dfa0a7
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    25
  user:        test
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    26
  date:        Thu Jan 01 00:00:00 1970 +0000
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    27
  summary:     add foo
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    28
  
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    29
  $ cd ..
14036
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    30
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    31
don't show "(+1 heads)" message when pulling closed head
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    32
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    33
  $ hg clone -q repo repo2
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    34
  $ hg clone -q repo2 repo3
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    35
  $ cd repo2
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    36
  $ hg up -q 0
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    37
  $ echo hello >> foo
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    38
  $ hg ci -mx1
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    39
  created new head
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    40
  $ hg ci -mx2 --close-branch
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    41
  $ cd ../repo3
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    42
  $ hg heads -q --closed
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    43
  2:effea6de0384
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    44
  1:ed1b79f46b9a
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    45
  $ hg pull
15447
9910f60a37ee tests: make (glob) on windows accept \ instead of /
Mads Kiilerich <mads@kiilerich.com>
parents: 14162
diff changeset
    46
  pulling from $TESTTMP/repo2 (glob)
14036
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    47
  searching for changes
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    48
  adding changesets
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    49
  adding manifests
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    50
  adding file changes
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    51
  added 2 changesets with 1 changes to 1 files
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    52
  (run 'hg update' to get a working copy)
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    53
  $ hg heads -q --closed
14162
301725c3df9a localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14036
diff changeset
    54
  4:00cfe9073916
14036
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    55
  2:effea6de0384
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    56
  1:ed1b79f46b9a
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    57
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    58
  $ cd ..
90d997a812dc changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13446
diff changeset
    59
12279
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    60
  $ hg init copy
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    61
  $ cd copy
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    62
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    63
Pull a missing revision:
5221
8ede77c2d008 pull -r: pass the revisions as the heads argument of findincoming
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    64
12279
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    65
  $ hg pull -qr missing ../repo
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    66
  abort: unknown revision 'missing'!
12316
4134686b83e1 tests: add exit codes to unified tests
Matt Mackall <mpm@selenic.com>
parents: 12279
diff changeset
    67
  [255]
12279
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    68
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    69
Pull multiple revisions with update:
6405
b8346ae5d64b commands: fix shadowed repo module
Patrick Mezard <pmezard@gmail.com>
parents: 5221
diff changeset
    70
12279
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    71
  $ hg pull -qu -r 0 -r 1 ../repo
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    72
  $ hg -q parents
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    73
  0:bbd179dfa0a7
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    74
  $ hg rollback
13446
1e497df514e2 rollback: clarifies the message about the reverted state (issue2628)
Gilles Moris <gilles.moris@free.fr>
parents: 12316
diff changeset
    75
  repository tip rolled back to revision -1 (undo pull)
1e497df514e2 rollback: clarifies the message about the reverted state (issue2628)
Gilles Moris <gilles.moris@free.fr>
parents: 12316
diff changeset
    76
  working directory now based on revision -1
10358
d42821cd5c96 pull: with -u and -r, update to the first revision given
Sune Foldager <cryo@cyanite.org>
parents: 8167
diff changeset
    77
12279
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    78
  $ hg pull -qr 0 ../repo
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    79
  $ hg log
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    80
  changeset:   0:bbd179dfa0a7
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    81
  tag:         tip
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    82
  user:        test
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    83
  date:        Thu Jan 01 00:00:00 1970 +0000
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    84
  summary:     add foo
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    85
  
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    86
  $ hg pull -qr 1 ../repo
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    87
  $ hg log
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    88
  changeset:   1:ed1b79f46b9a
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    89
  tag:         tip
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    90
  user:        test
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    91
  date:        Thu Jan 01 00:00:00 1970 +0000
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    92
  summary:     change foo
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    93
  
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    94
  changeset:   0:bbd179dfa0a7
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    95
  user:        test
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    96
  date:        Thu Jan 01 00:00:00 1970 +0000
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    97
  summary:     add foo
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
    98
  
5221
8ede77c2d008 pull -r: pass the revisions as the heads argument of findincoming
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    99
12279
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
   100
This used to abort: received changelog group is empty:
5221
8ede77c2d008 pull -r: pass the revisions as the heads argument of findincoming
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   101
12279
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
   102
  $ hg pull -qr 1 ../repo
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 10358
diff changeset
   103
16913
f2719b387380 tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents: 16107
diff changeset
   104
  $ cd ..