James Moger
2014-06-09 ca4d98678c20e4033fdaca09ecbbf0f5952e0b84
commit | author | age
5e3521 1 /*
JM 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
18 import java.io.File;
19 import java.text.MessageFormat;
20 import java.util.ArrayList;
21 import java.util.List;
22
50380b 23 import org.kohsuke.args4j.CmdLineException;
JM 24 import org.kohsuke.args4j.CmdLineParser;
25 import org.kohsuke.args4j.Option;
26
5e3521 27 import com.gitblit.manager.IRepositoryManager;
JM 28 import com.gitblit.manager.IRuntimeManager;
29 import com.gitblit.manager.RepositoryManager;
30 import com.gitblit.manager.RuntimeManager;
31 import com.gitblit.tickets.BranchTicketService;
32 import com.gitblit.tickets.FileTicketService;
33 import com.gitblit.tickets.ITicketService;
34 import com.gitblit.tickets.RedisTicketService;
35 import com.gitblit.utils.StringUtils;
36
37 /**
38  * A command-line tool to reindex all tickets in all repositories when the
39  * indexes needs to be rebuilt.
40  *
41  * @author James Moger
42  *
43  */
44 public class ReindexTickets {
45
46     public static void main(String... args) {
47         ReindexTickets reindex = new ReindexTickets();
48
49         // filter out the baseFolder parameter
50         List<String> filtered = new ArrayList<String>();
51         String folder = "data";
52         for (int i = 0; i < args.length; i++) {
53             String arg = args[i];
54             if (arg.equals("--baseFolder")) {
55                 if (i + 1 == args.length) {
56                     System.out.println("Invalid --baseFolder parameter!");
57                     System.exit(-1);
58                 } else if (!".".equals(args[i + 1])) {
59                     folder = args[i + 1];
60                 }
61                 i = i + 1;
62             } else {
63                 filtered.add(arg);
64             }
65         }
66
67         Params.baseFolder = folder;
68         Params params = new Params();
50380b 69         CmdLineParser parser = new CmdLineParser(params);
5e3521 70         try {
50380b 71             parser.parseArgument(filtered);
5e3521 72             if (params.help) {
50380b 73                 reindex.usage(parser, null);
5e3521 74                 return;
JM 75             }
50380b 76         } catch (CmdLineException t) {
JM 77             reindex.usage(parser, t);
5e3521 78             return;
JM 79         }
80
81         // load the settings
82         FileSettings settings = params.FILESETTINGS;
83         if (!StringUtils.isEmpty(params.settingsfile)) {
84             if (new File(params.settingsfile).exists()) {
85                 settings = new FileSettings(params.settingsfile);
86             }
87         }
88
89         // reindex tickets
90         reindex.reindex(new File(Params.baseFolder), settings);
91         System.exit(0);
92     }
93
94     /**
95      * Display the command line usage of ReindexTickets.
96      *
50380b 97      * @param parser
5e3521 98      * @param t
JM 99      */
50380b 100     protected final void usage(CmdLineParser parser, CmdLineException t) {
5e3521 101         System.out.println(Constants.BORDER);
JM 102         System.out.println(Constants.getGitBlitVersion());
103         System.out.println(Constants.BORDER);
104         System.out.println();
105         if (t != null) {
106             System.out.println(t.getMessage());
107             System.out.println();
108         }
50380b 109         if (parser != null) {
JM 110             parser.printUsage(System.out);
5e3521 111             System.out
JM 112                     .println("\nExample:\n  java -gitblit.jar com.gitblit.ReindexTickets --baseFolder c:\\gitblit-data");
113         }
114         System.exit(0);
115     }
116
117     /**
118      * Reindex all tickets
119      *
120      * @param settings
121      */
122     protected void reindex(File baseFolder, IStoredSettings settings) {
123         // disable some services
124         settings.overrideSetting(Keys.web.allowLuceneIndexing, false);
125         settings.overrideSetting(Keys.git.enableGarbageCollection, false);
126         settings.overrideSetting(Keys.git.enableMirroring, false);
127         settings.overrideSetting(Keys.web.activityCacheDays, 0);
128
129         IRuntimeManager runtimeManager = new RuntimeManager(settings, baseFolder).start();
ca4d98 130         IRepositoryManager repositoryManager = new RepositoryManager(runtimeManager, null, null).start();
5e3521 131
JM 132         String serviceName = settings.getString(Keys.tickets.service, BranchTicketService.class.getSimpleName());
133         if (StringUtils.isEmpty(serviceName)) {
134             System.err.println(MessageFormat.format("Please define a ticket service in \"{0}\"", Keys.tickets.service));
135             System.exit(1);
136         }
137         ITicketService ticketService = null;
138         try {
139             Class<?> serviceClass = Class.forName(serviceName);
140             if (RedisTicketService.class.isAssignableFrom(serviceClass)) {
141                 // Redis ticket service
ba5670 142                 ticketService = new RedisTicketService(runtimeManager, null, null, null, repositoryManager).start();
5e3521 143             } else if (BranchTicketService.class.isAssignableFrom(serviceClass)) {
JM 144                 // Branch ticket service
ba5670 145                 ticketService = new BranchTicketService(runtimeManager, null, null, null, repositoryManager).start();
5e3521 146             } else if (FileTicketService.class.isAssignableFrom(serviceClass)) {
JM 147                 // File ticket service
ba5670 148                 ticketService = new FileTicketService(runtimeManager, null, null, null, repositoryManager).start();
5e3521 149             } else {
JM 150                 System.err.println("Unknown ticket service " + serviceName);
151                 System.exit(1);
152             }
153         } catch (Exception e) {
154             e.printStackTrace();
155             System.exit(1);
156         }
157
158         ticketService.reindex();
159         ticketService.stop();
160         repositoryManager.stop();
161         runtimeManager.stop();
162     }
163
164     /**
50380b 165      * Parameters.
5e3521 166      */
JM 167     public static class Params {
168
169         public static String baseFolder;
170
50380b 171         @Option(name = "--help", aliases = { "-h"}, usage = "Show this help")
5e3521 172         public Boolean help = false;
JM 173
174         private final FileSettings FILESETTINGS = new FileSettings(new File(baseFolder, Constants.PROPERTIES_FILE).getAbsolutePath());
175
50380b 176         @Option(name = "--repositoriesFolder", usage = "Git Repositories Folder", metaVar = "PATH")
5e3521 177         public String repositoriesFolder = FILESETTINGS.getString(Keys.git.repositoriesFolder, "git");
JM 178
50380b 179         @Option(name = "--settings", usage = "Path to alternative settings", metaVar = "FILE")
5e3521 180         public String settingsfile;
JM 181     }
182 }