浏览代码

Sort archive listing in chronological order

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

+ 5 - 0
darc/archive.py

@@ -43,6 +43,11 @@ class Archive(object):
         self.metadata = msgpack.unpackb(data)
         assert self.metadata['version'] == 1
 
+    @property
+    def ts(self):
+        """Timestamp of archive creation in UTC"""
+        return datetime.strptime(self.metadata['time'], '%Y-%m-%dT%H:%M:%S.%f')
+
     def get_chunks(self):
         for id in self.metadata['chunks_ids']:
             magic, data, hash = self.keychain.decrypt(self.store.get(NS_ARCHIVE_CHUNKS, id))

+ 4 - 3
darc/archiver.py

@@ -1,5 +1,6 @@
 import argparse
 from datetime import datetime
+from operator import attrgetter
 import os
 import stat
 import sys
@@ -9,7 +10,7 @@ from .store import Store
 from .cache import Cache
 from .keychain import Keychain
 from .helpers import location_validator, format_file_size, format_time,\
-    format_file_mode, IncludePattern, ExcludePattern, exclude_path
+    format_file_mode, IncludePattern, ExcludePattern, exclude_path, to_localtime
 from .remote import StoreServer, RemoteStore
 
 class Archiver(object):
@@ -152,8 +153,8 @@ class Archiver(object):
                 print '%s%s %-6s %-6s %8d %s %s' % (type, mode, item['user'],
                                                   item['group'], size, mtime, item['path'])
         else:
-            for archive in Archive.list_archives(store, keychain):
-                print '%(name)-20s %(time)s' % archive.metadata
+            for archive in sorted(Archive.list_archives(store, keychain), key=attrgetter('ts')):
+                print '%-20s %s' % (archive.metadata['name'], to_localtime(archive.ts).strftime('%c'))
         return self.exit_code
 
     def do_verify(self, args):

+ 5 - 1
darc/helpers.py

@@ -1,5 +1,5 @@
 import argparse
-from datetime import datetime
+from datetime import datetime, timedelta
 from fnmatch import fnmatchcase
 import grp
 import os
@@ -7,7 +7,11 @@ import pwd
 import re
 import stat
 import struct
+import time
 
+def to_localtime(ts):
+    """Convert datetime object from UTC to local time zone"""
+    return ts - timedelta(seconds=time.altzone)
 
 def read_set(path):
     """Read set from disk (as int32s)