ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dona...@apache.org
Subject cvs commit: jakarta-ant/proposal/myrmidon/src/java/org/apache/antlib/cvslib CVSPass.java Cvs.java
Date Sun, 16 Dec 2001 12:05:56 GMT
donaldp     01/12/16 04:05:56

  Added:       proposal/myrmidon/src/java/org/apache/antlib/cvslib
                        CVSPass.java Cvs.java
  Log:
  Start to move the cvs tasks into new package
  
  Revision  Changes    Path
  1.1                  jakarta-ant/proposal/myrmidon/src/java/org/apache/antlib/cvslib/CVSPass.java
  
  Index: CVSPass.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE file.
   */
  package org.apache.antlib.cvslib;
  
  import java.io.BufferedReader;
  import java.io.File;
  import java.io.FileReader;
  import java.io.FileWriter;
  import java.io.IOException;
  import java.io.PrintWriter;
  import org.apache.myrmidon.api.TaskException;
  import org.apache.tools.ant.Task;
  
  /**
   * CVSLogin Adds an new entry to a CVS password file
   *
   * @author <a href="jeff@custommonkey.org">Jeff Martin</a>
   * @version $Revision: 1.1 $
   */
  public class CVSPass extends Task
  {
      /**
       * CVS Root
       */
      private String cvsRoot = null;
      /**
       * Password file to add password to
       */
      private File passFile = null;
      /**
       * Password to add to file
       */
      private String password = null;
      /**
       * End of line character
       */
      private final String EOL = System.getProperty( "line.separator" );
  
      /**
       * Array contain char conversion data
       */
      private final char shifts[] = {
          0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
          16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
          114, 120, 53, 79, 96, 109, 72, 108, 70, 64, 76, 67, 116, 74, 68, 87,
          111, 52, 75, 119, 49, 34, 82, 81, 95, 65, 112, 86, 118, 110, 122, 105,
          41, 57, 83, 43, 46, 102, 40, 89, 38, 103, 45, 50, 42, 123, 91, 35,
          125, 55, 54, 66, 124, 126, 59, 47, 92, 71, 115, 78, 88, 107, 106, 56,
          36, 121, 117, 104, 101, 100, 69, 73, 99, 63, 94, 93, 39, 37, 61, 48,
          58, 113, 32, 90, 44, 98, 60, 51, 33, 97, 62, 77, 84, 80, 85, 223,
          225, 216, 187, 166, 229, 189, 222, 188, 141, 249, 148, 200, 184, 136, 248, 190,
          199, 170, 181, 204, 138, 232, 218, 183, 255, 234, 220, 247, 213, 203, 226, 193,
          174, 172, 228, 252, 217, 201, 131, 230, 197, 211, 145, 238, 161, 179, 160, 212,
          207, 221, 254, 173, 202, 146, 224, 151, 140, 196, 205, 130, 135, 133, 143, 246,
          192, 159, 244, 239, 185, 168, 215, 144, 139, 165, 180, 157, 147, 186, 214, 176,
          227, 231, 219, 169, 175, 156, 206, 198, 129, 164, 150, 210, 154, 177, 134, 127,
          182, 128, 158, 208, 162, 132, 167, 209, 149, 241, 153, 251, 237, 236, 171, 195,
          243, 233, 253, 240, 194, 250, 191, 155, 142, 137, 245, 235, 163, 242, 178, 152};
  
      public CVSPass()
      {
          passFile = new File( System.getProperty( "user.home" ) + "/.cvspass" );
      }
  
      /**
       * Sets cvs root to be added to the password file
       *
       * @param cvsRoot The new Cvsroot value
       */
      public void setCvsroot( String cvsRoot )
      {
          this.cvsRoot = cvsRoot;
      }
  
      /**
       * Sets the password file attribute.
       *
       * @param passFile The new Passfile value
       */
      public void setPassfile( File passFile )
      {
          this.passFile = passFile;
      }
  
      /**
       * Sets the password attribute.
       *
       * @param password The new Password value
       */
      public void setPassword( String password )
      {
          this.password = password;
      }
  
      /**
       * Does the work.
       *
       * @exception TaskException if someting goes wrong with the build
       */
      public final void execute()
          throws TaskException
      {
          if( cvsRoot == null )
              throw new TaskException( "cvsroot is required" );
          if( password == null )
              throw new TaskException( "password is required" );
  
          log( "cvsRoot: " + cvsRoot, project.MSG_DEBUG );
          log( "password: " + password, project.MSG_DEBUG );
          log( "passFile: " + passFile, project.MSG_DEBUG );
  
          try
          {
              StringBuffer buf = new StringBuffer();
  
              if( passFile.exists() )
              {
                  BufferedReader reader =
                      new BufferedReader( new FileReader( passFile ) );
  
                  String line = null;
  
                  while( ( line = reader.readLine() ) != null )
                  {
                      if( !line.startsWith( cvsRoot ) )
                      {
                          buf.append( line + EOL );
                      }
                  }
  
                  reader.close();
              }
  
              String pwdfile = buf.toString() + cvsRoot + " A" + mangle( password );
  
              log( "Writing -> " + pwdfile, project.MSG_DEBUG );
  
              PrintWriter writer = new PrintWriter( new FileWriter( passFile ) );
  
              writer.println( pwdfile );
  
              writer.close();
          }
          catch( IOException e )
          {
              throw new TaskException( "Error", e );
          }
  
      }
  
      private final String mangle( String password )
      {
          StringBuffer buf = new StringBuffer();
          for( int i = 0; i < password.length(); i++ )
          {
              buf.append( shifts[ password.charAt( i ) ] );
          }
          return buf.toString();
      }
  
  }
  
  
  
  1.1                  jakarta-ant/proposal/myrmidon/src/java/org/apache/antlib/cvslib/Cvs.java
  
  Index: Cvs.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE file.
   */
  package org.apache.antlib.cvslib;
  
  import java.io.BufferedOutputStream;
  import java.io.File;
  import java.io.FileOutputStream;
  import java.io.IOException;
  import java.io.OutputStream;
  import java.io.PrintStream;
  import org.apache.myrmidon.api.TaskException;
  import org.apache.tools.ant.Project;
  import org.apache.tools.ant.Task;
  import org.apache.tools.ant.taskdefs.ExecuteStreamHandler;
  import org.apache.tools.ant.taskdefs.LogStreamHandler;
  import org.apache.tools.ant.taskdefs.LogOutputStream;
  import org.apache.tools.ant.taskdefs.PumpStreamHandler;
  import org.apache.tools.ant.taskdefs.Execute;
  import org.apache.tools.ant.types.Commandline;
  import org.apache.tools.ant.types.Environment;
  
  /**
   * @author costin@dnt.ro
   * @author stefano@apache.org
   * @author Wolfgang Werner <a href="mailto:wwerner@picturesafe.de">
   *      wwerner@picturesafe.de</a>
   */
  
  public class Cvs extends Task
  {
  
      private Commandline cmd = new Commandline();
  
      /**
       * the CVS command to execute.
       */
      private String command = "checkout";
  
      /**
       * suppress information messages.
       */
      private boolean quiet = false;
  
      /**
       * report only, don't change any files.
       */
      private boolean noexec = false;
  
      /**
       * CVS port
       */
      private int port = 0;
  
      /**
       * CVS password file
       */
      private File passFile = null;
  
      /**
       * If true it will stop the build if cvs exits with error. Default is false.
       * (Iulian)
       */
      private boolean failOnError = false;
  
      /**
       * the CVSROOT variable.
       */
      private String cvsRoot;
  
      /**
       * the CVS_RSH variable.
       */
      private String cvsRsh;
  
      /**
       * the directory where the checked out files should be placed.
       */
      private File dest;
  
      /**
       * the file to direct standard error from the command.
       */
      private File error;
  
      /**
       * the file to direct standard output from the command.
       */
      private File output;
  
      /**
       * the package/module to check out.
       */
      private String pack;
  
      public void setCommand( String c )
      {
          this.command = c;
      }
  
      public void setCvsRoot( String root )
      {
          // Check if not real cvsroot => set it to null
          if( root != null )
          {
              if( root.trim().equals( "" ) )
                  root = null;
          }
  
          this.cvsRoot = root;
      }
  
      public void setCvsRsh( String rsh )
      {
          // Check if not real cvsrsh => set it to null
          if( rsh != null )
          {
              if( rsh.trim().equals( "" ) )
                  rsh = null;
          }
  
          this.cvsRsh = rsh;
      }
  
      public void setDate( String p )
      {
          if( p != null && p.trim().length() > 0 )
          {
              cmd.createArgument().setValue( "-D" );
              cmd.createArgument().setValue( p );
          }
      }
  
      public void setDest( File dest )
      {
          this.dest = dest;
      }
  
      public void setError( File error )
      {
          this.error = error;
      }
  
      public void setFailOnError( boolean failOnError )
      {
          this.failOnError = failOnError;
      }
  
      public void setNoexec( boolean ne )
      {
          noexec = ne;
      }
  
      public void setOutput( File output )
      {
          this.output = output;
      }
  
      public void setPackage( String p )
      {
          this.pack = p;
      }
  
      public void setPassfile( File passFile )
      {
          this.passFile = passFile;
      }
  
      public void setPort( int port )
      {
          this.port = port;
      }
  
      public void setQuiet( boolean q )
      {
          quiet = q;
      }
  
      public void setTag( String p )
      {
          // Check if not real tag => set it to null
          if( p != null && p.trim().length() > 0 )
          {
              cmd.createArgument().setValue( "-r" );
              cmd.createArgument().setValue( p );
          }
      }
  
      public void execute()
          throws TaskException
      {
          // XXX: we should use JCVS (www.ice.com/JCVS) instead of command line
          // execution so that we don't rely on having native CVS stuff around (SM)
  
          // We can't do it ourselves as jCVS is GPLed, a third party task
          // outside of jakarta repositories would be possible though (SB).
  
          Commandline toExecute = new Commandline();
  
          toExecute.setExecutable( "cvs" );
          if( cvsRoot != null )
          {
              toExecute.createArgument().setValue( "-d" );
              toExecute.createArgument().setValue( cvsRoot );
          }
          if( noexec )
          {
              toExecute.createArgument().setValue( "-n" );
          }
          if( quiet )
          {
              toExecute.createArgument().setValue( "-q" );
          }
          toExecute.createArgument().setLine( command );
          toExecute.addArguments( cmd.getCommandline() );
  
          if( pack != null )
          {
              toExecute.createArgument().setLine( pack );
          }
  
          Environment env = new Environment();
  
          if( port > 0 )
          {
              Environment.Variable var = new Environment.Variable();
              var.setKey( "CVS_CLIENT_PORT" );
              var.setValue( String.valueOf( port ) );
              env.addVariable( var );
          }
  
          if( passFile != null )
          {
              Environment.Variable var = new Environment.Variable();
              var.setKey( "CVS_PASSFILE" );
              var.setValue( String.valueOf( passFile ) );
              env.addVariable( var );
          }
  
          if( cvsRsh != null )
          {
              Environment.Variable var = new Environment.Variable();
              var.setKey( "CVS_RSH" );
              var.setValue( String.valueOf( cvsRsh ) );
              env.addVariable( var );
          }
  
          ExecuteStreamHandler streamhandler = null;
          OutputStream outputstream = null;
          OutputStream errorstream = null;
          if( error == null && output == null )
          {
              streamhandler = new LogStreamHandler( this, Project.MSG_INFO,
                                                    Project.MSG_WARN );
          }
          else
          {
              if( output != null )
              {
                  try
                  {
                      outputstream = new PrintStream( new BufferedOutputStream( new FileOutputStream(
output ) ) );
                  }
                  catch( IOException e )
                  {
                      throw new TaskException( e.toString(), e );
                  }
              }
              else
              {
                  outputstream = new LogOutputStream( this, Project.MSG_INFO );
              }
              if( error != null )
              {
                  try
                  {
                      errorstream = new PrintStream( new BufferedOutputStream( new FileOutputStream(
error ) ) );
                  }
                  catch( IOException e )
                  {
                      throw new TaskException( e.toString(), e );
                  }
              }
              else
              {
                  errorstream = new LogOutputStream( this, Project.MSG_WARN );
              }
              streamhandler = new PumpStreamHandler( outputstream, errorstream );
          }
  
          Execute exe = new Execute( streamhandler,
                                     null );
  
          exe.setAntRun( project );
          if( dest == null ) dest = getBaseDirectory();
          exe.setWorkingDirectory( dest );
  
          exe.setCommandline( toExecute.getCommandline() );
          exe.setEnvironment( env.getVariables() );
          try
          {
              int retCode = exe.execute();
              /*
               * Throw an exception if cvs exited with error. (Iulian)
               */
              if( failOnError && retCode != 0 )
                  throw new TaskException( "cvs exited with error code " + retCode );
          }
          catch( IOException e )
          {
              throw new TaskException( e.toString(), e );
          }
          finally
          {
              if( output != null )
              {
                  try
                  {
                      outputstream.close();
                  }
                  catch( IOException e )
                  {
                  }
              }
              if( error != null )
              {
                  try
                  {
                      errorstream.close();
                  }
                  catch( IOException e )
                  {
                  }
              }
          }
      }
  }
  
  
  
  

--
To unsubscribe, e-mail:   <mailto:ant-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:ant-dev-help@jakarta.apache.org>


Mime
View raw message