예제 #1
0
    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
예제 #2
0
    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
예제 #3
0
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()
예제 #4
0
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()
예제 #5
0
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()
예제 #6
0
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()
예제 #7
0
    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()