peterreilly    2003/09/19 02:36:23

  Modified:    src/main/org/apache/tools/ant/taskdefs ImportTask.java
               src/testcases/org/apache/tools/ant/taskdefs ImportTest.java
  Added:       src/etc/testcases/taskdefs/import/subdir
                        importinsequential-inner.xml importinsequential.xml
  Log:
  Dissallow <import> within targets
  remove some commented out code in ImportTask
  
  Revision  Changes    Path
  1.1                  
ant/src/etc/testcases/taskdefs/import/subdir/importinsequential-inner.xml
  
  Index: importinsequential-inner.xml
  ===================================================================
  <project>
    <target name="within-imported">
      <property name="foo" value="bar"/>
      <path id="baz">
        <pathelement location="."/>
      </path>
    </target>
  </project>
  
  
  1.1                  
ant/src/etc/testcases/taskdefs/import/subdir/importinsequential.xml
  
  Index: importinsequential.xml
  ===================================================================
  <project>
    <sequential>
      <import file="importinsequential-inner.xml"/>
    </sequential>
  </project>
  
  
  
  1.16      +7 -27     
ant/src/main/org/apache/tools/ant/taskdefs/ImportTask.java
  
  Index: ImportTask.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/ImportTask.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- ImportTask.java   17 Jul 2003 10:39:07 -0000      1.15
  +++ ImportTask.java   19 Sep 2003 09:36:22 -0000      1.16
  @@ -116,20 +116,20 @@
           if (file == null) {
               throw new BuildException("import requires file attribute");
           }
  -
  +        if (getOwningTarget() == null
  +            || !"".equals(getOwningTarget().getName())) {
  +            throw new BuildException("import only allowed as a top-level 
task");
  +        }
  +        
           ProjectHelper helper =
                   (ProjectHelper) 
getProject().getReference("ant.projectHelper");
           Vector importStack = helper.getImportStack();
  +
           if (importStack.size() == 0) {
               // this happens if ant is used with a project
               // helper that doesn't set the import.
               throw new BuildException("import requires support in 
ProjectHelper");
           }
  -//        ProjectHelper2.AntXmlContext context;
  -//        
context=(ProjectHelper2.AntXmlContext)project.getReference("ant.parsing.context");
  -
  -//        File buildFile=context.buildFile;
  -//        File buildFileParent=context.buildFileParent;
   
           if (getLocation() == null || getLocation().getFileName() == null) {
               throw new BuildException("Unable to get location of import 
task");
  @@ -137,7 +137,7 @@
   
           File buildFile = new File(getLocation().getFileName());
           buildFile = new File(buildFile.getAbsolutePath());
  -        //System.out.println("Importing from " + currentSource);
  +
           File buildFileParent = new File(buildFile.getParent());
   
           getProject().log("Importing file " + file + " from "
  @@ -164,26 +164,6 @@
                   + importedFile + "\n", Project.MSG_WARN);
               return;
           }
  -
  -//        // Add parent build file to the map to avoid cycles...
  -//        String parentFilename = getPath(buildFile);
  -//        if (!context.importedFiles.containsKey(parentFilename)) {
  -//            context.importedFiles.put(parentFilename, buildFile);
  -//        }
  -//
  -//        // Make sure we import the file only once
  -//        String importedFilename = getPath(importedFile);
  -//        if (context.importedFiles.containsKey(importedFilename)) {
  -//            project.log("\nSkipped already imported file:\n   "+
  -//                    importedFilename+"\n",Project.MSG_WARN);
  -//            return;
  -//        } else {
  -//            context.importedFiles.put(importedFilename, importedFile);
  -//        }
  -
  -//        context.ignoreProjectTag=true;
  -//        context.helper.parse(project, importedFile,
  -//                new ProjectHelper2.RootHandler(context));
   
           helper.parse(getProject(), importedFile);
       }
  
  
  
  1.6       +18 -1     
ant/src/testcases/org/apache/tools/ant/taskdefs/ImportTest.java
  
  Index: ImportTest.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/testcases/org/apache/tools/ant/taskdefs/ImportTest.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ImportTest.java   18 Sep 2003 09:02:23 -0000      1.5
  +++ ImportTest.java   19 Sep 2003 09:36:22 -0000      1.6
  @@ -91,15 +91,32 @@
               "Unnamed2.xmlUnnamed1.xmlSkipped already imported file");
       }
   
  +    // allow this as imported in targets are only tested when a target is run
       public void testImportInTargetNoEffect() {
           
configureProject("src/etc/testcases/taskdefs/import/subdir/importintarget.xml");
           expectPropertyUnset("no-import", "foo");
           assertTrue(null == getProject().getReference("baz"));
       }
   
  -    public void testImportInTargetWithEffect() {
  +    // deactivate this test as imports within targets are not allowed
  +    public void notTestImportInTargetWithEffect() {
           
configureProject("src/etc/testcases/taskdefs/import/subdir/importintarget.xml");
           expectPropertySet("do-import", "foo", "bar");
  +        assertNotNull(getProject().getReference("baz"));
  +    }
  +    
  +    public void testImportInTargetNotAllowed() {
  +        configureProject(
  +            "src/etc/testcases/taskdefs/import/subdir/importintarget.xml");
  +        expectBuildExceptionContaining(
  +            "do-import", "not a top level task",
  +            "import only allowed as a top-level task");
  +    }
  +
  +    public void testImportInSequential() {
  +        configureProject(
  +            
"src/etc/testcases/taskdefs/import/subdir/importinsequential.xml");
  +        expectPropertySet("within-imported", "foo", "bar");
           assertNotNull(getProject().getReference("baz"));
       }
   }
  
  
  

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

Reply via email to