def copy_dump_file( srcfile, dstfile, transformer=None ): """ Copy a dump file. @type srcfile: string @param srcfile: Source filename. @type dstfile: string @param dstfile: Destination filename. @type transformer: class with method transform(dump) @param transformer: A class to perform a transformation on each revision, or None. """ # SvnDumpFile classes for reading/writing dumps srcdmp = SvnDumpFile() dstdmp = SvnDumpFile() # open source file srcdmp.open( srcfile ) hasrev = srcdmp.read_next_rev() if hasrev: # create the dump file dstdmp.create_like( dstfile, srcdmp ) # now copy all the revisions while hasrev: if transformer != None: transformer.transform( srcdmp ) dstdmp.add_rev_from_dump( srcdmp ) hasrev = srcdmp.read_next_rev() else: print "no revisions in the source dump '%s' ???" % srcfile # cleanup srcdmp.close() dstdmp.close()
def copy_dump_file(srcfile, dstfile, transformer=None): """ Copy a dump file. @type srcfile: string @param srcfile: Source filename. @type dstfile: string @param dstfile: Destination filename. @type transformer: class with method transform(dump) @param transformer: A class to perform a transformation on each revision, or None. """ # SvnDumpFile classes for reading/writing dumps srcdmp = SvnDumpFile() dstdmp = SvnDumpFile() # open source file srcdmp.open(srcfile) hasrev = srcdmp.read_next_rev() if hasrev: # create the dump file dstdmp.create_like(dstfile, srcdmp) # now copy all the revisions while hasrev: if transformer != None: transformer.transform(srcdmp) dstdmp.add_rev_from_dump(srcdmp) hasrev = srcdmp.read_next_rev() else: print "no revisions in the source dump '%s' ???" % srcfile # cleanup srcdmp.close() dstdmp.close()
def join_dumpfiles(inputlist, outfilename): """ Joins dump files. @type inputlist: list @param inputlist: A list containing the input filenames. @type outfilename: string @param outfilename: Name of the output dump file. @rtype: int @return: 0 for success. """ outdump = None noutrev = 0 lastrev = -1 for filename in inputlist: print "reading %s ..." % filename ninrev = 0 indump = SvnDumpFile() indump.open(filename) hasrev = indump.read_next_rev() if hasrev: if outdump == None: outdump = SvnDumpFile() if indump.get_rev_nr() == 0: # create new dump with revision 0 outdump.create_with_rev_0(outfilename, indump.get_uuid(), indump.get_rev_date_str()) hasrev = indump.read_next_rev() else: # create new dump starting with the # same revNr as the original dump outdump.create_with_rev_n(outfilename, indump.get_uuid(), indump.get_rev_nr()) else: # check rev number if indump.get_rev_nr() == 0: hasrev = indump.read_next_rev() if hasrev: if (lastrev + 1) != indump.get_rev_nr(): print "renumbering of revisions not supported." print "last rev was %d, next is %d." % ( lastrev, indump.get_rev_nr()) indump.close() outdump.close() return 1 while hasrev: outdump.add_rev_from_dump(indump) ninrev += 1 lastrev = indump.get_rev_nr() hasrev = indump.read_next_rev() indump.close() print " copied %d revisions." % ninrev noutrev += ninrev outdump.close() print "wrote %d revisions, last was r%d." % (noutrev, lastrev)
def join_dumpfiles( inputlist, outfilename ): """ Joins dump files. @type inputlist: list @param inputlist: A list containing the input filenames. @type outfilename: string @param outfilename: Name of the output dump file. @rtype: int @return: 0 for success. """ outdump = None noutrev = 0 lastrev = -1 for filename in inputlist: print "reading %s ..." % filename ninrev = 0 indump = SvnDumpFile() indump.open( filename ) hasrev = indump.read_next_rev() if hasrev: if outdump == None: outdump = SvnDumpFile() if indump.get_rev_nr() == 0: # create new dump with revision 0 outdump.create_with_rev_0( outfilename, indump.get_uuid(), indump.get_rev_date_str() ) hasrev = indump.read_next_rev() else: # create new dump starting with the # same revNr as the original dump outdump.create_with_rev_n( outfilename, indump.get_uuid(), indump.get_rev_nr() ) else: # check rev number if indump.get_rev_nr() == 0: hasrev = indump.read_next_rev() if hasrev: if (lastrev + 1) != indump.get_rev_nr(): print "renumbering of revisions not supported." print "last rev was %d, next is %d." % ( lastrev, indump.get_rev_nr() ) indump.close() outdump.close() return 1 while hasrev: outdump.add_rev_from_dump( indump ) ninrev += 1 lastrev = indump.get_rev_nr() hasrev = indump.read_next_rev() indump.close() print " copied %d revisions." % ninrev noutrev += ninrev outdump.close() print "wrote %d revisions, last was r%d." % ( noutrev, lastrev )
def copy_dump_file(srcfile, dstfile, transformer=None): """ Copy a dump file. @type srcfile: string @param srcfile: Source filename. @type dstfile: string @param dstfile: Destination filename. @type transformer: class with method transform(dump) @param transformer: A class to perform a transformation on each revision, or None. """ # SvnDumpFile classes for reading/writing dumps srcdmp = SvnDumpFile() dstdmp = SvnDumpFile() # Copy_from_rev casacading oldRevToNewRev = dict() # open source file srcdmp.open(srcfile) hasrev = srcdmp.read_next_rev() if hasrev: # create the dump file dstdmp.create_like(dstfile, srcdmp) # now copy all the revisions while hasrev: if transformer != None: transformer.transform(srcdmp) for node in srcdmp.get_nodes_iter(): if node.has_copy_from(): if oldRevToNewRev.has_key(node.get_copy_from_rev()): node.set_copy_from_rev( oldRevToNewRev[node.get_copy_from_rev()]) else: #We have a problem, the copy from revision is missing. #We look for a previous revision containing the file found = False candidate = node.get_copy_from_rev() while candidate > 0 and not found: candidate = candidate - 1 found = oldRevToNewRev.has_key(candidate) if found: oldRevToNewRev[ node.get_copy_from_rev()] = candidate node.set_copy_from_rev(candidate) dstdmp.add_rev_from_dump(srcdmp) oldRevToNewRev[srcdmp.get_rev_nr()] = dstdmp.get_rev_nr() hasrev = srcdmp.read_next_rev() else: print "no revisions in the source dump '%s' ???" % srcfile # cleanup srcdmp.close() dstdmp.close()
def copy_dump_file( srcfile, dstfile, transformer=None ): """ Copy a dump file. @type srcfile: string @param srcfile: Source filename. @type dstfile: string @param dstfile: Destination filename. @type transformer: class with method transform(dump) @param transformer: A class to perform a transformation on each revision, or None. """ # SvnDumpFile classes for reading/writing dumps srcdmp = SvnDumpFile() dstdmp = SvnDumpFile() # Copy_from_rev casacading oldRevToNewRev = dict() # open source file srcdmp.open( srcfile ) hasrev = srcdmp.read_next_rev() if hasrev: # create the dump file dstdmp.create_like( dstfile, srcdmp ) # now copy all the revisions while hasrev: if transformer != None: transformer.transform( srcdmp ) for node in srcdmp.get_nodes_iter(): if node.has_copy_from(): if oldRevToNewRev.has_key(node.get_copy_from_rev()): node.set_copy_from_rev(oldRevToNewRev[node.get_copy_from_rev()]) else: #We have a problem, the copy from revision is missing. #We look for a previous revision containing the file found = False candidate = node.get_copy_from_rev() while candidate > 0 and not found: candidate = candidate - 1 found = oldRevToNewRev.has_key(candidate) if found: oldRevToNewRev[node.get_copy_from_rev()] = candidate node.set_copy_from_rev(candidate) dstdmp.add_rev_from_dump( srcdmp ) oldRevToNewRev[srcdmp.get_rev_nr()] = dstdmp.get_rev_nr() hasrev = srcdmp.read_next_rev() else: print "no revisions in the source dump '%s' ???" % srcfile # cleanup srcdmp.close() dstdmp.close()
def filter_dump_file(self, srcfile, dstfile ): # SvnDumpFile classes for reading/writing dumps srcdmp = SvnDumpFile() dstdmp = SvnDumpFile() # read a first time source file to find all referenced revisions (they should not be later removed) srcdmp.open( srcfile ) hasrev = srcdmp.read_next_rev() referenced_revs = set() while hasrev: for node in srcdmp.get_nodes_iter(): copy_from_rev = node.get_copy_from_rev() if copy_from_rev != 0: referenced_revs.add(copy_from_rev) hasrev = srcdmp.read_next_rev() srcdmp.close() # start reading again source file srcdmp.open( srcfile ) hasrev = srcdmp.read_next_rev() if hasrev: # create the dump file dstdmp.create_like( dstfile, srcdmp ) # now copy all the revisions while hasrev: if self.verbosity > 0: print "Revision-number: orig=%s, new=%s" % (srcdmp.get_rev_nr(), srcdmp.get_rev_nr()-self.skipped_revisions) if srcdmp.get_rev_log() == "This is an empty revision for padding." and srcdmp.get_rev_nr() not in referenced_revs: if self.verbosity > 0: print " * skipped padding revison (number of skipped revisions = %s)" % self.skipped_revisions self.skipped_revisions += 1 else: self.transform( srcdmp ) self.rev_map[srcdmp.get_rev_nr()] = (srcdmp.get_rev_nr() - self.skipped_revisions) dstdmp.add_rev_from_dump( srcdmp ) hasrev = srcdmp.read_next_rev() else: print "no revisions in the source dump '%s' ???" % srcfile # cleanup srcdmp.close() dstdmp.close()
def split_dumpfiles(inputfilename, outlist): """ Splits a dump file. @type inputfilename: string @param inputfilename: Name of the input file. @type outlist: list @param outlist: List of tuples containing start revnr, end revnr and filename. @rtype: int @return: 0 for success. """ if len(outlist) == 0: return 0 outlist = outlist[:] outlist.sort() parallel = False for i in range(0, len(outlist) - 1): if outlist[i][1] > outlist[i + 1][0]: parallel = True break if not parallel: indump = SvnDumpFile() indump.open(inputfilename) index = 0 startrev = outlist[index][0] endrev = outlist[index][1] outfile = outlist[index][2] outdump = None while indump.read_next_rev(): revnr = indump.get_rev_nr() if outdump == None: if revnr >= startrev: outdump = SvnDumpFile() if revnr == 0: # create new dump with revision 0 outdump.create_with_rev_0(outfile, indump.get_uuid(), indump.get_rev_date_str()) else: # create new dump starting with the # same revNr as the original dump outdump.create_with_rev_n(outfile, indump.get_uuid(), indump.get_rev_nr()) if outdump != None: # have an output file, copy the revision if revnr > 0 if revnr > 0: outdump.add_rev_from_dump(indump) if revnr >= endrev: # end revision reached outdump.close() outdump = None index += 1 if index >= len(outlist): # done. break # next range startrev = outlist[index][0] endrev = outlist[index][1] outfile = outlist[index][2] if outdump != None: outdump.close() indump.close() else: print "overlapping revision ranges not supported (yet)." return 1 return 0
def split_dumpfiles( inputfilename, outlist ): """ Splits a dump file. @type inputfilename: string @param inputfilename: Name of the input file. @type outlist: list @param outlist: List of tuples containing start revnr, end revnr and filename. @rtype: int @return: 0 for success. """ if len(outlist) == 0: return 0 outlist = outlist[:] outlist.sort() parallel = False for i in range( 0, len(outlist)-1 ): if outlist[i][1] > outlist[i+1][0]: parallel = True break if not parallel: indump = SvnDumpFile() indump.open( inputfilename ) index = 0 startrev = outlist[index][0] endrev = outlist[index][1] outfile = outlist[index][2] outdump = None while indump.read_next_rev(): revnr = indump.get_rev_nr() if outdump == None: if revnr >= startrev: outdump = SvnDumpFile() if revnr == 0: # create new dump with revision 0 outdump.create_with_rev_0( outfile, indump.get_uuid(), indump.get_rev_date_str() ) else: # create new dump starting with the # same revNr as the original dump outdump.create_with_rev_n( outfile, indump.get_uuid(), indump.get_rev_nr() ) if outdump != None: # have an output file, copy the revision if revnr > 0 if revnr > 0: outdump.add_rev_from_dump( indump ) if revnr >= endrev: # end revision reached outdump.close() outdump = None index += 1 if index >= len(outlist): # done. break # next range startrev = outlist[index][0] endrev = outlist[index][1] outfile = outlist[index][2] if outdump != None: outdump.close() indump.close() else: print "overlapping revision ranges not supported (yet)." return 1 return 0