From 126dde8e35ad20735f0428237b16c29dedf36374 Mon Sep 17 00:00:00 2001 From: James Moger Date: Tue, 27 Mar 2012 16:52:44 -0400 Subject: [PATCH] Added a utility class to specify gitblit.indexBranch en masse --- build.xml | 1 + distrib/add-indexed-branch.cmd | 20 ++++ src/com/gitblit/AddIndexedBranch.java | 131 ++++++++++++++++++++++++++ 3 files changed, 152 insertions(+) create mode 100644 distrib/add-indexed-branch.cmd create mode 100644 src/com/gitblit/AddIndexedBranch.java diff --git a/build.xml b/build.xml index 3bdfa85b..b57a0336 100644 --- a/build.xml +++ b/build.xml @@ -418,6 +418,7 @@ + diff --git a/distrib/add-indexed-branch.cmd b/distrib/add-indexed-branch.cmd new file mode 100644 index 00000000..e167639a --- /dev/null +++ b/distrib/add-indexed-branch.cmd @@ -0,0 +1,20 @@ +@REM -------------------------------------------------------------------------- +@REM This is for Lucene search integration. +@REM +@REM Allows you to add an indexed branch specification to the repository config +@REM for all matching repositories in the specified folder. +@REM +@REM All repositories are included unless excluded using a --skip parameter. +@REM --skip supports simple wildcard fuzzy matching however only 1 asterisk is +@REM allowed per parameter. +@REM +@REM Always use forward-slashes for the path separator in your parameters!! +@REM +@REM Set FOLDER to the server's git.repositoriesFolder +@REM Set BRANCH ("default" or fully qualified ref - i.e. refs/heads/master) +@REM Set EXCLUSIONS for any repositories that you do not want to change +@REM -------------------------------------------------------------------------- +@SET FOLDER=c:/gitblit/git +@SET EXCLUSIONS=--skip test.git --skip group/test* +@SET BRANCH=default +@java -cp gitblit.jar;"%CD%\ext\*" com.gitblit.AddIndexedBranch --repositoriesFolder %FOLDER% --branch %BRANCH% %EXCLUSIONS% diff --git a/src/com/gitblit/AddIndexedBranch.java b/src/com/gitblit/AddIndexedBranch.java new file mode 100644 index 00000000..1eb93891 --- /dev/null +++ b/src/com/gitblit/AddIndexedBranch.java @@ -0,0 +1,131 @@ +/* + * Copyright 2012 gitblit.com. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.gitblit; + +import java.io.File; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; +import java.util.TreeSet; + +import org.eclipse.jgit.lib.RepositoryCache.FileKey; +import org.eclipse.jgit.storage.file.FileBasedConfig; +import org.eclipse.jgit.storage.file.FileRepository; +import org.eclipse.jgit.util.FS; + +import com.beust.jcommander.JCommander; +import com.beust.jcommander.Parameter; +import com.beust.jcommander.ParameterException; +import com.beust.jcommander.Parameters; +import com.gitblit.utils.ArrayUtils; +import com.gitblit.utils.JGitUtils; +import com.gitblit.utils.StringUtils; + +/** + * Utility class to add an indexBranch setting to matching repositories. + * + * @author James Moger + * + */ +public class AddIndexedBranch { + + public static void main(String... args) { + Params params = new Params(); + JCommander jc = new JCommander(params); + try { + jc.parse(args); + } catch (ParameterException t) { + System.err.println(t.getMessage()); + jc.usage(); + return; + } + + // create a lowercase set of excluded repositories + Set exclusions = new TreeSet(); + for (String exclude : params.exclusions) { + exclusions.add(exclude.toLowerCase()); + } + + // determine available repositories + File folder = new File(params.folder); + List repoList = JGitUtils.getRepositoryList(folder, false, true); + + int modCount = 0; + int skipCount = 0; + for (String repo : repoList) { + boolean skip = false; + for (String exclusion : exclusions) { + if (StringUtils.fuzzyMatch(repo, exclusion)) { + skip = true; + break; + } + } + + if (skip) { + System.out.println("skipping " + repo); + skipCount++; + continue; + } + + System.out.println(MessageFormat.format("adding [gitblit] indexBranch={0} for {1}", params.branch, repo)); + try { + // load repository config + File gitDir = FileKey.resolve(new File(folder, repo), FS.DETECTED); + FileRepository repository = new FileRepository(gitDir); + FileBasedConfig config = repository.getConfig(); + config.load(); + + Set indexedBranches = new LinkedHashSet(); + indexedBranches.add(Constants.DEFAULT_BRANCH); + + String [] branches = config.getStringList("gitblit", null, "indexBranch"); + if (!ArrayUtils.isEmpty(branches)) { + for (String branch : branches) { + indexedBranches.add(branch); + } + } + config.setStringList("gitblit", null, "indexBranch", new ArrayList(indexedBranches)); + config.save(); + modCount++; + } catch (Exception e) { + System.err.println(repo); + e.printStackTrace(); + } + } + + System.out.println(MessageFormat.format("updated {0} repository configurations, skipped {1}", modCount, skipCount)); + } + + + + /** + * JCommander Parameters class for AddIndexedBranch. + */ + @Parameters(separators = " ") + private static class Params { + + @Parameter(names = { "--repositoriesFolder" }, description = "The root repositories folder ", required = true) + public String folder; + + @Parameter(names = { "--branch" }, description = "The branch to index", required = true) + public String branch = "default"; + + @Parameter(names = { "--skip" }, description = "Skip the named repository (simple fizzy matching is supported)", required = false) + public List exclusions = new ArrayList(); + } +} -- 2.39.5