use of org.opensolaris.opengrok.util.Getopt in project OpenGrok by OpenGrok.
the class Messages method main.
public static void main(String[] argv) {
String type = null;
String text = null;
List<String> tags = new ArrayList<>();
String className = null;
long expire = -1;
String server = null;
int port = -1;
String filepath = null;
String x;
Getopt getopt = new Getopt(argv, "c:e:f:g:hm:p:s:t:?");
try {
getopt.parse();
} catch (ParseException ex) {
System.err.println("Messages: " + ex.getMessage());
b_usage();
System.exit(1);
}
int cmd;
File f;
getopt.reset();
while ((cmd = getopt.getOpt()) != -1) {
switch(cmd) {
case 'c':
className = getopt.getOptarg();
break;
case 'e':
x = getopt.getOptarg();
try {
expire = Long.parseLong(x) * 1000;
} catch (NumberFormatException e) {
System.err.println("Cannot parse " + x + " into long");
b_usage();
System.exit(1);
}
break;
case 'f':
filepath = getopt.getOptarg();
break;
case 'g':
tags.add(getopt.getOptarg());
break;
case 'h':
a_usage();
System.exit(0);
break;
case 'm':
type = getopt.getOptarg();
break;
case 'p':
x = getopt.getOptarg();
try {
port = Integer.parseInt(x);
} catch (NumberFormatException e) {
System.err.println("Cannot parse " + x + " into integer");
b_usage();
System.exit(1);
}
break;
case 's':
server = getopt.getOptarg();
break;
case 't':
text = getopt.getOptarg();
break;
case '?':
a_usage();
System.exit(0);
break;
default:
System.err.println("Internal Error - Not implemented option: " + (char) cmd);
b_usage();
System.exit(1);
break;
}
}
if (type == null) {
type = "normal";
}
if (server == null) {
server = "localhost";
}
if (port == -1) {
port = 2424;
}
Message m = Message.createMessage(type);
if (m == null) {
System.err.println("Uknown message type " + type);
b_usage();
System.exit(1);
}
if (filepath != null) {
try {
m.setTextFromFile(filepath);
} catch (IOException ex) {
System.err.println("Cannot read '" + filepath + "': " + ex);
System.exit(1);
}
} else {
m.setText(text);
}
m.setClassName(className);
for (String tag : tags) {
m.addTag(tag);
}
if (expire != -1 && expire > System.currentTimeMillis()) {
m.setExpiration(new Date(expire));
}
try {
m.validate();
} catch (Exception e) {
System.err.println("This message is not valid:");
System.err.println(e.getLocalizedMessage());
System.exit(1);
}
try {
byte[] out = m.write(server, port);
if (out != null) {
System.out.write(out);
}
} catch (IOException ex) {
System.err.println(ex.getMessage());
ex.printStackTrace(System.err);
System.exit(1);
}
}
use of org.opensolaris.opengrok.util.Getopt in project OpenGrok by OpenGrok.
the class Indexer method main.
/**
* Program entry point
*
* @param argv argument vector
*/
@SuppressWarnings("PMD.UseStringBufferForStringAppends")
public static void main(String[] argv) {
//this won't count JVM creation though
Statistics stats = new Statistics();
boolean runIndex = true;
boolean update = true;
boolean optimizedChanged = false;
ArrayList<String> zapCache = new ArrayList<>();
CommandLineOptions cmdOptions = new CommandLineOptions();
if (argv.length == 0) {
System.err.println(cmdOptions.getUsage());
System.exit(1);
} else {
Executor.registerErrorHandler();
boolean searchRepositories = false;
ArrayList<String> subFiles = new ArrayList<>();
ArrayList<String> subFilesList = new ArrayList<>();
ArrayList<String> repositories = new ArrayList<>();
HashSet<String> allowedSymlinks = new HashSet<>();
String configFilename = null;
String configHost = null;
boolean addProjects = false;
boolean refreshHistory = false;
String defaultProject = null;
boolean listFiles = false;
boolean listRepos = false;
boolean createDict = false;
int noThreads = 2 + (2 * Runtime.getRuntime().availableProcessors());
String host = null;
int port = 0;
// Parse command line options:
Getopt getopt = new Getopt(argv, cmdOptions.getCommandString());
try {
getopt.parse();
} catch (ParseException ex) {
System.err.println("OpenGrok: " + ex.getMessage());
System.err.println(cmdOptions.getUsage());
System.exit(1);
}
try {
Configuration cfg = null;
int cmd;
// will try to overwrite options..
while ((cmd = getopt.getOpt()) != -1) {
if (cmd == 'R') {
cfg = Configuration.read(new File(getopt.getOptarg()));
break;
}
}
if (cfg == null) {
cfg = new Configuration();
}
// Now we can handle all the other options..
getopt.reset();
while ((cmd = getopt.getOpt()) != -1) {
switch(cmd) {
case 'A':
{
String[] arg = getopt.getOptarg().split(":");
boolean prefix = false;
if (arg.length != 2) {
A_usage();
}
if (arg[0].endsWith(".")) {
arg[0] = arg[0].substring(0, arg[0].lastIndexOf('.')).toUpperCase();
prefix = true;
} else if (arg[0].startsWith(".")) {
arg[0] = arg[0].substring(arg[0].lastIndexOf('.') + 1).toUpperCase();
} else {
A_usage();
}
if (arg[1].equals("-")) {
if (prefix) {
AnalyzerGuru.addPrefix(arg[0], null);
} else {
AnalyzerGuru.addExtension(arg[0], null);
}
break;
}
if (prefix) {
try {
AnalyzerGuru.addPrefix(arg[0], AnalyzerGuru.findFactory(arg[1]));
} catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) {
LOGGER.log(Level.SEVERE, "Unable to use {0} as a FileAnalyzerFactory", arg[1]);
LOGGER.log(Level.SEVERE, "Stack: ", e.fillInStackTrace());
System.exit(1);
}
} else {
try {
AnalyzerGuru.addExtension(arg[0], AnalyzerGuru.findFactory(arg[1]));
} catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) {
LOGGER.log(Level.SEVERE, "Unable to use {0} as a FileAnalyzerFactory", arg[1]);
LOGGER.log(Level.SEVERE, "Stack: ", e.fillInStackTrace());
System.exit(1);
}
}
}
break;
case 'a':
if (getopt.getOptarg().equalsIgnoreCase(ON)) {
cfg.setAllowLeadingWildcard(true);
} else if (getopt.getOptarg().equalsIgnoreCase(OFF)) {
cfg.setAllowLeadingWildcard(false);
} else {
System.err.println("ERROR: You should pass either \"on\" or \"off\" as argument to -a");
System.err.println(" Ex: \"-a on\" will allow a search to start with a wildcard");
System.err.println(" \"-a off\" will disallow a search to start with a wildcard");
System.exit(1);
}
break;
case 'B':
cfg.setUserPage(getopt.getOptarg());
break;
case 'C':
cfg.setPrintProgress(true);
break;
case 'c':
cfg.setCtags(getopt.getOptarg());
break;
case 'd':
{
File dataRoot = new File(getopt.getOptarg());
if (!dataRoot.exists() && !dataRoot.mkdirs()) {
System.err.println("ERROR: Cannot create data root");
System.exit(1);
}
if (!dataRoot.isDirectory()) {
System.err.println("ERROR: Data root must be a directory");
System.exit(1);
}
cfg.setDataRoot(dataRoot.getCanonicalPath());
break;
}
case 'e':
cfg.setGenerateHtml(false);
break;
case 'G':
cfg.setTagsEnabled(true);
break;
case 'H':
refreshHistory = true;
break;
case 'h':
repositories.add(getopt.getOptarg());
break;
case 'I':
cfg.getIncludedNames().add(getopt.getOptarg());
break;
case 'i':
cfg.getIgnoredNames().add(getopt.getOptarg());
break;
case 'K':
listRepos = true;
break;
case 'k':
zapCache.add(getopt.getOptarg());
break;
case 'L':
cfg.setWebappLAF(getopt.getOptarg());
break;
case 'l':
if (getopt.getOptarg().equalsIgnoreCase(ON)) {
cfg.setUsingLuceneLocking(true);
} else if (getopt.getOptarg().equalsIgnoreCase(OFF)) {
cfg.setUsingLuceneLocking(false);
} else {
System.err.println("ERROR: You should pass either \"on\" or \"off\" as argument to -l");
System.err.println(" Ex: \"-l on\" will enable locks in Lucene");
System.err.println(" \"-l off\" will disable locks in Lucene");
}
break;
case 'm':
{
try {
cfg.setRamBufferSize(Double.parseDouble(getopt.getOptarg()));
} catch (NumberFormatException exp) {
System.err.println("ERROR: Failed to parse argument to \"-m\": " + exp.getMessage());
System.exit(1);
}
break;
}
case 'N':
allowedSymlinks.add(getopt.getOptarg());
break;
case 'n':
runIndex = false;
break;
case 'O':
{
boolean oldval = cfg.isOptimizeDatabase();
if (getopt.getOptarg().equalsIgnoreCase(ON)) {
cfg.setOptimizeDatabase(true);
} else if (getopt.getOptarg().equalsIgnoreCase(OFF)) {
cfg.setOptimizeDatabase(false);
} else {
System.err.println("ERROR: You should pass either \"on\" or \"off\" as argument to -O");
System.err.println(" Ex: \"-O on\" will optimize the database as part of the index generation");
System.err.println(" \"-O off\" disable optimization of the index database");
}
if (oldval != cfg.isOptimizeDatabase()) {
optimizedChanged = true;
}
break;
}
case 'o':
String CTagsExtraOptionsFile = getopt.getOptarg();
File CTagsFile = new File(CTagsExtraOptionsFile);
if (!(CTagsFile.isFile() && CTagsFile.canRead())) {
System.err.println("ERROR: File '" + CTagsExtraOptionsFile + "' not found for the -o option");
System.exit(1);
}
System.err.println("INFO: file with extra " + "options for ctags: " + CTagsExtraOptionsFile);
cfg.setCTagsExtraOptionsFile(CTagsExtraOptionsFile);
break;
case 'P':
addProjects = true;
break;
case 'p':
defaultProject = getopt.getOptarg();
break;
case 'Q':
if (getopt.getOptarg().equalsIgnoreCase(ON)) {
cfg.setQuickContextScan(true);
} else if (getopt.getOptarg().equalsIgnoreCase(OFF)) {
cfg.setQuickContextScan(false);
} else {
System.err.println("ERROR: You should pass either \"on\" or \"off\" as argument to -Q");
System.err.println(" Ex: \"-Q on\" will just scan a \"chunk\" of the file and insert \"[..all..]\"");
System.err.println(" \"-Q off\" will try to build a more accurate list by reading the complete file.");
}
break;
case 'q':
cfg.setVerbose(false);
LoggerUtil.setBaseConsoleLogLevel(Level.WARNING);
break;
case 'R':
// already handled
break;
case 'r':
if (getopt.getOptarg().equalsIgnoreCase(ON)) {
cfg.setRemoteScmSupported(Configuration.RemoteSCM.ON);
} else if (getopt.getOptarg().equalsIgnoreCase(OFF)) {
cfg.setRemoteScmSupported(Configuration.RemoteSCM.OFF);
} else if (getopt.getOptarg().equalsIgnoreCase(DIRBASED)) {
cfg.setRemoteScmSupported(Configuration.RemoteSCM.DIRBASED);
} else if (getopt.getOptarg().equalsIgnoreCase(UIONLY)) {
cfg.setRemoteScmSupported(Configuration.RemoteSCM.UIONLY);
} else {
System.err.println("ERROR: You should pass either \"on\" or \"off\" or \"uionly\" as argument to -r");
System.err.println(" Ex: \"-r on\" will allow retrieval for remote SCM systems");
System.err.println(" \"-r off\" will ignore SCM for remote systems");
System.err.println(" \"-r dirbased\" will allow retrieval during history index " + "only for repositories which allow getting history for directories");
System.err.println(" \"-r uionly\" will support remote SCM for UI only");
}
break;
case 'S':
searchRepositories = true;
break;
case 's':
{
File sourceRoot = new File(getopt.getOptarg());
if (!sourceRoot.isDirectory()) {
System.err.println("ERROR: Source root " + getopt.getOptarg() + " must be a directory");
System.exit(1);
}
cfg.setSourceRoot(sourceRoot.getCanonicalPath());
break;
}
case 'T':
try {
noThreads = Integer.parseInt(getopt.getOptarg());
} catch (NumberFormatException exp) {
System.err.println("ERROR: Failed to parse argument to \"-T\": " + exp.getMessage());
System.exit(1);
}
break;
case 't':
try {
int tmp = Integer.parseInt(getopt.getOptarg());
cfg.setTabSize(tmp);
} catch (NumberFormatException exp) {
System.err.println("ERROR: Failed to parse argument to \"-t\": " + exp.getMessage());
System.exit(1);
}
break;
case 'U':
configHost = getopt.getOptarg();
break;
case 'V':
System.out.println(Info.getFullVersion());
System.exit(0);
break;
case 'v':
cfg.setVerbose(true);
LoggerUtil.setBaseConsoleLogLevel(Level.INFO);
break;
case 'W':
configFilename = getopt.getOptarg();
break;
case 'w':
{
String webapp = getopt.getOptarg();
if (webapp.charAt(0) != '/' && !webapp.startsWith("http")) {
webapp = "/" + webapp;
}
if (webapp.endsWith("/")) {
cfg.setUrlPrefix(webapp + "s?");
} else {
cfg.setUrlPrefix(webapp + "/s?");
}
}
break;
case 'X':
cfg.setUserPageSuffix(getopt.getOptarg());
break;
case 'z':
try {
cfg.setScanningDepth(Integer.parseInt(getopt.getOptarg()));
} catch (NumberFormatException exp) {
System.err.println("ERROR: Failed to parse argument to \"-z\": " + exp.getMessage());
System.exit(1);
}
break;
case '?':
System.err.println(cmdOptions.getUsage());
System.exit(0);
break;
default:
System.err.println("Internal Error - Unimplemented cmdline option: " + (char) cmd);
System.exit(1);
}
}
if (configHost != null) {
String[] configHostArray = configHost.split(":");
if (configHostArray.length == 2) {
host = configHostArray[0];
try {
port = Integer.parseInt(configHostArray[1]);
} catch (NumberFormatException ex) {
System.err.println("Failed to parse: " + configHost);
System.exit(1);
}
} else {
System.err.println("Syntax error: ");
for (String s : configHostArray) {
System.err.println(s);
}
System.exit(1);
}
}
List<Class<? extends Repository>> repositoryClasses = RepositoryFactory.getRepositoryClasses();
for (Class<? extends Repository> clazz : repositoryClasses) {
try {
Field f = clazz.getDeclaredField("CMD_PROPERTY_KEY");
Object key = f.get(null);
if (key != null) {
cfg.setRepoCmd(clazz.getCanonicalName(), System.getProperty(key.toString()));
}
} catch (Exception e) {
// don't care
}
}
//logging starts here
if (cfg.isVerbose()) {
String fn = LoggerUtil.getFileHandlerPattern();
if (fn != null) {
System.out.println("Logging filehandler pattern: " + fn);
}
}
// automatically allow symlinks that are directly in source root
String file = cfg.getSourceRoot();
if (file != null) {
File sourceRootFile = new File(file);
File[] projectDirs = sourceRootFile.listFiles();
if (projectDirs != null) {
for (File projectDir : projectDirs) {
if (!projectDir.getCanonicalPath().equals(projectDir.getAbsolutePath())) {
allowedSymlinks.add(projectDir.getAbsolutePath());
}
}
}
}
allowedSymlinks.addAll(cfg.getAllowedSymlinks());
cfg.setAllowedSymlinks(allowedSymlinks);
// Assemble the unprocessed command line arguments (possibly
// a list of paths). This will be used to perform more fine
// grained checking in invalidateRepositories().
int optind = getopt.getOptind();
if (optind != -1) {
while (optind < argv.length) {
subFilesList.add(cfg.getSourceRoot() + argv[optind++]);
}
}
// Set updated configuration in RuntimeEnvironment.
RuntimeEnvironment env = RuntimeEnvironment.getInstance();
env.setConfiguration(cfg, subFilesList);
/*
* Add paths to directories under source root. If projects
* are enabled the path should correspond to a project because
* project path is necessary to correctly set index directory
* (otherwise the index files will end up in index data root
* directory and not per project data root directory).
* For the check we need to have 'env' already set.
*/
for (String path : subFilesList) {
String srcPath = env.getSourceRootPath();
if (srcPath == null) {
System.err.println("Error getting source root from environment. Exiting.");
System.exit(1);
}
path = path.substring(srcPath.length());
if (env.hasProjects()) {
// The paths need to correspond to a project.
if (Project.getProject(path) != null) {
subFiles.add(path);
} else {
System.err.println("The path " + path + " does not correspond to a project");
}
} else {
subFiles.add(path);
}
}
if (!subFilesList.isEmpty() && subFiles.isEmpty()) {
System.err.println("None of the paths were added, exiting");
System.exit(1);
}
// Get history first.
getInstance().prepareIndexer(env, searchRepositories, addProjects, defaultProject, configFilename, refreshHistory, listFiles, createDict, subFiles, repositories, zapCache, listRepos);
if (listRepos || !zapCache.isEmpty()) {
return;
}
// And now index it all.
if (runIndex || (optimizedChanged && env.isOptimizeDatabase())) {
IndexChangedListener progress = new DefaultIndexChangedListener();
getInstance().doIndexerExecution(update, noThreads, subFiles, progress);
}
// or send new configuration to the web application in the case of full reindex.
if (host != null) {
if (!subFiles.isEmpty()) {
getInstance().refreshSearcherManagers(env, subFiles, host, port);
} else {
getInstance().sendToConfigHost(env, host, port);
}
}
} catch (IndexerException ex) {
LOGGER.log(Level.SEVERE, "Exception running indexer", ex);
System.err.println(cmdOptions.getUsage());
System.exit(1);
} catch (Throwable e) {
System.err.println("Exception: " + e.getLocalizedMessage());
LOGGER.log(Level.SEVERE, "Unexpected Exception", e);
System.exit(1);
} finally {
stats.report(LOGGER);
}
}
}
use of org.opensolaris.opengrok.util.Getopt in project OpenGrok by OpenGrok.
the class Search method parseCmdLine.
@SuppressWarnings({ "PMD.SwitchStmtsShouldHaveDefault" })
protected boolean parseCmdLine(String[] argv) {
engine = new SearchEngine();
Getopt getopt = new Getopt(argv, "R:d:r:p:h:f:t:");
try {
getopt.parse();
} catch (ParseException e) {
System.err.println(e.getMessage());
System.err.println(usage);
return false;
}
int cmd;
while ((cmd = getopt.getOpt()) != -1) {
switch(cmd) {
case 'R':
try {
RuntimeEnvironment.getInstance().readConfiguration(new File(getopt.getOptarg()));
} catch (IOException e) {
System.err.println("Failed to read config file: ");
System.err.println(e.getMessage());
return false;
}
break;
case 'd':
engine.setDefinition(getopt.getOptarg());
break;
case 'r':
engine.setSymbol(getopt.getOptarg());
break;
case 'p':
engine.setFile(getopt.getOptarg());
break;
case 'h':
engine.setHistory(getopt.getOptarg());
break;
case 'f':
engine.setFreetext(getopt.getOptarg());
break;
case 't':
engine.setType(getopt.getOptarg());
break;
}
}
return true;
}
use of org.opensolaris.opengrok.util.Getopt in project OpenGrok by OpenGrok.
the class Groups method main.
public static void main(String[] argv) {
PrintStream out = System.out;
File outFile = null;
Configuration cfg = new Configuration();
String groupname = null;
String grouppattern = null;
String parent = null;
boolean list = false;
boolean delete = false;
boolean empty = false;
String match = null;
Getopt getopt = new Getopt(argv, "dehi:lm:n:o:p:r:?");
try {
getopt.parse();
} catch (ParseException ex) {
System.err.println("Groups: " + ex.getMessage());
usage();
System.exit(1);
}
try {
int cmd;
File f;
getopt.reset();
while ((cmd = getopt.getOpt()) != -1) {
switch(cmd) {
case 'd':
delete = true;
break;
case 'e':
empty = true;
break;
case 'h':
usage();
System.exit(0);
break;
case 'i':
f = new File(getopt.getOptarg());
try {
cfg = Configuration.read(f);
} catch (ArrayIndexOutOfBoundsException ex) {
System.err.println("An error occured - this may mean that the input file is not well-formated.");
System.err.println();
ex.printStackTrace(System.err);
System.exit(3);
}
break;
case 'l':
list = true;
break;
case 'm':
match = getopt.getOptarg();
break;
case 'n':
groupname = getopt.getOptarg();
break;
case 'o':
outFile = new File(getopt.getOptarg());
break;
case 'p':
parent = getopt.getOptarg();
break;
case 'r':
grouppattern = getopt.getOptarg();
break;
case '?':
usage();
System.exit(0);
break;
default:
System.err.println("Internal Error - Not implemented option: " + (char) cmd);
usage();
System.exit(1);
break;
}
}
} catch (FileNotFoundException ex) {
System.err.println("An error occured - file does not exist");
ex.printStackTrace(System.err);
System.exit(3);
} catch (IOException ex) {
System.err.println("An uknown error occured - the input file may be corrupted");
ex.printStackTrace(System.err);
System.exit(3);
}
if (match != null) {
// perform matching
if (parent != null || groupname != null || grouppattern != null) {
System.err.println("Match option should be used without parent|groupname|groupregex options");
usage();
System.exit(1);
}
matchGroups(System.out, cfg.getGroups(), match);
} else if (empty) {
// just list the groups
if (parent != null || groupname != null || grouppattern != null) {
System.err.println("Match option should be used without parent|groupname|groupregex options");
usage();
System.exit(1);
}
printOut(false, cfg, out);
} else if (delete) {
// perform delete
if (parent != null || grouppattern != null) {
System.err.println("Delete option should be used without parent|groupregex options");
usage();
System.exit(1);
}
if (groupname == null) {
System.err.println("You must specify the group name");
usage();
System.exit(1);
}
deleteGroup(cfg.getGroups(), groupname);
out = prepareOutput(outFile);
printOut(list, cfg, out);
} else if (groupname != null && grouppattern != null) {
// perform insert/update. parent may be null
if (!modifyGroup(cfg.getGroups(), groupname, grouppattern, parent)) {
System.err.println("Parent group does not exist \"" + parent + "\"");
} else {
out = prepareOutput(outFile);
printOut(list, cfg, out);
}
} else if (list) {
// just list the groups
if (groupname != null) {
System.err.println("List option should be used without groupname options");
usage();
System.exit(1);
}
printOut(list, cfg, out);
} else {
System.err.println("Wrong combination of options. See usage.");
usage();
System.exit(2);
}
}
Aggregations