transaction: separate calculating TXNID from creating transaction object
Before this patch, transaction ID (TXNID) is calculated from
`transaction` object itself by `id()`, but this prevents TXNID from
being passed to `pretxnopen` hooks, which should be executed before
starting transaction processing (also any preparations for it, like
writing journal files out).
As a preparation for passing TXNID to `pretxnopen` hooks, this patch
separates calculation of TXNID from creation of `transaction` object.
This patch uses "random" library for reasonable unique ID. "uuid"
library can't be used, because it was introduced since Python 2.5 and
isn't suitable for Mercurial 3.4.x stable line.
`%f` formatting for `random.random()` is used with explicit precision
number 40, because default precision for `%f` is 6. 40 should be long
enough, even if 10**9 transactions are executed in a short time (a
second or less).
On the other hand, `time.time()` is used to ensures uniqueness of
TXNID in a long time, for safety.
BTW, platform not providing `/dev/urandom` or so may cause failure of
`import random` itself with some Python versions (see Python
issue15340 for detail http://bugs.python.org/issue15340).
But this patch uses "random" without any workaround, because:
- "random" is already used directly in some code paths,
- such platforms are very rare (e.g. Tru64 and HPUX), and
http://bugs.python.org/issue15340#msg170000
- updating Python runtime can avoid this issue
SVN-fs-dump-format-version: 2
UUID: afeb9c47-92ff-4c0c-9f72-e1f6eb8ac9af
Revision-number: 0
Prop-content-length: 56
Content-length: 56
K 8
svn:date
V 27
2009-06-21T16:34:55.835945Z
PROPS-END
Revision-number: 1
Prop-content-length: 112
Content-length: 112
K 7
svn:log
V 10
init projA
K 10
svn:author
V 7
pmezard
K 8
svn:date
V 27
2009-06-21T16:34:55.909545Z
PROPS-END
Node-path: branches
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10
PROPS-END
Node-path: tags
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10
PROPS-END
Node-path: trunk
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10
PROPS-END
Revision-number: 2
Prop-content-length: 106
Content-length: 106
K 7
svn:log
V 5
hello
K 10
svn:author
V 7
pmezard
K 8
svn:date
V 27
2009-06-21T16:34:56.150049Z
PROPS-END
Node-path: trunk/à
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10
PROPS-END
Node-path: trunk/à/é
Node-kind: file
Node-action: add
Prop-content-length: 10
Text-content-length: 2
Text-content-md5: e29311f6f1bf1af907f9ef9f44b8328b
Text-content-sha1: e983f374794de9c64e3d1c1de1d490c0756eeeff
Content-length: 12
PROPS-END
d
Node-path: trunk/é
Node-kind: file
Node-action: add
Prop-content-length: 10
Text-content-length: 2
Text-content-md5: 9ffbf43126e33be52cd2bf7e01d627f9
Text-content-sha1: 094e3afb2fe8dfe82f63731cdcd3b999f4856cff
Content-length: 12
PROPS-END
e
Revision-number: 3
Prop-content-length: 112
Content-length: 112
K 7
svn:log
V 10
copy files
K 10
svn:author
V 7
pmezard
K 8
svn:date
V 27
2009-06-21T16:34:59.089402Z
PROPS-END
Node-path: trunk/è
Node-kind: file
Node-action: add
Node-copyfrom-rev: 2
Node-copyfrom-path: trunk/é
Text-copy-source-md5: 9ffbf43126e33be52cd2bf7e01d627f9
Text-copy-source-sha1: 094e3afb2fe8dfe82f63731cdcd3b999f4856cff
Node-path: trunk/ù
Node-kind: dir
Node-action: add
Node-copyfrom-rev: 2
Node-copyfrom-path: trunk/à
Node-path: trunk/à
Node-action: delete
Node-path: trunk/é
Node-action: delete
Revision-number: 4
Prop-content-length: 114
Content-length: 114
K 7
svn:log
V 12
remove files
K 10
svn:author
V 7
pmezard
K 8
svn:date
V 27
2009-06-21T16:35:00.165121Z
PROPS-END
Node-path: trunk/è
Node-action: delete
Node-path: trunk/ù
Node-action: delete
Revision-number: 5
Prop-content-length: 120
Content-length: 120
K 7
svn:log
V 18
branch to branché
K 10
svn:author
V 7
pmezard
K 8
svn:date
V 27
2009-06-21T16:35:03.079138Z
PROPS-END
Node-path: branches/branché
Node-kind: dir
Node-action: add
Node-copyfrom-rev: 4
Node-copyfrom-path: trunk
Revision-number: 6
Prop-content-length: 121
Content-length: 121
K 7
svn:log
V 19
branch to branchée
K 10
svn:author
V 7
pmezard
K 8
svn:date
V 27
2009-06-21T16:35:06.060801Z
PROPS-END
Node-path: branches/branchée
Node-kind: dir
Node-action: add
Node-copyfrom-rev: 5
Node-copyfrom-path: branches/branché
Revision-number: 7
Prop-content-length: 110
Content-length: 110
K 7
svn:log
V 9
tag trunk
K 10
svn:author
V 7
pmezard
K 8
svn:date
V 27
2009-06-21T16:35:09.061530Z
PROPS-END
Node-path: tags/branché
Node-kind: dir
Node-action: add
Node-copyfrom-rev: 6
Node-copyfrom-path: trunk
Revision-number: 8
Prop-content-length: 114
Content-length: 114
K 7
svn:log
V 12
tag branché
K 10
svn:author
V 7
pmezard
K 8
svn:date
V 27
2009-06-21T16:35:11.068562Z
PROPS-END
Node-path: tags/branchée
Node-kind: dir
Node-action: add
Node-copyfrom-rev: 6
Node-copyfrom-path: branches/branchée