diff --git a/proposal/sandbox/svn/src/main/org/apache/tools/ant/taskdefs/svn/SvnChangeLogParser.java b/proposal/sandbox/svn/src/main/org/apache/tools/ant/taskdefs/svn/SvnChangeLogParser.java
index ba20d5725..7e48dc113 100644
--- a/proposal/sandbox/svn/src/main/org/apache/tools/ant/taskdefs/svn/SvnChangeLogParser.java
+++ b/proposal/sandbox/svn/src/main/org/apache/tools/ant/taskdefs/svn/SvnChangeLogParser.java
@@ -98,7 +98,7 @@ class SvnChangeLogParser extends LineOrientedOutputStream {
//We have ended changelog for that particular revision
//so we can save it
final int end
- = message.length() - lineSeparator.length(); //was -1
+ = message.length() - lineSeparator.length();
message = message.substring(0, end);
saveEntry();
status = GET_REVISION_LINE;
@@ -147,8 +147,8 @@ class SvnChangeLogParser extends LineOrientedOutputStream {
// ignore
} else if (line.equals("")) {
status = GET_MESSAGE;
- } else {
- paths.add(line.substring(5));
+ } else if (line.length() > 5) {
+ paths.add(new SvnEntry.Path(line.substring(5), line.charAt(3)));
}
}
@@ -159,6 +159,7 @@ class SvnChangeLogParser extends LineOrientedOutputStream {
SvnEntry entry = new SvnEntry(date, revision, author, message,
paths);
entries.add(entry);
+ reset();
}
/**
diff --git a/proposal/sandbox/svn/src/main/org/apache/tools/ant/taskdefs/svn/SvnChangeLogTask.java b/proposal/sandbox/svn/src/main/org/apache/tools/ant/taskdefs/svn/SvnChangeLogTask.java
index 26f3dea9b..718416135 100644
--- a/proposal/sandbox/svn/src/main/org/apache/tools/ant/taskdefs/svn/SvnChangeLogTask.java
+++ b/proposal/sandbox/svn/src/main/org/apache/tools/ant/taskdefs/svn/SvnChangeLogTask.java
@@ -46,7 +46,7 @@ import org.apache.tools.ant.util.FileUtils;
* <!-- Root element -->
* <!ELEMENT changelog (entry+)>
* <!-- SVN Entry -->
- * <!ELEMENT entry (date,time,revision,author,file+,msg,msg)>
+ * <!ELEMENT entry (date,time,revision,author,path+,msg,msg)>
* <!-- Date of svn entry -->
* <!ELEMENT date (#PCDATA)>
* <!-- Time of svn entry -->
@@ -55,10 +55,11 @@ import org.apache.tools.ant.util.FileUtils;
* <!ELEMENT author (#PCDATA)>
* <!-- commit message -->
* <!ELEMENT msg (#PCDATA)>
- * <!-- List of files affected -->
- * <!ELEMENT file (name?)>
- * <!-- Name of the file -->
+ * <!-- List of paths affected -->
+ * <!ELEMENT path (name,action))>
+ * <!-- Name of the path -->
* <!ELEMENT name (#PCDATA)>
+ * <!ELEMENT action (added|modified|deleted)>
* <!-- Revision number -->
* <!ELEMENT revision (#PCDATA)>
*
diff --git a/proposal/sandbox/svn/src/main/org/apache/tools/ant/taskdefs/svn/SvnChangeLogWriter.java b/proposal/sandbox/svn/src/main/org/apache/tools/ant/taskdefs/svn/SvnChangeLogWriter.java
index f220b27f6..95550e2fd 100644
--- a/proposal/sandbox/svn/src/main/org/apache/tools/ant/taskdefs/svn/SvnChangeLogWriter.java
+++ b/proposal/sandbox/svn/src/main/org/apache/tools/ant/taskdefs/svn/SvnChangeLogWriter.java
@@ -65,16 +65,19 @@ public class SvnChangeLogWriter {
+ "");
output.println("\t\t");
- output.println("\t\t");
+ output.println("\t\t" + entry.getRevision()
+ + "");
- String[] paths = entry.getPaths();
+ SvnEntry.Path[] paths = entry.getPaths();
for (int i = 0; i < paths.length; i++) {
- output.println("\t\t");
- output.println("\t\t\t");
- output.println("\t\t");
+ output.println("\t\t");
+ output.println("\t\t\t");
+ output.println("\t\t\t" + paths[i].getActionDescription()
+ + "");
+ output.println("\t\t");
}
- output.println("\t\t");
+ output.println("\t\t");
output.println("\t");
}
}
diff --git a/proposal/sandbox/svn/src/main/org/apache/tools/ant/taskdefs/svn/SvnEntry.java b/proposal/sandbox/svn/src/main/org/apache/tools/ant/taskdefs/svn/SvnEntry.java
index 9babcc058..1602f43aa 100644
--- a/proposal/sandbox/svn/src/main/org/apache/tools/ant/taskdefs/svn/SvnEntry.java
+++ b/proposal/sandbox/svn/src/main/org/apache/tools/ant/taskdefs/svn/SvnEntry.java
@@ -60,8 +60,8 @@ public class SvnEntry {
* @param path the path to add
* @param revision the revision
*/
- public void addPath(final String name) {
- paths.add(name);
+ public void addPath(final String name, final char action) {
+ paths.add(new Path(name, action));
}
/**
@@ -108,8 +108,56 @@ public class SvnEntry {
* Gets the paths in this SvnEntry
* @return the files
*/
- public String[] getPaths() {
- return (String[]) paths.toArray(new String[paths.size()]);
+ public Path[] getPaths() {
+ return (Path[]) paths.toArray(new Path[paths.size()]);
+ }
+
+ public static class Path {
+
+ private static final char ADDED_MARKER = 'A';
+ private static final char MODIFIED_MARKER = 'M';
+ private static final char DELETED_MARKER = 'D';
+
+ public static final int ADDED = 0;
+ public static final int MODIFIED = 1;
+ public static final int DELETED = 2;
+
+ private static final String[] ACTIONS = {
+ "added", "modified", "deleted",
+ };
+
+ private final String name;
+ private final int action;
+
+ public Path(final String name, final char actionChar) {
+ this.name = name;
+ switch (actionChar) {
+ case ADDED_MARKER:
+ action = ADDED;
+ break;
+ case MODIFIED_MARKER:
+ action = MODIFIED;
+ break;
+ case DELETED_MARKER:
+ action = DELETED;
+ break;
+ default:
+ throw new IllegalArgumentException("Unkown action; "
+ + actionChar);
+ }
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public int getAction() {
+ return action;
+ }
+
+ public String getActionDescription() {
+ return ACTIONS[action];
+ }
}
}