[issue2403] Empty commit with dirty .hgsubstate file
Martin Geisler
bugs at mercurial.selenic.com
Mon Sep 27 09:52:19 UTC 2010
New submission from Martin Geisler <mg at lazybytes.net>:
The following test script shows a problem where we can make an empty commit
because Mercurial forgot to update th .hgsubstate file.
Create three changesets with outer and inner repos moving in lock-step
$ hg init
$ hg init sub
$ echo 'sub = sub' > .hgsub
$ hg add .hgsub
$ echo x0 > x
$ echo y0 > sub/y
$ hg add -S
adding x
adding sub/y
$ hg commit -m r0
committing subrepository sub
$ echo x1 > x
$ echo y1 > sub/y
$ hg commit -m r1
committing subrepository sub
$ echo x2 > x
$ echo y2 > sub/y
$ hg commit -m r2
committing subrepository sub
$ cat x sub/y .hgsubstate
x2
y2
97dc77eda23d16886b839deb0e8ff655b431b9f7 sub
$ hg -R sub log --template '{rev}: {node|short}\n'
2: 97dc77eda23d
1: 8514e0ba703c
0: a2eda9ba59e6
Now update to an earlier version:
$ hg update 1
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cat x sub/y .hgsubstate
x1
y1
8514e0ba703cdb0dcc5c92beb6c534ec8e7cb34b sub
$ hg -R sub id
8514e0ba703c
Update the subrepository to an even earlier version:
$ hg -R sub update 0
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cat x sub/y .hgsubstate
x1
y0
8514e0ba703cdb0dcc5c92beb6c534ec8e7cb34b sub
$ hg -R sub id
a2eda9ba59e6
What happens when we update the outer repository?
$ hg update 2
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cat x sub/y .hgsubstate
x2
y2
8514e0ba703cdb0dcc5c92beb6c534ec8e7cb34b sub
$ hg -R sub id
97dc77eda23d tip
The .hgsubstate file still records the old revision, but the subrepo
was updated correctly.
$ hg summary
parent: 2:0fc3cdfccbc8 tip
r2
branch: default
commit: 1 modified, 1 subrepos
update: (current)
$ hg commit -m 'r3 - empty substate commit!'
committing subrepository sub
$ cat x sub/y .hgsubstate
x2
y2
97dc77eda23d16886b839deb0e8ff655b431b9f7 sub
$ hg -R sub id
97dc77eda23d tip
$ hg log
changeset: 3:9313ee30238c
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: r3 - empty substate commit!
changeset: 2:0fc3cdfccbc8
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: r2
changeset: 1:5d202505eb64
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: r1
changeset: 0:56b51e4cf504
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: r0
$ hg export tip
# HG changeset patch
# User test
# Date 0 0
# Node ID 9313ee30238c88d124ef38e8f2f3a7daa83618b5
# Parent 0fc3cdfccbc805c2bb4f2a09a354ff037583bdab
r3 - empty substate commit!
----------
messages: 13760
nosy: mg, sedlock
priority: bug
status: unread
title: Empty commit with dirty .hgsubstate file
____________________________________________________
Mercurial issue tracker <bugs at mercurial.selenic.com>
<http://mercurial.selenic.com/bts/issue2403>
____________________________________________________
More information about the Mercurial-devel
mailing list