e = Epoch()
if name in self.epochs:
raise Config.ReadError("Epoch '{0}' already defined.".format(name))
+ p = re.compile(r'^\w+$')
+ if not p.match(name):
+ raise Config.ReadError("Epoch name '{0}' does not only " + \
+ "comprise alphanumeric characters.".format(name))
if name in Epoch.units:
e.unit = name
def _read_set(self, config, sec):
name = sec[4:].strip()
+ p = re.compile(r'^\w+$')
+ if not p.match(name):
+ raise Config.ReadError("Set name '{0}' does not only " + \
+ "comprise alphanumeric characters.".format(name))
+
dirs = []
excludes = []
return [ d for d in dirs if os.path.isdir(os.path.join(basedir, d)) ]
- def listOldBackups(self):
+ def listExistingBackups(self):
"""Returns a list of old backups."""
backups = []
fsfn = os.path.join(targetdir, fileset.name) + "." + self.conf.format
taropts = []
+ # Tar is verbose is sitarba is verbose
+ if LogConf.con.level <= logging.DEBUG:
+ taropts += ["--verbose"]
+
# Add the since date, if given
if since != None:
taropts += ["-N", since.strftime("%Y-%m-%d %H:%M:%S")]
for pat in fileset.excludes:
taropts += ["--exclude", pat]
+
# Adding directories to backup
taropts += ["-C", "/"] + [ "./" + d.lstrip("/") for d in fileset.dirs]
# Launch the tar process
- tarargs = [self.conf.tarbin] + ["-cpvaf", fsfn] + taropts
+ tarargs = [self.conf.tarbin] + ["-cpaf", fsfn] + taropts
logfile.debug("tar call: " + " ".join(tarargs))
tarp = subprocess.Popen( tarargs, bufsize=-1, \
stdout=subprocess.PIPE, stderr=subprocess.PIPE )
then use mode for given epoch. Use given mode otherwise."""
now = datetime.datetime.now()
- oldbackups = self.listOldBackups()
+ oldbackups = self.listExistingBackups()
# Get epoch of backup
if epoch == None:
"""Prune old backup files"""
allDirs = sorted(self.listAllDirs())
- # Collect all directories not matching backup name
+ # Collect all directories that are removed
removeDirs = [ d for d in allDirs if not Backup.isBackupDir(d) ]
- # Get all directories which are kept
- backups = self.listOldBackups()
- keepdirs = []
+ # Get all backups
+ backups = self.listExistingBackups()
+ # Group backups by epoch and sort them by age
byepoch = { e : list(sorted( [ b for b in backups if b.epoch == e ], \
- key=lambda b : b.date, reverse=True)) for e in self.conf.getRealEpochsSorted() }
+ key=lambda b : b.date, reverse=True)) \
+ for e in self.conf.getRealEpochsSorted() }
+ # If we have too many backups of a specific epoch --> add them to remove list
for e in byepoch:
epoch = self.conf.epochs[e]
old = byepoch[e][epoch.numkeeps:]
def printUsage():
"""Print --help text"""
- print("shbackup - a simple backup solution.")
+ print("sitarba - a simple backup solution.")
print("")
print("Usage:")
print(" " + sys.argv[0] + " {options} [cmd]")
print("Options:")
print(" -h, --help print this usage text")
print(" -c, --conf FILE use given configuration file")
- print(" default: /etc/shbackup.conf")
+ print(" default: /etc/sitarba.conf")
print(" -e, --epoch EPOCH force to create backup for given epoch, which")
print(" can be 'sporadic' or one of the configured epochs")
print(" -m, --mode MODE override mode: full, diff, or incr")
LogConf.setup()
- conffn = "/etc/shbackup.conf"
+ conffn = "/etc/sitarba.conf"
cmd = "list"
mode = None
epoch = None
conffn = sys.argv[i]
elif opt in ["-V", "--version"]:
- print("shbackup " + __version__)
+ print("sitarba " + __version__)
exit(0)
elif opt in ["-v", "--verbose"]:
man.backup(epoch, mode)
if cmd == "list":
- for b in sorted(man.listOldBackups(), key=lambda b: b.date):
+ for b in sorted(man.listExistingBackups(), key=lambda b: b.date):
print(b.colAlignedString())
if cmd == "prune":