Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(292)

Side by Side Diff: cros_mark_as_stable.py

Issue 5513012: Be more selective about what packages we remove so that we can detect conflicts. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/crosutils.git@master
Patch Set: Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | cros_mark_as_stable_unittest.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 2
3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 """This module uprevs a given package's ebuild to the next revision.""" 7 """This module uprevs a given package's ebuild to the next revision."""
8 8
9 9
10 import fileinput 10 import fileinput
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 _SimpleRunCommand(delete_cmd) 312 _SimpleRunCommand(delete_cmd)
313 313
314 314
315 class EBuild(object): 315 class EBuild(object):
316 """Wrapper class for information about an ebuild.""" 316 """Wrapper class for information about an ebuild."""
317 317
318 def __init__(self, path): 318 def __init__(self, path):
319 """Sets up data about an ebuild from its path.""" 319 """Sets up data about an ebuild from its path."""
320 from portage.versions import pkgsplit 320 from portage.versions import pkgsplit
321 unused_path, self.category, self.pkgname, filename = path.rsplit('/', 3) 321 unused_path, self.category, self.pkgname, filename = path.rsplit('/', 3)
322 unused_pkgname, version_no_rev, rev = pkgsplit( 322 unused_pkgname, self.version_no_rev, rev = pkgsplit(
323 filename.replace('.ebuild', '')) 323 filename.replace('.ebuild', ''))
324 324
325 self.ebuild_path_no_version = os.path.join( 325 self.ebuild_path_no_version = os.path.join(
326 os.path.dirname(path), self.pkgname) 326 os.path.dirname(path), self.pkgname)
327 self.ebuild_path_no_revision = '%s-%s' % (self.ebuild_path_no_version,
sosa 2010/12/09 19:09:04 No. This is used by cros_mark_chrome_as_stable.
328 version_no_rev)
329 self.current_revision = int(rev.replace('r', '')) 327 self.current_revision = int(rev.replace('r', ''))
330 self.version = '%s-%s' % (version_no_rev, rev) 328 self.version = '%s-%s' % (self.version_no_rev, rev)
331 self.package = '%s/%s' % (self.category, self.pkgname) 329 self.package = '%s/%s' % (self.category, self.pkgname)
332 self.ebuild_path = path 330 self.ebuild_path = path
333 331
334 self.is_workon = False 332 self.is_workon = False
335 self.is_stable = False 333 self.is_stable = False
336 334
337 for line in fileinput.input(path): 335 for line in fileinput.input(path):
338 if line.startswith('inherit ') and 'cros-workon' in line: 336 if line.startswith('inherit ') and 'cros-workon' in line:
339 self.is_workon = True 337 self.is_workon = True
340 elif (line.startswith('KEYWORDS=') and '~' not in line and 338 elif (line.startswith('KEYWORDS=') and '~' not in line and
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 commit_id: String corresponding to the commit hash of the developer 440 commit_id: String corresponding to the commit hash of the developer
443 package to rev. 441 package to rev.
444 redirect_file: Optional file to write the new ebuild. By default 442 redirect_file: Optional file to write the new ebuild. By default
445 it is written using the standard rev'ing logic. This file must be 443 it is written using the standard rev'ing logic. This file must be
446 opened and closed by the caller. 444 opened and closed by the caller.
447 445
448 Raises: 446 Raises:
449 OSError: Error occurred while creating a new ebuild. 447 OSError: Error occurred while creating a new ebuild.
450 IOError: Error occurred while writing to the new revved ebuild file. 448 IOError: Error occurred while writing to the new revved ebuild file.
451 Returns: 449 Returns:
452 True if the revved package is different than the old ebuild. 450 If the revved package is different than the old ebuild, return the full
451 revved package name, including the version number. Otherwise, return None.
453 """ 452 """
454 if self._ebuild.is_stable: 453 if self._ebuild.is_stable:
455 new_stable_ebuild_path = '%s-r%d.ebuild' % ( 454 stable_version_no_rev = self._ebuild.version_no_rev
456 self._ebuild.ebuild_path_no_revision,
457 self._ebuild.current_revision + 1)
458 else: 455 else:
459 # If given unstable ebuild, use 0.0.1 rather than 9999. 456 # If given unstable ebuild, use 0.0.1 rather than 9999.
460 new_stable_ebuild_path = '%s-0.0.1-r%d.ebuild' % ( 457 stable_version_no_rev = '0.0.1'
sosa 2010/12/09 19:09:04 extra line
davidjames 2010/12/21 19:48:29 Looks like an artifact of rietveld -- there's no e
461 self._ebuild.ebuild_path_no_version, 458 new_version = '%s-r%d' % (stable_version_no_rev,
462 self._ebuild.current_revision + 1) 459 self._ebuild.current_revision + 1)
460 new_stable_ebuild_path = '%s-%s.ebuild' % (
461 self._ebuild.ebuild_path_no_version, new_version)
463 462
464 _Print('Creating new stable ebuild %s' % new_stable_ebuild_path) 463 _Print('Creating new stable ebuild %s' % new_stable_ebuild_path)
465 unstable_ebuild_path = ('%s-9999.ebuild' % 464 unstable_ebuild_path = ('%s-9999.ebuild' %
466 self._ebuild.ebuild_path_no_version) 465 self._ebuild.ebuild_path_no_version)
467 if not os.path.exists(unstable_ebuild_path): 466 if not os.path.exists(unstable_ebuild_path):
468 Die('Missing unstable ebuild: %s' % unstable_ebuild_path) 467 Die('Missing unstable ebuild: %s' % unstable_ebuild_path)
469 468
470 self.MarkAsStable(unstable_ebuild_path, new_stable_ebuild_path, 469 self.MarkAsStable(unstable_ebuild_path, new_stable_ebuild_path,
471 'CROS_WORKON_COMMIT', commit_id, redirect_file) 470 'CROS_WORKON_COMMIT', commit_id, redirect_file)
472 471
473 old_ebuild_path = self._ebuild.ebuild_path 472 old_ebuild_path = self._ebuild.ebuild_path
474 diff_cmd = ['diff', '-Bu', old_ebuild_path, new_stable_ebuild_path] 473 diff_cmd = ['diff', '-Bu', old_ebuild_path, new_stable_ebuild_path]
475 if 0 == RunCommand(diff_cmd, exit_code=True, redirect_stdout=True, 474 if 0 == RunCommand(diff_cmd, exit_code=True, redirect_stdout=True,
476 redirect_stderr=True, print_cmd=gflags.FLAGS.verbose): 475 redirect_stderr=True, print_cmd=gflags.FLAGS.verbose):
477 os.unlink(new_stable_ebuild_path) 476 os.unlink(new_stable_ebuild_path)
diandersAtChromium 2010/12/10 23:58:54 Leave in explicit return of None?
davidjames 2010/12/21 19:48:29 Done.
478 return False
479 else: 477 else:
480 _Print('Adding new stable ebuild to git') 478 _Print('Adding new stable ebuild to git')
481 _SimpleRunCommand('git add %s' % new_stable_ebuild_path) 479 _SimpleRunCommand('git add %s' % new_stable_ebuild_path)
482 480
483 if self._ebuild.is_stable: 481 if self._ebuild.is_stable:
484 _Print('Removing old ebuild from git') 482 _Print('Removing old ebuild from git')
485 _SimpleRunCommand('git rm %s' % old_ebuild_path) 483 _SimpleRunCommand('git rm %s' % old_ebuild_path)
486 484
487 return True 485 return '%s-%s' % (self._ebuild.package, new_version)
488 486
489 @classmethod 487 @classmethod
490 def CommitChange(cls, message): 488 def CommitChange(cls, message):
491 """Commits current changes in git locally with given commit message. 489 """Commits current changes in git locally with given commit message.
492 490
493 Args: 491 Args:
494 message: the commit string to write when committing to git. 492 message: the commit string to write when committing to git.
495 493
496 Raises: 494 Raises:
497 OSError: Error occurred while committing. 495 OSError: Error occurred while committing.
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 if not work_branch.Exists(): 547 if not work_branch.Exists():
550 Die('Unable to create stabilizing branch in %s' % overlay) 548 Die('Unable to create stabilizing branch in %s' % overlay)
551 549
552 # Contains the array of packages we actually revved. 550 # Contains the array of packages we actually revved.
553 revved_packages = [] 551 revved_packages = []
554 for ebuild in ebuilds: 552 for ebuild in ebuilds:
555 try: 553 try:
556 _Print('Working on %s' % ebuild.package) 554 _Print('Working on %s' % ebuild.package)
557 worker = EBuildStableMarker(ebuild) 555 worker = EBuildStableMarker(ebuild)
558 commit_id = ebuild.GetCommitId() 556 commit_id = ebuild.GetCommitId()
559 if worker.RevWorkOnEBuild(commit_id): 557 new_package = worker.RevWorkOnEBuild(commit_id)
558 if new_package:
560 message = _GIT_COMMIT_MESSAGE % (ebuild.package, commit_id) 559 message = _GIT_COMMIT_MESSAGE % (ebuild.package, commit_id)
561 worker.CommitChange(message) 560 worker.CommitChange(message)
562 revved_packages.append(ebuild.package) 561 revved_packages.append('=%s' % new_package)
563 562
564 except (OSError, IOError): 563 except (OSError, IOError):
565 Warning('Cannot rev %s\n' % ebuild.package, 564 Warning('Cannot rev %s\n' % ebuild.package,
566 'Note you will have to go into %s ' 565 'Note you will have to go into %s '
567 'and reset the git repo yourself.' % overlay) 566 'and reset the git repo yourself.' % overlay)
568 raise 567 raise
569 568
570 if revved_packages: 569 if revved_packages:
571 _CleanStalePackages(gflags.FLAGS.board, revved_packages) 570 _CleanStalePackages(gflags.FLAGS.board, revved_packages)
572 if gflags.FLAGS.drop_file: 571 if gflags.FLAGS.drop_file:
573 fh = open(gflags.FLAGS.drop_file, 'w') 572 fh = open(gflags.FLAGS.drop_file, 'w')
574 fh.write(' '.join(revved_packages)) 573 fh.write(' '.join(revved_packages))
diandersAtChromium 2010/12/10 23:58:54 Won't this file now contain "=" before each packag
davidjames 2010/12/21 19:48:29 Great catch. Fixed -- I changed my patch so that r
575 fh.close() 574 fh.close()
576 else: 575 else:
577 work_branch.Delete() 576 work_branch.Delete()
578 577
579 578
580 if __name__ == '__main__': 579 if __name__ == '__main__':
581 main(sys.argv) 580 main(sys.argv)
OLDNEW
« no previous file with comments | « no previous file | cros_mark_as_stable_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698