Beispiel #1
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()
Beispiel #2
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()
Beispiel #3
0
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)
Beispiel #4
0
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 )
Beispiel #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()
Beispiel #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()
    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()
Beispiel #8
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
Beispiel #9
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