Skip to content
This repository has been archived by the owner on Aug 5, 2024. It is now read-only.

Commit

Permalink
[maintenance] Configurable targets size
Browse files Browse the repository at this point in the history
Merge-request: BAZEL-MR-373
Merged-by: Tomasz Pasternak <Tomasz.Pasternak@jetbrains.com>
  • Loading branch information
tpasternak authored and qodana-bot committed Jul 18, 2023
1 parent 839e5dc commit 3605dbb
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 10 deletions.
3 changes: 2 additions & 1 deletion bspcli/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ kt_jvm_binary(

py_binary(
name = "generator",
srcs = ["gen.py"],
srcs = glob(["*.py"]),
imports = ["."],
main = "gen.py",
deps = [],
)
Expand Down
23 changes: 14 additions & 9 deletions bspcli/gen.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import os
import parser
import sys
from random import choice
import random
Expand All @@ -10,20 +11,21 @@ def randname():
)


def create_package(workspace_dir, packagename, deps):
def create_java_package(workspace_dir, packagename, deps, number_of_sources):
packagedir = f'{workspace_dir}/{packagename}'
os.mkdir(packagedir)
classname = "Lib_" + packagename
with open(f'{packagedir}/BUILD', 'w') as f:
f.write(f"""java_library(
name = "{packagename}",
visibility = ["//visibility:public"],
srcs = ["{classname}.java"],
srcs = glob(["*.java"]),
deps = {deps}
)\n""")
with open(f'{packagedir}/{classname}.java', 'w') as f:
f.write(f"""class {classname} {"{}"}\n""")
pass
for i in range(number_of_sources):
classname = f"Lib_{packagename}_{i}"
with open(f'{packagedir}/{classname}.java', 'w') as f:
f.write(f"""public class {classname} {"{}"}\n""")
pass


def build_dependency_graph(targets):
Expand All @@ -42,8 +44,11 @@ def build_dependency_graph(targets):
CHARSET = 'abcdefghijklmnopqrstuvwxyz'
NAMELEN: int = 8
random.seed(0)
project_dir = sys.argv[1]
number_of_targets = int(sys.argv[2])

args = parser.parser().parse_args()

project_dir = args.projectdir
number_of_targets = args.targets
targets = [randname() for x in range(number_of_targets)]

if not os.path.exists(f'./{project_dir}'):
Expand All @@ -54,7 +59,7 @@ def build_dependency_graph(targets):
dependency_graph = build_dependency_graph(targets)

for target, deps in dependency_graph.items():
create_package(f'{project_dir}/', target, [f'//{d}:{d}' for d in deps])
create_java_package(f'{project_dir}/', target, [f'//{d}:{d}' for d in deps], args.targetssize)

with open(f'{project_dir}/WORKSPACE', 'w') as fp:
pass
Expand Down
10 changes: 10 additions & 0 deletions bspcli/parser.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import argparse
def parser():
parser = argparse.ArgumentParser(
prog='Bazel Projects Generator',
description='Generates large Bazel projects')
parser.add_argument("projectdir", help="Directory in which the project should be created")
parser.add_argument("targets", type=int, help="Number of targets in the project")
parser.add_argument("--targetssize", type=int, help="Number of source files in each target", default=1)
return parser

0 comments on commit 3605dbb

Please sign in to comment.