diff options
Diffstat (limited to 'rdiff-backup/rdiff_backup/rpath.py')
-rw-r--r-- | rdiff-backup/rdiff_backup/rpath.py | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/rdiff-backup/rdiff_backup/rpath.py b/rdiff-backup/rdiff_backup/rpath.py index b3efc8c..a75cc0e 100644 --- a/rdiff-backup/rdiff_backup/rpath.py +++ b/rdiff-backup/rdiff_backup/rpath.py @@ -372,6 +372,14 @@ def get_incfile_info(basename): else: basestr = ".".join(dotsplit[:-2]) return (compressed, timestring, ext, basestr) +def delete_dir_no_files(rp): + """Deletes the directory at rp.path if empty. Raises if the + directory contains files.""" + assert rp.isdir() + if rp.contains_files(): + raise RPathException("Directory contains files.") + rp.delete() + class RORPath: """Read Only RPath - carry information about a path @@ -1047,6 +1055,21 @@ class RPath(RORPath): else: self.conn.os.unlink(self.path) self.setdata() + def contains_files(self): + """Returns true if self (or subdir) contains any regular files.""" + log.Log("Determining if directory contains files: %s" % self.path, 7) + if not self.isdir(): + return False + dir_entries = self.listdir() + for entry in dir_entries: + child_rp = self.append(entry) + if not child_rp.isdir(): + return True + else: + if child_rp.contains_files(): + return True + return False + def quote(self): """Return quoted self.path for use with os.system()""" return '"%s"' % self.regex_chars_to_quote.sub( |