001: /*
002: * ====================================================================
003: * Copyright (c) 2004-2008 TMate Software Ltd. All rights reserved.
004: *
005: * This software is licensed as described in the file COPYING, which
006: * you should have received as part of this distribution. The terms
007: * are also available at http://svnkit.com/license.html
008: * If newer versions of this license are posted there, you may use a
009: * newer version instead, at your option.
010: * ====================================================================
011: */
012:
013: package org.tmatesoft.svn.cli;
014:
015: import java.io.File;
016: import java.util.HashSet;
017: import java.util.Set;
018:
019: import org.tmatesoft.svn.core.SVNException;
020: import org.tmatesoft.svn.core.auth.ISVNAuthenticationManager;
021: import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory;
022: import org.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory;
023: import org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl;
024: import org.tmatesoft.svn.core.internal.wc.SVNFileType;
025: import org.tmatesoft.svn.core.wc.SVNStatus;
026: import org.tmatesoft.svn.core.wc.SVNStatusClient;
027: import org.tmatesoft.svn.core.wc.SVNStatusType;
028: import org.tmatesoft.svn.util.SVNDebugLog;
029:
030: /**
031: * @version 1.1.1
032: * @author TMate Software Ltd.
033: */
034: public class SVN {
035: private static Set ourArguments;
036:
037: static {
038: ourArguments = new HashSet();
039: ourArguments.add(SVNArgument.PASSWORD);
040: ourArguments.add(SVNArgument.USERNAME);
041: ourArguments.add(SVNArgument.CONFIG_DIR);
042:
043: ourArguments.add(SVNArgument.NON_RECURSIVE);
044: ourArguments.add(SVNArgument.RECURSIVE);
045: ourArguments.add(SVNArgument.VERBOSE);
046: ourArguments.add(SVNArgument.QUIET);
047: ourArguments.add(SVNArgument.SHOW_UPDATES);
048: ourArguments.add(SVNArgument.NO_IGNORE);
049: ourArguments.add(SVNArgument.MESSAGE);
050: ourArguments.add(SVNArgument.REVISION);
051: ourArguments.add(SVNArgument.FORCE);
052: ourArguments.add(SVNArgument.FORCE_LOG);
053: ourArguments.add(SVNArgument.FILE);
054: ourArguments.add(SVNArgument.EDITOR_CMD);
055: ourArguments.add(SVNArgument.STRICT);
056: ourArguments.add(SVNArgument.NO_UNLOCK);
057: ourArguments.add(SVNArgument.NO_AUTH_CACHE);
058: ourArguments.add(SVNArgument.RELOCATE);
059: ourArguments.add(SVNArgument.EOL_STYLE);
060: ourArguments.add(SVNArgument.NO_DIFF_DELETED);
061: ourArguments.add(SVNArgument.USE_ANCESTRY);
062: ourArguments.add(SVNArgument.OLD);
063: ourArguments.add(SVNArgument.NEW);
064: ourArguments.add(SVNArgument.DRY_RUN);
065: ourArguments.add(SVNArgument.IGNORE_ANCESTRY);
066: ourArguments.add(SVNArgument.NO_AUTO_PROPS);
067: ourArguments.add(SVNArgument.AUTO_PROPS);
068: ourArguments.add(SVNArgument.REV_PROP);
069: ourArguments.add(SVNArgument.INCREMENTAL);
070: ourArguments.add(SVNArgument.XML);
071: ourArguments.add(SVNArgument.LIMIT);
072: ourArguments.add(SVNArgument.STOP_ON_COPY);
073: ourArguments.add(SVNArgument.NON_INTERACTIVE);
074: ourArguments.add(SVNArgument.CHANGE);
075: ourArguments.add(SVNArgument.SUMMARIZE);
076: ourArguments.add(SVNArgument.EXTENSIONS);
077: ourArguments.add(SVNArgument.IGNORE_ALL_WS);
078: ourArguments.add(SVNArgument.IGNORE_EOL_STYLE);
079: ourArguments.add(SVNArgument.IGNORE_WS_CHANGE);
080: }
081:
082: public static void main(String[] args) {
083: if (args == null || args.length < 1) {
084: System.err
085: .println("usage: jsvn commandName commandArguments");
086: System.exit(1);
087: }
088:
089: StringBuffer commandLineString = new StringBuffer();
090: for (int i = 0; i < args.length; i++) {
091: commandLineString.append(args[i]
092: + (i < args.length - 1 ? " " : ""));
093: }
094:
095: SVNCommandLine commandLine = null;
096: try {
097: try {
098: commandLine = new SVNCommandLine(args, ourArguments);
099: } catch (SVNException e) {
100: SVNDebugLog.getDefaultLog().info(e);
101: System.err.println(e.getMessage());
102: System.exit(1);
103: }
104: String commandName = commandLine.getCommandName();
105: SVNCommand command = SVNCommand.getCommand(commandName);
106:
107: if (command != null) {
108: if (SVNCommand.isForceLogCommand(commandName)
109: && !commandLine
110: .hasArgument(SVNArgument.FORCE_LOG)) {
111: if (commandLine.hasArgument(SVNArgument.FILE)) {
112: File file = new File((String) commandLine
113: .getArgumentValue(SVNArgument.FILE));
114: // check if it is a versioned file.
115: SVNStatusClient stClient = new SVNStatusClient(
116: (ISVNAuthenticationManager) null, null);
117: try {
118: SVNStatus status = stClient.doStatus(file
119: .getAbsoluteFile(), false);
120: if (status != null
121: && status.getContentsStatus() != SVNStatusType.STATUS_UNVERSIONED
122: && status.getContentsStatus() != SVNStatusType.STATUS_IGNORED
123: && status.getContentsStatus() != SVNStatusType.STATUS_EXTERNAL) {
124: if ("lock".equals(commandName)) {
125: System.err
126: .println("svn: Lock comment file is a versioned file; use '--force-log' to override");
127: } else {
128: System.err
129: .println("svn: Log message file is a versioned file; use '--force-log' to override");
130: }
131: System.exit(1);
132: }
133: } catch (SVNException e) {
134: }
135: }
136: if (commandLine.hasArgument(SVNArgument.MESSAGE)) {
137: String msg = (String) commandLine
138: .getArgumentValue(SVNArgument.MESSAGE);
139: if (!"".equals(msg) && msg != null) {
140: File file = new File(msg);
141: if (SVNFileType.getType(file) != SVNFileType.NONE) {
142: if ("lock".equals(commandName)) {
143: System.err
144: .println("svn: The lock comment is a path name (was -F intended?); use '--force-log' to override");
145: } else {
146: System.err
147: .println("svn: The log message is a path name (was -F intended?); use '--force-log' to override");
148: }
149: System.exit(1);
150: }
151: }
152: }
153: }
154: DAVRepositoryFactory.setup();
155: SVNRepositoryFactoryImpl.setup();
156: FSRepositoryFactory.setup();
157:
158: command.setCommandLine(commandLine);
159: boolean isSuccess = true;
160: try {
161: command.run(System.out, System.err);
162: } catch (SVNException e) {
163: System.err.println(e.getMessage());
164: SVNDebugLog.getDefaultLog().info(e);
165: isSuccess = false;
166: } finally {
167: if (command.getClientManager() != null) {
168: command.getClientManager().shutdownConnections(
169: true);
170: }
171: }
172: if (!isSuccess) {
173: System.exit(1);
174: }
175: } else {
176: System.err.println("error: unknown command name '"
177: + commandName + "'");
178: System.exit(1);
179: }
180: } catch (Throwable th) {
181: SVNDebugLog.getDefaultLog().info(th);
182: System.exit(-1);
183: }
184: System.exit(0);
185: }
186: }
|