RepositoryManagerConfig.java

/*******************************************************************************
 * Copyright (c) 2026 Carsten Hammer.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     Carsten Hammer
 *******************************************************************************/
package org.eclipse.jgit.server.config;

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.eclipse.jgit.storage.hibernate.config.HibernateSessionFactoryProvider;
import org.eclipse.jgit.storage.hibernate.repository.HibernateRepository;
import org.eclipse.jgit.storage.hibernate.repository.HibernateRepositoryBuilder;

/**
 * Manages automatic creation of default Git repositories on server startup.
 * <p>
 * Reads the {@code JGIT_DEFAULT_REPOS} environment variable (comma-separated
 * list of repository names) and ensures each one exists in the database.
 */
public class RepositoryManagerConfig {

	private static final Logger LOG = Logger
			.getLogger(RepositoryManagerConfig.class.getName());

	private RepositoryManagerConfig() {
		// utility class
	}

	/**
	 * Initialize default repositories from a comma-separated list of names.
	 * <p>
	 * Each repository is created if it does not already exist. Existing
	 * repositories are not modified.
	 *
	 * @param provider
	 *            the session factory provider
	 * @param repoList
	 *            comma-separated list of repository names
	 */
	public static void initDefaultRepositories(
			HibernateSessionFactoryProvider provider, String repoList) {
		String[] repos = repoList.split(","); //$NON-NLS-1$
		for (String repoName : repos) {
			String name = repoName.trim();
			if (!name.isEmpty()) {
				try {
					createRepositoryIfAbsent(provider, name);
					LOG.log(Level.INFO,
							"Initialized default repository: {0}", //$NON-NLS-1$
							name);
				} catch (IOException e) {
					LOG.log(Level.WARNING,
							"Failed to create default repository: " //$NON-NLS-1$
									+ name,
							e);
				}
			}
		}
	}

	/**
	 * Create a repository if it doesn't already exist.
	 *
	 * @param provider
	 *            the session factory provider
	 * @param repositoryName
	 *            the name of the repository to create
	 * @return the repository (existing or newly created)
	 * @throws IOException
	 *             if creation fails
	 */
	public static HibernateRepository createRepositoryIfAbsent(
			HibernateSessionFactoryProvider provider,
			String repositoryName) throws IOException {
		return new HibernateRepositoryBuilder()
				.setSessionFactoryProvider(provider)
				.setRepositoryName(repositoryName).build();
	}
}