tests/test-convert-tagsbranch-topology.t
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
Fri, 29 Mar 2013 22:57:16 +0900
changeset 18993 0fd0612dc855
parent 16954 8f36806b8f6a
child 20117 aa9385f983fa
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:
9431
d1b135f2f415 convert: fix history topology when using hg.tagsbranch
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
     1
12534
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
     2
  $ "$TESTDIR/hghave" git || exit 80
16892
cfd892b7569f test-convert: disable autocrlf for git
Eduard-Cristian Stefan <alexandrul.ct@gmail.com>
parents: 13756
diff changeset
     3
  $ echo "[core]" >> $HOME/.gitconfig
cfd892b7569f test-convert: disable autocrlf for git
Eduard-Cristian Stefan <alexandrul.ct@gmail.com>
parents: 13756
diff changeset
     4
  $ echo "autocrlf = false" >> $HOME/.gitconfig
16954
8f36806b8f6a test-convert: disable autocrlf for git
Eduard-Cristian Stefan <alexandrul.ct@gmail.com>
parents: 16913
diff changeset
     5
  $ echo "[core]" >> $HOME/.gitconfig
8f36806b8f6a test-convert: disable autocrlf for git
Eduard-Cristian Stefan <alexandrul.ct@gmail.com>
parents: 16913
diff changeset
     6
  $ echo "autocrlf = false" >> $HOME/.gitconfig
12534
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
     7
  $ echo "[extensions]" >> $HGRCPATH
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
     8
  $ echo "convert=" >> $HGRCPATH
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
     9
  $ echo 'hgext.graphlog =' >> $HGRCPATH
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    10
  $ echo '[convert]' >> $HGRCPATH
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    11
  $ echo 'hg.usebranchnames = True' >> $HGRCPATH
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    12
  $ echo 'hg.tagsbranch = tags-update' >> $HGRCPATH
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    13
  $ GIT_AUTHOR_NAME='test'; export GIT_AUTHOR_NAME
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    14
  $ GIT_AUTHOR_EMAIL='test@example.org'; export GIT_AUTHOR_EMAIL
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    15
  $ GIT_AUTHOR_DATE="2007-01-01 00:00:00 +0000"; export GIT_AUTHOR_DATE
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    16
  $ GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"; export GIT_COMMITTER_NAME
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    17
  $ GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL"; export GIT_COMMITTER_EMAIL
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    18
  $ GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"; export GIT_COMMITTER_DATE
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    19
  $ count=10
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    20
  $ action()
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    21
  > {
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    22
  >     GIT_AUTHOR_DATE="2007-01-01 00:00:$count +0000"
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    23
  >     GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    24
  >     git "$@" >/dev/null 2>/dev/null || echo "git command error"
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    25
  >     count=`expr $count + 1`
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    26
  > }
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    27
  $ glog()
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    28
  > {
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    29
  >     hg glog --template '{rev} "{desc|firstline}" files: {files}\n' "$@"
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    30
  > }
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    31
  $ convertrepo()
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    32
  > {
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    33
  >     hg convert --datesort git-repo hg-repo
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    34
  > }
9431
d1b135f2f415 convert: fix history topology when using hg.tagsbranch
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    35
12534
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    36
Build a GIT repo with at least 1 tag
9431
d1b135f2f415 convert: fix history topology when using hg.tagsbranch
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    37
12534
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    38
  $ mkdir git-repo
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    39
  $ cd git-repo
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    40
  $ git init >/dev/null 2>&1
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    41
  $ echo a > a
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    42
  $ git add a
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    43
  $ action commit -m "rev1"
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    44
  $ action tag -m "tag1" tag1
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    45
  $ cd ..
9431
d1b135f2f415 convert: fix history topology when using hg.tagsbranch
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    46
12534
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    47
Do a first conversion
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    48
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    49
  $ convertrepo
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    50
  initializing destination hg-repo repository
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    51
  scanning source...
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    52
  sorting...
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    53
  converting...
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    54
  0 rev1
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    55
  updating tags
13756
6b7077df4aa5 convert: add bookmarks reading support to git backend
Edouard Gomez <ed.gomez@free.fr>
parents: 12534
diff changeset
    56
  updating bookmarks
12534
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    57
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    58
Simulate upstream  updates after first conversion
9431
d1b135f2f415 convert: fix history topology when using hg.tagsbranch
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    59
12534
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    60
  $ cd git-repo
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    61
  $ echo b > a
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    62
  $ git add a
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    63
  $ action commit -m "rev2"
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    64
  $ action tag -m "tag2" tag2
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    65
  $ cd ..
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    66
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    67
Perform an incremental conversion
9431
d1b135f2f415 convert: fix history topology when using hg.tagsbranch
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    68
12534
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    69
  $ convertrepo
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    70
  scanning source...
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    71
  sorting...
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    72
  converting...
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    73
  0 rev2
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    74
  updating tags
13756
6b7077df4aa5 convert: add bookmarks reading support to git backend
Edouard Gomez <ed.gomez@free.fr>
parents: 12534
diff changeset
    75
  updating bookmarks
12534
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    76
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    77
Print the log
9431
d1b135f2f415 convert: fix history topology when using hg.tagsbranch
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    78
12534
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    79
  $ cd hg-repo
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    80
  $ glog
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    81
  o  3 "update tags" files: .hgtags
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    82
  |
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    83
  | o  2 "rev2" files: a
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    84
  | |
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    85
  o |  1 "update tags" files: .hgtags
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    86
   /
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    87
  o  0 "rev1" files: a
3ee3d7634e94 tests: unify test-convert-tagsbranch-topology
Matt Mackall <mpm@selenic.com>
parents: 9431
diff changeset
    88
  
16913
f2719b387380 tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents: 16892
diff changeset
    89
f2719b387380 tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents: 16892
diff changeset
    90
  $ cd ..