Ejemplo n.º 1
0
 def runCommand(self,
                cfg,
                argSet,
                args,
                profile=False,
                callback=None,
                repos=None):
     args = args[1:]
     if argSet or len(args) != 4: return self.usage()
     checkin.rdiff(repos, cfg.buildLabel, *args[1:])
Ejemplo n.º 2
0
def doWork(repos, cfg, srcMap, pkgMap, grpMap, sourceuser, binaryuser,
           fromaddr, maxsize, argSet):
    exitCode = 0
    tmpfd, tmppath = tempfile.mkstemp('', 'changemail-')
    os.unlink(tmppath)
    tmpfile = os.fdopen(tmpfd)
    sys.stdout.flush()
    oldStdOut = os.dup(sys.stdout.fileno())
    os.dup2(tmpfd, 1)
    mailhost = argSet.pop('mailhost', 'localhost')

    if srcMap:
        sources = sorted(srcMap.keys())
        names = [x.split(':')[0] for x in sources]
        subjectList = []
        for sourceName in sources:
            for ver, shortver in srcMap[sourceName]:
                subjectList.append('%s=%s' %
                                   (sourceName.split(':')[0], shortver))
        subject = 'Source: %s' % " ".join(subjectList)

        for sourceName in sources:
            for ver, shortver in srcMap[sourceName]:
                new = repos.findTrove(cfg.buildLabel, (sourceName, ver, None))
                newV = new[0][1]
                old, oldV = checkin.findRelativeVersion(
                    repos, sourceName, 1, newV)
                if old:
                    old = ' (previous: %s)' % oldV.trailingRevision().asString(
                    )
                else:
                    old = ''
                print '================================'
                print '%s=%s%s' % (sourceName, shortver, old)
                print 'cvc rdiff %s -1 %s' % (sourceName[:-7], ver)
                print '================================'
                try:
                    checkin.rdiff(repos, cfg.buildLabel, sourceName, '-1', ver)
                except:
                    exitCode = 2
                    print 'rdiff failed for %s' % sourceName
                    try:
                        t, v, tb = sys.exc_info()
                        tbd = traceback.format_exception(t, v, tb)
                        sys.stdout.write(''.join(tbd[-min(2, len(tbd)):]))
                        sys.stderr.write(''.join(tbd))
                    except:
                        print 'Failed to print exception information'

                    print ''
                    print 'Please include a copy of this message in an issue'
                    print 'filed at https://issues.rpath.com/'
                print
        if sourceuser:
            print 'Committed by: %s' % sourceuser

        sendMail(tmpfile, subject, fromaddr, maxsize, argSet['email'],
                 mailhost)

    if pkgMap or grpMap:
        # stdout is the tmpfile
        sys.stdout.flush()
        sys.stdout.seek(0)
        sys.stdout.truncate()

        binaries = sorted(pkgMap.keys())
        groups = sorted(grpMap.keys())
        subject = 'Binary: %s' % " ".join(binaries + groups)

        wrap = textwrap.TextWrapper(
            initial_indent='    ',
            subsequent_indent='        ',
        )

        if binaries:
            print "Binary package commits:"
            if binaryuser:
                print 'Committed by: %s' % binaryuser
        for package in binaries:
            for version in sorted(pkgMap[package].keys()):
                print '================================'
                print '%s=%s' % (package, version)
                flavorDict = pkgMap[package][version]
                for flavor in sorted(flavorDict.keys()):
                    print wrap.fill(
                        '%s:%s [%s]' %
                        (package, ' :'.join(sorted(flavorDict[flavor])),
                         ', '.join(flavor.split(','))))
                print

        if groups:
            print "Group commits:"
        for group in groups:
            for version in sorted(grpMap[group].keys()):
                print '================================'
                print '%s=%s' % (group, version)
                flavorSet = grpMap[group][version]
                for flavor in sorted(flavorSet):
                    print wrap.fill('[%s]' % ', '.join(flavor.split(',')))
                print

        sendMail(tmpfile, subject, fromaddr, maxsize, argSet['email'],
                 mailhost)
        os.dup2(oldStdOut, 1)

    return exitCode
Ejemplo n.º 3
0
def doWork(repos, cfg, srcMap, pkgMap, grpMap, sourceuser, binaryuser, fromaddr, maxsize, argSet):
    exitCode = 0
    tmpfd, tmppath = tempfile.mkstemp('', 'changemail-')
    os.unlink(tmppath)
    tmpfile = os.fdopen(tmpfd)
    sys.stdout.flush()
    oldStdOut = os.dup(sys.stdout.fileno())
    os.dup2(tmpfd, 1)
    mailhost = argSet.pop('mailhost', 'localhost')

    if srcMap:
        sources = sorted(srcMap.keys())
        names = [ x.split(':')[0] for x in sources ]
        subjectList = []
        for sourceName in sources:
            for ver, shortver in srcMap[sourceName]:
                subjectList.append('%s=%s' %(
                    sourceName.split(':')[0], shortver))
        subject = 'Source: %s' %" ".join(subjectList)

        for sourceName in sources:
            for ver, shortver in srcMap[sourceName]:
                new = repos.findTrove(cfg.buildLabel, (sourceName, ver, None))
                newV = new[0][1]
                old, oldV = checkin.findRelativeVersion(repos, sourceName,
                                                        1, newV)
                if old:
                    old = ' (previous: %s)'%oldV.trailingRevision().asString()
                else:
                    old = ''
                print '================================'
                print '%s=%s%s' %(sourceName, shortver, old)
                print 'cvc rdiff %s -1 %s' %(sourceName[:-7], ver)
                print '================================'
                try:
                    checkin.rdiff(repos, cfg.buildLabel, sourceName, '-1', ver)
                except:
                    exitCode = 2
                    print 'rdiff failed for %s' %sourceName
                    try:
                        t, v, tb = sys.exc_info()
                        tbd = traceback.format_exception(t, v, tb)
                        sys.stdout.write(''.join(tbd[-min(2, len(tbd)):]))
                        sys.stderr.write(''.join(tbd))
                    except:
                        print 'Failed to print exception information'

                    print ''
                    print 'Please include a copy of this message in an issue'
                    print 'filed at https://issues.rpath.com/'
                print
        if sourceuser:
            print 'Committed by: %s' %sourceuser

        sendMail(tmpfile, subject, fromaddr, maxsize, argSet['email'], mailhost)

    if pkgMap or grpMap:
        # stdout is the tmpfile
        sys.stdout.flush()
        sys.stdout.seek(0)
        sys.stdout.truncate()

        binaries = sorted(pkgMap.keys())
        groups = sorted(grpMap.keys())
        subject = 'Binary: %s' %" ".join(binaries+groups)

        wrap = textwrap.TextWrapper(
            initial_indent='    ',
            subsequent_indent='        ',
        )

        if binaries:
            print "Binary package commits:"
            if binaryuser:
                print 'Committed by: %s' %binaryuser
        for package in binaries:
            for version in sorted(pkgMap[package].keys()):
                print '================================'
                print '%s=%s' %(package, version)
                flavorDict = pkgMap[package][version]
                for flavor in sorted(flavorDict.keys()):
                    print wrap.fill('%s:%s [%s]' %(package,
                        ' :'.join(sorted(flavorDict[flavor])),
                        ', '.join(flavor.split(','))))
                print

        if groups:
            print "Group commits:"
        for group in groups:
            for version in sorted(grpMap[group].keys()):
                print '================================'
                print '%s=%s' %(group, version)
                flavorSet = grpMap[group][version]
                for flavor in sorted(flavorSet):
                    print wrap.fill('[%s]' %
                        ', '.join(flavor.split(',')))
                print

        sendMail(tmpfile, subject, fromaddr, maxsize, argSet['email'], mailhost)
        os.dup2(oldStdOut, 1)

    return exitCode
Ejemplo n.º 4
0
 def runCommand(self, cfg, argSet, args, profile = False,
                callback = None, repos = None):
     args = args[1:]
     if argSet or len(args) != 4: return self.usage()
     checkin.rdiff(repos, cfg.buildLabel,  *args[1:])