From 3095d824055416288a498fdbae97a9f3a6112bda Mon Sep 17 00:00:00 2001 From: evenisse Date: Thu, 14 Oct 2004 15:01:44 +0000 Subject: [PATCH] MPCHANGELOG-45. Perforce Repository URL should include project. git-svn-id: https://svn.apache.org/repos/asf/maven/maven-1/plugins/trunk@116128 13f79535-47bb-0310-9956-ffa450edef68 --- .../perforcelib/PerforceChangeLogFactory.java | 18 +++++++++++------- .../perforcelib/PerforceChangeLogParser.java | 10 +++++++--- .../PerforceChangeLogParserTest.java | 14 +++++++++----- changelog/xdocs/changes.xml | 1 + 4 files changed, 28 insertions(+), 15 deletions(-) diff --git a/changelog/src/main/org/apache/maven/perforcelib/PerforceChangeLogFactory.java b/changelog/src/main/org/apache/maven/perforcelib/PerforceChangeLogFactory.java index 7db6d59c..168819b2 100644 --- a/changelog/src/main/org/apache/maven/perforcelib/PerforceChangeLogFactory.java +++ b/changelog/src/main/org/apache/maven/perforcelib/PerforceChangeLogFactory.java @@ -28,24 +28,28 @@ import org.apache.maven.changelog.ChangeLogParser; * It expects the repository connection element in the POM to be of * this form: scm:perforce[:P4PORT]:FILESPEC. If * the P4PORT is omitted, the corresponding environment variable will - * be used. The FILESPEC should use the appropriate Perforce - * wildcards to represent all of the project's files. For example, + * be used. The FILESPEC should use "depot syntax" with the + * appropriate Perforce wildcards to represent all of the project's + * files, i.e. '...' * + * The repository URL element should refer to a p4web + * instance. The portion of the URL following the host:port should + * match the FILESPEC in the repository connection element, sans the + * '...'. It must end with a '/'. + * + * For example, *
  * <repository>
  *   <connection>
  *     scm:perforce:some.host.com:1666://depot/projects/maven/...
  *   </connection>
  *   <url>
- *     http://public.perforce.com:8080
+ *     http://public.perforce.com:8080//depot/projects/maven/
  *   </url>
  * </repository>
  * 
* - * The repository url element should reference the root context of a p4web - * instance. - * * @author Jim Crossley * @version $Id: */ diff --git a/changelog/src/main/org/apache/maven/perforcelib/PerforceChangeLogParser.java b/changelog/src/main/org/apache/maven/perforcelib/PerforceChangeLogParser.java index 83e83a72..496954d6 100644 --- a/changelog/src/main/org/apache/maven/perforcelib/PerforceChangeLogParser.java +++ b/changelog/src/main/org/apache/maven/perforcelib/PerforceChangeLogParser.java @@ -91,6 +91,9 @@ class PerforceChangeLogParser implements ChangeLogParser /** the before date */ private Date beforeDate; + /** The depot filespec will be stripped from each filename */ + private int prefixLength; + private static final String pattern = "^\\.\\.\\. #(\\d+) " + // revision number "change (\\d+) .* " + // changelist number @@ -119,6 +122,9 @@ class PerforceChangeLogParser implements ChangeLogParser { this.changeLog = changeLog; setDateRange(); + String conn = changeLog.getRepositoryConnection(); + String filespec = conn.substring(conn.lastIndexOf(':')+1); + this.prefixLength = 1 + filespec.lastIndexOf ('/'); } /** @@ -171,8 +177,6 @@ class PerforceChangeLogParser implements ChangeLogParser */ private void addEntry(ChangeLogEntry entry, ChangeLogFile file) { - System.out.println(); - System.out.println(entry.toXML()); if (beforeDate != null) { if (entry.getDate().before(beforeDate)) { return; @@ -197,7 +201,7 @@ class PerforceChangeLogParser implements ChangeLogParser private void processGetRevision(String line) { if (line.startsWith(FILE_BEGIN_TOKEN)) { - currentFile = line; + currentFile = line.substring (this.prefixLength); return; } diff --git a/changelog/src/test/org/apache/maven/perforcelib/PerforceChangeLogParserTest.java b/changelog/src/test/org/apache/maven/perforcelib/PerforceChangeLogParserTest.java index 7a4d2005..653adf86 100644 --- a/changelog/src/test/org/apache/maven/perforcelib/PerforceChangeLogParserTest.java +++ b/changelog/src/test/org/apache/maven/perforcelib/PerforceChangeLogParserTest.java @@ -23,6 +23,7 @@ import java.util.List; import junit.framework.TestCase; import org.apache.maven.changelog.ChangeLogEntry; +import org.apache.maven.changelog.ChangeLog; /** * Test cases for {@link PerforceChangeLogParser} @@ -58,6 +59,9 @@ public class PerforceChangeLogParserTest extends TestCase assertNotNull("The system property basedir was not defined.", baseDir); testFile = baseDir + "/src/test-resources/perforcelib/perforcelog.txt"; parser = new PerforceChangeLogParser(); + ChangeLog changeLog = new ChangeLog(); + changeLog.setRepositoryConnection ("scm:perforce://depot/test/..."); + parser.init (changeLog); } /** @@ -79,7 +83,7 @@ public class PerforceChangeLogParserTest extends TestCase "\t\t\n" + "\t\t\n" + "\t\t\n" + - "\t\t\t//depot/test/junk/linefeed.txt\n" + + "\t\t\tjunk/linefeed.txt\n" + "\t\t\t3\n" + "\t\t\n" + "\t\t16:24:20\n" + "\t\t\n" + "\t\t\n" + - "\t\t\t//depot/test/demo/demo.c\n" + + "\t\t\tdemo/demo.c\n" + "\t\t\t4\n" + "\t\t\n" + "\t\t17:21:57\n" + "\t\t\n" + "\t\t\n" + - "\t\t\t//depot/test/demo/demo.c\n" + + "\t\t\tdemo/demo.c\n" + "\t\t\t1\n" + "\t\t\n" + "\t\t\n" + - "\t\t\t//depot/test/demo/dictcalls.txt\n" + + "\t\t\tdemo/dictcalls.txt\n" + "\t\t\t1\n" + "\t\t\n" + "\t\t\n" + - "\t\t\t//depot/test/demo/dictwords.txt\n" + + "\t\t\tdemo/dictwords.txt\n" + "\t\t\t1\n" + "\t\t\n" + "\t\t + Perforce Repository URL should include project. Handle ViewCVS URLs with ? in them. Upgrade to Maven 1.1 libraries.