SVN: ZODB/branches/tseaver-better_repozo_tests/src/ZODB/scripts/repozo.py Hooks for testability:

Tres Seaver <[email protected]>
Newsgroups gmane.comp.python.zope.zodb.cvs
Message-ID <20100514174339.D9A2B9418C__45633.2925161861$1273859031$gmane$org@cvs.zope.org>
Log message for revision 112305:
  Hooks for testability:
    
  Raise an exception from 'do_full_backup' / 'do_incremental_backup' where
  we would have called sys.exit(2) to avoid overwriting files.  Catch the
  exception in 'main' and do the same error reporting / exit.
    
  Allow the 'options' object to pre-set the time used for generating the
  backup filenames.
  

Changed:
  U   ZODB/branches/tseaver-better_repozo_tests/src/ZODB/scripts/repozo.py

-=-
Modified: ZODB/branches/tseaver-better_repozo_tests/src/ZODB/scripts/repozo.py
===================================================================
--- ZODB/branches/tseaver-better_repozo_tests/src/ZODB/scripts/repozo.py	2010-05-14 17:35:52 UTC (rev 112304)
+++ ZODB/branches/tseaver-better_repozo_tests/src/ZODB/scripts/repozo.py	2010-05-14 17:43:39 UTC (rev 112305)
@@ -93,6 +93,9 @@
 VERBOSE = False
 
 
+class WouldOverwriteFiles(Exception):
+    pass
+
 def usage(code, msg=''):
     outfp = sys.stderr
     if code == 0:
@@ -301,7 +304,9 @@
             ext = '.deltafs'
         if options.gzip:
             ext += 'z'
-    t = time.gmtime()[:6] + (ext,)
+    # Hook for testing
+    now = getattr(options, 'test_now', time.gmtime()[:6])
+    t = now + (ext,)
     return '%04d-%02d-%02d-%02d-%02d-%02d%s' % t
 
 # Return a list of files needed to reproduce state at time options.date.
@@ -419,8 +424,7 @@
     options.full = True
     dest = os.path.join(options.repository, gen_filename(options))
     if os.path.exists(dest):
-        print >> sys.stderr, 'Cannot overwrite existing file:', dest
-        sys.exit(2)
+        raise WouldOverwriteFiles('Cannot overwrite existing file: %s' % dest)
     log('writing full backup: %s bytes to %s', pos, dest)
     sum = copyfile(options, dest, 0, pos)
     # Write the data file for this full backup
@@ -447,8 +451,7 @@
     options.full = False
     dest = os.path.join(options.repository, gen_filename(options))
     if os.path.exists(dest):
-        print >> sys.stderr, 'Cannot overwrite existing file:', dest
-        sys.exit(2)
+        raise WouldOverwriteFiles('Cannot overwrite existing file: %s' % dest)
     log('writing incremental: %s bytes to %s',  pos-reposz, dest)
     sum = copyfile(options, dest, reposz, pos - reposz)
     # The first file in repofiles points to the last full backup.  Use this to
@@ -570,7 +573,11 @@
         argv = sys.argv[1:]
     options = parseargs(argv)
     if options.mode == BACKUP:
-        do_backup(options)
+        try:
+            do_backup(options)
+        except WouldOverwriteFiles, e:
+            print >> sys.stderr, str(e)
+            sys.exit(2)
     else:
         assert options.mode == RECOVER
         do_recover(options)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.