当使用netbeans cvsclient AddCommand添加文件到CVS时,会出现下面的错误:
cvs [add aborted]: there is no version here; do 'cvs checkout' first
原因是当添加文件时需要指定它的Parent Path :
cvsclient.setLocalPath("D://client//stored-proc//DW_PROD//RRM");
相关代码:
package com.xxx.cis.rds.rrm.test.demo; import java.io.File; public class CVSClient { /** Cvs clinet instance used to communicate with cvs server */ private Client cvsclient; /** Cvs connect string */ private CVSRoot cvsroot; /** Connection instance to keep connect with cvs server */ private Connection connection; /** Global options to store the requied parameter for cvs server */ private GlobalOptions globalOptions; /** The local path on ur local machine */ private String localPath; /** * Inner class extend CVSAdapter <br> * <p> * used to get and send message of the CVS server * </p> */ class BasicListener extends CVSAdapter { /** * Stores a tagged line */ private final StringBuffer taggedLine = new StringBuffer(); /** * Called when the server wants to send a message to be displayed to the user. The message is only for information purposes and * clients can choose to ignore these messages if they wish. * * @param e the event */ public void messageSent(MessageEvent e) { String line = e.getMessage(); PrintStream stream = e.isError()?System.err:System.out; if (e.isTagged()) { String message = MessageEvent.parseTaggedMessage(taggedLine, "Daniel Six"); // if we get back a non-null line, we have something // to output. Otherwise, there is more to come and we // should do nothing yet. if (message != null) { stream.println(message); } } else { stream.println(line); } } } /** * Default constructor allows to construct CVSRoot from Properties object. The names are exactly the same as the attribute names in this * class. */ public CVSClient() { } /** * Breaks the string representation of CVSClient into it's components: The valid format (from the cederqvist) is: * :method:[[user][:password]@]hostname[:[port]]/path/to/repository e.g. * :pserver;username=anonymous;hostname=localhost:/path/to/repository */ public CVSClient(String connectionString) { cvsroot = CVSRoot.parse(connectionString); } /** * Get the localPath * * @return localPath the local path to get project from the CVS server */ public String getLocalPath() { return localPath; } /** * Set the localPath */ public void setLocalPath(String localPath) { this.localPath = localPath; } /** * Parse the CVSROOT string into CVSRoot object. The valid format (from the cederqvist) is: * :method:[[user][:password]@]hostname[:[port]]/path/to/repository e.g. * :pserver;username=anonymous;hostname=localhost:/path/to/repository */ public void createConnection(String connectionString) { cvsroot = CVSRoot.parse(connectionString); } /** * Open connection to the cvs server <br> * * @return connection to cvs server * @throws AuthenticationException * @throws CommandAbortedException */ public Connection openConnection() throws AuthenticationException, CommandAbortedException { connection = ConnectionFactory.getConnection(cvsroot); connection.open(); return connection; } /** * Close connection to the cvs server <br> */ public void closeConnection() throws IOException { connection.close(); } /** * <p> * Excute cvs command * </p> * * @param command to be excute by the cliet * @throws AuthenticationException * @throws CommandAbortedException * @throws IOException * @throws CommandException */ public void excute(Command command) throws AuthenticationException, CommandAbortedException, IOException, CommandException { cvsclient = new Client(connection, new StandardAdminHandler()); cvsclient.setLocalPath(localPath); globalOptions = new GlobalOptions(); globalOptions.setCVSRoot("/u1/cvsrepos"); cvsclient.getEventManager().addCVSListener(new BasicListener()); // put the command to the console System.out.println("***Command***" + command.getCVSCommand()); cvsclient.executeCommand(command, globalOptions); } /** * <p> * Excute cvs command * </p> * * @param command to be excute by the cliet * @throws AuthenticationException * @throws CommandAbortedException * @throws IOException * @throws CommandException */ public void excuteAdd(Command command) throws AuthenticationException, CommandAbortedException, IOException, CommandException { cvsclient = new Client(connection, new StandardAdminHandler()); cvsclient.setLocalPath("D://client//stored-proc//DW_PROD//RRM"); globalOptions = new GlobalOptions(); globalOptions.setCVSRoot("/u1/cvsrepos"); cvsclient.getEventManager().addCVSListener(new BasicListener()); // put the command to the console System.out.println("***Command***" + command.getCVSCommand()); cvsclient.executeCommand(command, globalOptions); } /** * <p> * Called when need add files * </p> * * @param files that indicate to be added * @return command of add files */ public Command add(String[] files) { AddCommand command = new AddCommand(); command.setBuilder(null); for (int i = 0;i < files.length;i++) { command.setFiles(new File[] {new File(files[i])}); } return command; } /** * Called when need commit all files under the local path * * @return command command of commit files */ public Command commit() { CommitCommand command = new CommitCommand(); command.setBuilder(null); command.setForceCommit(true); command.setRecursive(true); return command; } /** * Called when need commit files * * @param files need to be commit * @return command command of commit files */ public Command commit(String[] files) { CommitCommand command = new CommitCommand(); for (int i = 0;i < files.length;i++) { command.setFiles(new File[] {new File(files[i])}); } command.setBuilder(null); command.setForceCommit(true); command.setRecursive(true); command.setMessage("add file to CVS"); return command; } /** * Called when need update the certain files * * @param files need to be update * @return command command of update files and directoris */ public Command update(String[] files) { UpdateCommand command = new UpdateCommand(); // fetch files from the array for (int i = 0;i < files.length;i++) { command.setFiles(new File[] {new File(files[i])}); } command.setBuilder(null); command.setRecursive(true); command.setBuildDirectories(true); command.setPruneDirectories(true); return command; } /** * Called to show the history list since given date * * @param date Date of the history * @return command command show history list */ public Command historysincedate(String date) { HistoryCommand command = new HistoryCommand(); // Format is yyyymmdd e.g 20070205 command.setSinceDate(date); return command; } /** * Called to show the history list since given version * * @param reversion reversion of the history * @return command command show history list **/ public Command historysincerRevision(String reversion) { // Init command HistoryCommand command = new HistoryCommand(); // set parameters command.setSinceRevision(reversion); return command; } /** * Called to show the different between two versions * * @param files the files to compare with * @param revision1 one revision * @param revision2 another revision * @return */ public Command diffbyreveision(String[] files, String revision1, String revision2) { // Inite command DiffCommand command = new DiffCommand(); // Set parameters for (int i = 0;i < files.length;i++) { command.setFiles(new File[] {new File(files[i])}); } command.setRevision1(revision1); command.setRevision2(revision2); return command; } /** * Show difference between of the file that with different date * * @param files an array of files path * @param date1 one date * @param date2 another date * @return command command of show difference between files */ public Command diffbydate(String[] files, String date1, String date2) { // Init command DiffCommand command = new DiffCommand(); // Set parameters for (int i = 0;i < files.length;i++) { command.setFiles(new File[] {new File(files[i])}); } // Format is yyyymmdd e.g 20070205 command.setBeforeDate1(date1); command.setBeforeDate2(date2); return command; } /** * Check out the module * * @param modulename name of the module that to be checked out * @return command command of check out the module */ public Command checkout(String modulename) { // Init new command CheckoutCommand command = new CheckoutCommand(); // Set paramaters command.setModule(modulename); command.setRecursive(true); return command; } /** * Check out the module * * @param modulename name of the module that to be checked out * @return command command of check out the module */ public Command checkouttoOutput(String modulename) { // Init new command CheckoutCommand command = new CheckoutCommand(); // Set paramaters command.setModule(modulename); command.setPipeToOutput(true); command.setRecursive(true); return command; } }
测试:
package com.xxx.cis.rds.rrm.test.demo; import java.io.IOException; import org.netbeans.lib.cvsclient.command.CommandException; import org.netbeans.lib.cvsclient.connection.AuthenticationException; public class CVSDemo { public static void main(String[] args) throws AuthenticationException, IOException, CommandException { /* * <p>set the connection string of the cvs server</p> connect string provide protocol,hostname,user,password,repository * e.g:":pserver:ibmuser:icmadmin@localhost:d:/root" */ CVSClient cvsclient = new CVSClient(":pserver:ivanl:[email protected]:/u1/cvsrepos"); // open the connection cvsclient.openConnection(); // set the local directory cvsclient.setLocalPath("d:/client/"); /* Demo of excute command as follow */ // add cvsclient.excute(cvsclient.add(new String[] {"D:/client/stored-proc/DW_PROD/RRM/rrm_22222.sp"})); // commit cvsclient.excute(cvsclient.commit(new String[] {"D:/client/stored-proc/DW_PROD/RRM/rrm_22222.sp"})); // check out // cvsclient.excute(cvsclient.checkout("stored-proc/DW_PROD/RRM")); // cvsclient.excute(cvsclient.checkouttoOutput("stored-proc/DW_PROD/RRM")); // update // cvsclient.excute(cvsclient.update(new String[] {"D:/client/stored-proc/DW_PROD/RRM/rrm_11111.sp"})); // diff // cvsclient.excute(cvsclient.diffbyreveision(new String[]{"d:/client/java/abc/abc.java"}, "1.1", "1.2")); // cvsclient.excute(cvsclient.diffbydate(new String[]{"D:/client/java/abc/abc.java"}, "20070206", "20070207")); // history // cvsclient.excute(cvsclient.historysincedate("20070201")); // cvsclient.excute(cvsclient.historysincerRevision("1.1")); cvsclient.closeConnection(); } }
部分代码来自网络!!