1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package net.sf.statsvn.input;
21
22 import java.util.Map;
23
24 /**
25 * <p>
26 * Interface for defining a Builder that constructs a data structure from a SVM
27 * logfile. {@link SvnLogfileParser} takes an instance of this interface and
28 * will call methods on the interface for every piece of data it encounters in
29 * the log.
30 * </p>
31 *
32 * <p>
33 * First, {@link #buildModule} will be called with the name of the module. Then,
34 * {@link #buildFile} will be called with the filename and other pieces of
35 * information of the first file in the log. Then, for every revision of this
36 * file, {@link #buildRevision} is called. The calls to <tt>buildFile</tt> and
37 * <tt>buildRevision</tt> are repeated for every file in the log.
38 * </p>
39 *
40 * <p>
41 * The files are in no particular order. The revisions of one file are ordered
42 * by time, beginning with the <em>most recent</em>.
43 * </p>
44 *
45 * @author Richard Cyganiak <richard@cyganiak.de>
46 * @author Tammo van Lessen
47 * @version $Id: SvnLogBuilder.java 351 2008-03-28 18:46:26Z benoitx $
48 */
49 public interface SvnLogBuilder {
50
51 /**
52 * Starts building a module.
53 *
54 * @param moduleName
55 * the name of the module
56 */
57 void buildModule(String moduleName);
58
59 /**
60 * Starts building a new file. The files are not processed in any particular
61 * order.
62 *
63 * @param filename
64 * the file's name with path relative to the module, for example
65 * "path/file.txt"
66 * @param isBinary
67 * <tt>true</tt> if it's a binary file
68 * @param isInAttic
69 * <tt>true</tt> if the file is dead on the main branch
70 * @param revBySymnames
71 * maps revision (string) by symbolic name (string)
72 * @param dateBySymnames
73 * maps date (date) by symbolic name (string)
74 */
75 void buildFile(String filename, boolean isBinary, boolean isInAttic, Map revBySymnames, final Map dateBySymnames);
76
77 /**
78 * Adds a revision to the last file that was built.. The revisions are added
79 * in SVN logfile order, that is starting with the most recent one.
80 *
81 * @param data
82 * the revision
83 */
84 void buildRevision(RevisionData data);
85
86 /**
87 * Adds a file to the attic. This method should only be called if our first
88 * invocation to (@link #buildFile(String, boolean, boolean, Map)) was given
89 * an invalid isInAttic field.
90 *
91 * This is a way to handle post-processing of implicit deletions at the same
92 * time as the implicit additions that can be found in Subversion.
93 *
94 * @param filename
95 * the filename to add to the attic.
96 */
97 void addToAttic(String filename);
98
99 /**
100 * New in StatSVN: We need to have access to FileBuilders after they have
101 * been created to populate them with version numbers later on.
102 *
103 * @todo Beef up this interface to better encapsulate the data structure.
104 *
105 * @return this builder's contained (@link FileBuilder)s.
106 */
107 Map getFileBuilders();
108
109 /**
110 * New in StatSVN: Updates a particular revision for a file with new line
111 * count information. If the file or revision does not exist, action will do
112 * nothing.
113 *
114 * Necessary because line counts are not given in the log file and hence can
115 * only be added in a second pass.
116 *
117 * @param filename
118 * the file to be updated
119 * @param revisionNumber
120 * the revision number to be updated
121 * @param linesAdded
122 * the lines that were added
123 * @param linesRemoved
124 * the lines that were removed
125 */
126 void updateRevision(String filename, String revisionNumber, int linesAdded, int linesRemoved);
127
128 /**
129 * Matches a filename against the include and exclude patterns. If no
130 * include pattern was specified, all files will be included. If no exclude
131 * pattern was specified, no files will be excluded.
132 *
133 * @param filename
134 * a filename
135 * @return <tt>true</tt> if the filename matches one of the include
136 * patterns and does not match any of the exclude patterns. If it
137 * matches an include and an exclude pattern, <tt>false</tt> will
138 * be returned.
139 */
140 boolean matchesPatterns(final String filename);
141
142 /**
143 * Matches a tag against the tag patterns.
144 *
145 * @param tag
146 * a tag
147 * @return <tt>true</tt> if the tag matches the tag pattern.
148 */
149 boolean matchesTagPatterns(final String tag);
150 }