Skip to content

Commit d5f179a

Browse files
committed
Merge pull request hudson2-plugins#30 from kevinsawicki/duplicates
Prevent parsing duplicates from the change log.
2 parents e8e5dd9 + 9c2a63c commit d5f179a

3 files changed

Lines changed: 52 additions & 2 deletions

File tree

src/main/java/hudson/plugins/git/GitChangeLogParser.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
import java.io.FileReader;
99
import java.io.IOException;
1010
import java.util.ArrayList;
11+
import java.util.LinkedHashSet;
1112
import java.util.List;
13+
import java.util.Set;
1214

1315
import org.xml.sax.SAXException;
1416

@@ -27,7 +29,7 @@ public GitChangeLogParser(boolean authorOrCommitter) {
2729
public GitChangeSetList parse(AbstractBuild build, File changelogFile)
2830
throws IOException, SAXException {
2931

30-
ArrayList<GitChangeSet> r = new ArrayList<GitChangeSet>();
32+
Set<GitChangeSet> r = new LinkedHashSet<GitChangeSet>();
3133

3234
// Parse the log file into GitChangeSet items - each one is a commit
3335

@@ -55,7 +57,7 @@ public GitChangeSetList parse(AbstractBuild build, File changelogFile)
5557
r.add(parseCommit(lines, authorOrCommitter));
5658
}
5759

58-
return new GitChangeSetList(build, r);
60+
return new GitChangeSetList(build, new ArrayList<GitChangeSet>(r));
5961
}
6062
finally {
6163
rdr.close();

src/main/java/hudson/plugins/git/GitChangeSet.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,4 +350,16 @@ public EditType getEditType() {
350350
}
351351
}
352352
}
353+
354+
public int hashCode() {
355+
return id != null ? id.hashCode() : super.hashCode();
356+
}
357+
358+
public boolean equals(Object obj) {
359+
if (obj == this)
360+
return true;
361+
if (obj instanceof GitChangeSet)
362+
return id != null && id.equals(((GitChangeSet) obj).id);
363+
return false;
364+
}
353365
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package hudson.plugins.git;
2+
3+
import java.io.File;
4+
import java.io.FileWriter;
5+
6+
import org.jvnet.hudson.test.HudsonTestCase;
7+
8+
/**
9+
* Unit tests of {@link GitChangeLogParser}
10+
*/
11+
public class GitChangeLogParserTest extends HudsonTestCase {
12+
13+
/**
14+
* Test duplicate changes filtered from parsed change set list.
15+
*
16+
* @throws Exception
17+
*/
18+
public void testDuplicatesFiltered() throws Exception {
19+
GitChangeLogParser parser = new GitChangeLogParser(true);
20+
File log = File.createTempFile(getClass().getName(), ".tmp");
21+
FileWriter writer = new FileWriter(log);
22+
writer.write("commit 123abc456def\n");
23+
writer.write(" first message\n");
24+
writer.write("commit 123abc456def\n");
25+
writer.write(" second message");
26+
writer.close();
27+
GitChangeSetList list = parser.parse(null, log);
28+
assertNotNull(list);
29+
assertNotNull(list.getLogs());
30+
assertEquals(1, list.getLogs().size());
31+
GitChangeSet first = list.getLogs().get(0);
32+
assertNotNull(first);
33+
assertEquals("123abc456def", first.getId());
34+
assertEquals("first message", first.getMsg());
35+
}
36+
}

0 commit comments

Comments
 (0)