【转】 JAVA CVS client 使用方法和DEMO

郑狐若
2023-12-01

JAVA CVS client 使用方法和DEMO

http://gblyh.bokee.com/6107026.html

 

最近工作原因需要找开源的CVS的jar包,有eclipse的jar包,和netbean的jar包,我最后选择了netbean的jar包,听人说eclipse的也很好用,但google搜索的时候先入为主,所以就用了netbean的了。发现关于介绍这部分api的文档很少,连javadoc都没有,我把源码下下来,自己生成了javadoc,直接读源码才弄明白使用方法,由于缺乏官方文档的支持,民间的文档也不多,所以奉上此文,希望能对大家有些帮助。 1.到netbean的网站上下载netbean java cvs的jar包。

1.下载http://javacvs.netbeans.org/files/documents/51/640/org-netbeans-lib-cvsclient.jar

2.把jar包加入到classpath。相信大家对cvs都是比较熟悉的了,架设cvsnt的步骤很简单,网上也有很多文章,我就不多赘述了

3.为了帮助理解,这里对这些类的使用方式做个简单介绍,下面就是具体的程序代码,稍后可以细看。netbean的cvs包里包含这样几个重要的类,Client,MessageEvent,多种Command对象。client对象是来负责连接cvs server,messageEvent是来接收cvs server 传回的信息,当cvs server做出response的时候,就会出发messageEvent事件。多种Command对象,一种对象对应一种cvs command,例如CommitCommand对应的就是cvs的Commit命令,然后命令后附带的参数通过设置此对象的类属性变量来实现。执行命令的时候将Command对象传入Client方法的executeCommand来执行这些命令。

4.这是一个自己封装的cvsclient对象,包含了比较常用的几个cvs命令,代码如下:

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("d:/client/java");
  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);
  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;
 } 
}

4.如下是一个小的demo来使用这个client类来执行cvs的客户端操作:

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:ibmuser:icmadmin@localhost:d:/root");
  //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/java/abc/abc.java"}));
  
  //commit
  //cvsclient.excute(cvsclient.commit(new String[]{"D:/client/java/abc/abc.java"}));
  
  //check out
  //cvsclient.excute(cvsclient.checkout("cvsroot"));
  cvsclient.excute(cvsclient.checkouttoOutput("java"));
  
  //update
  //cvsclient.excute(cvsclient.update(new String[]{"D:/client/"}));
  
  //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();
 }
}

 类似资料: