tests/test-merge-combination-misc.t
author Manuel Jacob <me@manueljacob.de>
Sun, 22 May 2022 03:50:34 +0200
changeset 49269 395f28064826
parent 46266 e8b0c519dfb3
permissions -rw-r--r--
worker: avoid potential partial write of pickled data Previously, the code wrote the pickled data using os.write(). However, os.write() can write less bytes than passed to it. To trigger the problem, the pickled data had to be larger than 2147479552 bytes on my system. Instead, open a file object and pass it to pickle.dump(). This also has the advantage that it doesn’t buffer the whole pickled data in memory. Note that the opened file must be buffered because pickle doesn’t support unbuffered streams because unbuffered streams’ write() method might write less bytes than passed to it (like os.write()) but pickle.dump() relies on that all bytes are written (see https://github.com/python/cpython/issues/93050). The side effect of using a file object and a with statement is that wfd is explicitly closed now while it seems like before it was implicitly closed by process exit.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
46266
e8b0c519dfb3 test: split tests/test-merge-combination.t into multiple parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46265
diff changeset
     1
Testing recorded "modified" files for merge commit
e8b0c519dfb3 test: split tests/test-merge-combination.t into multiple parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46265
diff changeset
     2
==================================================
e8b0c519dfb3 test: split tests/test-merge-combination.t into multiple parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46265
diff changeset
     3
42619
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
     4
This file shows what hg says are "modified" files for a merge commit
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
     5
(hg log -T {files}), somewhat exhaustively.
46266
e8b0c519dfb3 test: split tests/test-merge-combination.t into multiple parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46265
diff changeset
     6
e8b0c519dfb3 test: split tests/test-merge-combination.t into multiple parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46265
diff changeset
     7
This file test multiple corner case.
e8b0c519dfb3 test: split tests/test-merge-combination.t into multiple parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46265
diff changeset
     8
e8b0c519dfb3 test: split tests/test-merge-combination.t into multiple parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46265
diff changeset
     9
For merges that involve files contents changing, check test-merge-combination-file-content.t
e8b0c519dfb3 test: split tests/test-merge-combination.t into multiple parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46265
diff changeset
    10
e8b0c519dfb3 test: split tests/test-merge-combination.t into multiple parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46265
diff changeset
    11
For merges that involve executable bit changing, check test-merge-combination-exec-bytes.t
e8b0c519dfb3 test: split tests/test-merge-combination.t into multiple parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46265
diff changeset
    12
e8b0c519dfb3 test: split tests/test-merge-combination.t into multiple parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46265
diff changeset
    13
e8b0c519dfb3 test: split tests/test-merge-combination.t into multiple parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46265
diff changeset
    14
Case with multiple or zero merge ancestors, copies/renames, and identical file contents
e8b0c519dfb3 test: split tests/test-merge-combination.t into multiple parts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46265
diff changeset
    15
with different filelog revisions are not currently covered.
42619
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    16
46265
8045e4aa366b test: extract the `genmerges` out of test-merge-combination.t
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42739
diff changeset
    17
  $ . $TESTDIR/testlib/merge-combination-util.sh
42619
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    18
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    19
Files modified or cleanly merged, with no greatest common ancestors:
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    20
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    21
  $ hg init repo; cd repo
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    22
  $ touch a0 b0; hg commit -qAm 0
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    23
  $ hg up -qr null; touch a1 b1; hg commit -qAm 1
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    24
  $ hg merge -qr 0; rm b*; hg commit -qAm 2
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    25
  $ hg log -r . -T '{files}\n'
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    26
  b0 b1
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    27
  $ cd ../
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    28
  $ rm -rf repo
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    29
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    30
A few cases of criss-cross merges involving deletions (listing all
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    31
such merges is probably too much). Both gcas contain $files, so we
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    32
expect the final merge to behave like a merge with a single gca
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    33
containing $files.
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    34
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    35
  $ hg init repo; cd repo
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    36
  $ files="c1 u1 c2 u2"
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    37
  $ touch $files; hg commit -qAm '0 root'
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    38
  $ for f in $files; do echo f > $f; done; hg commit -qAm '1 gca1'
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    39
  $ hg up -qr0; hg revert -qr 1 --all; hg commit -qAm '2 gca2'
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    40
  $ hg up -qr 1; hg merge -qr 2; rm *1; hg commit -qAm '3 p1'
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    41
  $ hg up -qr 2; hg merge -qr 1; rm *2; hg commit -qAm '4 p2'
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    42
  $ hg merge -qr 3; echo f > u1; echo f > u2; rm -f c1 c2
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    43
  $ hg commit -qAm '5 merge with two gcas'
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    44
  $ hg log -r . -T '{files}\n' # expecting u1 u2
42621
99ebde4fec99 commit: improve the files field of changelog for merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 42619
diff changeset
    45
  
42619
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    46
  $ cd ../
20d0e59be79b tests: show the files fields of changelogs for many merges
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
diff changeset
    47
  $ rm -rf repo