# HG changeset patch # User Franz Glasner # Date 1535819338 -7200 # Node ID fb754a9bd5e857c7bbb2ebb24866ddbf89f0e474 # Parent 16710999ef401a7b7e1e04300b4e6da0b392dbe5 Implemented "Timestamps.write()" to write the internal timestamps into a file diff -r 16710999ef40 -r fb754a9bd5e8 extensions/timestamps.py --- a/extensions/timestamps.py Sat Sep 01 17:38:08 2018 +0200 +++ b/extensions/timestamps.py Sat Sep 01 18:28:58 2018 +0200 @@ -329,13 +329,19 @@ while True: fields = (yield) print_sep = False - for field in fields: - if print_sep: - db.write(',') - else: - print_sep = True - db.write(escape_str_field(field)) - db.write('\n') + if len(fields) >= 2: + for field in fields: + if print_sep: + db.write(',') + else: + print_sep = True + db.write(escape_str_field(field)) + db.write('\n') + else: + # no escaping for comments and other special lines + for field in fields: + db.write(field) + db.write('\n') finally: db.flush() @@ -441,3 +447,41 @@ "duplicate encoding record in database") else: raise ValueError("unknown record type in line %d" % lineno) + + def write(self, db): + """Write the internal representation into the file `db`""" + + assert self._version == 1 + + dbwriter = db_writer(db) + dbwriter.send(None) # print the coroutine + + # + # Make version and encoding reflect the possibly new settings -- + # but do not change file order if possible. + # + if "/version/" in self._d: + self._d["/version/"] = self._version + else: + dbwriter.send(("version=%d" % self._version,)) + + if "/encoding/" in self._d: + self._d["/encoding/"] = self._encoding + else: + dbwriter.send(("encoding=%s" % self._encoding,)) + + for k, v in self._d.items(): + if k.startswith("/"): + if k.startswith("/-"): + dbwriter.send(tuple()) + elif k.startswith("/comment-"): + dbwriter.send((v,)) + elif k == "/version/": + dbwriter.send(("version=%d" % v,)) + elif k == "/encoding/": + dbwriter.send(("encoding=%s" % v,)) + else: + raise ValueError("unknown key type in timestamps: %r" % k) + else: + dbwriter.send((k, v)) + dbwriter.close()