You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ReindexTickets.java 5.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. /*
  2. * Copyright 2014 gitblit.com.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package com.gitblit;
  17. import java.io.File;
  18. import java.text.MessageFormat;
  19. import java.util.ArrayList;
  20. import java.util.List;
  21. import org.kohsuke.args4j.CmdLineException;
  22. import org.kohsuke.args4j.CmdLineParser;
  23. import org.kohsuke.args4j.Option;
  24. import com.gitblit.manager.IRepositoryManager;
  25. import com.gitblit.manager.IRuntimeManager;
  26. import com.gitblit.manager.RepositoryManager;
  27. import com.gitblit.manager.RuntimeManager;
  28. import com.gitblit.tickets.BranchTicketService;
  29. import com.gitblit.tickets.FileTicketService;
  30. import com.gitblit.tickets.ITicketService;
  31. import com.gitblit.tickets.RedisTicketService;
  32. import com.gitblit.utils.StringUtils;
  33. /**
  34. * A command-line tool to reindex all tickets in all repositories when the
  35. * indexes needs to be rebuilt.
  36. *
  37. * @author James Moger
  38. *
  39. */
  40. public class ReindexTickets {
  41. public static void main(String... args) {
  42. ReindexTickets reindex = new ReindexTickets();
  43. // filter out the baseFolder parameter
  44. List<String> filtered = new ArrayList<String>();
  45. String folder = "data";
  46. for (int i = 0; i < args.length; i++) {
  47. String arg = args[i];
  48. if (arg.equals("--baseFolder")) {
  49. if (i + 1 == args.length) {
  50. System.out.println("Invalid --baseFolder parameter!");
  51. System.exit(-1);
  52. } else if (!".".equals(args[i + 1])) {
  53. folder = args[i + 1];
  54. }
  55. i = i + 1;
  56. } else {
  57. filtered.add(arg);
  58. }
  59. }
  60. Params.baseFolder = folder;
  61. Params params = new Params();
  62. CmdLineParser parser = new CmdLineParser(params);
  63. try {
  64. parser.parseArgument(filtered);
  65. if (params.help) {
  66. reindex.usage(parser, null);
  67. return;
  68. }
  69. } catch (CmdLineException t) {
  70. reindex.usage(parser, t);
  71. return;
  72. }
  73. // load the settings
  74. FileSettings settings = params.FILESETTINGS;
  75. if (!StringUtils.isEmpty(params.settingsfile)) {
  76. if (new File(params.settingsfile).exists()) {
  77. settings = new FileSettings(params.settingsfile);
  78. }
  79. }
  80. // reindex tickets
  81. reindex.reindex(new File(Params.baseFolder), settings);
  82. System.exit(0);
  83. }
  84. /**
  85. * Display the command line usage of ReindexTickets.
  86. *
  87. * @param parser
  88. * @param t
  89. */
  90. protected final void usage(CmdLineParser parser, CmdLineException t) {
  91. System.out.println(Constants.BORDER);
  92. System.out.println(Constants.getGitBlitVersion());
  93. System.out.println(Constants.BORDER);
  94. System.out.println();
  95. if (t != null) {
  96. System.out.println(t.getMessage());
  97. System.out.println();
  98. }
  99. if (parser != null) {
  100. parser.printUsage(System.out);
  101. System.out
  102. .println("\nExample:\n java -gitblit.jar com.gitblit.ReindexTickets --baseFolder c:\\gitblit-data");
  103. }
  104. System.exit(0);
  105. }
  106. /**
  107. * Reindex all tickets
  108. *
  109. * @param settings
  110. */
  111. protected void reindex(File baseFolder, IStoredSettings settings) {
  112. // disable some services
  113. settings.overrideSetting(Keys.web.allowLuceneIndexing, false);
  114. settings.overrideSetting(Keys.git.enableGarbageCollection, false);
  115. settings.overrideSetting(Keys.git.enableMirroring, false);
  116. settings.overrideSetting(Keys.web.activityCacheDays, 0);
  117. IRuntimeManager runtimeManager = new RuntimeManager(settings, baseFolder).start();
  118. IRepositoryManager repositoryManager = new RepositoryManager(runtimeManager, null).start();
  119. String serviceName = settings.getString(Keys.tickets.service, BranchTicketService.class.getSimpleName());
  120. if (StringUtils.isEmpty(serviceName)) {
  121. System.err.println(MessageFormat.format("Please define a ticket service in \"{0}\"", Keys.tickets.service));
  122. System.exit(1);
  123. }
  124. ITicketService ticketService = null;
  125. try {
  126. Class<?> serviceClass = Class.forName(serviceName);
  127. if (RedisTicketService.class.isAssignableFrom(serviceClass)) {
  128. // Redis ticket service
  129. ticketService = new RedisTicketService(runtimeManager, null, null, repositoryManager).start();
  130. } else if (BranchTicketService.class.isAssignableFrom(serviceClass)) {
  131. // Branch ticket service
  132. ticketService = new BranchTicketService(runtimeManager, null, null, repositoryManager).start();
  133. } else if (FileTicketService.class.isAssignableFrom(serviceClass)) {
  134. // File ticket service
  135. ticketService = new FileTicketService(runtimeManager, null, null, repositoryManager).start();
  136. } else {
  137. System.err.println("Unknown ticket service " + serviceName);
  138. System.exit(1);
  139. }
  140. } catch (Exception e) {
  141. e.printStackTrace();
  142. System.exit(1);
  143. }
  144. ticketService.reindex();
  145. ticketService.stop();
  146. repositoryManager.stop();
  147. runtimeManager.stop();
  148. }
  149. /**
  150. * Parameters.
  151. */
  152. public static class Params {
  153. public static String baseFolder;
  154. @Option(name = "--help", aliases = { "-h"}, usage = "Show this help")
  155. public Boolean help = false;
  156. private final FileSettings FILESETTINGS = new FileSettings(new File(baseFolder, Constants.PROPERTIES_FILE).getAbsolutePath());
  157. @Option(name = "--repositoriesFolder", usage = "Git Repositories Folder", metaVar = "PATH")
  158. public String repositoriesFolder = FILESETTINGS.getString(Keys.git.repositoriesFolder, "git");
  159. @Option(name = "--settings", usage = "Path to alternative settings", metaVar = "FILE")
  160. public String settingsfile;
  161. }
  162. }