view tests/test-clone-pull-corruption.t @ 35069:4fb489a998c9

run-tests: allow to register any arbitrary pattern for replacement We add a 'common-pattern.py' file that allow to define extra pattern. This seems a cleaner approach than editing the 'run-test.py' file over and over. In addition allowing arbitrary pattern registration will also help extension. The format used is a python file is picked out of convenience defining a list of tuple in 'substitutions' variable. This is picked out of convenience since it is dead simple to implement. The end goal is to register more pattern for Mercurial test. There are multiple common patterns that change over time. That impact is annoying. Using pattern emplacement for them would be handy. The next patches will define all the needed patterns and the last patch will mass-update the tests outputs as it was easier to do in a single pass.
author Boris Feld <boris.feld@octobus.net>
date Sun, 05 Nov 2017 06:34:27 +0100
parents eb586ed5d8ce
children f1186c292d03
line wrap: on
line source

Corrupt an hg repo with a pull started during an aborted commit
Create two repos, so that one of them can pull from the other one.

  $ hg init source
  $ cd source
  $ touch foo
  $ hg add foo
  $ hg ci -m 'add foo'
  $ hg clone . ../corrupted
  updating to branch default
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ echo >> foo
  $ hg ci -m 'change foo'

Add a hook to wait 5 seconds and then abort the commit

  $ cd ../corrupted
  $ echo "[hooks]" >> .hg/hgrc
  $ echo 'pretxncommit = sh -c "sleep 5; exit 1"' >> .hg/hgrc

start a commit...

  $ touch bar
  $ hg add bar
  $ hg ci -m 'add bar' &

... and start a pull while the commit is still running

  $ sleep 1
  $ hg pull ../source 2>/dev/null
  pulling from ../source
  transaction abort!
  rollback completed
  abort: pretxncommit hook exited with status 1
  searching for changes
  adding changesets
  adding manifests
  adding file changes
  added 1 changesets with 1 changes to 1 files
  new changesets 52998019f625
  (run 'hg update' to get a working copy)

see what happened

  $ wait
  $ hg verify
  checking changesets
  checking manifests
  crosschecking files in changesets and manifests
  checking files
  1 files, 2 changesets, 2 total revisions

  $ cd ..