def testGetTipOfTrunkRevision(self):
   """Tests if we can get the latest svn revision from TOT."""
   A_URL = 'dorf://mink/delaane/forkat/sertiunu.ortg./desk'
   result = {'log': [{'commit': 'deadbeef' * 5}]}
   self.PatchObject(gob_util, 'FetchUrlJson', return_value=result)
   revision = gob_util.GetTipOfTrunkRevision(A_URL)
   self.assertEqual(revision, 'deadbeef' * 5)
Example #2
0
def main(_argv):
    parser = commandline.ArgumentParser(usage=__doc__)
    parser.add_argument('--force_version',
                        default=None,
                        help='git revision hash to use')
    parser.add_argument('--repo_url', default=MOJO_REPO_URL)
    parser.add_argument('--srcroot',
                        type='path',
                        default=os.path.join(os.environ['HOME'], 'trunk',
                                             'src'),
                        help='Path to the src directory')
    parser.add_argument('--tracking_branch',
                        default='cros/master',
                        help='Branch we are tracking changes against')
    options = parser.parse_args()
    options.Freeze()

    mojo_version_atom = None
    ebuild_dir = os.path.join(options.srcroot, MOJO_EBUILD_PATH)

    # Figure out commit to use and its date.
    if options.force_version:
        commit_to_use = options.force_version
    else:
        commit_to_use = gob_util.GetTipOfTrunkRevision(options.repo_url)
    date_of_commit = gob_util.GetCommitDate(options.repo_url, commit_to_use)

    # Do the uprev and explicit print version to inform caller if we
    # made a change.
    mojo_version_atom = UprevStableEBuild(ebuild_dir, commit_to_use,
                                          date_of_commit,
                                          options.tracking_branch)
    if mojo_version_atom:
        print('MOJO_VERSION_ATOM=%s' % mojo_version_atom)
def main(argv):
    parser = GetParser()
    options = parser.parse_args(argv)
    options.Freeze()
    chrome_rev = options.revision

    if options.force_version and chrome_rev not in (
            constants.CHROME_REV_SPEC, constants.CHROME_REV_LATEST):
        parser.error('--force_version is not compatible with the %r '
                     'option.' % (chrome_rev, ))

    overlay_dir = os.path.abspath(_OVERLAY_DIR % {'srcroot': options.srcroot})
    chrome_package_dir = os.path.join(overlay_dir, constants.CHROME_CP)
    version_to_uprev = None
    commit_to_use = None
    sticky_branch = None

    (unstable_ebuild,
     stable_ebuilds) = FindChromeCandidates(chrome_package_dir)

    if chrome_rev == constants.CHROME_REV_LOCAL:
        if 'CHROME_ROOT' in os.environ:
            chrome_root = os.environ['CHROME_ROOT']
        else:
            chrome_root = os.path.join(os.environ['HOME'], 'chrome_root')

        version_to_uprev = _GetTipOfTrunkVersionFile(chrome_root)
        commit_to_use = 'Unknown'
        logging.info('Using local source, versioning is untrustworthy.')
    elif chrome_rev == constants.CHROME_REV_SPEC:
        if '.' in options.force_version:
            version_to_uprev = options.force_version
        else:
            commit_to_use = options.force_version
            if '@' in commit_to_use:
                commit_to_use = commit_to_use.rpartition('@')[2]
            version_to_uprev = _GetSpecificVersionUrl(options.chrome_url,
                                                      commit_to_use)
    elif chrome_rev == constants.CHROME_REV_TOT:
        commit_to_use = gob_util.GetTipOfTrunkRevision(options.chrome_url)
        version_to_uprev = _GetSpecificVersionUrl(options.chrome_url,
                                                  commit_to_use)
    elif chrome_rev == constants.CHROME_REV_LATEST:
        if options.force_version:
            if '.' not in options.force_version:
                parser.error(
                    '%s only accepts released Chrome versions, not SVN or '
                    'Git revisions.' % (chrome_rev, ))
            version_to_uprev = options.force_version
        else:
            version_to_uprev = GetLatestRelease(options.chrome_url)
    else:
        sticky_ebuild = _GetStickyEBuild(stable_ebuilds)
        sticky_version = sticky_ebuild.chrome_version
        sticky_branch = sticky_version.rpartition('.')[0]
        version_to_uprev = GetLatestRelease(options.chrome_url, sticky_branch)

    stable_candidate = FindChromeUprevCandidate(stable_ebuilds, chrome_rev,
                                                sticky_branch)

    if stable_candidate:
        logging.info('Stable candidate found %s' % stable_candidate)
    else:
        logging.info('No stable candidate found.')

    tracking_branch = 'remotes/m/%s' % os.path.basename(
        options.tracking_branch)
    existing_branch = git.GetCurrentBranch(chrome_package_dir)
    work_branch = cros_mark_as_stable.GitBranch(constants.STABLE_EBUILD_BRANCH,
                                                tracking_branch,
                                                chrome_package_dir)
    work_branch.CreateBranch()

    # In the case of uprevving overlays that have patches applied to them,
    # include the patched changes in the stabilizing branch.
    if existing_branch:
        git.RunGit(chrome_package_dir, ['rebase', existing_branch])

    chrome_version_atom = MarkChromeEBuildAsStable(
        stable_candidate, unstable_ebuild, 'chromeos-chrome', chrome_rev,
        version_to_uprev, commit_to_use, chrome_package_dir)
    if chrome_version_atom:
        if options.boards:
            cros_mark_as_stable.CleanStalePackages(options.srcroot,
                                                   options.boards.split(':'),
                                                   [chrome_version_atom])

        # If we did rev Chrome, now is a good time to uprev other packages.
        for other_ebuild in constants.OTHER_CHROME_PACKAGES:
            other_ebuild_name = os.path.basename(other_ebuild)
            other_package_dir = os.path.join(overlay_dir, other_ebuild)
            (other_unstable_ebuild,
             other_stable_ebuilds) = FindChromeCandidates(other_package_dir)
            other_stable_candidate = FindChromeUprevCandidate(
                other_stable_ebuilds, chrome_rev, sticky_branch)
            revved_atom = MarkChromeEBuildAsStable(
                other_stable_candidate, other_unstable_ebuild,
                other_ebuild_name, chrome_rev, version_to_uprev, commit_to_use,
                other_package_dir)
            if revved_atom and options.boards:
                cros_mark_as_stable.CleanStalePackages(
                    options.srcroot, options.boards.split(':'), [revved_atom])

    # Explicit print to communicate to caller.
    if chrome_version_atom:
        print('CHROME_VERSION_ATOM=%s' % chrome_version_atom)
Example #4
0
def _RunBuildStagesWrapper(options, site_config, build_config):
    """Helper function that wraps RunBuildStages()."""
    logging.info('cbuildbot was executed with args %s' %
                 cros_build_lib.CmdToStr(sys.argv))

    chrome_rev = build_config['chrome_rev']
    if options.chrome_rev:
        chrome_rev = options.chrome_rev
    if chrome_rev == constants.CHROME_REV_TOT:
        options.chrome_version = gob_util.GetTipOfTrunkRevision(
            constants.CHROMIUM_GOB_URL)
        options.chrome_rev = constants.CHROME_REV_SPEC

    # If it's likely we'll need to build Chrome, fetch the source.
    if build_config['sync_chrome'] is None:
        options.managed_chrome = (chrome_rev != constants.CHROME_REV_LOCAL and
                                  (not build_config['usepkg_build_packages']
                                   or chrome_rev or build_config['profile']))
    else:
        options.managed_chrome = build_config['sync_chrome']

    if options.managed_chrome:
        # Tell Chrome to fetch the source locally.
        internal = constants.USE_CHROME_INTERNAL in build_config['useflags']
        chrome_src = 'chrome-src-internal' if internal else 'chrome-src'
        target_name = 'target'
        if options.branch:
            # Tie the cache per branch
            target_name = 'target-%s' % options.branch
        options.chrome_root = os.path.join(options.cache_dir, 'distfiles',
                                           target_name, chrome_src)
        # Create directory if in need
        osutils.SafeMakedirsNonRoot(options.chrome_root)

    # We are done munging options values, so freeze options object now to avoid
    # further abuse of it.
    # TODO(mtennant): one by one identify each options value override and see if
    # it can be handled another way.  Try to push this freeze closer and closer
    # to the start of the script (e.g. in or after _PostParseCheck).
    options.Freeze()

    metadata_dump_dict = {
        # A detected default has been set before now if it wasn't explicit.
        'branch': options.branch,
    }
    if options.metadata_dump:
        with open(options.metadata_dump, 'r') as metadata_file:
            metadata_dump_dict = json.loads(metadata_file.read())

    with parallel.Manager() as manager:
        builder_run = cbuildbot_run.BuilderRun(options, site_config,
                                               build_config, manager)
        if metadata_dump_dict:
            builder_run.attrs.metadata.UpdateWithDict(metadata_dump_dict)

        if builder_run.config.builder_class_name is None:
            # TODO: This should get relocated to chromeos_config.
            if _IsDistributedBuilder(options, chrome_rev, build_config):
                builder_cls_name = 'simple_builders.DistributedBuilder'
            else:
                builder_cls_name = 'simple_builders.SimpleBuilder'
            builder_cls = builders.GetBuilderClass(builder_cls_name)
            builder = builder_cls(builder_run)
        else:
            builder = builders.Builder(builder_run)

        if not builder.Run():
            sys.exit(1)