Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Delta Between Two Patch Sets: releaseAutomation.py

Issue 29508667: Issue 4354, 4355 - handle dirty/outdated repos on release (Closed)
Left Patch Set: Created Aug. 16, 2017, 10:22 a.m.
Right Patch Set: Created Aug. 16, 2017, 11:24 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « no previous file | no next file » | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
1 # This Source Code Form is subject to the terms of the Mozilla Public 1 # This Source Code Form is subject to the terms of the Mozilla Public
2 # License, v. 2.0. If a copy of the MPL was not distributed with this 2 # License, v. 2.0. If a copy of the MPL was not distributed with this
3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
4 4
5 from __future__ import print_function 5 from __future__ import print_function
6 6
7 import os 7 import os
8 import re 8 import re
9 import codecs 9 import codecs
10 import subprocess 10 import subprocess
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 try: 63 try:
64 subprocess.check_output(['hg', 'outgoing']) 64 subprocess.check_output(['hg', 'outgoing'])
65 print('Detected outgoing changesets!') 65 print('Detected outgoing changesets!')
66 return True 66 return True
67 except subprocess.CalledProcessError as e: 67 except subprocess.CalledProcessError as e:
68 if e.returncode == 1: 68 if e.returncode == 1:
69 return False 69 return False
70 raise 70 raise
71 71
72 72
73 def repo_has_incoming(repo_paths): 73 def repo_has_incoming(*repo_paths):
74 """Checks whether the local repositories are up-to-date""" 74 """Checks whether the local repositories are up-to-date"""
75 incoming = False 75 incoming = False
76 76
77 for repo_path in repo_paths: 77 for repo_path in repo_paths:
78 try: 78 try:
79 subprocess.check_output(['hg', 'incoming', '-R', repo_path]) 79 subprocess.check_output(['hg', 'incoming', '-R', repo_path])
80 print('Detected incoming changesets in "{}"'.format(repo_path)) 80 print('Detected incoming changesets in "{}"'.format(repo_path))
81 incoming = True 81 incoming = True
Wladimir Palant 2017/08/16 10:46:09 This seems inconsistent compared to repo_has_outgo
tlucas 2017/08/16 11:05:19 If i returned immediately on the first occurrence
Wladimir Palant 2017/08/16 11:11:46 I see, I overlooked that difference between the tw
tlucas 2017/08/16 11:27:54 You are right, re-added the correct parameters to
82 except subprocess.CalledProcessError as e: 82 except subprocess.CalledProcessError as e:
83 if e.returncode != 1: 83 if e.returncode != 1:
84 raise 84 raise
85 85
86 return incoming 86 return incoming
87 87
88 88
89 def continue_with_outgoing(): 89 def continue_with_outgoing():
90 """Asks the user if he wants to continue despite facing warnings""" 90 """Asks the user if they want to continue despite facing warnings"""
Wladimir Palant 2017/08/16 10:46:09 Please formulate this in a gender-neutral way, "th
tlucas 2017/08/16 11:05:18 Alright - i didn't want to leave anyone out :)
tlucas 2017/08/16 11:27:54 Done.
91 91
92 print('If you proceed with the release, they will be included in the ' 92 print('If you proceed with the release, they will be included in the '
93 'release and pushed.') 93 'release and pushed.')
94 print('Are you sure about continuing the release-process?') 94 print('Are you sure about continuing the release process?')
Wladimir Palant 2017/08/16 10:46:08 Nit: it's "release process"
tlucas 2017/08/16 11:05:18 Acknowledged.
tlucas 2017/08/16 11:27:54 Done.
95 95
96 while True: 96 while True:
97 choice = raw_input('Please choose (yes / no): ').lower() 97 choice = raw_input('Please choose (yes / no): ').lower().strip()
Wladimir Palant 2017/08/16 10:46:08 Maybe strip whitespace as well?
tlucas 2017/08/16 11:05:18 Acknowledged.
tlucas 2017/08/16 11:27:54 Done.
98 98
99 if choice == 'yes': 99 if choice == 'yes':
100 return True 100 return True
101 if choice == 'no': 101 if choice == 'no':
102 return False 102 return False
103 103
104 print('Please answer "yes" or "no"!')
Sebastian Noack 2017/08/16 10:33:29 This message seems redundant. If we don't return a
tlucas 2017/08/16 10:40:29 Right, missed that. Done.
105 104
106 105 def can_safely_release(*repo_paths):
107 def can_safely_release():
108 """Run repository-checks in order to bail out early if necessary""" 106 """Run repository-checks in order to bail out early if necessary"""
109 if repo_has_uncommitted(): 107 if repo_has_uncommitted():
110 return False 108 return False
111 if repo_has_incoming(): 109 if repo_has_incoming(*repo_paths):
112 return False 110 return False
113 if repo_has_outgoing(): 111 if repo_has_outgoing():
114 return continue_with_outgoing() 112 return continue_with_outgoing()
115 113
116 114
117 def run(baseDir, type, version, keyFile, downloadsRepo): 115 def run(baseDir, type, version, keyFile, downloadsRepo):
118 if not can_safely_release(): 116 if not can_safely_release(baseDir, downloadsRepo):
119 print('Aborting release.') 117 print('Aborting release.')
120 return 1 118 return 1
121 119
122 if type == 'gecko': 120 if type == 'gecko':
123 import buildtools.packagerGecko as packager 121 import buildtools.packagerGecko as packager
124 elif type == 'safari': 122 elif type == 'safari':
125 import buildtools.packagerSafari as packager 123 import buildtools.packagerSafari as packager
126 elif type == 'edge': 124 elif type == 'edge':
127 import buildtools.packagerEdge as packager 125 import buildtools.packagerEdge as packager
128 elif type == 'chrome': 126 elif type == 'chrome':
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 create_sourcearchive(baseDir, archivePath) 187 create_sourcearchive(baseDir, archivePath)
190 downloads.append(archivePath) 188 downloads.append(archivePath)
191 189
192 # Now add the downloads and commit 190 # Now add the downloads and commit
193 subprocess.check_call(['hg', 'add', '-R', downloadsRepo] + downloads) 191 subprocess.check_call(['hg', 'add', '-R', downloadsRepo] + downloads)
194 subprocess.check_call(['hg', 'commit', '-R', downloadsRepo, '-m', 'Releasing %s %s' % (extensionName, version)]) 192 subprocess.check_call(['hg', 'commit', '-R', downloadsRepo, '-m', 'Releasing %s %s' % (extensionName, version)])
195 193
196 # Push all changes 194 # Push all changes
197 subprocess.check_call(['hg', 'push', '-R', baseDir]) 195 subprocess.check_call(['hg', 'push', '-R', baseDir])
198 subprocess.check_call(['hg', 'push', '-R', downloadsRepo]) 196 subprocess.check_call(['hg', 'push', '-R', downloadsRepo])
LEFTRIGHT
« no previous file | no next file » | Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Toggle Comments ('s')

Powered by Google App Engine
This is Rietveld