Refactor gerrit_init.py to use a class
The functions used in the gerrit_init.py script all needed the Gerrit
site path, which was handed around as a parameter. This could be better
solved by using a class, which is done by this change.
Change-Id: Iae12a57c114243b6cf69a92002ba5d8a276f6d69
diff --git a/container-images/gerrit-init/tools/gerrit_init.py b/container-images/gerrit-init/tools/gerrit_init.py
index 85e34b7..a15234c 100755
--- a/container-images/gerrit-init/tools/gerrit_init.py
+++ b/container-images/gerrit-init/tools/gerrit_init.py
@@ -23,97 +23,114 @@
from git_config_parser import GitConfigParser
from validate_db import select_db
-def ensure_database_connection(gerrit_site_path):
- database = select_db(gerrit_site_path)
- database.wait_for_db_server()
+class GerritInit():
-def determine_is_slave(gerrit_site_path):
- gerrit_config_path = os.path.join(gerrit_site_path, "etc/gerrit.config")
- config = GitConfigParser(gerrit_config_path)
- return config.get_boolean("container.slave", False)
+ def __init__(self, site, wanted_plugins):
+ self.site = site
+ self.wanted_plugins = set(wanted_plugins)
-def get_gerrit_version(gerrit_war_path):
- command = "java -jar %s version" % gerrit_war_path
- version_process = subprocess.run(
- command.split(),
- stdout=subprocess.PIPE)
- return version_process.stdout.decode().strip()
+ self.gerrit_config = self._parse_gerrit_config()
+ self.is_slave = self._is_slave()
+ self.installed_plugins = self._get_installed_plugins()
-def get_installed_plugins(gerrit_site_path):
- plugin_path = os.path.join(gerrit_site_path, "plugins")
- installed_plugins = set()
+ def _parse_gerrit_config(self):
+ gerrit_config_path = os.path.join(self.site, "etc/gerrit.config")
- if os.path.exists(plugin_path):
- for f in os.listdir(plugin_path):
- if os.path.isfile(os.path.join(plugin_path, f)) and f.endswith(".jar"):
- installed_plugins.add(os.path.splitext(f)[0])
+ if os.path.exists(gerrit_config_path):
+ return GitConfigParser(gerrit_config_path)
- return installed_plugins
+ return None
-def remove_unwanted_plugins(gerrit_site_path, wanted_plugins):
- installed_plugins = get_installed_plugins(gerrit_site_path)
- for plugin in installed_plugins.difference(wanted_plugins):
- print("%s: Removing plugin %s." % (time.ctime(), plugin))
- os.remove(os.path.join(gerrit_site_path, "plugins", "%s.jar" % plugin))
+ def _ensure_database_connection(self):
+ database = select_db(self.site)
+ database.wait_for_db_server()
-def needs_init(gerrit_site_path, wanted_plugins):
- installed_war_path = os.path.join(gerrit_site_path, "bin", "gerrit.war")
- if not os.path.exists(installed_war_path):
- print("%s: Gerrit is not yet installed. Initializing new site." % time.ctime())
- return True
+ def _is_slave(self):
+ if self.gerrit_config:
+ return self.gerrit_config.get_boolean("container.slave", False)
- installed_version = get_gerrit_version(installed_war_path)
- provided_version = get_gerrit_version("/var/war/gerrit.war")
- if installed_version != provided_version:
- print((
- "%s: New Gerrit version was provided (current: %s; new: %s). "
- "Reinitializing site.") % (
- time.ctime(),
- installed_version,
- provided_version))
- return True
+ return False
- installed_plugins = get_installed_plugins(gerrit_site_path)
- if wanted_plugins.difference(installed_plugins):
- print("%s: Reininitializing site to install additional plugins." % time.ctime())
- return True
+ def _get_gerrit_version(self, gerrit_war_path):
+ command = "java -jar %s version" % gerrit_war_path
+ version_process = subprocess.run(
+ command.split(),
+ stdout=subprocess.PIPE)
+ return version_process.stdout.decode().strip()
- print("%s: No initialization required." % time.ctime())
- return False
+ def _get_installed_plugins(self):
+ plugin_path = os.path.join(self.site, "plugins")
+ installed_plugins = set()
-def initialize_gerrit(gerrit_site_path, wanted_plugins):
- remove_unwanted_plugins(gerrit_site_path, wanted_plugins)
+ if os.path.exists(plugin_path):
+ for f in os.listdir(plugin_path):
+ if os.path.isfile(os.path.join(plugin_path, f)) and f.endswith(".jar"):
+ installed_plugins.add(os.path.splitext(f)[0])
- if not needs_init(gerrit_site_path, wanted_plugins):
- return
+ return installed_plugins
- if os.path.exists(os.path.join(gerrit_site_path, "etc/gerrit.config")):
- print("%s: Existing gerrit.config found." % time.ctime())
- ensure_database_connection(gerrit_site_path)
- else:
- print("%s: No gerrit.config found. Initializing default site." % time.ctime())
+ def _remove_unwanted_plugins(self):
+ for plugin in self.installed_plugins.difference(self.wanted_plugins):
+ print("%s: Removing plugin %s." % (time.ctime(), plugin))
+ os.remove(os.path.join(self.site, "plugins", "%s.jar" % plugin))
- if wanted_plugins:
- plugin_options = ' '.join(['--install-plugin %s' % plugin for plugin in wanted_plugins])
- else:
- plugin_options = ''
+ def _needs_init(self):
+ installed_war_path = os.path.join(self.site, "bin", "gerrit.war")
+ if not os.path.exists(installed_war_path):
+ print("%s: Gerrit is not yet installed. Initializing new site." % time.ctime())
+ return True
- flags = "--no-auto-start --batch"
+ installed_version = self._get_gerrit_version(installed_war_path)
+ provided_version = self._get_gerrit_version("/var/war/gerrit.war")
+ if installed_version != provided_version:
+ print((
+ "%s: New Gerrit version was provided (current: %s; new: %s). "
+ "Reinitializing site.") % (
+ time.ctime(),
+ installed_version,
+ provided_version))
+ return True
- if determine_is_slave(gerrit_site_path):
- flags += " --no-reindex"
+ if self.wanted_plugins.difference(self.installed_plugins):
+ print("%s: Reininitializing site to install additional plugins." % time.ctime())
+ return True
- command = "java -jar /var/war/gerrit.war init %s %s -d %s" % (
- flags,
- plugin_options,
- gerrit_site_path)
+ print("%s: No initialization required." % time.ctime())
+ return False
- init_process = subprocess.run(command.split(), stdout=subprocess.PIPE)
+ def execute(self):
+ self._remove_unwanted_plugins()
- if init_process.returncode > 0:
- print("An error occured, when initializing Gerrit. Exit code: ",
- init_process.returncode)
- sys.exit(1)
+ if not self._needs_init():
+ return
+
+ if self.gerrit_config:
+ print("%s: Existing gerrit.config found." % time.ctime())
+ self._ensure_database_connection()
+ else:
+ print("%s: No gerrit.config found. Initializing default site." % time.ctime())
+
+ if self.wanted_plugins:
+ plugin_options = ' '.join(['--install-plugin %s' % plugin for plugin in self.wanted_plugins])
+ else:
+ plugin_options = ''
+
+ flags = "--no-auto-start --batch"
+
+ if self.is_slave:
+ flags += " --no-reindex"
+
+ command = "java -jar /var/war/gerrit.war init %s %s -d %s" % (
+ flags,
+ plugin_options,
+ self.site)
+
+ init_process = subprocess.run(command.split(), stdout=subprocess.PIPE)
+
+ if init_process.returncode > 0:
+ print("An error occured, when initializing Gerrit. Exit code: ",
+ init_process.returncode)
+ sys.exit(1)
# pylint: disable=C0103
if __name__ == "__main__":
@@ -135,4 +152,5 @@
default=list())
args = parser.parse_args()
- initialize_gerrit(args.site, set(args.wanted_plugins))
+ init = GerritInit(args.site, args.wanted_plugins)
+ init.execute()