Package org.redline_rpm.ant

Source Code of org.redline_rpm.ant.RedlineTask

package org.redline_rpm.ant;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.types.ArchiveFileSet;
import org.apache.tools.ant.types.TarFileSet;
import org.apache.tools.ant.types.ZipFileSet;
import org.redline_rpm.Builder;
import org.redline_rpm.header.Architecture;
import org.redline_rpm.header.Header;
import org.redline_rpm.header.Os;
import org.redline_rpm.header.RpmType;
import org.redline_rpm.payload.Directive;

import java.io.File;
import java.io.IOException;
import java.net.InetAddress;
import java.net.URL;
import java.net.UnknownHostException;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import static org.redline_rpm.Util.normalizePath;
import static org.redline_rpm.header.Architecture.NOARCH;
import static org.redline_rpm.header.Os.LINUX;
import static org.redline_rpm.header.RpmType.BINARY;

/**
* Ant task for creating an RPM file.
*/
public class RedlineTask extends Task {
  public static final String NAMESPACE = "http://freecompany.org/namespace/redline";

  protected String name;
  protected String version;
  protected String group;
  protected String release = "1";
  protected String host;
  protected String summary = "";
  protected String description = "";
  protected String license = "";
  protected String packager = System.getProperty( "user.name", "");
  protected String distribution = "";
  protected String vendor = "";
  protected String url = "";
  protected String sourcePackage = null;
  protected String provides;
  protected String prefixes;
  protected RpmType type = BINARY;
  protected Architecture architecture = NOARCH;
  protected Os os = LINUX;
  protected File destination;
  protected List< ArchiveFileSet> filesets = new ArrayList< ArchiveFileSet>();
  protected List< Ghost> ghosts = new ArrayList< Ghost>();
  protected List< Link> links = new ArrayList< Link>();
  protected List< Depends> depends = new ArrayList< Depends>();

  protected List< TriggerPreIn> triggersPreIn = new ArrayList< TriggerPreIn>();
  protected List< TriggerIn> triggersIn = new ArrayList< TriggerIn>();
  protected List< TriggerUn> triggersUn = new ArrayList< TriggerUn>();
  protected List< TriggerPostUn> triggersPostUn = new ArrayList< TriggerPostUn>();
 
  protected List< BuiltIn> builtIns = new ArrayList< BuiltIn>();

  protected File preTransScript;
  protected File preInstallScript;
  protected File postInstallScript;
  protected File preUninstallScript;
  protected File postUninstallScript;
  protected File postTransScript;

    protected File privateKeyRingFile;
    protected String privateKeyId;
    protected String privateKeyPassphrase;

  public RedlineTask() {
    try {
      host = InetAddress.getLocalHost().getHostName();
    } catch ( UnknownHostException e) {
      host = "";
    }
  }

  @Override
  public void execute() {
    if ( name == null) throw new BuildException( "Attribute 'name' is required.");
    if ( version == null) throw new BuildException( "Attribute 'version' is required.");
    if ( group == null) throw new BuildException( "Attribute 'group' is required.");

    Builder builder = new Builder();
    builder.setPackage( name, version, release);
    builder.setType( type);
    builder.setPlatform( architecture, os);
    builder.setGroup( group);
    builder.setBuildHost( host);
    builder.setSummary( summary);
    builder.setDescription( description);
    builder.setLicense( license);
    builder.setPackager( packager);
    builder.setDistribution( distribution);
    builder.setVendor( vendor);
    builder.setUrl( url);
    builder.setProvides( provides == null ? name : provides);
    builder.setPrefixes( prefixes == null ? null : prefixes.split(","));
        builder.setPrivateKeyRingFile( privateKeyRingFile);
        builder.setPrivateKeyId( privateKeyId);
        builder.setPrivateKeyPassphrase( privateKeyPassphrase);
    if (sourcePackage != null) {
      builder.addHeaderEntry(Header.HeaderTag.SOURCERPM, sourcePackage);
    }
   
    // add built-ins
    for ( BuiltIn builtIn : builtIns) {
      String text = builtIn.getText();
      if (text != null && !text.trim().equals("")) {
        builder.addBuiltinDirectory( builtIn.getText());
      }
    }

    try {
      if ( null != preTransScript) {
        builder.setPreTransScript( preTransScript);
        builder.setPreTransProgram( "");
      }
      if ( null != preInstallScript) {
        builder.setPreInstallScript( preInstallScript);
        builder.setPreInstallProgram( "");
      }
      if ( null != postInstallScript) {
        builder.setPostInstallScript( postInstallScript);
        builder.setPostInstallProgram( "");
      }
      if ( null != preUninstallScript) {
        builder.setPreUninstallScript( preUninstallScript);
        builder.setPreUninstallProgram( "");
      }
      if ( null != postUninstallScript) {
        builder.setPostUninstallScript( postUninstallScript);
        builder.setPostUninstallProgram( "");
      }
      if ( null != postTransScript) {
        builder.setPostTransScript( postTransScript);
        builder.setPostTransProgram( "");
      }

      for ( ArchiveFileSet fileset : filesets) {
        File archive = fileset.getSrc( getProject());
        String prefix = normalizePath( fileset.getPrefix( getProject()));
        if ( !prefix.endsWith( "/")) prefix += "/";
        DirectoryScanner scanner = fileset.getDirectoryScanner( getProject());

                int filemode = fileset.getFileMode( getProject()) & 07777;
        int dirmode = fileset.getDirMode( getProject()) & 07777;
        String username = null;
        String group = null;
                Directive directive = null;

        if (fileset instanceof TarFileSet) {
          TarFileSet tarFileSet = (TarFileSet)fileset;
          username = tarFileSet.getUserName();
          group = tarFileSet.getGroup();
                    if (fileset instanceof RpmFileSet) {
                        RpmFileSet rpmFileSet = (RpmFileSet)fileset;
                        directive = rpmFileSet.getDirective();
                    }
        }

        // include any directories, including empty ones, duplicates will be ignored when we scan included files
        for (String entry : scanner.getIncludedDirectories()) {
          String dir = normalizePath(prefix + entry);
          if (!"".equals(entry)) builder.addDirectory(dir, dirmode, directive, username, group, true);
        }

        for ( String entry : scanner.getIncludedFiles()) {
          if ( archive != null) {
            URL url = new URL( "jar:" + archive.toURL() + "!/" + entry);
            builder.addURL( prefix + entry, url, filemode, dirmode, directive, username, group);
          } else {
            File file = new File( scanner.getBasedir(), entry);
            builder.addFile(prefix + entry, file, filemode, dirmode, directive, username, group);
          }
        }
      }
      for ( Ghost ghost : ghosts) {
        builder.addFile( ghost.getPath(), null, ghost.getFilemode(), ghost.getDirmode(), Directive.GHOST, ghost.getUsername(), ghost.getGroup());
      }
      for ( Link link : links) builder.addLink( link.getPath(), link.getTarget(), link.getPermissions());
      for ( Depends dependency : depends) builder.addDependency( dependency.getName(), dependency.getComparison(), dependency.getVersion());

      for ( TriggerPreIn triggerPreIn : triggersPreIn) builder.addTrigger( triggerPreIn.getScript(), "", triggerPreIn.getDepends(), triggerPreIn.getFlag());
      for ( TriggerIn triggerIn : triggersIn) builder.addTrigger( triggerIn.getScript(), "", triggerIn.getDepends(), triggerIn.getFlag());
      for ( TriggerUn triggerUn : triggersUn) builder.addTrigger( triggerUn.getScript(), "", triggerUn.getDepends(), triggerUn.getFlag());
      for ( TriggerPostUn triggerPostUn : triggersPostUn) builder.addTrigger( triggerPostUn.getScript(), "", triggerPostUn.getDepends(), triggerPostUn.getFlag());

      log( "Created rpm: " + builder.build( destination));
    } catch ( IOException e) {
      throw new BuildException( "Error packaging distribution files.", e);
    } catch ( NoSuchAlgorithmException e) {
      throw new BuildException( "This system does not support MD5 digests.", e);
    }
  }

  public void restrict( String name) {
    for ( Iterator< Depends> i = depends.iterator(); i.hasNext();) {
      final Depends dependency = i.next();
      if ( dependency.getName().equals( name)) i.remove();
    }
  }

  public void setName( String name) { this.name = name; }
  public void setType( String type) { this.type = RpmType.valueOf( type); }
  public void setArchitecture( String architecture) { this.architecture = Architecture.valueOf( architecture); }
  public void setOs( String os) { this.os = Os.valueOf( os); }
  public void setVersion( String version) { this.version = version; }
  public void setRelease( String release) { this.release = release; }
  public void setGroup( String group) { this.group = group; }
  public void setHost( String host) { this.host = host; }
  public void setSummary( String summary) { this.summary = summary; }
  public void setDescription( String description) { this.description = description; }
  public void setLicense( String license) { this.license = license; }
  public void setPackager( String packager) { this.packager = packager; }
  public void setDistribution( String distribution) { this.distribution = distribution; }
  public void setVendor( String vendor) { this.vendor = vendor; }
  public void setUrl( String url) { this.url = url; }
  public void setProvides( String provides) { this.provides = provides; }
  public void setPrefixes( String prefixes) { this.prefixes = prefixes; }
  public void setDestination( File destination) { this.destination = destination; }
  public void addZipfileset( ZipFileSet fileset) { filesets.add( fileset); }
  public void addTarfileset( TarFileSet fileset) { filesets.add( fileset); }
    public void addRpmfileset( RpmFileSet fileset) { filesets.add( fileset); }
  public void addGhost( Ghost ghost) { ghosts.add( ghost); }
  public void addLink( Link link) { links.add( link); }
  public void addDepends( Depends dependency) { depends.add( dependency); }
  public void addTriggerPreIn( TriggerPreIn triggerPreIn) { triggersPreIn.add( triggerPreIn); }
  public void addTriggerIn( TriggerIn triggerIn) { triggersIn.add( triggerIn); }
  public void addTriggerUn( TriggerUn triggerUn) { triggersUn.add( triggerUn); }
  public void addTriggerPostUn( TriggerPostUn triggerPostUn) { triggersPostUn.add( triggerPostUn); }
  public void setPreTransScript( File preTransScript) { this.preTransScript = preTransScript; }
  public void setPreInstallScript( File preInstallScript) { this.preInstallScript = preInstallScript; }
  public void setPostInstallScript( File postInstallScript) { this.postInstallScript = postInstallScript; }
  public void setPreUninstallScript( File preUninstallScript) { this.preUninstallScript = preUninstallScript; }
  public void setPostUninstallScript( File postUninstallScript) { this.postUninstallScript = postUninstallScript; }
  public void setPostTransScript( File postTransScript) { this.postTransScript = postTransScript; }
  public void setSourcePackage( String sourcePackage) { this.sourcePackage = sourcePackage; }
    public void setPrivateKeyRingFile( File privateKeyRingFile) { this.privateKeyRingFile = privateKeyRingFile; }
    public void setPrivateKeyId( String privateKeyId ) { this.privateKeyId = privateKeyId; }
    public void setPrivateKeyPassphrase( String privateKeyPassphrase ) { this.privateKeyPassphrase = privateKeyPassphrase; }
    public void addBuiltin( BuiltIn builtIn) { builtIns.add(builtIn); }
}
TOP

Related Classes of org.redline_rpm.ant.RedlineTask

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.