Author: maartenc
Date: Sun Mar 14 22:52:00 2010
New Revision: 922994
URL: http://svn.apache.org/viewvc?rev=922994&view=rev
Log:
FIX: ApacheURLLister does not allow directories not containing a dot on
Artifactory (IVY-1175) (thanks to Anders Jacobsson)
Added:
ant/ivy/core/trunk/test/java/org/apache/ivy/util/url/ArtifactoryListingTest.java
(with props)
ant/ivy/core/trunk/test/java/org/apache/ivy/util/url/artifactory-dir-listing.html
(with props)
Modified:
ant/ivy/core/trunk/CHANGES.txt
ant/ivy/core/trunk/src/java/org/apache/ivy/util/url/ApacheURLLister.java
ant/ivy/core/trunk/test/java/org/apache/ivy/util/url/ApacheURLListerTest.java
Modified: ant/ivy/core/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/CHANGES.txt?rev=922994&r1=922993&r2=922994&view=diff
==============================================================================
--- ant/ivy/core/trunk/CHANGES.txt (original)
+++ ant/ivy/core/trunk/CHANGES.txt Sun Mar 14 22:52:00 2010
@@ -49,6 +49,7 @@ for detailed view of each issue, please
Scott Hebert
Achim Huegen
Matt Inger
+ Anders Jacobsson
Anders Janmyr
Steve Jones
Christer Jonsson
@@ -115,6 +116,7 @@ for detailed view of each issue, please
- IMPROVEMENT: Trace a message when a property file referenced from the
settings doesn't exixts (IVY-1074)
- IMPROVEMENT: use defaultconf in combination with defaultconfmapping
(IVY-1135) (thanks to Jon Schneider)
+- FIX: ApacheURLLister does not allow directories not containing a dot on
Artifactory (IVY-1175) (thanks to Anders Jacobsson)
- FIX: artifact-lock strategy could hang Ivy when resolving dynamic revisions
- FIX: Authentication won't work in some situations (IVY-1168) (thanks to Sven
Walter)
- FIX: Using SFTP resolver with full pattern URL prevents use of dynamic
versions (IVY-1167) (thanks to Gregory Fernandez)
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/util/url/ApacheURLLister.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/util/url/ApacheURLLister.java?rev=922994&r1=922993&r2=922994&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/util/url/ApacheURLLister.java
(original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/util/url/ApacheURLLister.java
Sun Mar 14 22:52:00 2010
@@ -159,14 +159,19 @@ public class ApacheURLLister {
// exclude those where they do not match
// href will never be truncated, text may be truncated by apache
- // may have a '.' from either the extension (.jar) or "..>"
- int dotIndex = text.indexOf('.');
-
- if (((dotIndex != -1) && !href.startsWith(text.substring(0,
dotIndex)))
- || ((dotIndex == -1)
- &&
!href.toLowerCase(Locale.US).equals(text.toLowerCase(Locale.US)))) {
- // the href and the text do not "match"
- continue;
+ if (text.endsWith("..>")) {
+ // text is probably truncated, we can only check if the href
starts with text
+ if (!href.startsWith(text.substring(0, text.length() - 3))) {
+ continue;
+ }
+ } else {
+ // text is not truncated, so it must match the url after
stripping optional
+ // trailing slashes
+ String strippedHref = href.endsWith("/") ? href.substring(0,
href.length() - 1) : href;
+ String strippedText = text.endsWith("/") ? text.substring(0,
text.length() - 1) : text;
+ if (!strippedHref.equalsIgnoreCase(strippedText)) {
+ continue;
+ }
}
boolean directory = href.endsWith("/");
Modified:
ant/ivy/core/trunk/test/java/org/apache/ivy/util/url/ApacheURLListerTest.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/util/url/ApacheURLListerTest.java?rev=922994&r1=922993&r2=922994&view=diff
==============================================================================
---
ant/ivy/core/trunk/test/java/org/apache/ivy/util/url/ApacheURLListerTest.java
(original)
+++
ant/ivy/core/trunk/test/java/org/apache/ivy/util/url/ApacheURLListerTest.java
Sun Mar 14 22:52:00 2010
@@ -70,7 +70,16 @@ public class ApacheURLListerTest extends
assertNotNull(files);
assertTrue(files.size() > 0);
}
+
+ public void testRetrieveArtifactoryListing() throws Exception {
+ ApacheURLLister lister = new ApacheURLLister();
+ List files = lister.retrieveListing(ApacheURLListerTest.class
+ .getResource("artifactory-dir-listing.html"), true, true);
+ assertNotNull(files);
+ assertEquals(1, files.size());
+ }
+
public void testRetrieveArchivaListing() throws Exception {
ApacheURLLister lister = new ApacheURLLister();
Added:
ant/ivy/core/trunk/test/java/org/apache/ivy/util/url/ArtifactoryListingTest.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/util/url/ArtifactoryListingTest.java?rev=922994&view=auto
==============================================================================
---
ant/ivy/core/trunk/test/java/org/apache/ivy/util/url/ArtifactoryListingTest.java
(added)
+++
ant/ivy/core/trunk/test/java/org/apache/ivy/util/url/ArtifactoryListingTest.java
Sun Mar 14 22:52:00 2010
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.ivy.util.url;
+
+import java.net.URL;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+public class ArtifactoryListingTest extends TestCase {
+ // remote.test
+
+ public void testWicketListing() throws Exception {
+ ApacheURLLister lister = new ApacheURLLister();
+
+ List content = lister.listAll(new
URL("http://repo.jfrog.org/artifactory/libs-releases-local/org/apache/wicket/wicket/"));
+ assertNotNull(content);
+ assertEquals(2, content.size());
+ }
+}
Propchange:
ant/ivy/core/trunk/test/java/org/apache/ivy/util/url/ArtifactoryListingTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
ant/ivy/core/trunk/test/java/org/apache/ivy/util/url/artifactory-dir-listing.html
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/util/url/artifactory-dir-listing.html?rev=922994&view=auto
==============================================================================
---
ant/ivy/core/trunk/test/java/org/apache/ivy/util/url/artifactory-dir-listing.html
(added)
+++
ant/ivy/core/trunk/test/java/org/apache/ivy/util/url/artifactory-dir-listing.html
Sun Mar 14 22:52:00 2010
@@ -0,0 +1,428 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<html class="Win32 FF FF-3.6 Moz Moz-5"
+xmlns:wicket="http://wicket.sourceforge.net/"
+xmlns="http://www.w3.org/1999/xhtml"><head>
+
+
+
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="icon" type="image/x-icon"
+href="http://localhost:8081/artifactory/favicon.ico">
+<link rel="shortcut icon" type="image/x-icon"
+href="http://localhost:8081/artifactory/favicon.ico">
+<title>artifact...@ev001a4b5729ca :: Repository Browser</title>
+<meta content="10024" name="revision">
+
+<script type="text/javascript"><!--/*--><![CDATA[/*><!--*/
+var djConfig = {
+isDebug: false,
+parseOnLoad: false,
+debugAtAllCosts: false,
+excludeNamespace: ['wicket']
+};
+/*-->]]>*/</script>
+
+<script type="text/javascript"
src="artifact...@ev001a4b5729ca%20%20%20repository%20browser_files/dojo.js"></script>
+<script type="text/javascript"
src="artifact...@ev001a4b5729ca%20%20%20repository%20browser_files/artifactory-dojo.js"></script>
+<link rel="stylesheet" type="text/css"
+href="artifact...@ev001a4b5729ca%20%20%20repository%20browser_files/dojo.css">
+<link rel="stylesheet" type="text/css"
+href="artifact...@ev001a4b5729ca%20%20%20repository%20browser_files/tundra.css">
+<script type="text/javascript"
src="artifact...@ev001a4b5729ca%20%20%20repository%20browser_files/DomUtils.js"></script>
+<script type="text/javascript"
src="artifact...@ev001a4b5729ca%20%20%20repository%20browser_files/AjaxIndicator.js"></script>
+<link rel="stylesheet" type="text/css"
+href="artifact...@ev001a4b5729ca%20%20%20repository%20browser_files/GreenSkin.css">
+<script type="text/javascript"
src="artifact...@ev001a4b5729ca%20%20%20repository%20browser_files/AggregateFeedbackPanel.js"></script>
+<script type="text/javascript"
src="artifact...@ev001a4b5729ca%20%20%20repository%20browser_files/FeedbackDistributer.js"></script>
+<script type="text/javascript"
src="artifact...@ev001a4b5729ca%20%20%20repository%20browser_files/wicket-event.js"></script>
+<script type="text/javascript"
src="artifact...@ev001a4b5729ca%20%20%20repository%20browser_files/wicket-ajax.js"></script>
+<script type="text/javascript"
src="artifact...@ev001a4b5729ca%20%20%20repository%20browser_files/modal.js"></script>
+<link rel="stylesheet" type="text/css"
+href="artifact...@ev001a4b5729ca%20%20%20repository%20browser_files/modal.css">
+<script type="text/javascript"
src="artifact...@ev001a4b5729ca%20%20%20repository%20browser_files/ModalHandler.js"></script>
+<script type="text/javascript"
src="artifact...@ev001a4b5729ca%20%20%20repository%20browser_files/SubMenuPanel.js"></script>
+<script type="text/javascript"><!--/*--><![CDATA[/*><!--*/
+var artApp = '/artifactory'
+/*-->]]>*/</script>
+
+<script type="text/javascript"
src="artifact...@ev001a4b5729ca%20%20%20repository%20browser_files/TooltipBehavior.js"></script>
+<script type="text/javascript"
src="artifact...@ev001a4b5729ca%20%20%20repository%20browser_files/AddonNeededBehavior.js"></script>
+</head><body class="tundra">
+<table class="page" cellpadding="0" cellspacing="0">
+<tbody><tr>
+<td class="main">
+<div class="header">
+<div class="spacer">
+<div id="id7d" class="app-logo">
+<a title="Artifactory" class=" artifactory-logo"
+href="http://localhost:8081/artifactory/webapp/home.html">
+
+<span class="none">Artifactory</span>
+
+
+</a>
+</div>
+<div class="top-menu">
+<ul>
+<li class="HomePage menu-group menu-group-enabled">
+<a class="enabled"
+href="http://localhost:8081/artifactory/webapp/home.html">
+<span class="menu-center"></span>
+<span class="menu-left"></span>
+<span class="menu-right"></span>
+<span class="item-name">Home</span>
+</a>
+</li><li class="BrowseRepoPage menu-group menu-group-opened">
+<a class="opened"
+href="http://localhost:8081/artifactory/webapp/browserepo.html">
+<span class="menu-center"></span>
+<span class="menu-left"></span>
+<span class="menu-right"></span>
+<span class="item-name">Artifacts</span>
+</a>
+</li><li class="DeployArtifactPage menu-group menu-group-enabled">
+<a class="enabled"
+href="http://localhost:8081/artifactory/webapp/deployartifact.html">
+<span class="menu-center"></span>
+<span class="menu-left"></span>
+<span class="menu-right"></span>
+<span class="item-name">Deploy</span>
+</a>
+</li><li class="AdminPage menu-group menu-group-enabled">
+<a class="enabled"
+href="http://localhost:8081/artifactory/webapp/admin.html">
+<span class="menu-center"></span>
+<span class="menu-left"></span>
+<span class="menu-right"></span>
+<span class="item-name">Admin</span>
+</a>
+</li>
+</ul>
+</div>
+<div class="quick-search-box">
+<form id="id7e"
+action="../../../webapp/?wicket:interface=:4:searchForm::IFormSubmitListener::"
+ method="post"><div style="display: none;"><input name="id7e_hf_0"
+id="id7e_hf_0" type="hidden"></div><div style="width: 0px; height: 0px;
+position: absolute; left: -100px; top: -100px; overflow: hidden;"><input
+ autocomplete="false" type="text"><input name="searchButton" onclick="
+var b=document.getElementById('id7f'); if
+(b!=null&&b.onclick!=null&&typeof(b.onclick) !=
+'undefined') { var r = b.onclick.bind(b)(); if (r != false) b.click(); }
+ else { b.click(); }; return false;" type="submit"></div>
+<span class="search-box">
+<input name="query" type="text">
+</span>
+<button id="id7f" name="searchButton" onclick="var
+wcall=wicketSubmitFormById('id7e',
+'../../../webapp/?wicket:interface=:4:searchForm:searchButton::IActivePageBehaviorListener:0:2&wicket:ignoreIfNotActive=true',
+ 'searchButton' ,null,null, function() {return
+Wicket.$$(this)&&Wicket.$$('id7e')}.bind(this));return !wcall;;"
+ class=" button" type="submit"><span class="button-center"><span
+class="button-left"><span
class="button-right">Search</span></span></span></button>
+</form>
+</div>
+<div class="user-info">
+<span>Logged in as</span>
+<a class="profileLink button"
+href="http://localhost:8081/artifactory/webapp/profile.html">admin</a>
+<span> | </span>
+<a class=" button"
+href="http://localhost:8081/artifactory/webapp/logout.html">Log Out</a>
+
+</div>
+</div>
+</div>
+<div id="id80" class="aggregate-feedback default-feedback"
+onshow="AggregateFeedbackPanel.onShow('id80')"
+onclear="AggregateFeedbackPanel.onClear('id80')"></div>
+<div class="main">
+
+<div class="side-menu">
+<div class="side-menu-top">
+<div class="side-menu-bottom">
+<div id="id81">
+<ul class="menu-items">
+<li class="menu-group menu-group-opened">
+<a class="opened" onclick="return SubMenuPanel.toogleMenu('menu.1.0',
+this);" href="#">
+<span class="menu-center"></span>
+<span class="menu-left"></span>
+<span class="menu-right"></span>
+<span class="item-name">Browse</span>
+</a>
+</li><li id="id82" class="sub-menu-opened">
+<ul class="menu-items">
+<li class="BrowseRepoPage menu-item menu-item-enabled">
+<a class="enabled"
+href="http://localhost:8081/artifactory/webapp/browserepo.html">
+<span class="menu-center"></span>
+<span class="menu-left"></span>
+<span class="menu-right"></span>
+<span class="item-name">Tree Browser</span>
+</a>
+</li><li class="SimpleBrowserRootPage menu-item menu-item-selected">
+<a class="selected"
+href="http://localhost:8081/artifactory/webapp/simplebrowserroot.html">
+<span class="menu-center"></span>
+<span class="menu-left"></span>
+<span class="menu-right"></span>
+<span class="item-name">Simple Browser</span>
+</a>
+</li><li id="id83" class="menu-item menu-item-disabled disabled-addon"><span
+ class="addon-icon"></span>
+<a class="disabled" onclick="return false;" href="#">
+<span class="menu-center"></span>
+<span class="menu-left"></span>
+<span class="menu-right"></span>
+<span class="item-name">Search Results</span>
+</a>
+</li>
+
+<span class="dijitTooltipData" widgetid="id83_bubble" id="id83_bubble"
+dojotype="artifactory.Tooltip" connectid="id83" showdelay="0"
+toggle="fade" toggleduration="200" style="display: none;">
+ <a class="addon-link addon-search"
+href="http://store.artifactoryonline.com/addons#search" target="_blank">Learn
+ more about the Smart Searches add-on...</a>
+
+ <a id="id83_hide" class="hide-link" href="#" onclick="return
+DisabledAddon.toogle(this, 'id83', '1267546487543', 'search');">
+ Don't show me again.
+ </a>
+</span>
+
+<script type="text/javascript">
+ DomUtils.addOnRender(function () {
+ DisabledAddon.create('id83');
+ });
+</script>
+<li class="BuildBrowserRootPage menu-item menu-item-enabled">
+<a class="enabled"
+href="http://localhost:8081/artifactory/webapp/builds/">
+<span class="menu-center"></span>
+<span class="menu-left"></span>
+<span class="menu-right"></span>
+<span class="item-name">Builds</span>
+</a>
+</li>
+</ul>
+</li><li class="menu-group menu-group-opened">
+<a class="opened" onclick="return SubMenuPanel.toogleMenu('menu.1.1',
+this);" href="#">
+<span class="menu-center"></span>
+<span class="menu-left"></span>
+<span class="menu-right"></span>
+<span class="item-name">Search</span>
+</a>
+</li><li id="id84" class="sub-menu-opened">
+<ul class="menu-items">
+<li class="ArtifactSearchPage menu-item menu-item-enabled">
+<a class="enabled"
+href="http://localhost:8081/artifactory/webapp/artifactsearch.html">
+<span class="menu-center"></span>
+<span class="menu-left"></span>
+<span class="menu-right"></span>
+<span class="item-name">Quick Search</span>
+</a>
+</li><li class="ArchiveSearchPage menu-item menu-item-enabled">
+<a class="enabled"
+href="http://localhost:8081/artifactory/webapp/archivesearch.html">
+<span class="menu-center"></span>
+<span class="menu-left"></span>
+<span class="menu-right"></span>
+<span class="item-name">Class Search</span>
+</a>
+</li><li class="GavcSearchPage menu-item menu-item-enabled">
+<a class="enabled"
+href="http://localhost:8081/artifactory/webapp/gavcsearch.html">
+<span class="menu-center"></span>
+<span class="menu-left"></span>
+<span class="menu-right"></span>
+<span class="item-name">GAVC Search</span>
+</a>
+</li><li id="id85" class="menu-item menu-item-disabled disabled-addon"><span
+ class="addon-icon"></span>
+<a class="disabled" onclick="return false;" href="#">
+<span class="menu-center"></span>
+<span class="menu-left"></span>
+<span class="menu-right"></span>
+<span class="item-name">Property Search</span>
+</a>
+</li>
+
+<span class="dijitTooltipData" widgetid="id85_bubble" id="id85_bubble"
+dojotype="artifactory.Tooltip" connectid="id85" showdelay="0"
+toggle="fade" toggleduration="200" style="display: none;">
+ <a class="addon-link addon-properties"
+href="http://store.artifactoryonline.com/addons#properties"
+target="_blank">Learn more about the Properties add-on...</a>
+
+ <a id="id85_hide" class="hide-link" href="#" onclick="return
+DisabledAddon.toogle(this, 'id85', '1267546487543', 'properties');">
+ Don't show me again.
+ </a>
+</span>
+
+<script type="text/javascript">
+ DomUtils.addOnRender(function () {
+ DisabledAddon.create('id85');
+ });
+</script>
+<li class="MetadataSearchPage menu-item menu-item-enabled">
+<a class="enabled"
+href="http://localhost:8081/artifactory/webapp/metadatasearch.html">
+<span class="menu-center"></span>
+<span class="menu-left"></span>
+<span class="menu-right"></span>
+<span class="item-name">POM/XML Search</span>
+</a>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+<div class="page-content">
+<div class="outer-border-wrapper">
+<div class="outer-border-top">
+<div class="outer-border-bottom">
+<div class="outer-border-left">
+<div class="outer-border-right">
+<div class="outer-border-top-left">
+<div class="outer-border-top-right">
+<div class="outer-border-bottom-left">
+<div class="outer-border-bottom-right">
+<h1 class="outer-border-title">Repository Browser</h1>
+<div class="outer-border-content">
+
+<div id="id86">
+<div class="border-wrapper">
+<div class="border-top">
+<div class="border-left">
+<div class="border-right">
+<div class="border-top-left">
+<div class="border-top-right">
+<div class="border-bottom">
+<div class="border-bottom-left">
+<div class="border-bottom-right">
+<h2 class="border-title">
+
+
+</h2>
+<div class="border-content">
+
+<div class="bread-crumbs">
+<span class="crumb">
+<a
href="http://localhost:8081/artifactory/libs-snapshots-local/">libs-snapshots-local</a>
+:
+</span><span class="crumb">
+<a
+href="http://localhost:8081/artifactory/libs-snapshots-local/com.bla.bla.scf/">com.bla.bla.scf</a>
+/
+</span><span class="crumb">
+<a
+href="http://localhost:8081/artifactory/libs-snapshots-local/com.bla.bla.scf/a2/">a2</a>
+/
+</span>
+<div class="clear"></div>
+</div>
+<div class="local-repos-list">
+<div>
+<a class="icon-link folder"
+href="http://localhost:8081/artifactory/libs-snapshots-local/com.bla.bla.scf/">..</a>
+</div><div>
+<a class="icon-link folder"
+href="R1A-SNAPSHOT/">R1A-SNAPSHOT</a>
+</div>
+</div>
+
+<div class="clear"></div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+
+</div>
+</td>
+</tr>
+<tr>
+<td class="footer">
+<div class="footer">
+<p class="copywrites">
+<span>© Copyright 2010</span>
+<a href="http://www.jfrog.org/">JFrog Ltd.</a>
+<span id="id87" name="footer"></span>
+</p>
+<p class="version">Artifactory 2.2.1 (rev. 10024)</p>
+</div>
+</td>
+</tr>
+</tbody></table><div widgetid="dijit__MasterTooltip_0"
+class="dijitTooltip dijitTooltipLeft" id="dijit__MasterTooltip_0">
+ <div role="alert" class="dijitTooltipContainer dijitTooltipContents"
+dojoattachpoint="containerNode" wairole="alert"></div>
+ <div class="dijitTooltipConnector"></div>
+<iframe tabindex="-1" style="opacity: 0.1; width: 100%; height: 100%;"
+class="dijitBackgroundIframe" src='javascript:""'></iframe></div>
+<div id="id88" style="display: none;">
+
+</div>
+<div id="id89">
+<script type="text/javascript">(function(fd) {
+fd.init('id80');
+fd.showMessages();
+})(FeedbackDistributer);
+</script>
+</div>
+<div id="ajaxIndicatorContainer" class="ajax-indicator">
+
+<iframe src="javascript:;"></iframe>
+
+<div id="ajaxIndicator">
+<div class="ajax-indicator-bg"></div>
+<div id="ajaxIndicatorMessage" class="ajax-indicator-message">
+<span>Loading...</span>
+</div>
+</div>
+</div>
+</body></html>
Propchange:
ant/ivy/core/trunk/test/java/org/apache/ivy/util/url/artifactory-dir-listing.html
------------------------------------------------------------------------------
svn:mime-type = text/plain