1 package net.sf.statsvn.util;
2
3 import java.io.IOException;
4 import java.io.InputStream;
5
6 import net.sf.statcvs.input.LogSyntaxException;
7
8 /**
9 * Performs svn info queries.
10 *
11 * @author jkealey
12 *
13 */
14 public interface ISvnInfoProcessor {
15
16 /**
17 * Converts an absolute path in the repository to a path relative to the
18 * working folder root.
19 *
20 * Will return null if absolute path does not start with getModuleName();
21 *
22 * @param absolute
23 * Example (assume getModuleName() returns /trunk/statsvn)
24 * /trunk/statsvn/package.html
25 * @return Example: package.html
26 */
27 public abstract String absoluteToRelativePath(String absolute);
28
29 /**
30 * Converts an absolute path in the repository to a URL, using the
31 * repository URL
32 *
33 * @param absolute
34 * Example: /trunk/statsvn/package.html
35 * @return Example: svn://svn.statsvn.org/statsvn/trunk/statsvn/package.html
36 */
37 public abstract String absolutePathToUrl(final String absolute);
38
39 /**
40 * Converts a relative path in the working folder to a URL, using the
41 * working folder's root URL
42 *
43 * @param relative
44 * Example: src/Messages.java
45 * @return Example:
46 * svn://svn.statsvn.org/statsvn/trunk/statsvn/src/Messages.java
47 *
48 */
49 public abstract String relativePathToUrl(String relative);
50
51 /**
52 * Converts a relative path in the working folder to an absolute path in the
53 * repository.
54 *
55 * @param relative
56 * Example: src/Messages.java
57 * @return Example: /trunk/statsvn/src/Messages.java
58 *
59 */
60 public abstract String relativeToAbsolutePath(final String relative);
61
62 /**
63 * Returns true if the file exists in the working copy (according to the svn
64 * metadata, and not file system checks).
65 *
66 * @param relativePath
67 * the path
68 * @return <tt>true</tt> if it exists
69 */
70 public abstract boolean existsInWorkingCopy(final String relativePath);
71
72 /**
73 * Assumes #loadInfo(String) has been called. Never ends with /, might be
74 * empty.
75 *
76 * @return The absolute path of the root of the working folder in the
77 * repository.
78 */
79 public abstract String getModuleName();
80
81 /**
82 * Returns the revision number of the file in the working copy.
83 *
84 * @param relativePath
85 * the filename
86 * @return the revision number if it exists in the working copy, null
87 * otherwise.
88 */
89 public abstract String getRevisionNumber(final String relativePath);
90
91 /**
92 * Assumes #loadInfo() has been invoked.
93 *
94 * @return the root of the working folder's revision number (last checked
95 * out revision number)
96 */
97 public abstract String getRootRevisionNumber();
98
99 /**
100 * Assumes #loadInfo() has been invoked.
101 *
102 * @return the root of the working folder's url (example:
103 * svn://svn.statsvn.org/statsvn/trunk/statsvn)
104 */
105 public abstract String getRootUrl();
106
107 /**
108 * Assumes #loadInfo() has been invoked.
109 *
110 * @return the uuid of the repository
111 */
112 public abstract String getRepositoryUuid();
113
114 /**
115 * Assumes #loadInfo() has been invoked.
116 *
117 * @return the repository url (example: svn://svn.statsvn.org/statsvn)
118 */
119 public abstract String getRepositoryUrl();
120
121 /**
122 * Returns true if the path has been identified as a directory.
123 *
124 * @param relativePath
125 * the path
126 * @return true if it is a known directory.
127 */
128 public abstract boolean isDirectory(final String relativePath);
129
130 /**
131 * Adds a directory to the list of known directories. Used when inferring
132 * implicit actions on deleted paths.
133 *
134 * @param relativePath
135 * the relative path.
136 */
137 public abstract void addDirectory(final String relativePath);
138
139 /**
140 * Loads the information from svn info if needed.
141 *
142 * @param stream
143 * the input stream representing
144 * an svn info command.
145 * @throws LogSyntaxException
146 * if the format of the svn info is invalid
147 * @throws IOException
148 * if we can't read from the response stream.
149 */
150 public abstract void loadInfo(final InputStream stream) throws LogSyntaxException, IOException;
151
152 /**
153 * Initializes our representation of the repository.
154 *
155 * @throws LogSyntaxException
156 * if the svn info --xml is malformed
157 * @throws IOException
158 * if there is an error reading from the stream
159 */
160 public abstract void loadInfo() throws LogSyntaxException, IOException;
161
162 /**
163 * Converts a url to an absolute path in the repository.
164 *
165 * @param url
166 * Examples: svn://svn.statsvn.org/statsvn/trunk/statsvn,
167 * svn://svn.statsvn.org/statsvn/trunk/statsvn/package.html
168 * @return Example: /trunk/statsvn, /trunk/statsvn/package.html
169 */
170 public abstract String urlToAbsolutePath(String url);
171
172 /**
173 * Converts a url to a relative path in the repository.
174 *
175 * @param url
176 * Examples: svn://svn.statsvn.org/statsvn/trunk/statsvn,
177 * svn://svn.statsvn.org/statsvn/trunk/statsvn/package.html
178 * @return Example: ".", package.html
179 */
180 public abstract String urlToRelativePath(final String url);
181
182
183 /**
184 * Verifies that the "svn info" command can return the repository root
185 * (info available in svn >= 1.3.0)
186 *
187 * @throws SvnVersionMismatchException
188 * if <tt>svn info</tt> failed to provide a non-empty repository root
189 */
190 public abstract void checkRepoRootAvailable() throws SvnVersionMismatchException ;
191 }