Index: svn-restore-dumps.py =================================================================== --- svn-restore-dumps.py (revision 1) +++ svn-restore-dumps.py (working copy) @@ -33,7 +33,7 @@ # -__version = "0.1" +__version = "0.2" import sys import os @@ -299,20 +299,6 @@ print(r[2]) return -1 - def get_last_dump_rev(self): - prog = re.compile("(.+)\.\d+-(\d+)\.svndmp.*") - highest_rev = -1 - - for filename in os.listdir(self.__dumpdir): - m = prog.match( filename ) - if m and (m.group(1) == self.__reposname): - rev_end = int(m.group(2)) - - if rev_end and (rev_end > highest_rev): - highest_rev = rev_end # determine the latest revision dumped - - return highest_rev - def create_new_repository(self): cmd = [ "svnadmin", "create", self.__repospath ] r = self.exec_cmd(cmd) @@ -321,11 +307,13 @@ print(r[2]) return rc - def get_dump_for_rev(self, rev): - if rev != 0: - rev += 1 # we're looking for the next rev following + def get_dump_for_rev(self, respos_rev): + search_rev = respos_rev + if search_rev != 0: + search_rev += 1 # we're looking for the next rev following - highest_rev = rev - 1 # looking for somthing greater than rev-1 + highest_match_rev = search_rev - 1 # looking for somthing greater than search_rev-1 + highest_non_match_rev = -1 # looking for anything at all dump_name = None dump_ext = None @@ -341,15 +329,26 @@ rev_start = int(m.group(2)) rev_end = int(m.group(3)) - if (rev_start == rev) and (rev_end > highest_rev): + if (rev_start == search_rev) and (rev_end > highest_match_rev): # the revision we want is in this range - highest_rev = rev_end + highest_match_rev = rev_end dump_name = filename # keep track of the best so far dump_ext = None if m.group(4): if m.group(4)[0] == ".": dump_ext = m.group(4)[1:] # grab the filename extension + elif (rev_end > highest_non_match_rev): + highest_non_match_rev = rev_end + if not dump_name: + # no dump found, probably just got to the end, but check for some inconsistencies + if highest_non_match_rev > (search_rev - 1): + raise SvnRestoreException("Cannot find dump file for revision %s yet later dumps exist" % search_rev) + elif highest_non_match_rev == -1: + raise SvnRestoreException("There are no matching dump files in this directory") + elif highest_non_match_rev < respos_rev: + raise SvnRestoreException("The repository revision (%s) is later than the highest dump (%s)" % (respos_rev, highest_non_match_rev)) + return dump_name, dump_ext def load_dumps(self):