浏览代码

Use StableDict in a few more places

Jonas Borgström 11 年之前
父节点
当前提交
d551b13a23
共有 3 个文件被更改,包括 5 次插入6 次删除
  1. 3 3
      attic/archive.py
  2. 2 2
      attic/helpers.py
  3. 0 1
      attic/testsuite/archiver.py

+ 3 - 3
attic/archive.py

@@ -178,7 +178,7 @@ class Archive:
         if name in self.manifest.archives:
             raise self.AlreadyExists(name)
         self.items_buffer.flush(flush=True)
-        metadata = {
+        metadata = StableDict({
             'version': 1,
             'name': name,
             'items': self.items_buffer.chunks,
@@ -186,7 +186,7 @@ class Archive:
             'hostname': socket.gethostname(),
             'username': getuser(),
             'time': datetime.utcnow().isoformat(),
-        }
+        })
         data = msgpack.packb(metadata, unicode_errors='surrogateescape')
         self.id = self.key.id_hash(data)
         self.cache.add_chunk(self.id, data, self.stats)
@@ -570,7 +570,7 @@ class ArchiveChecker:
             items_buffer.write_chunk = add_callback
             cdata = self.repository.get(archive_id)
             data = self.key.decrypt(archive_id, cdata)
-            archive = msgpack.unpackb(data)
+            archive = StableDict(msgpack.unpackb(data))
             if archive[b'version'] != 1:
                 raise Exception('Unknown archive metadata version')
             decode_dict(archive, (b'name', b'hostname', b'username', b'time'))  # fixme: argv

+ 2 - 2
attic/helpers.py

@@ -83,12 +83,12 @@ class Manifest:
 
     def write(self):
         self.timestamp = datetime.utcnow().isoformat()
-        data = msgpack.packb({
+        data = msgpack.packb(StableDict({
             'version': 1,
             'archives': self.archives,
             'timestamp': self.timestamp,
             'config': self.config,
-        })
+        }))
         self.id = self.key.id_hash(data)
         self.repository.put(self.MANIFEST_ID, self.key.encrypt(data))
 

+ 0 - 1
attic/testsuite/archiver.py

@@ -228,7 +228,6 @@ class ArchiverTestCase(ArchiverTestCaseBase):
         fd.seek(100)
         fd.write('XXXX')
         fd.close()
-        self.assert_raises(IntegrityError, lambda: self.attic('extract', '--dry-run', self.repository_location + '::test'))
         self.attic('check', self.repository_location, exit_code=1)
 
     def test_readonly_repository(self):