Using the code below, you can patch the <sync> task to preserve arbitrary
files. You'll have to code and compile it yourself though. --DD

    <bm:lsync2 todir="jar">
      <preservedfiles includes="**/CVS/**" />

      <fileset dir="${sync.win32.from}">
        <include name="com_lgc_foo_devkit.jar" />
        <include name="com_lgc_foo_dataTypes.jar" />
        <include name="com_lgc_bar_devkit.jar" />
      </fileset>
    </bm:lsync2>

  /** The <em>untouchable</em> files: the ones not to delete. */
  private PreservedFiles _untouchables;


Between Pass#1 and Pass#2, in execute():

    // Gather the untouchable files, if any (yes, we're scanning
    // the sync'd dir twice here and in removeOrphanFiles...)
    if (_untouchables != null) {
      _untouchables.setTargetDir(_todir);
      DirectoryScanner scanner = _untouchables.getDirectoryScanner(prj);
      String[] preserved = scanner.getIncludedFiles();
      for (int i = 0; i < preserved.length; ++i) {
        String name = preserved[i];
        File untouchable = new File(_todir, name);
        target2source.put(untouchable, _todir);
      }
      final int preservedCount = target2source.size() - targetCount;
      log("(preversing " + preservedCount + " file(s))",
          logLevel(preservedCount));
    }

  /**
   * Adds a pseudo-fileset of files not to remove.
   *
   * @param  untouchables the <em>do not remove</em> files.
   *         Like a fileset, except the dir attribute is implicit.
   */
  public void addPreservedFiles(PreservedFiles untouchables) {
    if (_untouchables != null) {
      throw new BuildException("Too many <preservedfiles> elements: >1!");
    }
    _untouchables = untouchables;
  }

  /**
   * A pseudo-fileset for files that should not be removed from the
   * sync'd directory, even though they don't have an equivalent source.
   */
  public static class PreservedFiles extends AbstractFileSet {

    /**
     * Instantiates a new preserved file pseudo-fileset.
     * <p>
     * Sets "defaultexcludes" to <code>false</code>
     * (instead of <code>true</code>) by default.
     */
    public PreservedFiles() {
      super();
      setDefaultexcludes(false);
    }

    /**
     * Always throws an exception, since disallowed.
     *
     * @param  dir ignored
     * @throws BuildException always
     */
    public void setDir(File dir) throws BuildException {
      throw new BuildException("Cannot set directory. Sync'd directory
used!");
    }

    /**
     * Sets the implicit fileset directory.
     *
     * @param  dir the sync'd directory.
     */
    private void setTargetDir(File dir) throws BuildException {
      super.setDir(dir);
    }

  } // END static class PreservedFiles




> -----Original Message-----
> From: Mark Benussi [mailto:[EMAIL PROTECTED]
> Sent: Thursday, August 18, 2005 7:08 AM
> To: 'Ant Users List'
> Subject: RE: Sync removing cvs information in target directory
> 
> Great idea!
> 
> -----Original Message-----
> From: Jeffrey E Care [mailto:[EMAIL PROTECTED]
> Sent: 18 August 2005 12:25
> To: Ant Users List
> Subject: Re: Sync removing cvs information in target directory
> 
> I move the CVS directories to a temporary holding area, perform the sync,
> then move them back. You'll also need to fiddle with the default excludes
> to make this work.
> 
> --
> Jeffrey E. Care ([EMAIL PROTECTED])
> WebSphere v7 Release Engineer
> WebSphere Build Tooling Lead (Project Mantis)
> 
> 
> "Mark Benussi" <[EMAIL PROTECTED]> wrote on 08/18/2005 06:44:03 AM:
> 
> > Hi Guys,
> >
> >
> >
> > Any ideas how I could use the sync task but not remove any directories
> in
> > the target that are named CVS. Basically my CVS information is getting
> wiped
> > and this is causing problems.
> >
> >
> >
> >
> >
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to