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:])
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
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
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:])