Python cleanups, round 2: line too long, etc.

- Line too long (>80)
- Pointless continuation (\) characters
- Trailing semi-colon
- 'not foo in bar' -> 'foo not in bar'

Change-Id: I7acb7f166d2f945005bf5578a740b887b1654597
This commit is contained in:
Chad Horohoe 2018-05-17 10:19:22 -07:00 committed by Paladox
parent dd22470db8
commit 691423248d
17 changed files with 183 additions and 140 deletions

@ -183,7 +183,8 @@ LINK_SCRIPT = """
element.insertBefore(a, element.firstChild);
// remove the link icon when the mouse is moved away,
// but keep it shown if the mouse is over the element, the link or the icon
// but keep it shown if the mouse is over the element, the link or
// the icon
hide = function(evt) {
if (document.elementFromPoint(evt.clientX, evt.clientY) != element
&& document.elementFromPoint(evt.clientX, evt.clientY) != a

@ -10,7 +10,9 @@ import sys
SSH_USER = 'bot'
SSH_HOST = 'localhost'
SSH_PORT = 29418
SSH_COMMAND = 'ssh %s@%s -p %d gerrit approve ' % (SSH_USER, SSH_HOST, SSH_PORT)
SSH_COMMAND = 'ssh %s@%s -p %d gerrit approve ' % (SSH_USER,
SSH_HOST,
SSH_PORT)
FAILURE_SCORE = '--code-review=-2'
FAILURE_MESSAGE = 'This commit message does not match the standard.' \
+ ' Please correct the commit message and upload a replacement patch.'
@ -26,8 +28,9 @@ def main():
patchset = None
try:
opts, _args = getopt.getopt(sys.argv[1:], '', \
['change=', 'project=', 'branch=', 'commit=', 'patchset='])
opts, _args = getopt.getopt(sys.argv[1:], '',
['change=', 'project=', 'branch=',
'commit=', 'patchset='])
except getopt.GetoptError as err:
print('Error: %s' % (err))
usage()
@ -49,8 +52,7 @@ def main():
usage()
sys.exit(-1)
if change == None or project == None or branch == None \
or commit == None or patchset == None:
if any(p is None for p in [change, project, branch, commit, patchset]):
usage()
sys.exit(-1)
@ -58,7 +60,7 @@ def main():
status, output = subprocess.getstatusoutput(command)
if status != 0:
print('Error running \'%s\'. status: %s, output:\n\n%s' % \
print('Error running \'%s\'. status: %s, output:\n\n%s' %
(command, status, output))
sys.exit(-1)
@ -66,7 +68,7 @@ def main():
commitLines = commitMessage.split('\n')
if len(commitLines) > 1 and len(commitLines[1]) != 0:
fail(commit, 'Invalid commit summary. The summary must be ' \
fail(commit, 'Invalid commit summary. The summary must be '
+ 'one line followed by a blank line.')
i = 0
@ -80,7 +82,7 @@ def main():
def usage():
print('Usage:\n')
print(sys.argv[0] + ' --change <change id> --project <project name> ' \
print(sys.argv[0] + ' --change <change id> --project <project name> '
+ '--branch <branch> --commit <sha1> --patchset <patchset id>')

@ -47,82 +47,86 @@ HEADERS = {"Content-Type": "application/json", "charset": "UTF-8"}
# Random names from US Census Data
FIRST_NAMES = [
"Casey", "Yesenia", "Shirley", "Tara", "Wanda", "Sheryl", "Jaime", "Elaine",
"Charlotte", "Carly", "Bonnie", "Kirsten", "Kathryn", "Carla", "Katrina",
"Melody", "Suzanne", "Sandy", "Joann", "Kristie", "Sally", "Emma", "Susan",
"Amanda", "Alyssa", "Patty", "Angie", "Dominique", "Cynthia", "Jennifer",
"Theresa", "Desiree", "Kaylee", "Maureen", "Jeanne", "Kellie", "Valerie",
"Nina", "Judy", "Diamond", "Anita", "Rebekah", "Stefanie", "Kendra", "Erin",
"Tammie", "Tracey", "Bridget", "Krystal", "Jasmin", "Sonia", "Meghan",
"Rebecca", "Jeanette", "Meredith", "Beverly", "Natasha", "Chloe", "Selena",
"Teresa", "Sheena", "Cassandra", "Rhonda", "Tami", "Jodi", "Shelly", "Angela",
"Kimberly", "Terry", "Joanna", "Isabella", "Lindsey", "Loretta", "Dana",
"Veronica", "Carolyn", "Laura", "Karen", "Dawn", "Alejandra", "Cassie",
"Lorraine", "Yolanda", "Kerry", "Stephanie", "Caitlin", "Melanie", "Kerri",
"Doris", "Sandra", "Beth", "Carol", "Vicki", "Shelia", "Bethany", "Rachael",
"Donna", "Alexandra", "Barbara", "Ana", "Jillian", "Ann", "Rachel", "Lauren",
"Hayley", "Misty", "Brianna", "Tanya", "Danielle", "Courtney", "Jacqueline",
"Becky", "Christy", "Alisha", "Phyllis", "Faith", "Jocelyn", "Nancy",
"Gloria", "Kristen", "Evelyn", "Julie", "Julia", "Kara", "Chelsey", "Cassidy",
"Jean", "Chelsea", "Jenny", "Diana", "Haley", "Kristine", "Kristina", "Erika",
"Jenna", "Alison", "Deanna", "Abigail", "Melissa", "Sierra", "Linda",
"Monica", "Tasha", "Traci", "Yvonne", "Tracy", "Marie", "Maria", "Michaela",
"Stacie", "April", "Morgan", "Cathy", "Darlene", "Cristina", "Emily"
"Ian", "Russell", "Phillip", "Jay", "Barry", "Brad", "Frederick", "Fernando",
"Timothy", "Ricardo", "Bernard", "Daniel", "Ruben", "Alexis", "Kyle", "Malik",
"Norman", "Kent", "Melvin", "Stephen", "Daryl", "Kurt", "Greg", "Alex",
"Mario", "Riley", "Marvin", "Dan", "Steven", "Roberto", "Lucas", "Leroy",
"Preston", "Drew", "Fred", "Casey", "Wesley", "Elijah", "Reginald", "Joel",
"Christopher", "Jacob", "Luis", "Philip", "Mark", "Rickey", "Todd", "Scott",
"Terrence", "Jim", "Stanley", "Bobby", "Thomas", "Gabriel", "Tracy", "Marcus",
"Peter", "Michael", "Calvin", "Herbert", "Darryl", "Billy", "Ross", "Dustin",
"Casey", "Yesenia", "Shirley", "Tara", "Wanda", "Sheryl", "Jaime",
"Elaine", "Charlotte", "Carly", "Bonnie", "Kirsten", "Kathryn", "Carla",
"Katrina", "Melody", "Suzanne", "Sandy", "Joann", "Kristie", "Sally",
"Emma", "Susan", "Amanda", "Alyssa", "Patty", "Angie", "Dominique",
"Cynthia", "Jennifer", "Theresa", "Desiree", "Kaylee", "Maureen",
"Jeanne", "Kellie", "Valerie", "Nina", "Judy", "Diamond", "Anita",
"Rebekah", "Stefanie", "Kendra", "Erin", "Tammie", "Tracey", "Bridget",
"Krystal", "Jasmin", "Sonia", "Meghan", "Rebecca", "Jeanette", "Meredith",
"Beverly", "Natasha", "Chloe", "Selena", "Teresa", "Sheena", "Cassandra",
"Rhonda", "Tami", "Jodi", "Shelly", "Angela", "Kimberly", "Terry",
"Joanna", "Isabella", "Lindsey", "Loretta", "Dana", "Veronica", "Carolyn",
"Laura", "Karen", "Dawn", "Alejandra", "Cassie", "Lorraine", "Yolanda",
"Kerry", "Stephanie", "Caitlin", "Melanie", "Kerri", "Doris", "Sandra",
"Beth", "Carol", "Vicki", "Shelia", "Bethany", "Rachael", "Donna",
"Alexandra", "Barbara", "Ana", "Jillian", "Ann", "Rachel", "Lauren",
"Hayley", "Misty", "Brianna", "Tanya", "Danielle", "Courtney",
"Jacqueline", "Becky", "Christy", "Alisha", "Phyllis", "Faith", "Jocelyn",
"Nancy", "Gloria", "Kristen", "Evelyn", "Julie", "Julia", "Kara",
"Chelsey", "Cassidy", "Jean", "Chelsea", "Jenny", "Diana", "Haley",
"Kristine", "Kristina", "Erika", "Jenna", "Alison", "Deanna", "Abigail",
"Melissa", "Sierra", "Linda", "Monica", "Tasha", "Traci", "Yvonne",
"Tracy", "Marie", "Maria", "Michaela", "Stacie", "April", "Morgan",
"Cathy", "Darlene", "Cristina", "Emily" "Ian", "Russell", "Phillip", "Jay",
"Barry", "Brad", "Frederick", "Fernando", "Timothy", "Ricardo", "Bernard",
"Daniel", "Ruben", "Alexis", "Kyle", "Malik", "Norman", "Kent", "Melvin",
"Stephen", "Daryl", "Kurt", "Greg", "Alex", "Mario", "Riley", "Marvin",
"Dan", "Steven", "Roberto", "Lucas", "Leroy", "Preston", "Drew", "Fred",
"Casey", "Wesley", "Elijah", "Reginald", "Joel", "Christopher", "Jacob",
"Luis", "Philip", "Mark", "Rickey", "Todd", "Scott", "Terrence", "Jim",
"Stanley", "Bobby", "Thomas", "Gabriel", "Tracy", "Marcus", "Peter",
"Michael", "Calvin", "Herbert", "Darryl", "Billy", "Ross", "Dustin",
"Jaime", "Adam", "Henry", "Xavier", "Dominic", "Lonnie", "Danny", "Victor",
"Glen", "Perry", "Jackson", "Grant", "Gerald", "Garrett", "Alejandro",
"Eddie", "Alan", "Ronnie", "Mathew", "Dave", "Wayne", "Joe", "Craig",
"Terry", "Chris", "Randall", "Parker", "Francis", "Keith", "Neil", "Caleb",
"Jon", "Earl", "Taylor", "Bryce", "Brady", "Max", "Sergio", "Leon", "Gene",
"Darin", "Bill", "Edgar", "Antonio", "Dalton", "Arthur", "Austin", "Cristian",
"Kevin", "Omar", "Kelly", "Aaron", "Ethan", "Tom", "Isaac", "Maurice",
"Gilbert", "Hunter", "Willie", "Harry", "Dale", "Darius", "Jerome", "Jason",
"Harold", "Kerry", "Clarence", "Gregg", "Shane", "Eduardo", "Micheal",
"Howard", "Vernon", "Rodney", "Anthony", "Levi", "Larry", "Franklin", "Jimmy",
"Jonathon", "Carl",
"Darin", "Bill", "Edgar", "Antonio", "Dalton", "Arthur", "Austin",
"Cristian", "Kevin", "Omar", "Kelly", "Aaron", "Ethan", "Tom", "Isaac",
"Maurice", "Gilbert", "Hunter", "Willie", "Harry", "Dale", "Darius",
"Jerome", "Jason", "Harold", "Kerry", "Clarence", "Gregg", "Shane",
"Eduardo", "Micheal", "Howard", "Vernon", "Rodney", "Anthony", "Levi",
"Larry", "Franklin", "Jimmy", "Jonathon", "Carl",
]
LAST_NAMES = [
"Savage", "Hendrix", "Moon", "Larsen", "Rocha", "Burgess", "Bailey", "Farley",
"Moses", "Schmidt", "Brown", "Hoover", "Klein", "Jennings", "Braun", "Rangel",
"Casey", "Dougherty", "Hancock", "Wolf", "Henry", "Thomas", "Bentley",
"Barnett", "Kline", "Pitts", "Rojas", "Sosa", "Paul", "Hess", "Chase",
"Mckay", "Bender", "Colins", "Montoya", "Townsend", "Potts", "Ayala", "Avery",
"Sherman", "Tapia", "Hamilton", "Ferguson", "Huang", "Hooper", "Zamora",
"Logan", "Lloyd", "Quinn", "Monroe", "Brock", "Ibarra", "Fowler", "Weiss",
"Montgomery", "Diaz", "Dixon", "Olson", "Robertson", "Arias", "Benjamin",
"Abbott", "Stein", "Schroeder", "Beck", "Velasquez", "Barber", "Nichols",
"Ortiz", "Burns", "Moody", "Stokes", "Wilcox", "Rush", "Michael", "Kidd",
"Rowland", "Mclean", "Saunders", "Chung", "Newton", "Potter", "Hickman",
"Ray", "Larson", "Figueroa", "Duncan", "Sparks", "Rose", "Hodge", "Huynh",
"Joseph", "Morales", "Beasley", "Mora", "Fry", "Ross", "Novak", "Hahn",
"Wise", "Knight", "Frederick", "Heath", "Pollard", "Vega", "Mcclain",
"Buckley", "Conrad", "Cantrell", "Bond", "Mejia", "Wang", "Lewis", "Johns",
"Mcknight", "Callahan", "Reynolds", "Norris", "Burnett", "Carey", "Jacobson",
"Oneill", "Oconnor", "Leonard", "Mckenzie", "Hale", "Delgado", "Spence",
"Brandt", "Obrien", "Bowman", "James", "Avila", "Roberts", "Barker", "Cohen",
"Savage", "Hendrix", "Moon", "Larsen", "Rocha", "Burgess", "Bailey",
"Farley", "Moses", "Schmidt", "Brown", "Hoover", "Klein", "Jennings",
"Braun", "Rangel", "Casey", "Dougherty", "Hancock", "Wolf", "Henry",
"Thomas", "Bentley", "Barnett", "Kline", "Pitts", "Rojas", "Sosa", "Paul",
"Hess", "Chase", "Mckay", "Bender", "Colins", "Montoya", "Townsend",
"Potts", "Ayala", "Avery", "Sherman", "Tapia", "Hamilton", "Ferguson",
"Huang", "Hooper", "Zamora", "Logan", "Lloyd", "Quinn", "Monroe", "Brock",
"Ibarra", "Fowler", "Weiss", "Montgomery", "Diaz", "Dixon", "Olson",
"Robertson", "Arias", "Benjamin", "Abbott", "Stein", "Schroeder", "Beck",
"Velasquez", "Barber", "Nichols", "Ortiz", "Burns", "Moody", "Stokes",
"Wilcox", "Rush", "Michael", "Kidd", "Rowland", "Mclean", "Saunders",
"Chung", "Newton", "Potter", "Hickman", "Ray", "Larson", "Figueroa",
"Duncan", "Sparks", "Rose", "Hodge", "Huynh", "Joseph", "Morales",
"Beasley", "Mora", "Fry", "Ross", "Novak", "Hahn", "Wise", "Knight",
"Frederick", "Heath", "Pollard", "Vega", "Mcclain", "Buckley", "Conrad",
"Cantrell", "Bond", "Mejia", "Wang", "Lewis", "Johns", "Mcknight",
"Callahan", "Reynolds", "Norris", "Burnett", "Carey", "Jacobson", "Oneill",
"Oconnor", "Leonard", "Mckenzie", "Hale", "Delgado", "Spence", "Brandt",
"Obrien", "Bowman", "James", "Avila", "Roberts", "Barker", "Cohen",
"Bradley", "Prince", "Warren", "Summers", "Little", "Caldwell", "Garrett",
"Hughes", "Norton", "Burke", "Holden", "Merritt", "Lee", "Frank", "Wiley",
"Ho", "Weber", "Keith", "Winters", "Gray", "Watts", "Brady", "Aguilar",
"Nicholson", "David", "Pace", "Cervantes", "Davis", "Baxter", "Sanchez",
"Singleton", "Taylor", "Strickland", "Glenn", "Valentine", "Roy", "Cameron",
"Beard", "Norman", "Fritz", "Anthony", "Koch", "Parrish", "Herman", "Hines",
"Sutton", "Gallegos", "Stephenson", "Lozano", "Franklin", "Howe", "Bauer",
"Love", "Ali", "Ellison", "Lester", "Guzman", "Jarvis", "Espinoza",
"Fletcher", "Burton", "Woodard", "Peterson", "Barajas", "Richard", "Bryan",
"Goodman", "Cline", "Rowe", "Faulkner", "Crawford", "Mueller", "Patterson",
"Hull", "Walton", "Wu", "Flores", "York", "Dickson", "Barnes", "Fisher",
"Strong", "Juarez", "Fitzgerald", "Schmitt", "Blevins", "Villa", "Sullivan",
"Velazquez", "Horton", "Meadows", "Riley", "Barrera", "Neal", "Mendez",
"Mcdonald", "Floyd", "Lynch", "Mcdowell", "Benson", "Hebert", "Livingston",
"Davies", "Richardson", "Vincent", "Davenport", "Osborn", "Mckee", "Marshall",
"Singleton", "Taylor", "Strickland", "Glenn", "Valentine", "Roy",
"Cameron", "Beard", "Norman", "Fritz", "Anthony", "Koch", "Parrish",
"Herman", "Hines", "Sutton", "Gallegos", "Stephenson", "Lozano",
"Franklin", "Howe", "Bauer", "Love", "Ali", "Ellison", "Lester", "Guzman",
"Jarvis", "Espinoza", "Fletcher", "Burton", "Woodard", "Peterson",
"Barajas", "Richard", "Bryan", "Goodman", "Cline", "Rowe", "Faulkner",
"Crawford", "Mueller", "Patterson", "Hull", "Walton", "Wu", "Flores",
"York", "Dickson", "Barnes", "Fisher", "Strong", "Juarez", "Fitzgerald",
"Schmitt", "Blevins", "Villa", "Sullivan", "Velazquez", "Horton",
"Meadows", "Riley", "Barrera", "Neal", "Mendez", "Mcdonald", "Floyd",
"Lynch", "Mcdowell", "Benson", "Hebert", "Livingston", "Davies",
"Richardson", "Vincent", "Davenport", "Osborn", "Mckee", "Marshall",
"Ferrell", "Martinez", "Melton", "Mercer", "Yoder", "Jacobs", "Mcdaniel",
"Mcmillan", "Peters", "Atkinson", "Wood", "Briggs", "Valencia", "Chandler",
"Rios", "Hunter", "Bean", "Hicks", "Hays", "Lucero", "Malone", "Waller",
@ -149,9 +153,10 @@ def basic_auth(user):
def fetch_admin_group():
global GROUP_ADMIN
# Get admin group
r = json.loads(clean(requests.get(BASE_URL + "groups/" + "?suggest=ad&p=All-Projects",
headers=HEADERS,
auth=ADMIN_BASIC_AUTH).text))
r = json.loads(clean(requests.get(
BASE_URL + "groups/?suggest=ad&p=All-Projects",
headers=HEADERS,
auth=ADMIN_BASIC_AUTH).text))
admin_group_name = r.keys()[0]
GROUP_ADMIN = r[admin_group_name]
GROUP_ADMIN["name"] = admin_group_name
@ -160,7 +165,8 @@ def fetch_admin_group():
def generate_random_text():
return " ".join([random.choice("lorem ipsum "
"doleret delendam "
"\n esse".split(" ")) for _ in range(1, 100)])
"\n esse".split(" ")) for _ in range(1,
100)])
def set_up():

@ -1,5 +1,6 @@
import os, re, json
from shutil import copyfile, rmtree
import json
import os
import re
polymerRegex = r"Polymer\({"
polymerCompiledRegex = re.compile(polymerRegex)
@ -22,8 +23,9 @@ def replaceBehaviorLikeHTML(fileIn, fileOut):
with _open(fileIn) as f:
file_str = f.read()
match = behaviorCompiledRegex.search(file_str)
if (match):
with _open("polygerrit-ui/temp/behaviors/" + fileOut.replace("html", "js"), "w+") as f:
if match:
with _open("polygerrit-ui/temp/behaviors/" +
fileOut.replace("html", "js"), "w+") as f:
f.write(match.group(1))
@ -35,7 +37,8 @@ def replaceBehaviorLikeJS(fileIn, fileOut):
def generateStubBehavior(behaviorName):
with _open("polygerrit-ui/temp/behaviors/" + behaviorName + ".js", "w+") as f:
with _open("polygerrit-ui/temp/behaviors/" +
behaviorName + ".js", "w+") as f:
f.write("/** @polymerBehavior **/\n" + behaviorName + "= {};")
@ -50,12 +53,16 @@ def replacePolymerElement(fileIn, fileOut, root):
package = root.replace("/", ".") + "." + fileOut
with _open("polygerrit-ui/temp/" + fileOut, "w+") as f:
mainFileContents = re.sub(polymerCompiledRegex, "exports = Polymer({", file_str_no_fn.group(1)).replace("'use strict';", "")
f.write("/** \n" \
"* @fileoverview \n" \
"* @suppress {missingProperties} \n" \
"*/ \n\n" \
"goog.module('polygerrit." + package + "')\n\n" + mainFileContents)
mainFileContents = re.sub(
polymerCompiledRegex,
"exports = Polymer({",
file_str_no_fn.group(1)).replace("'use strict';", "")
f.write("/** \n"
"* @fileoverview \n"
"* @suppress {missingProperties} \n"
"*/ \n\n"
"goog.module('polygerrit." + package + "')\n\n" +
mainFileContents)
# Add package and javascript to files object.
elements[key]["js"] = "polygerrit-ui/temp/" + fileOut
@ -63,17 +70,20 @@ def replacePolymerElement(fileIn, fileOut, root):
def writeTempFile(file, root):
# This is included in an extern because it is directly on the window object.
# This is included in an extern because it is directly on the window object
# (for now at least).
if "gr-reporting" in file:
return
key = file.split('.')[0]
if not key in elements:
if key not in elements:
# gr-app doesn't have an additional level
elements[key] = {"directory": 'gr-app' if len(root.split("/")) < 4 else root.split("/")[3]}
elements[key] = {
"directory":
'gr-app' if len(root.split("/")) < 4 else root.split("/")[3]
}
if file.endswith(".html") and not file.endswith("_test.html"):
# gr-navigation is treated like a behavior rather than a standard element
# because of the way it added to the Gerrit object.
# gr-navigation is treated like a behavior rather than a standard
# element because of the way it added to the Gerrit object.
if file.endswith("gr-navigation.html"):
replaceBehaviorLikeHTML(os.path.join(root, file), file)
else:
@ -105,7 +115,8 @@ if __name__ == "__main__":
generateStubBehavior("Polymer.IronOverlayBehavior")
generateStubBehavior("Polymer.IronFitBehavior")
#TODO figure out something to do with iron-overlay-behavior. it is hard-coded reformatted.
# TODO figure out something to do with iron-overlay-behavior.
# it is hard-coded reformatted.
with _open("polygerrit-ui/temp/map.json", "w+") as f:
f.write(json.dumps(elements))

@ -22,7 +22,7 @@ import sys
def print_help():
for (n, v) in vars(sys.modules['__main__']).items():
if not n.startswith("__") and not n in ['help', 'reload'] \
if not n.startswith("__") and n not in ['help', 'reload'] \
and str(type(v)) != "<type 'javapackage'>" \
and not str(v).startswith("<module"):
print("\"%s\" is \"%s\"" % (n, v))

@ -51,9 +51,8 @@ if len(graph[DO_NOT_DISTRIBUTE]):
exit(1)
if args.asciidoctor:
print(
# We don't want any blank line before "= Gerrit Code Review - Licenses"
"""= Gerrit Code Review - Licenses
# We don't want any blank line before "= Gerrit Code Review - Licenses"
print("""= Gerrit Code Review - Licenses
Gerrit open source software is licensed under the <<Apache2_0,Apache
License 2.0>>. Executable distributions also include other software
@ -125,8 +124,7 @@ for n in sorted(graph.keys()):
print()
if args.asciidoctor:
print(
"""
print("""
GERRIT
------
Part of link:index.html[Gerrit Code Review]

@ -106,7 +106,8 @@ if not path.exists(cache_ent):
try:
check_call(['curl', '--proxy-anyauth', '-ksSfLo', cache_ent, src_url])
except OSError as err:
print('could not invoke curl: %s\nis curl installed?' % err, file=stderr)
print('could not invoke curl: %s\nis curl installed?' % err,
file=stderr)
exit(1)
except CalledProcessError as err:
print('error using curl: %s' % err, file=stderr)

@ -184,7 +184,8 @@ def gen_classpath(ext):
else:
# Don't mess up with Bazel internal test runner dependencies.
# When we use Eclipse we rely on it for running the tests
if p.endswith("external/bazel_tools/tools/jdk/TestRunner_deploy.jar"):
if p.endswith(
"external/bazel_tools/tools/jdk/TestRunner_deploy.jar"):
continue
if p.startswith("external"):
p = path.join(ext, p)
@ -239,9 +240,10 @@ def gen_classpath(ext):
if args.plugins:
classpathentry('lib', j, s, exported=True)
else:
# Filter out the source JARs that we pull through transitive closure of
# GWT plugin API (we add source directories themself). Exception is
# libEdit-src.jar, that is needed for GWT SDM to work.
# Filter out the source JARs that we pull through transitive
# closure of GWT plugin API (we add source directories
# themselves). Exception is libEdit-src.jar, that is needed
# for GWT SDM to work.
m = java_library.match(j)
if m:
if m.group(1).startswith("gerrit-") and \
@ -279,7 +281,8 @@ def gen_classpath(ext):
def gen_factorypath(ext):
doc = minidom.getDOMImplementation().createDocument(None, 'factorypath', None)
doc = minidom.getDOMImplementation().createDocument(None, 'factorypath',
None)
for jar in _query_classpath(AUTO):
e = doc.createElement('factorypathentry')
e.setAttribute('kind', 'EXTJAR')
@ -306,7 +309,8 @@ try:
makedirs(path.join(ROOT, gwt_working_dir))
try:
check_call(_build_bazel_cmd('build', MAIN, GWT, '//java/org/eclipse/jgit:libEdit-src.jar'))
check_call(_build_bazel_cmd('build', MAIN, GWT,
'//java/org/eclipse/jgit:libEdit-src.jar'))
except CalledProcessError:
exit(1)
except KeyboardInterrupt:

@ -13,9 +13,11 @@
# See the License for the specific language governing permissions and
# limitations under the License.
"""Suggested call sequence:
"""
Suggested call sequence:
python tools/js/bower2bazel.py -w lib/js/bower_archives.bzl -b lib/js/bower_components.bzl
python tools/js/bower2bazel.py -w lib/js/bower_archives.bzl \
-b lib/js/bower_components.bzl
"""
from __future__ import print_function
@ -31,7 +33,7 @@ import tempfile
import glob
import bowerutil
# list of licenses for packages that don't specify one in their bower.json file.
# list of licenses for packages that don't specify one in their bower.json file
package_licenses = {
"codemirror-minified": "codemirror-minified",
"es6-promise": "es6-promise",
@ -90,15 +92,18 @@ def build_bower_json(version_targets, seeds):
bower_json = collections.OrderedDict()
bower_json['name'] = 'bower2bazel-output'
bower_json['version'] = '0.0.0'
bower_json['description'] = 'Auto-generated bower.json for dependency management'
bower_json['description'] = 'Auto-generated bower.json for dependency ' + \
'management'
bower_json['private'] = True
bower_json['dependencies'] = {}
seeds = set(seeds)
for v in version_targets:
path = os.path.join("bazel-out/*-fastbuild/bin", v.lstrip("/").replace(":", "/"))
path = os.path.join("bazel-out/*-fastbuild/bin",
v.lstrip("/").replace(":", "/"))
fs = glob.glob(path)
assert len(fs) == 1, '%s: file not found or multiple files found: %s' % (path, fs)
err_msg = '%s: file not found or multiple files found: %s' % (path, fs)
assert len(fs) == 1, err_msg
with open(fs[0]) as f:
j = json.load(f)
if "" in j:
@ -130,8 +135,10 @@ def bower_command(args):
base = subprocess.check_output(["bazel", "info", "output_base"]).strip()
exp = os.path.join(decode(base), "external", "bower", "*npm_binary.tgz")
fs = sorted(glob.glob(exp))
assert len(fs) == 1, "bower tarball not found or have multiple versions %s" % fs
return ["python", os.getcwd() + "/tools/js/run_npm_binary.py", sorted(fs)[0]] + args
err_msg = "bower tarball not found or have multiple versions %s" % fs
assert len(fs) == 1, err_msg
return ["python",
os.getcwd() + "/tools/js/run_npm_binary.py", sorted(fs)[0]] + args
def main(args):
@ -142,8 +149,9 @@ def main(args):
target_str = subprocess.check_output([
"bazel", "query", "kind(bower_component_bundle, //polygerrit-ui/...)"])
seed_str = subprocess.check_output([
"bazel", "query", "attr(seed, 1, kind(bower_component, deps(//polygerrit-ui/...)))"])
seed_str = subprocess.check_output(
["bazel", "query",
"attr(seed, 1, kind(bower_component, deps(//polygerrit-ui/...)))"])
targets = [s for s in decode(target_str).split('\n') if s]
seeds = [s for s in decode(seed_str).split('\n') if s]
prefix = "//lib/js:"
@ -227,7 +235,8 @@ def dump_build(data, seeds, out):
def interpret_bower_json(seeds, ws_out, build_out):
out = subprocess.check_output(["find", "bower_components/", "-name", ".bower.json"])
out = subprocess.check_output(["find", "bower_components/", "-name",
".bower.json"])
data = []
for f in sorted(decode(out).split('\n')):

@ -19,9 +19,9 @@ def hash_bower_component(hash_obj, path):
"""Hash the contents of a bower component directory.
This is a stable hash of a directory downloaded with `bower install`, minus
the .bower.json file, which is autogenerated each time by bower. Used in lieu
of hashing a zipfile of the contents, since zipfiles are difficult to hash in
a stable manner.
the .bower.json file, which is autogenerated each time by bower. Used in
lieu of hashing a zipfile of the contents, since zipfiles are difficult to
hash in a stable manner.
Args:
hash_obj: an open hash object, e.g. hashlib.sha1().

@ -39,7 +39,8 @@ def bower_info(bower, name, package, version):
cmd = bower_cmd(bower, '-l=error', '-j',
'info', '%s#%s' % (package, version))
try:
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
except:
sys.stderr.write("error executing: %s\n" % ' '.join(cmd))
raise
@ -54,14 +55,15 @@ def bower_info(bower, name, package, version):
raise ValueError('invalid JSON from %s:\n%s' % (" ".join(cmd), out))
info_name = info.get('name')
if info_name != name:
raise ValueError('expected package name %s, got: %s' % (name, info_name))
raise ValueError(
'expected package name %s, got: %s' % (name, info_name))
return info
def ignore_deps(info):
# Tell bower to ignore dependencies so we just download this component. This
# is just an optimization, since we only pick out the component we need, but
# it's important when downloading sizable dependency trees.
# Tell bower to ignore dependencies so we just download this component.
# This is just an optimization, since we only pick out the component we
# need, but it's important when downloading sizable dependency trees.
#
# As of 1.6.5 I don't think ignoredDependencies can be specified on the
# command line with --config, so we have to create .bowerrc.
@ -99,7 +101,8 @@ def main(args):
info = bower_info(opts.b, opts.n, opts.p, opts.v)
ignore_deps(info)
subprocess.check_call(
bower_cmd(opts.b, '--quiet', 'install', '%s#%s' % (opts.p, opts.v)))
bower_cmd(
opts.b, '--quiet', 'install', '%s#%s' % (opts.p, opts.v)))
bc = os.path.join(cwd, 'bower_components')
subprocess.check_call(
['zip', '-q', '--exclude', '.bower.json', '-r', cached, opts.n],
@ -107,17 +110,20 @@ def main(args):
if opts.s:
path = os.path.join(bc, opts.n)
sha1 = bowerutil.hash_bower_component(hashlib.sha1(), path).hexdigest()
sha1 = bowerutil.hash_bower_component(
hashlib.sha1(), path).hexdigest()
if opts.s != sha1:
print((
'%s#%s:\n'
'expected %s\n'
'received %s\n') % (opts.p, opts.v, opts.s, sha1), file=sys.stderr)
'received %s\n') % (opts.p, opts.v, opts.s, sha1),
file=sys.stderr)
try:
os.remove(cached)
except OSError as err:
if path.exists(cached):
print('error removing %s: %s' % (cached, err), file=sys.stderr)
print('error removing %s: %s' % (cached, err),
file=sys.stderr)
return 1
shutil.copyfile(cached, outzip)

@ -56,7 +56,7 @@ def main(args):
filename = '%s-%s.tgz' % (name, version)
url = 'http://registry.npmjs.org/%s/-/%s' % (name, filename)
tmpdir = tempfile.mkdtemp();
tmpdir = tempfile.mkdtemp()
tgz = os.path.join(tmpdir, filename)
atexit.register(lambda: shutil.rmtree(tmpdir))

@ -54,8 +54,8 @@ def extract(path, outdir, bin):
for mem in tar.getmembers():
if mem.name != bin:
extract_one(mem)
# Extract bin last so other processes only short circuit when extraction is
# finished.
# Extract bin last so other processes only short circuit when
# extraction is finished.
extract_one(tar.getmember(bin))
@ -72,7 +72,8 @@ def main(args):
name, _ = parts
# Avoid importing from gerrit because we don't want to depend on the right CWD.
# Avoid importing from gerrit because we don't want to depend on the right
# working directory
sha1 = hashlib.sha1(open(path, 'rb').read()).hexdigest()
outdir = '%s-%s' % (path[:-len(suffix)], sha1)
rel_bin = os.path.join('package', 'bin', name)

@ -56,7 +56,8 @@ else:
for spec in args.s:
artifact, packaging_type, src = spec.split(':')
exe = cmd + [
'-DpomFile=%s' % path.join(root, 'tools', 'maven', '%s_pom.xml' % artifact),
'-DpomFile=%s' % path.join(root, 'tools', 'maven',
'%s_pom.xml' % artifact),
'-Dpackaging=%s' % packaging_type,
'-Dfile=%s' % src,
]

@ -17,7 +17,6 @@ from __future__ import print_function
import collections
import sys
import zipfile
import io
if len(sys.argv) < 3:
print('usage: %s <out.zip> <in.zip>...' % sys.argv[0], file=sys.stderr)

@ -16,10 +16,12 @@ from os import path
REPO_ROOTS = {
'GERRIT': 'http://gerrit-maven.storage.googleapis.com',
'GERRIT_API': 'https://gerrit-api.commondatastorage.googleapis.com/release',
'GERRIT_API':
'https://gerrit-api.commondatastorage.googleapis.com/release',
'MAVEN_CENTRAL': 'http://repo1.maven.org/maven2',
'MAVEN_LOCAL': 'file://' + path.expanduser('~/.m2/repository'),
'MAVEN_SNAPSHOT': 'https://oss.sonatype.org/content/repositories/snapshots',
'MAVEN_SNAPSHOT':
'https://oss.sonatype.org/content/repositories/snapshots',
}

@ -24,7 +24,8 @@ class TestResolveUrl(unittest.TestCase):
def testKnown(self):
url = resolve_url('GERRIT:foo.jar', {})
self.assertEqual(url, 'http://gerrit-maven.storage.googleapis.com/foo.jar')
self.assertEqual(url,
'http://gerrit-maven.storage.googleapis.com/foo.jar')
def testKnownRedirect(self):
url = resolve_url('MAVEN_CENTRAL:foo.jar',
@ -37,7 +38,8 @@ class TestResolveUrl(unittest.TestCase):
def testCustomRedirect(self):
url = resolve_url('MAVEN_EXAMPLE:foo.jar',
{'MAVEN_EXAMPLE': 'http://maven.example.com/release'})
{'MAVEN_EXAMPLE':
'http://maven.example.com/release'})
self.assertEqual(url, 'http://maven.example.com/release/foo.jar')