Commit 624aeb09 authored by Kirill Smelkov's avatar Kirill Smelkov

zodbdump: Always end a transaction with LF

Before now we were emitting extra LF only in between transactions as a
separator. However the dump format states LF always goes after
transaction, and there is a reason for it:

	without LF in the end, it becomes ambiguous at EOF - whether it
	is a proper transaction end, or the transaction was cut.

So avoid the ambiguity by always emitting trailing LF after transaction
record.
parent b1163449
...@@ -87,18 +87,11 @@ _already_warned_notxnraw = set() ...@@ -87,18 +87,11 @@ _already_warned_notxnraw = set()
# zodbdump dumps content of a ZODB storage to a file. # zodbdump dumps content of a ZODB storage to a file.
# please see module doc-string for dump format and details # please see module doc-string for dump format and details
def zodbdump(stor, tidmin, tidmax, hashonly=False, out=sys.stdout): def zodbdump(stor, tidmin, tidmax, hashonly=False, out=sys.stdout):
first = True
for txn in stor.iterator(tidmin, tidmax): for txn in stor.iterator(tidmin, tidmax):
vskip = "\n"
if first:
vskip = ""
first = False
# XXX .status not covered by IStorageTransactionInformation # XXX .status not covered by IStorageTransactionInformation
# XXX but covered by BaseStorage.TransactionRecord # XXX but covered by BaseStorage.TransactionRecord
out.write("%stxn %s %s\nuser %s\ndescription %s\nextension %s\n" % ( out.write("txn %s %s\nuser %s\ndescription %s\nextension %s\n" % (
vskip, ashex(txn.tid), qq(txn.status), ashex(txn.tid), qq(txn.status),
qq(txn.user), qq(txn.user),
qq(txn.description), qq(txn.description),
qq(txn_raw_extension(stor, txn)) )) qq(txn_raw_extension(stor, txn)) ))
...@@ -132,6 +125,8 @@ def zodbdump(stor, tidmin, tidmax, hashonly=False, out=sys.stdout): ...@@ -132,6 +125,8 @@ def zodbdump(stor, tidmin, tidmax, hashonly=False, out=sys.stdout):
out.write("\n") out.write("\n")
out.write("\n")
# ---------------------------------------- # ----------------------------------------
# XPickler is Pickler that tries to save objects stably # XPickler is Pickler that tries to save objects stably
# in other words dicts/sets/... are pickled with items emitted always in the same order. # in other words dicts/sets/... are pickled with items emitted always in the same order.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment