Hello,
I've found it useful to verify my backups using 'svnadmin verify' and
thought it would make a good addition to hot-backup.py.
[[[
* tools/backup/hot-backup.py.in
Added command line option "--verify". If flag is present, the
hotcopy will be verified.
Added a new pass between the existing steps 3 and 4 (hotcopy and
compress) that
invokes 'svnadmin verify' on the hotcopy. If verification fails, the
script exits with an error.
]]]
Cheers,
Leo
Index: tools/backup/hot-backup.py.in
===================================================================
--- tools/backup/hot-backup.py.in (revision 987343)
+++ tools/backup/hot-backup.py.in (working copy)
@@ -106,6 +106,7 @@
zip : Creates a compressed zip file.
zip64: Creates a zip64 file (can be > 2GB).
--num-backups=N Number of prior backups to keep around (0 to keep all).
+ --verify Verify the hotcopy
--help -h Print this help message and exit.
""" % (scriptname,))
@@ -114,6 +115,7 @@
try:
opts, args = getopt.gnu_getopt(sys.argv[1:], "h?", ["archive-type=",
"num-backups=",
+ "verify",
"help"])
except getopt.GetoptError, e:
sys.stderr.write("ERROR: %s\n\n" % e)
@@ -122,12 +124,15 @@
sys.exit(2)
archive_type = None
+verify_copy = False
for o, a in opts:
if o == "--archive-type":
archive_type = a
elif o == "--num-backups":
num_backups = int(a)
+ elif o == "--verify":
+ verify_copy = True
elif o in ("-h", "--help", "-?"):
usage()
sys.exit()
@@ -266,8 +271,19 @@
else:
print("Done.")
+### Step 4: Verify the hotcopy
+if verify_copy:
+ print("Verifying hotcopy...")
+ err_code = subprocess.call([svnadmin, "verify", "-q",
+ backup_subdir])
+ if err_code != 0:
+ sys.stderr.write("Verifying the hotcopy `%s' failed.\n" % backup_subdir)
+ sys.stderr.flush()
+ sys.exit(err_code)
+ else:
+ print("Done.")
-### Step 4: Make an archive of the backup if required.
+### Step 5: Make an archive of the backup if required.
if archive_type:
archive_path = backup_subdir + archive_map[archive_type]
err_msg = ""
@@ -321,7 +337,7 @@
print("Archive created, removing backup '" + backup_subdir + "'...")
safe_rmtree(backup_subdir, 1)
-### Step 5: finally, remove all repository backups other than the last
+### Step 6: finally, remove all repository backups other than the last
### NUM_BACKUPS.
if num_backups > 0: