##// END OF EJS Templates
dispatch: mask negative exit code recorded in blackbox log...
dispatch: mask negative exit code recorded in blackbox log That's what we do for the exit code delivered to the environment.

File last commit:

r36803:e2c0c088 default
r38043:c3fd9a0f default
Show More
test-commit-multiple.t
133 lines | 3.7 KiB | text/troff | Tads3Lexer
/ tests / test-commit-multiple.t
Greg Ward
dirstate: avoid a race with multiple commits in the same process...
r13704 # reproduce issue2264, issue2516
create test repo
$ cat <<EOF >> $HGRCPATH
> [extensions]
> transplant =
> EOF
$ hg init repo
$ cd repo
$ template="{rev} {desc|firstline} [{branch}]\n"
# we need to start out with two changesets on the default branch
# in order to avoid the cute little optimization where transplant
# pulls rather than transplants
add initial changesets
$ echo feature1 > file1
$ hg ci -Am"feature 1"
adding file1
$ echo feature2 >> file2
$ hg ci -Am"feature 2"
adding file2
# The changes to 'bugfix' are enough to show the bug: in fact, with only
# those changes, it's a very noisy crash ("RuntimeError: nothing
# committed after transplant"). But if we modify a second file in the
# transplanted changesets, the bug is much more subtle: transplant
# silently drops the second change to 'bugfix' on the floor, and we only
# see it when we run 'hg status' after transplanting. Subtle data loss
# bugs are worse than crashes, so reproduce the subtle case here.
commit bug fixes on bug fix branch
$ hg branch fixes
marked working directory as branch fixes
Matt Mackall
branch: warn on branching
r15615 (branches are permanent and global, did you want a bookmark?)
Greg Ward
dirstate: avoid a race with multiple commits in the same process...
r13704 $ echo fix1 > bugfix
$ echo fix1 >> file1
$ hg ci -Am"fix 1"
adding bugfix
$ echo fix2 > bugfix
$ echo fix2 >> file1
$ hg ci -Am"fix 2"
Martin Geisler
tests: don't load unnecessary graphlog extension...
r20117 $ hg log -G --template="$template"
Greg Ward
dirstate: avoid a race with multiple commits in the same process...
r13704 @ 3 fix 2 [fixes]
|
o 2 fix 1 [fixes]
|
o 1 feature 2 [default]
|
o 0 feature 1 [default]
transplant bug fixes onto release branch
$ hg update 0
1 files updated, 0 files merged, 2 files removed, 0 files unresolved
$ hg branch release
marked working directory as branch release
$ hg transplant 2 3
applying [0-9a-f]{12} (re)
[0-9a-f]{12} transplanted to [0-9a-f]{12} (re)
applying [0-9a-f]{12} (re)
[0-9a-f]{12} transplanted to [0-9a-f]{12} (re)
Martin Geisler
tests: don't load unnecessary graphlog extension...
r20117 $ hg log -G --template="$template"
Greg Ward
dirstate: avoid a race with multiple commits in the same process...
r13704 @ 5 fix 2 [release]
|
o 4 fix 1 [release]
|
| o 3 fix 2 [fixes]
| |
| o 2 fix 1 [fixes]
| |
| o 1 feature 2 [default]
|/
o 0 feature 1 [default]
$ hg status
$ hg status --rev 0:4
M file1
A bugfix
$ hg status --rev 4:5
M bugfix
M file1
now test that we fixed the bug for all scripts/extensions
$ cat > $TESTTMP/committwice.py <<__EOF__
> from mercurial import ui, hg, match, node
Adrian Buehlmann
test-commit-multiple.t: improve committwice.py...
r13749 > from time import sleep
Greg Ward
dirstate: avoid a race with multiple commits in the same process...
r13704 >
> def replacebyte(fn, b):
Adrian Buehlmann
test-commit-multiple.t: improve committwice.py...
r13749 > f = open(fn, "rb+")
Greg Ward
dirstate: avoid a race with multiple commits in the same process...
r13704 > f.seek(0, 0)
> f.write(b)
> f.close()
>
Adrian Buehlmann
test-commit-multiple.t: improve committwice.py...
r13749 > def printfiles(repo, rev):
Yuya Nishihara
py3: make test-commit-multiple.t byte-safe
r36803 > repo.ui.status(b"revision %d files: [%s]\n"
> % (rev, b', '.join(b"'%s'" % f
> for f in repo[rev].files())))
Adrian Buehlmann
test-commit-multiple.t: improve committwice.py...
r13749 >
Yuya Nishihara
py3: make test-commit-multiple.t byte-safe
r36803 > repo = hg.repository(ui.ui.load(), b'.')
Greg Ward
dirstate: avoid a race with multiple commits in the same process...
r13704 > assert len(repo) == 6, \
Adrian Buehlmann
test-commit-multiple.t: improve committwice.py...
r13749 > "initial: len(repo): %d, expected: 6" % len(repo)
>
Yuya Nishihara
py3: make test-commit-multiple.t byte-safe
r36803 > replacebyte(b"bugfix", b"u")
Adrian Buehlmann
test-commit-multiple.t: improve committwice.py...
r13749 > sleep(2)
Greg Ward
dirstate: avoid a race with multiple commits in the same process...
r13704 > try:
Yuya Nishihara
py3: make test-commit-multiple.t byte-safe
r36803 > repo.ui.status(b"PRE: len(repo): %d\n" % len(repo))
Greg Ward
dirstate: avoid a race with multiple commits in the same process...
r13704 > wlock = repo.wlock()
> lock = repo.lock()
Yuya Nishihara
py3: make test-commit-multiple.t byte-safe
r36803 > replacebyte(b"file1", b"x")
> repo.commit(text=b"x", user=b"test", date=(0, 0))
> replacebyte(b"file1", b"y")
> repo.commit(text=b"y", user=b"test", date=(0, 0))
> repo.ui.status(b"POST: len(repo): %d\n" % len(repo))
Greg Ward
dirstate: avoid a race with multiple commits in the same process...
r13704 > finally:
> lock.release()
> wlock.release()
Adrian Buehlmann
test-commit-multiple.t: improve committwice.py...
r13749 > printfiles(repo, 6)
> printfiles(repo, 7)
Greg Ward
dirstate: avoid a race with multiple commits in the same process...
r13704 > __EOF__
$ $PYTHON $TESTTMP/committwice.py
Adrian Buehlmann
test-commit-multiple.t: improve committwice.py...
r13749 PRE: len(repo): 6
POST: len(repo): 8
revision 6 files: ['bugfix', 'file1']
revision 7 files: ['file1']
Greg Ward
dirstate: avoid a race with multiple commits in the same process...
r13704
Do a size-preserving modification outside of that process
$ echo abcd > bugfix
$ hg status
M bugfix
$ hg log --template "{rev} {desc} {files}\n" -r5:
5 fix 2 bugfix file1
Adrian Buehlmann
test-commit-multiple.t: improve committwice.py...
r13749 6 x bugfix file1
Greg Ward
dirstate: avoid a race with multiple commits in the same process...
r13704 7 y file1
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913
$ cd ..