Bug 714063 - SingleSourceFactory should use intree mozconfigs if they exist. r=bhearsum
authorRail Aliiev <rail@mozilla.com>
Wed, 04 Feb 2015 10:09:40 -0500 (2015-02-04)
changeset 4067 10f70016ef77c792671068efd6ecedb5566d1aa4
parent 4064 4bb66cbb01204e00a7b8c132bb549c36f03c8622
child 4068 9fc99ca28c3fa92505af8e4ddf11cc8a5dac81c1
push id3372
push userraliiev@mozilla.com
push dateWed, 04 Feb 2015 15:09:45 +0000 (2015-02-04)
reviewersbhearsum
bugs714063
Bug 714063 - SingleSourceFactory should use intree mozconfigs if they exist. r=bhearsum
misc.py
process/factory.py
process/release.py
--- a/misc.py
+++ b/misc.py
@@ -1685,17 +1685,16 @@ def generateBranchObjects(config, name, 
             factory_kwargs = {
                 'env': pf['env'],
                 'objdir': pf['platform_objdir'],
                 'platform': platform,
                 'hgHost': config['hghost'],
                 'repoPath': config['repo_path'],
                 'buildToolsRepoPath': config['build_tools_repo_path'],
                 'configRepoPath': config['config_repo_path'],
-                'configSubDir': config['config_subdir'],
                 'profiledBuild': per_checkin_build_uses_pgo,
                 'productName': pf['product_name'],
                 'mozconfig': pf['mozconfig'],
                 'srcMozconfig': pf.get('src_mozconfig'),
                 'use_mock': pf.get('use_mock'),
                 'mock_target': pf.get('mock_target'),
                 'mock_packages': pf.get('mock_packages'),
                 'mock_copyin_files': pf.get('mock_copyin_files'),
@@ -1970,17 +1969,16 @@ def generateBranchObjects(config, name, 
                 mozilla2_nightly_factory = NightlyBuildFactory(
                     env=nightly_env,
                     objdir=pf['platform_objdir'],
                     platform=platform,
                     hgHost=config['hghost'],
                     repoPath=config['repo_path'],
                     buildToolsRepoPath=config['build_tools_repo_path'],
                     configRepoPath=config['config_repo_path'],
-                    configSubDir=config['config_subdir'],
                     profiledBuild=nightly_pgo,
                     productName=pf['product_name'],
                     mozconfig=pf['mozconfig'],
                     srcMozconfig=pf.get('src_mozconfig'),
                     use_mock=pf.get('use_mock'),
                     mock_target=pf.get('mock_target'),
                     mock_packages=pf.get('mock_packages'),
                     mock_copyin_files=pf.get('mock_copyin_files'),
@@ -2303,17 +2301,16 @@ def generateBranchObjects(config, name, 
             mozilla2_xulrunner_factory = NightlyBuildFactory(
                 env=xr_env,
                 objdir=pf['platform_objdir'],
                 platform=platform,
                 hgHost=config['hghost'],
                 repoPath=config['repo_path'],
                 buildToolsRepoPath=config['build_tools_repo_path'],
                 configRepoPath=config['config_repo_path'],
-                configSubDir=config['config_subdir'],
                 profiledBuild=False,
                 productName='xulrunner',
                 mozconfig=mozconfig,
                 srcMozconfig=pf.get('src_xulrunner_mozconfig'),
                 stageServer=config['stage_server'],
                 stageUsername=config['stage_username_xulrunner'],
                 stageGroup=config['stage_group'],
                 stageSshKey=config['stage_ssh_xulrunner_key'],
--- a/process/factory.py
+++ b/process/factory.py
@@ -796,34 +796,34 @@ class MozillaBuildFactory(RequestSorting
             server_cert=SIGNING_SERVER_CERT,
             slavedest=token,
             workdir='.',
             name='download_token',
         ))
 
 
 class MercurialBuildFactory(MozillaBuildFactory, MockMixin, TooltoolMixin):
-    def __init__(self, objdir, platform, configRepoPath, configSubDir,
+    def __init__(self, objdir, platform, configRepoPath,
                  profiledBuild, mozconfig, srcMozconfig=None,
                  productName=None,
                  buildRevision=None, stageServer=None, stageUsername=None,
                  stageGroup=None, stageSshKey=None, stageBasePath=None,
                  stageProduct=None, post_upload_include_platform=False,
                  ausBaseUploadDir=None, updatePlatform=None,
                  downloadBaseURL=None, ausUser=None, ausSshKey=None,
                  ausHost=None, nightly=False,
                  checkTest=False, valgrindCheck=False,
                  graphServer=None, graphSelector=None, graphBranch=None,
                  baseName=None, uploadPackages=True, uploadSymbols=True,
                  createSnippet=False, createPartial=False, doCleanup=True,
                  packageSDK=False, packageTests=False, mozillaDir=None,
                  mozillaSrcDir=None,
                  enable_ccache=False, stageLogBaseUrl=None,
                  triggeredSchedulers=None, triggerBuilds=False,
-                 mozconfigBranch="production", useSharedCheckouts=False,
+                 useSharedCheckouts=False,
                  stagePlatform=None, testPrettyNames=False, l10nCheckTest=False,
                  disableSymbols=False,
                  doBuildAnalysis=False,
                  doPostLinkerSize=False,
                  downloadSubdir=None,
                  multiLocale=False,
                  multiLocaleMerge=True,
                  compareLocalesRepoPath=None,
@@ -856,17 +856,16 @@ class MercurialBuildFactory(MozillaBuild
         self.addStep(FunctionalStep(
                      name='set_buildids',
                      func=setBuildIDProps,
                      ))
 
         self.objdir = objdir
         self.platform = platform
         self.configRepoPath = configRepoPath
-        self.configSubDir = configSubDir
         self.profiledBuild = profiledBuild
         self.mozconfig = mozconfig
         self.srcMozconfig = srcMozconfig
         self.productName = productName
         self.buildRevision = buildRevision
         self.stageServer = stageServer
         self.stageUsername = stageUsername
         self.stageGroup = stageGroup
@@ -900,17 +899,16 @@ class MercurialBuildFactory(MozillaBuild
         self.doCleanup = doCleanup
         self.packageSDK = packageSDK
         self.enablePackaging = enablePackaging
         self.enableInstaller = enableInstaller
         self.packageTests = packageTests
         self.enable_ccache = enable_ccache
         self.triggeredSchedulers = triggeredSchedulers
         self.triggerBuilds = triggerBuilds
-        self.mozconfigBranch = mozconfigBranch
         self.post_upload_include_platform = post_upload_include_platform
         self.useSharedCheckouts = useSharedCheckouts
         self.testPrettyNames = testPrettyNames
         self.l10nCheckTest = l10nCheckTest
         self.tooltool_manifest_src = tooltool_manifest_src
         self.tooltool_url_list = tooltool_url_list or []
         self.tooltool_script = tooltool_script or ['/tools/tooltool.py']
         self.tooltool_bootstrap = tooltool_bootstrap
@@ -1352,38 +1350,19 @@ class MercurialBuildFactory(MozillaBuild
             name='set_comments',
             property_name="comments",
             value=lambda build: build.source.changes[-
                                                      1].comments if len(
                                                          build.source.changes) > 0 else "",
         ))
 
     def addConfigSteps(self):
-        assert self.configRepoPath is not None
-        assert self.configSubDir is not None
-        assert self.mozconfig is not None
-
-        configRepo = self.getRepository(self.configRepoPath)
-        hg_mozconfig = '%s/raw-file/%s/%s/%s/mozconfig' % (
-            configRepo, self.mozconfigBranch, self.configSubDir, self.mozconfig)
-        if self.srcMozconfig:
-            cmd = ['bash', '-c',
-                   '''if [ -f "%(src_mozconfig)s" ]; then
-                        echo Using in-tree mozconfig;
-                        cp %(src_mozconfig)s .mozconfig;
-                    else
-                        echo Downloading mozconfig;
-                        wget -O .mozconfig %(hg_mozconfig)s;
-                    fi'''.replace("\n", "") % {'src_mozconfig': self.srcMozconfig, 'hg_mozconfig': hg_mozconfig}]
-        else:
-            cmd = ['wget', '-O', '.mozconfig', hg_mozconfig]
-
-        self.addStep(RetryingShellCommand(
+        self.addStep(ShellCommand(
             name='get_mozconfig',
-            command=cmd,
+            command=['cp', self.srcMozconfig, '.mozconfig'],
             description=['getting', 'mozconfig'],
             descriptionDone=['got', 'mozconfig'],
             haltOnFailure=True
         ))
         self.addStep(ShellCommand(
                      name='cat_mozconfig',
                      command=['cat', '.mozconfig'],
                      ))
@@ -3053,18 +3032,18 @@ class BaseRepackFactory(MozillaBuildFact
     # Override ignore_dirs so that we don't delete l10n nightly builds
     # before running a l10n nightly build
     ignore_dirs = MozillaBuildFactory.ignore_dirs + [normalizeName('*-nightly')]
 
     extraConfigureArgs = []
 
     def __init__(self, project, appName, l10nRepoPath,
                  compareLocalesRepoPath, compareLocalesTag, stageServer,
-                 stageUsername, stageSshKey=None, objdir='', platform='',
-                 mozconfig=None,
+                 stageUsername, mozconfig, stageSshKey=None, objdir='',
+                 platform='',
                  tree="notset", mozillaDir=None, mozillaSrcDir=None,
                  l10nTag='default',
                  mergeLocales=True,
                  testPrettyNames=False,
                  callClientPy=False,
                  clientPyConfig=None,
                  tooltool_manifest_src=None,
                  tooltool_bootstrap="setup.sh",
@@ -3215,31 +3194,19 @@ class BaseRepackFactory(MozillaBuildFact
 
     def processCommand(self, **kwargs):
         '''This function is overriden by MaemoNightlyRepackFactory to
         adjust the command and workdir approprietaly for mock
         '''
         return kwargs
 
     def getMozconfig(self):
-        if not self.mozconfig:
-            return
-
-        cmd = ['bash', '-c',
-               '''if [ -f "%(mozconfig)s" ]; then
-                    echo Using in-tree mozconfig;
-                    cp %(mozconfig)s .mozconfig;
-                else
-                    echo Could not find in-tree mozconfig;
-                    exit 1;
-                fi'''.replace("\n", "") % {'mozconfig': self.mozconfig}]
-
-        self.addStep(RetryingShellCommand(
+        self.addStep(ShellCommand(
             name='get_mozconfig',
-            command=cmd,
+            command=['cp', self.mozconfig, '.mozconfig'],
             description=['getting', 'mozconfig'],
             descriptionDone=['got', 'mozconfig'],
             workdir='build/' + self.origSrcDir,
             haltOnFailure=True,
         ))
         self.addStep(ShellCommand(
             name='cat_mozconfig',
             command=['cat', '.mozconfig'],
@@ -4025,30 +3992,45 @@ class StagingRepositorySetupFactory(Rele
         # Wait for hg.m.o to catch up
         self.addStep(ShellCommand(
                      name='wait_for_hg',
                      command=['sleep', '600'],
                      description=['wait', 'for', 'hg'],
                      ))
 
 
-class SingleSourceFactory(ReleaseFactory):
-    def __init__(self, productName, version, baseTag, stagingServer,
-                 stageUsername, stageSshKey, buildNumber, mozconfig,
-                 configRepoPath, configSubDir, objdir='',
-                 mozillaDir=None, mozillaSrcDir=None, autoconfDirs=['.'], buildSpace=2,
-                 mozconfigBranch="production", appVersion=None, **kwargs):
+class SingleSourceFactory(ReleaseFactory, TooltoolMixin):
+    def __init__(self,
+                 productName,
+                 version,
+                 baseTag,
+                 stagingServer,
+                 stageUsername,
+                 stageSshKey,
+                 buildNumber,
+                 mozconfig,
+                 appVersion=None,
+                 objdir='',
+                 mozillaDir=None,
+                 mozillaSrcDir=None,
+                 autoconfDirs=['.'],
+                 buildSpace=2,
+                 tooltool_manifest_src=None,
+                 tooltool_bootstrap="setup.sh",
+                 tooltool_url_list=None,
+                 tooltool_script=None,
+                 **kwargs):
         ReleaseFactory.__init__(self, buildSpace=buildSpace, **kwargs)
 
         self.mozconfig = mozconfig
-        self.configRepoPath = configRepoPath
-        self.configSubDir = configSubDir
-        self.mozconfigBranch = mozconfigBranch
+        self.tooltool_manifest_src = tooltool_manifest_src
+        self.tooltool_url_list = tooltool_url_list or []
+        self.tooltool_script = tooltool_script or ['/tools/tooltool.py']
+        self.tooltool_bootstrap = tooltool_bootstrap
         self.releaseTag = '%s_RELEASE' % (baseTag)
-
         self.origSrcDir = self.branchName
 
         # Mozilla subdir
         if mozillaDir:
             self.mozillaDir = '/%s' % mozillaDir
             self.mozillaSrcDir = '%s/%s' % (self.origSrcDir, mozillaDir)
         else:
             self.mozillaDir = ''
@@ -4104,16 +4086,18 @@ class SingleSourceFactory(ReleaseFactory
                      ))
         self.addStep(SetProperty(
                      name='hg_ident_revision',
                      command=['hg', 'identify', '-i'],
                      property='revision',
                      workdir=self.mozillaSrcDir,
                      haltOnFailure=True
                      ))
+        if self.tooltool_manifest_src:
+            self.addTooltoolStep(workdir=self.origSrcDir)
         self.addConfigSteps(workdir=self.mozillaSrcDir)
         self.addStep(MockCommand(
                      name='configure',
                      command=self.makeCmd + ['-f', 'client.mk', 'configure'],
                      workdir=self.mozillaSrcDir,
                      env=self.env,
                      description=['configure'],
                      mock=self.use_mock,
@@ -4140,55 +4124,23 @@ class SingleSourceFactory(ReleaseFactory
             workdir="%s/%s" % (self.mozillaSrcDir, self.mozillaObjdir),
             env=uploadEnv,
             description=['upload files'],
             mock=self.use_mock,
             target=self.mock_target,
         ))
 
     def addConfigSteps(self, workdir='build'):
-        assert self.configRepoPath is not None
-        assert self.configSubDir is not None
-        assert self.mozconfig is not None
-        configRepo = self.getRepository(self.configRepoPath)
-
-        self.mozconfig = 'configs/%s/%s/mozconfig' % (self.configSubDir,
-                                                      self.mozconfig)
         self.addStep(ShellCommand(
-                     name='rm_configs',
-                     command=['rm', '-rf', 'configs'],
-                     description=['removing', 'configs'],
-                     descriptionDone=['remove', 'configs'],
-                     haltOnFailure=True,
-                     workdir='.'
-                     ))
-        self.addStep(MercurialCloneCommand(
-                     name='hg_clone_configs',
-                     command=['hg', 'clone', configRepo, 'configs'],
-                     description=['checking', 'out', 'configs'],
-                     descriptionDone=['checkout', 'configs'],
-                     haltOnFailure=True,
-                     workdir='.'
-                     ))
-        self.addStep(ShellCommand(
-                     name='hg_update',
-                     command=['hg', 'update', '-r', self.mozconfigBranch],
-                     description=['updating', 'mozconfigs'],
-                     haltOnFailure=True,
-                     workdir='./configs'
-                     ))
-        self.addStep(ShellCommand(
-                     # cp configs/mozilla2/$platform/$repo/$type/mozconfig
-                     # .mozconfig
                      name='cp_mozconfig',
-                     command=['cp', self.mozconfig, '%s/.mozconfig' % workdir],
+                     command=['cp', self.mozconfig, '.mozconfig'],
                      description=['copying', 'mozconfig'],
                      descriptionDone=['copy', 'mozconfig'],
                      haltOnFailure=True,
-                     workdir='.'
+                     workdir=workdir,
                      ))
         self.addStep(ShellCommand(
                      name='cat_mozconfig',
                      command=['cat', '.mozconfig'],
                      workdir=workdir
                      ))
 
 
--- a/process/release.py
+++ b/process/release.py
@@ -494,18 +494,18 @@ def generateReleaseBranchObjects(release
                             properties={
                                 'platform': None,
                                 'branch': 'release-%s' % sourceRepoInfo['name'],
                             },
                             env=dummy_builder_env,
                             ))
 
     if not releaseConfig.get('skip_source'):
-        pf = branchConfig['platforms']['linux']
-        mozconfig = 'linux/%s/release' % sourceRepoInfo['name']
+        pf = branchConfig['platforms']['linux64']
+        mozconfig = '%s/config/mozconfigs/linux64/release' % releaseConfig['appName']
         platform_env = pf['env'].copy()
         platform_env['COMM_REV'] = releaseTag
         platform_env['MOZILLA_REV'] = releaseTag
         # do not use use_mock(platform) check because we are building source
         # packages on the linux platform, else the |platform in mock_platforms|
         # check will fail for android.
         source_use_mock = releaseConfig.get('use_mock')
 
@@ -522,24 +522,24 @@ def generateReleaseBranchObjects(release
             stagingServer=branchConfig['stage_server'],
             stageUsername=branchConfig['stage_username'],
             stageSshKey=branchConfig['stage_ssh_key'],
             buildNumber=releaseConfig['buildNumber'],
             autoconfDirs=['.', 'js/src'],
             clobberURL=clobberer_url,
             clobberBranch='release-%s' % sourceRepoInfo['name'],
             mozconfig=mozconfig,
-            configRepoPath=branchConfig['config_repo_path'],
-            configSubDir=branchConfig['config_subdir'],
             signingServers=getSigningServers('linux'),
-            mozconfigBranch=releaseTag,
             use_mock=source_use_mock,
             mock_target=pf.get('mock_target'),
             mock_packages=pf.get('mock_packages'),
             mock_copyin_files=pf.get('mock_copyin_files'),
+            tooltool_manifest_src=pf.get('tooltool_manifest_src', None),
+            tooltool_url_list=branchConfig.get('tooltool_url_list', []),
+            tooltool_script=pf.get('tooltool_script'),
         )
 
         builders.append({
                         'name': builderPrefix('%s_source' % releaseConfig['productName']),
                         'slavenames': branchConfig['platforms']['linux']['slaves'] +
                         branchConfig['platforms']['linux64']['slaves'],
                         'category': builderPrefix(''),
                         'builddir': builderPrefix(
@@ -556,17 +556,17 @@ def generateReleaseBranchObjects(release
                             'platform': None,
                             'branch': 'release-%s' % sourceRepoInfo['name'],
                         }
                         })
         deliverables_builders.append(
             builderPrefix('%s_source' % releaseConfig['productName']))
 
         if releaseConfig.get('xulrunnerPlatforms'):
-            mozconfig = 'linux/%s/xulrunner' % sourceRepoInfo['name']
+            mozconfig = '%s/config/mozconfigs/linux64/release' % releaseConfig['appName']
             xulrunner_source_factory = SingleSourceFactory(
                 env=pf['env'],
                 objdir=pf['platform_objdir'],
                 hgHost=branchConfig['hghost'],
                 buildToolsRepoPath=tools_repo_path,
                 repoPath=sourceRepoInfo['path'],
                 productName='xulrunner',
                 version=releaseConfig['version'],
@@ -575,24 +575,24 @@ def generateReleaseBranchObjects(release
                 stagingServer=branchConfig['stage_server'],
                 stageUsername=branchConfig['stage_username_xulrunner'],
                 stageSshKey=branchConfig['stage_ssh_xulrunner_key'],
                 buildNumber=releaseConfig['buildNumber'],
                 autoconfDirs=['.', 'js/src'],
                 clobberURL=clobberer_url,
                 clobberBranch='release-%s' % sourceRepoInfo['name'],
                 mozconfig=mozconfig,
-                configRepoPath=branchConfig['config_repo_path'],
-                configSubDir=branchConfig['config_subdir'],
                 signingServers=getSigningServers('linux'),
-                mozconfigBranch=releaseTag,
                 use_mock=use_mock('linux'),
                 mock_target=pf.get('mock_target'),
                 mock_packages=pf.get('mock_packages'),
                 mock_copyin_files=pf.get('mock_copyin_files'),
+                tooltool_manifest_src=pf.get('tooltool_manifest_src', None),
+                tooltool_url_list=branchConfig.get('tooltool_url_list', []),
+                tooltool_script=pf.get('tooltool_script'),
             )
 
             builders.append({
                             'name': builderPrefix('xulrunner_source'),
                             'slavenames': branchConfig['platforms']['linux']['slaves'] +
                             branchConfig['platforms']['linux64']['slaves'],
                             'category': builderPrefix(''),
                             'builddir': builderPrefix('xulrunner_source'),
@@ -679,17 +679,16 @@ def generateReleaseBranchObjects(release
             build_factory = ReleaseBuildFactory(
                 env=platform_env,
                 objdir=pf['platform_objdir'],
                 platform=platform,
                 hgHost=branchConfig['hghost'],
                 repoPath=sourceRepoInfo['path'],
                 buildToolsRepoPath=tools_repo_path,
                 configRepoPath=branchConfig['config_repo_path'],
-                configSubDir=branchConfig['config_subdir'],
                 profiledBuild=pf['profiled_build'],
                 mozconfig=mozconfig,
                 srcMozconfig=releaseConfig.get('mozconfigs', {}).get(platform),
                 buildRevision=releaseTag,
                 stageServer=branchConfig['stage_server'],
                 stageUsername=branchConfig['stage_username'],
                 stageGroup=branchConfig['stage_group'],
                 stageSshKey=branchConfig['stage_ssh_key'],
@@ -723,17 +722,16 @@ def generateReleaseBranchObjects(release
                 mozharnessRepoPath=mozharness_repo_path,
                 mozharnessTag=releaseTag,
                 multiLocaleScript=pf.get('multi_locale_script'),
                 multiLocaleConfig=multiLocaleConfig,
                 mozharnessMultiOptions=mozharnessMultiOptions,
                 usePrettyNames=releaseConfig.get('usePrettyNames', True),
                 enableUpdatePackaging=releaseConfig.get(
                     'enableUpdatePackaging', True),
-                mozconfigBranch=releaseTag,
                 signingServers=getSigningServers(platform),
                 createPartial=releaseConfig.get(
                     'enablePartialMarsAtBuildTime', True),
                 mozillaDir=mozillaDir,
                 mozillaSrcDir=mozillaSrcDir,
                 enableInstaller=pf.get('enable_installer', False),
                 tooltool_manifest_src=pf.get('tooltool_manifest_src', None),
                 tooltool_url_list=branchConfig.get('tooltool_url_list', []),
@@ -983,17 +981,16 @@ def generateReleaseBranchObjects(release
             xulrunner_build_factory = XulrunnerReleaseBuildFactory(
                 env=xr_env,
                 objdir=pf['platform_objdir'],
                 platform=platform,
                 hgHost=branchConfig['hghost'],
                 repoPath=sourceRepoInfo['path'],
                 buildToolsRepoPath=tools_repo_path,
                 configRepoPath=branchConfig['config_repo_path'],
-                configSubDir=branchConfig['config_subdir'],
                 profiledBuild=None,
                 mozconfig='%s/%s/xulrunner' % (
                     platform, sourceRepoInfo['name']),
                 srcMozconfig=releaseConfig.get(
                     'xulrunner_mozconfigs', {}).get(platform),
                 buildRevision=releaseTag,
                 stageServer=branchConfig['stage_server'],
                 stageUsername=branchConfig['stage_username_xulrunner'],