Browse Source

Various changes

Jonas Borgström 14 years ago
parent
commit
869f720be4
5 changed files with 27 additions and 21 deletions
  1. 1 0
      .gitignore
  2. 9 8
      darc/archive.py
  3. 10 10
      darc/archiver.py
  4. 1 0
      darc/crypto.py
  5. 6 3
      darc/test.py

+ 1 - 0
.gitignore

@@ -2,4 +2,5 @@ build
 *.egg-info
 *.pyc
 *.pyo
+*.so
 

+ 9 - 8
darc/archive.py

@@ -145,10 +145,11 @@ class Archive(object):
             raise Exception('Unknown archive item type %r' % item['mode'])
 
     def restore_attrs(self, path, item, symlink=False):
-        if item['xattrs']:
+        xattrs = item.get('xattrs')
+        if xattrs:
             try:
                 xa = xattr(path, XATTR_NOFOLLOW)
-                for k, v in item['xattrs'].items():
+                for k, v in xattrs.items():
                     xa.set(k, v)
             except IOError:
                 pass
@@ -188,17 +189,17 @@ class Archive(object):
         cache.save()
 
     def stat_attrs(self, st, path):
-        try:
-            xattrs = dict(xattr(path, XATTR_NOFOLLOW))
-        except IOError:
-            xattrs = None
-        return {
+        item = {
             'mode': st.st_mode,
             'uid': st.st_uid, 'user': uid2user(st.st_uid),
             'gid': st.st_gid, 'group': gid2group(st.st_gid),
             'atime': st.st_atime, 'mtime': st.st_mtime,
-            'xattrs': xattrs,
         }
+        try:
+            item['xattrs'] = dict(xattr(path, XATTR_NOFOLLOW))
+        except IOError:
+            pass
+        return item
 
     def process_dir(self, path, st):
         item = {'path': path.lstrip('/\\:')}

+ 10 - 10
darc/archiver.py

@@ -150,11 +150,13 @@ class Archiver(object):
         print 'Unique data:', format_file_size(usize)
         return self.exit_code
 
-    def do_keychain_generate(self, args):
+    def do_init_keychain(self, args):
         return KeyChain.generate(args.keychain)
 
-    def do_keychain_restrict(self, args):
-        return KeyChain(args.keychain).restrict(args.output)
+    def do_export_restricted(self, args):
+        keychain = KeyChain(args.keychain)
+        keychain.restrict(args.output)
+        return self.exit_code
 
     def do_keychain_chpass(self, args):
         return KeyChain(args.keychain).chpass()
@@ -172,15 +174,13 @@ class Archiver(object):
 
 
         subparsers = parser.add_subparsers(title='Available subcommands')
-        subparser = subparsers.add_parser('keychain')
-        subsubparsers = subparser.add_subparsers(title='Available subcommands')
-        subparser = subsubparsers.add_parser('generate')
-        subparser.set_defaults(func=self.do_keychain_generate)
-        subparser = subsubparsers.add_parser('restrict')
+        subparser = subparsers.add_parser('init-keychain')
+        subparser.set_defaults(func=self.do_init_keychain)
+        subparser = subparsers.add_parser('export-restricted')
         subparser.add_argument('output', metavar='OUTPUT', type=str,
                                help='Keychain to create')
-        subparser.set_defaults(func=self.do_keychain_restrict)
-        subparser = subsubparsers.add_parser('change-password')
+        subparser.set_defaults(func=self.do_export_restricted)
+        subparser = subparsers.add_parser('change-password')
         subparser.set_defaults(func=self.do_keychain_chpass)
 
         subparser = subparsers.add_parser('init')

+ 1 - 0
darc/crypto.py

@@ -30,6 +30,7 @@ class KeyChain(object):
             if fd.read(len(self.FILE_ID)) != self.FILE_ID:
                 raise ValueError('Not a keychain')
             cdata = fd.read()
+        self.password = ''
         data = self.decrypt(cdata, '')
         while not data:
             self.password = getpass('Keychain password: ')

+ 6 - 3
darc/test.py

@@ -1,6 +1,5 @@
 import filecmp
 import os
-import time
 from StringIO import StringIO
 import sys
 import shutil
@@ -25,7 +24,7 @@ class Test(unittest.TestCase):
         os.chdir(self.tmpdir)
         self.keychain = '/tmp/_test_dedupstore.keychain'
         if not os.path.exists(self.keychain):
-            self.darc('keychain', 'generate')
+            self.darc('init-keychain')
         self.darc('init', self.store_path)
 
     def tearDown(self):
@@ -92,7 +91,6 @@ class Test(unittest.TestCase):
         os.symlink('somewhere', os.path.join(self.input_path, 'link1'))
         os.mkfifo(os.path.join(self.input_path, 'fifo1'))
         self.darc('create', self.store_path + '::test', 'input')
-        time.sleep(1)
         self.darc('extract', self.store_path + '::test', 'output')
         self.diff_dirs('input', 'output/input')
 
@@ -105,6 +103,11 @@ class Test(unittest.TestCase):
         fd.close()
         self.darc('verify', self.store_path + '::test', exit_code=1)
 
+    def test_keychain(self):
+        keychain = os.path.join(self.tmpdir, 'keychain')
+        self.darc('-k', keychain, 'init-keychain')
+
+
 def suite():
     suite = unittest.TestSuite()
     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(Test))