changeset 179:fb754a9bd5e8

Implemented "Timestamps.write()" to write the internal timestamps into a file
author Franz Glasner <hg@dom66.de>
date Sat, 01 Sep 2018 18:28:58 +0200
parents 16710999ef40
children d799c2be6e81
files extensions/timestamps.py
diffstat 1 files changed, 51 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- 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()