def _makeSourceTrove(package, helper): cs = ChangeSet() filesToAdd = {} ver = macro.expand(package.getBaseVersion(), package) version = _createVersion(package, helper, ver) latestSpec = (package.getName(), str(version.trailingLabel()), None) results = helper.getRepos().findTroves(None,[latestSpec],allowMissing=True, getLeaves=False,troveTypes=trovesource.TROVE_QUERY_ALL) if results: existingVersions = [x[1] for x in results.get(latestSpec, ())] while version in existingVersions: version.incrementSourceCount() new = Trove(package.name, version, deps.Flavor()) new.setFactory(package.targetConfig.factory) message = "Temporary Source for %s" % version message = message.rstrip() + "\n" new.changeChangeLog(ChangeLog(name=helper.cfg.name, contact=helper.cfg.contact, message=message)) for path, contents in package.recipeFiles.iteritems(): isText = path == package.getRecipeName() pathId = hashlib.md5(path).digest() fileHelper = filetypes.RegularFile(contents=contents, config=isText) fileStream = fileHelper.get(pathId) fileStream.flags.isSource(set=True) fileId = fileStream.fileId() fileVersion = new.getVersion() key = pathId + fileId filesToAdd[key] = (fileStream, fileHelper.contents, isText) new.addFile(pathId, path, fileVersion, fileId) new.invalidateDigests() new.computeDigests() for key, (fileObj, fileContents, cfgFile) in filesToAdd.items(): cs.addFileContents(fileObj.pathId(), fileObj.fileId(), ChangedFileTypes.file, fileContents, cfgFile) cs.addFile(None, fileObj.fileId(), fileObj.freeze()) cs.newTrove(new.diff(None, absolute=True)[0]) return new.getNameVersionFlavor(), cs