| Index: cros_mark_as_stable.py
|
| diff --git a/cros_mark_as_stable.py b/cros_mark_as_stable.py
|
| index 927ec3278c64879ab26129f6a610c4c74694b9c6..daf3e1a4b596ac489d6bfbcea9ac28a351226d75 100755
|
| --- a/cros_mark_as_stable.py
|
| +++ b/cros_mark_as_stable.py
|
| @@ -21,12 +21,6 @@ from cros_build_lib import Info, RunCommand, Warning, Die
|
|
|
| gflags.DEFINE_string('board', 'x86-generic',
|
| 'Board for which the package belongs.', short_name='b')
|
| -gflags.DEFINE_string('commit_ids', '',
|
| - """Optional list of commit ids for each package.
|
| - This list must either be empty or have the same length as
|
| - the packages list. If not set all rev'd ebuilds will have
|
| - empty commit id's.""",
|
| - short_name='i')
|
| gflags.DEFINE_string('packages', '',
|
| 'Space separated list of packages to mark as stable.',
|
| short_name='p')
|
| @@ -71,6 +65,21 @@ def _Print(message):
|
| Info(message)
|
|
|
|
|
| +def _CleanStalePackages(board, package_array):
|
| + """Cleans up stale package info from a previous build."""
|
| + Info('Cleaning up stale packages %s.' % package_array)
|
| + unmerge_board_cmd = ['emerge-%s' % board, '--unmerge']
|
| + unmerge_board_cmd.extend(package_array)
|
| + RunCommand(unmerge_board_cmd, env=env)
|
| +
|
| + unmerge_host_cmd = ['sudo', 'emerge', '--unmerge']
|
| + unmerge_host_cmd.extend(package_array)
|
| + RunCommand(unmerge_host_cmd, env=env)
|
| +
|
| + RunCommand(['eclean-%s' % board, '-d', 'packages'], redirect_stderr=True)
|
| + RunCommand(['sudo', 'eclean', '-d', 'packages'], redirect_stderr=True)
|
| +
|
| +
|
| def _BestEBuild(ebuilds):
|
| """Returns the newest EBuild from a list of EBuild objects."""
|
| from portage.versions import vercmp
|
| @@ -103,7 +112,7 @@ def _FindStableEBuilds(files):
|
| # If we found a workon ebuild in this directory, apply some sanity checks.
|
| if workon_dir:
|
| if len(unstable_ebuilds) > 1:
|
| - Die('Found multiple unstable ebuilds in %s' % root)
|
| + Die('Found multiple unstable ebuilds in %s' % os.path.dirname(path))
|
| if len(stable_ebuilds) > 1:
|
| stable_ebuilds = [_BestEBuild(stable_ebuilds)]
|
|
|
| @@ -114,12 +123,12 @@ def _FindStableEBuilds(files):
|
| # We make a special exception for x11-drivers/xf86-video-msm for legacy
|
| # reasons.
|
| if stable_ebuilds[0].package != 'x11-drivers/xf86-video-msm':
|
| - Warning('Found multiple stable ebuilds in %s' % root)
|
| + Warning('Found multiple stable ebuilds in %s' % os.path.dirname(path))
|
|
|
| if not unstable_ebuilds:
|
| - Die('Missing 9999 ebuild in %s' % root)
|
| + Die('Missing 9999 ebuild in %s' % os.path.dirname(path))
|
| if not stable_ebuilds:
|
| - Die('Missing stable ebuild in %s' % root)
|
| + Die('Missing stable ebuild in %s' % os.path.dirname(path))
|
|
|
| if stable_ebuilds:
|
| return stable_ebuilds[0]
|
| @@ -138,9 +147,9 @@ def _BuildEBuildDictionary(overlays, all, packages):
|
| packages: A set of the packages we want to gather.
|
| """
|
| for overlay in overlays:
|
| - for root_dir, dirs, files in os.walk(overlay):
|
| + for package_dir, dirs, files in os.walk(overlay):
|
| # Add stable ebuilds to overlays[overlay].
|
| - paths = [os.path.join(root_dir, path) for path in files]
|
| + paths = [os.path.join(package_dir, path) for path in files]
|
| ebuild = _FindStableEBuilds(paths)
|
|
|
| # If the --all option isn't used, we only want to update packages that
|
| @@ -334,7 +343,7 @@ class _EBuild(object):
|
| # check.
|
| # TODO(davidjames): Fix the project name in the chromeos-kernel ebuild.
|
| cmd = 'cd %s && git config --get remote.cros.projectname' % srcdir
|
| - actual_project =_SimpleRunCommand(cmd).rstrip()
|
| + actual_project = _SimpleRunCommand(cmd).rstrip()
|
| if project not in (actual_project, 'chromeos-kernel'):
|
| Die('Project name mismatch for %s (%s != %s)' % (unstable_ebuild, project,
|
| actual_project))
|
| @@ -376,7 +385,7 @@ class EBuildStableMarker(object):
|
| def __init__(self, ebuild):
|
| self._ebuild = ebuild
|
|
|
| - def RevEBuild(self, commit_id="", redirect_file=None):
|
| + def RevEBuild(self, commit_id='', redirect_file=None):
|
| """Revs an ebuild given the git commit id.
|
|
|
| By default this class overwrites a new ebuild given the normal
|
| @@ -393,6 +402,8 @@ class EBuildStableMarker(object):
|
| Raises:
|
| OSError: Error occurred while creating a new ebuild.
|
| IOError: Error occurred while writing to the new revved ebuild file.
|
| + Returns:
|
| + True if the revved package is different than the old ebuild.
|
| """
|
| # TODO(sosa): Change to a check.
|
| if not self._ebuild:
|
| @@ -413,7 +424,7 @@ class EBuildStableMarker(object):
|
| redirect_file = sys.stdout
|
| if line.startswith('KEYWORDS'):
|
| # Actually mark this file as stable by removing ~'s.
|
| - redirect_file.write(line.replace("~", ""))
|
| + redirect_file.write(line.replace('~', ''))
|
| elif line.startswith('EAPI'):
|
| # Always add new commit_id after EAPI definition.
|
| redirect_file.write(line)
|
| @@ -423,12 +434,10 @@ class EBuildStableMarker(object):
|
| redirect_file.write(line)
|
| fileinput.close()
|
|
|
| - # If the new ebuild is identical to the old ebuild, return False and
|
| - # delete our changes.
|
| old_ebuild_path = self._ebuild.ebuild_path
|
| diff_cmd = ['diff', '-Bu', old_ebuild_path, new_ebuild_path]
|
| - if 0 == RunCommand(diff_cmd, exit_code=True,
|
| - print_cmd=gflags.FLAGS.verbose):
|
| + if 0 == RunCommand(diff_cmd, exit_code=True, redirect_stdout=True,
|
| + redirect_stderr=True, print_cmd=gflags.FLAGS.verbose):
|
| os.unlink(new_ebuild_path)
|
| return False
|
| else:
|
| @@ -474,14 +483,12 @@ def main(argv):
|
| '%s/private-overlays/chromeos-overlay' % gflags.FLAGS.srcroot: [],
|
| '%s/third_party/chromiumos-overlay' % gflags.FLAGS.srcroot: []
|
| }
|
| - all = gflags.FLAGS.all
|
|
|
| if command == 'commit':
|
| - _BuildEBuildDictionary(overlays, all, package_list)
|
| + _BuildEBuildDictionary(overlays, gflags.FLAGS.all, package_list)
|
|
|
| for overlay, ebuilds in overlays.items():
|
| - if not os.path.exists(overlay):
|
| - continue
|
| + if not os.path.exists(overlay): continue
|
| os.chdir(overlay)
|
|
|
| if command == 'clean':
|
| @@ -489,26 +496,34 @@ def main(argv):
|
| elif command == 'push':
|
| _PushChange()
|
| elif command == 'commit' and ebuilds:
|
| + work_branch = _GitBranch(_STABLE_BRANCH_NAME)
|
| + work_branch.CreateBranch()
|
| + if not work_branch.Exists():
|
| + Die('Unable to create stabilizing branch in %s' % overlay)
|
| +
|
| + # Contains the array of packages we actually revved.
|
| + revved_packages = []
|
| for ebuild in ebuilds:
|
| try:
|
| _Print('Working on %s' % ebuild.package)
|
| worker = EBuildStableMarker(ebuild)
|
| commit_id = ebuild.GetCommitId()
|
| if worker.RevEBuild(commit_id):
|
| - if not _CheckOnStabilizingBranch():
|
| - work_branch = _GitBranch(_STABLE_BRANCH_NAME)
|
| - work_branch.CreateBranch()
|
| - if not work_branch.Exists():
|
| - Die('Unable to create stabilizing branch in %s' % overlay)
|
| message = _GIT_COMMIT_MESSAGE % (ebuild.package, commit_id)
|
| worker.CommitChange(message)
|
| + revved_packages.append(ebuild.package)
|
| +
|
| except (OSError, IOError):
|
| Warning('Cannot rev %s\n' % ebuild.package,
|
| 'Note you will have to go into %s '
|
| 'and reset the git repo yourself.' % overlay)
|
| raise
|
|
|
| + if revved_packages:
|
| + _CleanStalePackages(gflags.FLAGS.board, revved_packages)
|
| + else:
|
| + work_branch.Delete()
|
| +
|
|
|
| if __name__ == '__main__':
|
| main(sys.argv)
|
| -
|
|
|