| Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
| ISvnInfoProcessor |
|
| 1.0;1 |
| 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 | } |