1
2
3
4
5
6
7
8
9
10 package org.jenkinsci.plugins.darcs;
11
12 import hudson.model.AbstractBuild;
13 import hudson.scm.ChangeLogParser;
14 import java.io.ByteArrayOutputStream;
15 import java.io.File;
16 import java.io.IOException;
17 import java.io.StringReader;
18 import java.util.logging.Logger;
19 import org.xml.sax.InputSource;
20 import org.xml.sax.SAXException;
21 import org.xml.sax.XMLReader;
22 import org.xml.sax.helpers.XMLReaderFactory;
23
24
25
26
27
28
29
30 class DarcsChangeLogParser extends ChangeLogParser {
31
32
33
34
35 private static final Logger LOGGER = Logger.getLogger(DarcsChangeLogParser.class.getName());
36
37
38
39 private final DarcsSaxHandler handler;
40
41
42
43 private final DarcsXmlSanitizer sanitizer;
44
45
46
47
48 public DarcsChangeLogParser() {
49 this(new DarcsSaxHandler(), new DarcsXmlSanitizer());
50 }
51
52
53
54
55
56
57
58 public DarcsChangeLogParser(final DarcsSaxHandler handler, final DarcsXmlSanitizer sani) {
59 super();
60 this.handler = handler;
61 this.sanitizer = sani;
62 }
63
64
65
66
67
68
69
70
71
72
73
74
75
76 @Override
77 public DarcsChangeSetList parse(final AbstractBuild build, final File changelogFile)
78 throws IOException, SAXException {
79 LOGGER.info(String.format("Parsing changelog file %s...", changelogFile.toString()));
80 final StringReader input = new StringReader(sanitizer.cleanse(changelogFile));
81 return parse(build, new InputSource(input));
82 }
83
84
85
86
87
88
89
90
91
92 public DarcsChangeSetList parse(final ByteArrayOutputStream changeLog) throws IOException, SAXException {
93 final StringReader input = new StringReader(sanitizer.cleanse(changeLog.toByteArray()));
94 return parse(null, new InputSource(input));
95 }
96
97 private DarcsChangeSetList parse(final AbstractBuild build, final InputSource changeLog) throws IOException, SAXException {
98 final XMLReader xmlReader = XMLReaderFactory.createXMLReader();
99 xmlReader.setContentHandler(handler);
100 xmlReader.setErrorHandler(handler);
101 xmlReader.parse(changeLog);
102 return new DarcsChangeSetList(build, handler.getChangeSets());
103 }
104 }