git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@277661 13f79535-47bb-0310-9956-ffa450edef68master
@@ -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(); | |||
} | |||
/** | |||
@@ -46,7 +46,7 @@ import org.apache.tools.ant.util.FileUtils; | |||
* <font color=#0000ff><!-- Root element --></font> | |||
* <font color=#6a5acd><!ELEMENT</font> changelog <font color=#ff00ff>(entry</font><font color=#ff00ff>+</font><font color=#ff00ff>)</font><font color=#6a5acd>></font> | |||
* <font color=#0000ff><!-- SVN Entry --></font> | |||
* <font color=#6a5acd><!ELEMENT</font> entry <font color=#ff00ff>(date,time,revision,author,file</font><font color=#ff00ff>+,msg</font><font color=#ff00ff>,msg)</font><font color=#6a5acd>></font> | |||
* <font color=#6a5acd><!ELEMENT</font> entry <font color=#ff00ff>(date,time,revision,author,path</font><font color=#ff00ff>+,msg</font><font color=#ff00ff>,msg)</font><font color=#6a5acd>></font> | |||
* <font color=#0000ff><!-- Date of svn entry --></font> | |||
* <font color=#6a5acd><!ELEMENT</font> date <font color=#ff00ff>(#PCDATA)</font><font color=#6a5acd>></font> | |||
* <font color=#0000ff><!-- Time of svn entry --></font> | |||
@@ -55,10 +55,11 @@ import org.apache.tools.ant.util.FileUtils; | |||
* <font color=#6a5acd><!ELEMENT</font> author <font color=#ff00ff>(#PCDATA)</font><font color=#6a5acd>></font> | |||
* <font color=#0000ff><!-- commit message --></font> | |||
* <font color=#6a5acd><!ELEMENT</font> msg <font color=#ff00ff>(#PCDATA)</font><font color=#6a5acd>></font> | |||
* <font color=#0000ff><!-- List of files affected --></font> | |||
* <font color=#6a5acd><!ELEMENT</font> file <font color=#ff00ff>(name</font><font color=#ff00ff>?</font><font color=#ff00ff>)</font><font color=#6a5acd>></font> | |||
* <font color=#0000ff><!-- Name of the file --></font> | |||
* <font color=#0000ff><!-- List of paths affected --></font> | |||
* <font color=#6a5acd><!ELEMENT</font> path <font color=#ff00ff>(name,action)</font><font color=#ff00ff></font><font color=#ff00ff>)</font><font color=#6a5acd>></font> | |||
* <font color=#0000ff><!-- Name of the path --></font> | |||
* <font color=#6a5acd><!ELEMENT</font> name <font color=#ff00ff>(#PCDATA)</font><font color=#6a5acd>></font> | |||
* <font color=#6a5acd><!ELEMENT</font> action <font color=#ff00ff>(added|modified|deleted)</font><font color=#6a5acd>></font> | |||
* <font color=#0000ff><!-- Revision number --></font> | |||
* <font color=#6a5acd><!ELEMENT</font> revision <font color=#ff00ff>(#PCDATA)</font><font color=#6a5acd>></font> | |||
* </pre> | |||
@@ -65,16 +65,19 @@ public class SvnChangeLogWriter { | |||
+ "</time>"); | |||
output.println("\t\t<author><![CDATA[" + entry.getAuthor() | |||
+ "]]></author>"); | |||
output.println("\t\t<revision><![CDATA[" + entry.getRevision() | |||
+ "]]></revision>"); | |||
output.println("\t\t<revision>" + entry.getRevision() | |||
+ "</revision>"); | |||
String[] paths = entry.getPaths(); | |||
SvnEntry.Path[] paths = entry.getPaths(); | |||
for (int i = 0; i < paths.length; i++) { | |||
output.println("\t\t<file>"); | |||
output.println("\t\t\t<name><![CDATA[" + paths[i] + "]]></name>"); | |||
output.println("\t\t</file>"); | |||
output.println("\t\t<path>"); | |||
output.println("\t\t\t<name><![CDATA[" + paths[i].getName() | |||
+ "]]></name>"); | |||
output.println("\t\t\t<action>" + paths[i].getActionDescription() | |||
+ "</action>"); | |||
output.println("\t\t</path>"); | |||
} | |||
output.println("\t\t<msg><![CDATA[" + entry.getMessage() + "]]></msg>"); | |||
output.println("\t\t<message><![CDATA[" + entry.getMessage() + "]]></message>"); | |||
output.println("\t</entry>"); | |||
} | |||
} | |||
@@ -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]; | |||
} | |||
} | |||
} |