You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@velocity.apache.org by wg...@apache.org on 2006/09/26 21:34:53 UTC

svn commit: r450163 - in /jakarta/velocity/engine/trunk: src/java/org/apache/velocity/app/event/implement/ src/test/org/apache/velocity/test/ test/includeevent/ test/includeevent/compare/ test/includeevent/subdir/

Author: wglass
Date: Tue Sep 26 12:34:52 2006
New Revision: 450163

URL: http://svn.apache.org/viewvc?view=rev&rev=450163
Log:
applied patch VELOCITY-460 - IncludeRelativePath handler should treat paths beginning with a slash as absolute paths

Added:
    jakarta/velocity/engine/trunk/test/includeevent/include-c.vm   (with props)
    jakarta/velocity/engine/trunk/test/includeevent/parse-c.vm   (with props)
    jakarta/velocity/engine/trunk/test/includeevent/subdir/include-c.vm   (with props)
    jakarta/velocity/engine/trunk/test/includeevent/subdir/parse-c.vm   (with props)
Modified:
    jakarta/velocity/engine/trunk/src/java/org/apache/velocity/app/event/implement/IncludeRelativePath.java
    jakarta/velocity/engine/trunk/src/test/org/apache/velocity/test/IncludeEventHandlingTestCase.java
    jakarta/velocity/engine/trunk/test/includeevent/compare/test2.cmp
    jakarta/velocity/engine/trunk/test/includeevent/subdir/test2.vm

Modified: jakarta/velocity/engine/trunk/src/java/org/apache/velocity/app/event/implement/IncludeRelativePath.java
URL: http://svn.apache.org/viewvc/jakarta/velocity/engine/trunk/src/java/org/apache/velocity/app/event/implement/IncludeRelativePath.java?view=diff&rev=450163&r1=450162&r2=450163
==============================================================================
--- jakarta/velocity/engine/trunk/src/java/org/apache/velocity/app/event/implement/IncludeRelativePath.java (original)
+++ jakarta/velocity/engine/trunk/src/java/org/apache/velocity/app/event/implement/IncludeRelativePath.java Tue Sep 26 12:34:52 2006
@@ -19,7 +19,7 @@
 import org.apache.velocity.app.event.IncludeEventHandler;
 
 /**
- * Event handler that looks for included files relative to the path of the
+ * <p>Event handler that looks for included files relative to the path of the
  * current template. The handler assumes that paths are separated by a forward
  * slash "/" or backwards slash "\".
  *
@@ -41,33 +41,22 @@
         String currentResourcePath,
         String directiveName)
     {
+        // if the resource name starts with a slash, it's not a relative path
+        if (includeResourcePath.startsWith("/") || includeResourcePath.startsWith("\\") ) {
+            return includeResourcePath;
+        }
 
-        // strip the starting slash from includeResourcePath, if it exists
-        if (includeResourcePath.startsWith("/") || includeResourcePath.startsWith("\\") )
-            includeResourcePath = includeResourcePath.substring(1);
-
-        int slashpos1 = currentResourcePath.lastIndexOf("/");
-        int slashpos2 = currentResourcePath.lastIndexOf("\\");
-        int lastslashpos = -1;
-        if ( (slashpos1 != -1) && (slashpos2 != -1) && (slashpos1 <= slashpos2) )
-            lastslashpos = slashpos2;
-
-        else if ( (slashpos1 != -1) && (slashpos2 != -1) && (slashpos1 > slashpos2) )
-            lastslashpos = slashpos1;
-
-        else if ( (slashpos1 != -1) && (slashpos2 == -1) )
-            lastslashpos = slashpos1;
-
-        else if ( (slashpos1 == -1) && (slashpos2 != -1) )
-            lastslashpos = slashpos2;
+        int lastslashpos = Math.max(
+                currentResourcePath.lastIndexOf("/"),
+                currentResourcePath.lastIndexOf("\\")
+                );
 
         // root of resource tree
-        if ( (lastslashpos == -1) || (lastslashpos == 0) )
+        if (lastslashpos == -1) {
             return includeResourcePath;
+        }
 
         // prepend path to the include path
-        else
-            return currentResourcePath.substring(0,lastslashpos) + "/" + includeResourcePath;
-
+        return currentResourcePath.substring(0,lastslashpos) + "/" + includeResourcePath;
     }
 }

Modified: jakarta/velocity/engine/trunk/src/test/org/apache/velocity/test/IncludeEventHandlingTestCase.java
URL: http://svn.apache.org/viewvc/jakarta/velocity/engine/trunk/src/test/org/apache/velocity/test/IncludeEventHandlingTestCase.java?view=diff&rev=450163&r1=450162&r2=450163
==============================================================================
--- jakarta/velocity/engine/trunk/src/test/org/apache/velocity/test/IncludeEventHandlingTestCase.java (original)
+++ jakarta/velocity/engine/trunk/src/test/org/apache/velocity/test/IncludeEventHandlingTestCase.java Tue Sep 26 12:34:52 2006
@@ -206,28 +206,18 @@
         // treat as relative path
         else if (EventHandlerBehavior == RELATIVE_PATH)
         {
-
-            // strip the starting slash from includeResourcePath, if it exists
-            if (includeResourcePath.startsWith("/") || includeResourcePath.startsWith("\\") )
-                includeResourcePath = includeResourcePath.substring(1);
-
-            int slashpos1 = currentResourcePath.lastIndexOf("/");
-            int slashpos2 = currentResourcePath.lastIndexOf("\\");
-            int lastslashpos = -1;
-            if ( (slashpos1 != -1) && (slashpos2 != -1) && (slashpos1 <= slashpos2) )
-                lastslashpos = slashpos2;
-
-            else if ( (slashpos1 != -1) && (slashpos2 != -1) && (slashpos1 > slashpos2) )
-                lastslashpos = slashpos1;
-
-            else if ( (slashpos1 != -1) && (slashpos2 == -1) )
-                lastslashpos = slashpos1;
-
-            else if ( (slashpos1 == -1) && (slashpos2 != -1) )
-                lastslashpos = slashpos2;
+            // if the resource name starts with a slash, it's not a relative path
+            if (includeResourcePath.startsWith("/") || includeResourcePath.startsWith("\\") ) {
+                return includeResourcePath;
+            }
+
+            int lastslashpos = Math.max(
+                    currentResourcePath.lastIndexOf("/"),
+                    currentResourcePath.lastIndexOf("\\")
+                    );
 
             // root of resource tree
-            if ( (lastslashpos == -1) || (lastslashpos == 0) )
+            if ( (lastslashpos == -1))
                 return includeResourcePath;
 
             // prepend path to the input path

Modified: jakarta/velocity/engine/trunk/test/includeevent/compare/test2.cmp
URL: http://svn.apache.org/viewvc/jakarta/velocity/engine/trunk/test/includeevent/compare/test2.cmp?view=diff&rev=450163&r1=450162&r2=450163
==============================================================================
--- jakarta/velocity/engine/trunk/test/includeevent/compare/test2.cmp (original)
+++ jakarta/velocity/engine/trunk/test/includeevent/compare/test2.cmp Tue Sep 26 12:34:52 2006
@@ -1,3 +1,5 @@
 Test File 2
 Good include file b
-Good parse file b
\ No newline at end of file
+Good parse file b
+Good include file c
+Good parse file c

Added: jakarta/velocity/engine/trunk/test/includeevent/include-c.vm
URL: http://svn.apache.org/viewvc/jakarta/velocity/engine/trunk/test/includeevent/include-c.vm?view=auto&rev=450163
==============================================================================
--- jakarta/velocity/engine/trunk/test/includeevent/include-c.vm (added)
+++ jakarta/velocity/engine/trunk/test/includeevent/include-c.vm Tue Sep 26 12:34:52 2006
@@ -0,0 +1 @@
+Good include file c
\ No newline at end of file

Propchange: jakarta/velocity/engine/trunk/test/includeevent/include-c.vm
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jakarta/velocity/engine/trunk/test/includeevent/include-c.vm
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: jakarta/velocity/engine/trunk/test/includeevent/parse-c.vm
URL: http://svn.apache.org/viewvc/jakarta/velocity/engine/trunk/test/includeevent/parse-c.vm?view=auto&rev=450163
==============================================================================
--- jakarta/velocity/engine/trunk/test/includeevent/parse-c.vm (added)
+++ jakarta/velocity/engine/trunk/test/includeevent/parse-c.vm Tue Sep 26 12:34:52 2006
@@ -0,0 +1 @@
+Good parse file c

Propchange: jakarta/velocity/engine/trunk/test/includeevent/parse-c.vm
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jakarta/velocity/engine/trunk/test/includeevent/parse-c.vm
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: jakarta/velocity/engine/trunk/test/includeevent/subdir/include-c.vm
URL: http://svn.apache.org/viewvc/jakarta/velocity/engine/trunk/test/includeevent/subdir/include-c.vm?view=auto&rev=450163
==============================================================================
--- jakarta/velocity/engine/trunk/test/includeevent/subdir/include-c.vm (added)
+++ jakarta/velocity/engine/trunk/test/includeevent/subdir/include-c.vm Tue Sep 26 12:34:52 2006
@@ -0,0 +1 @@
+BAD include file c

Propchange: jakarta/velocity/engine/trunk/test/includeevent/subdir/include-c.vm
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jakarta/velocity/engine/trunk/test/includeevent/subdir/include-c.vm
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: jakarta/velocity/engine/trunk/test/includeevent/subdir/parse-c.vm
URL: http://svn.apache.org/viewvc/jakarta/velocity/engine/trunk/test/includeevent/subdir/parse-c.vm?view=auto&rev=450163
==============================================================================
--- jakarta/velocity/engine/trunk/test/includeevent/subdir/parse-c.vm (added)
+++ jakarta/velocity/engine/trunk/test/includeevent/subdir/parse-c.vm Tue Sep 26 12:34:52 2006
@@ -0,0 +1 @@
+BAD parse file c

Propchange: jakarta/velocity/engine/trunk/test/includeevent/subdir/parse-c.vm
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jakarta/velocity/engine/trunk/test/includeevent/subdir/parse-c.vm
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Modified: jakarta/velocity/engine/trunk/test/includeevent/subdir/test2.vm
URL: http://svn.apache.org/viewvc/jakarta/velocity/engine/trunk/test/includeevent/subdir/test2.vm?view=diff&rev=450163&r1=450162&r2=450163
==============================================================================
--- jakarta/velocity/engine/trunk/test/includeevent/subdir/test2.vm (original)
+++ jakarta/velocity/engine/trunk/test/includeevent/subdir/test2.vm Tue Sep 26 12:34:52 2006
@@ -2,3 +2,7 @@
 #include("include-b.vm")
 
 #parse("parse-b.vm")
+
+#include("/include-c.vm")
+
+#parse("/parse-c.vm")



---------------------------------------------------------------------
To unsubscribe, e-mail: velocity-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: velocity-dev-help@jakarta.apache.org