def execute( self, inputfile, outputfile ): """ Fix a cvs2svn created dump file. @type inputfile: string @param inputfile: Name of the cvs2svn created dump file. @type outputfile: string @param outputfile: Name of the fixed dump file. """ indump = SvnDumpFile() indump.open( inputfile ) has_rev = indump.read_next_rev() outdump = SvnDumpFile() outdump.create_like( outputfile, indump ) rc = 0 self.__history = {} while has_rev and rc == 0: outdump.add_rev( indump.get_rev_props() ) for node in indump.get_nodes_iter(): msglist = self.__fix_node( indump.get_rev_nr(), node ) if msglist != None: rc = 1 print "Error in r%d node %s:" % \ ( indump.get_rev_nr(), node.get_path() ) for msg in msglist: print " " + msg break outdump.add_node( node ) has_rev = indump.read_next_rev() indump.close() return rc
def execute(self, inputfile, outputfile): """ Fix a cvs2svn created dump file. @type inputfile: string @param inputfile: Name of the cvs2svn created dump file. @type outputfile: string @param outputfile: Name of the fixed dump file. """ indump = SvnDumpFile() indump.open(inputfile) has_rev = indump.read_next_rev() outdump = SvnDumpFile() outdump.create_like(outputfile, indump) rc = 0 self.__history = {} while has_rev and rc == 0: outdump.add_rev(indump.get_rev_props()) for node in indump.get_nodes_iter(): msglist = self.__fix_node(indump.get_rev_nr(), node) if msglist != None: rc = 1 print "Error in r%d node %s:" % \ ( indump.get_rev_nr(), node.get_path() ) for msg in msglist: print " " + msg break outdump.add_node(node) has_rev = indump.read_next_rev() indump.close() return rc
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 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()