public static void runPostRevPropChangeHook(File reposRootDir, String propName, String propOldValue, String author, long revision, String action) throws SVNException { runChangeRevPropHook(reposRootDir, SVN_REPOS_HOOK_POST_REVPROP_CHANGE, propName, propOldValue, author, revision, action, false); }
public static String runPreLockHook(File reposRootDir, String path, String username, String comment, boolean stealLock) throws SVNException { username = username == null ? "" : username; path = path == null ? "" : path; return runHook(reposRootDir, SVN_REPOS_HOOK_PRE_LOCK, new String[] {path, username, comment != null ? comment : "", stealLock ? "1" : "0"}, null); }
public static void runPreLockHook(File reposRootDir, String path, String username) throws SVNException { runLockHook(reposRootDir, SVN_REPOS_HOOK_PRE_LOCK, path, username, null); }
public static void runStartCommitHook(File reposRootDir, String author, List<?> capabilities) throws SVNException { author = author == null ? "" : author; String capsString = getCapabilitiesAsString(capabilities); String[] args = capsString == null ? new String[] { author } : new String[] { author, capsString }; runHook(reposRootDir, SVN_REPOS_HOOK_START_COMMIT, args, null); }
private static void runChangeRevPropHook(File reposRootDir, String hookName, String propName, byte[] propValue, String author, long revision, String action, boolean isPre) throws SVNException { File hookFile = getHookFile(reposRootDir, hookName); if (hookFile == null) { if (isPre) { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.REPOS_DISABLED_FEATURE, "Repository has not been enabled to accept revision propchanges;\nask the administrator to create a pre-revprop-change hook"); SVNErrorManager.error(err, SVNLogType.FSFS); } return; } author = author == null ? "" : author; runHook(reposRootDir, hookName, new String[] {String.valueOf(revision), author, propName, action}, propValue); }
public void setRevisionPropertyValue(long revision, String propertyName, SVNPropertyValue propertyValue, boolean bypassPreRevpropHook, boolean bypassPostRevpropHook) throws SVNException { assertValidRevision(revision); try { openRepository(); FSRepositoryUtil.validateProperty(propertyName, propertyValue); String userName = getUserName(); SVNProperties revProps = myFSFS.getRevisionProperties(revision); SVNPropertyValue oldValue = revProps.getSVNPropertyValue(propertyName); String action = null; if (propertyValue == null) { action = FSHooks.REVPROP_DELETE; } else if (oldValue == null) { action = FSHooks.REVPROP_ADD; } else { action = FSHooks.REVPROP_MODIFY; } byte[] bytes = SVNPropertyValue.getPropertyAsBytes(propertyValue); if (FSHooks.isHooksEnabled() && !bypassPreRevpropHook) { FSHooks.runPreRevPropChangeHook(myReposRootDir, propertyName, bytes, userName, revision, action); } myFSFS.setRevisionProperty(revision, propertyName, propertyValue); if (FSHooks.isHooksEnabled() && !bypassPostRevpropHook) { FSHooks.runPostRevPropChangeHook(myReposRootDir, propertyName, bytes, userName, revision, action); } } finally { closeRepository(); } }
public void unlockPath(String path, String token, String username, boolean breakLock) throws SVNException { String[] paths = {path}; if (!breakLock && username == null) { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.FS_NO_USER, "Cannot unlock path ''{0}'', no authenticated username available", path); SVNErrorManager.error(err); } FSHooks.runPreUnlockHook(myRepositoryRoot, path, username); FSWriteLock writeLock = FSWriteLock.getWriteLock(this); synchronized (writeLock) { try { writeLock.lock(); unlock(path, token, username, breakLock); } finally { writeLock.unlock(); FSWriteLock.realease(writeLock); } } try { FSHooks.runPostUnlockHook(myRepositoryRoot, paths, username); } catch (SVNException svne) { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.REPOS_POST_UNLOCK_HOOK_FAILED, "Unlock succeeded, but post-unlock hook failed"); err.setChildErrorMessage(svne.getErrorMessage()); SVNErrorManager.error(err, svne); } }
public SVNLock lockPath(String path, String token, String username, String comment, Date expirationDate, long currentRevision, boolean stealLock) throws SVNException { String[] paths = {path}; if (username == null) { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.FS_NO_USER, "Cannot lock path ''{0}'', no authenticated username available.", path); SVNErrorManager.error(err); } FSHooks.runPreLockHook(myRepositoryRoot, path, username); SVNLock lock = null; FSWriteLock writeLock = FSWriteLock.getWriteLock(this); synchronized (writeLock) { try { writeLock.lock(); lock = lock(path, token, username, comment, expirationDate, currentRevision, stealLock); } finally { writeLock.unlock(); FSWriteLock.realease(writeLock); } } try { FSHooks.runPostLockHook(myRepositoryRoot, paths, username); } catch (SVNException svne) { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.REPOS_POST_LOCK_HOOK_FAILED, "Lock succeeded, but post-lock hook failed"); err.setChildErrorMessage(svne.getErrorMessage()); SVNErrorManager.error(err, svne); } return lock; }
public long commitTxn(boolean runPreCommitHook, boolean runPostCommitHook, SVNErrorMessage[] postCommitHookError, StringBuffer conflictPath) throws SVNException { if (runPreCommitHook) { FSHooks.runPreCommitHook(myFSFS.getRepositoryRoot(), myTxn.getTxnId()); FSHooks.runPostCommitHook(myFSFS.getRepositoryRoot(), newRevision); } catch (SVNException svne) { SVNErrorMessage errorMessage = SVNErrorMessage.create(SVNErrorCode.REPOS_POST_COMMIT_HOOK_FAILED,
private static File getHookFile(File reposRootDir, String hookName) throws SVNException { if (!isHooksEnabled()) { return null; if (SVNFileUtil.isWindows) { for (int i = 0; i < winExtensions.length; i++) { hookFile = new File(getHooksDir(reposRootDir), hookName + winExtensions[i]); SVNFileType type = SVNFileType.getType(hookFile); if (type == SVNFileType.FILE) { hookFile = new File(getHooksDir(reposRootDir), hookName); SVNFileType type = SVNFileType.getType(hookFile); if (type == SVNFileType.FILE) {
private static void runHook(File reposRootDir, String hookName, String[] args, byte[] input) throws SVNException { File hookFile = getHookFile(reposRootDir, hookName); if (hookFile == null) { return; SVNErrorManager.error(err, ioe, SVNLogType.FSFS); feedHook(hookFile, hookName, hookProc, input);
public void setRevisionPropertyValue(long revision, String propertyName, String propertyValue) throws SVNException { assertValidRevision(revision); try { openRepository(); if (!SVNProperty.isRegularProperty(propertyName)) { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.REPOS_BAD_ARGS, "Storage of non-regular property ''{0}'' is disallowed through the repository interface, and could indicate a bug in your client", propertyName); SVNErrorManager.error(err); } String userName = getUserName(); Map revProps = myFSFS.getRevisionProperties(revision); String oldValue = (String)revProps.get(propertyName); String action = null; if (propertyValue == null) { action = FSHooks.REVPROP_DELETE; } else if (oldValue == null) { action = FSHooks.REVPROP_ADD; } else { action = FSHooks.REVPROP_MODIFY; } FSHooks.runPreRevPropChangeHook(myReposRootDir, propertyName, propertyValue, userName, revision, action); myFSFS.setRevisionProperty(revision, propertyName, propertyValue); FSHooks.runPostRevPropChangeHook(myReposRootDir, propertyName, propertyValue, userName, revision, action); } finally { closeRepository(); } }
private long finalizeCommit() throws SVNException { FSHooks.runPreCommitHook(myFSFS.getRepositoryRoot(), myTxn.getTxnId()); return myCommitter.commitTxn(); }
public static File getHookFile(File reposRootDir, String hookName) throws SVNException { File hookFile = null; if (SVNFileUtil.isWindows) { for (int i = 0; i < winExtensions.length; i++) { hookFile = new File(getHooksDir(reposRootDir), hookName + winExtensions[i]); SVNFileType type = SVNFileType.getType(hookFile); if (type == SVNFileType.FILE) { return hookFile; } } } else { hookFile = new File(getHooksDir(reposRootDir), hookName); SVNFileType type = SVNFileType.getType(hookFile); if (type == SVNFileType.FILE) { return hookFile; } else if (type == SVNFileType.SYMLINK) { // should first resolve the symlink and then decide if it's // broken and // throw an exception File realFile = SVNFileUtil.resolveSymlinkToFile(hookFile); if (realFile == null) { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.REPOS_HOOK_FAILURE, "Failed to run ''{0}'' hook; broken symlink", hookFile); SVNErrorManager.error(err); } return hookFile; } } return null; }
public SVNCommitInfo closeEdit() throws SVNException { if (myTxn == null) { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.REPOS_BAD_ARGS, "No valid transaction supplied to closeEdit()"); SVNErrorManager.error(err); } long committedRev = -1; SVNErrorMessage errorMessage = null; committedRev = finalizeCommit(); try { FSHooks.runPostCommitHook(myFSFS.getRepositoryRoot(), committedRev); } catch (SVNException svne) { errorMessage = SVNErrorMessage.create(SVNErrorCode.REPOS_POST_COMMIT_HOOK_FAILED, svne.getErrorMessage().getFullMessage(), SVNErrorMessage.TYPE_WARNING); } Map revProps = myFSFS.getRevisionProperties(committedRev); String dateProp = (String) revProps.get(SVNRevisionProperty.DATE); String authorProp = (String) revProps.get(SVNRevisionProperty.AUTHOR); Date datestamp = dateProp != null ? SVNTimeUtil.parseDateString(dateProp) : null; SVNCommitInfo info = new SVNCommitInfo(committedRev, authorProp, datestamp, errorMessage); releaseLocks(); myRepository.closeRepository(); return info; }
private static void runChangeRevPropHook(File reposRootDir, String hookName, String propName, byte[] propValue, String author, long revision, String action, boolean isPre) throws SVNException { File hookFile = getHookFile(reposRootDir, hookName); if (hookFile == null) { if (isPre) { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.REPOS_DISABLED_FEATURE, "Repository has not been enabled to accept revision propchanges;\nask the administrator to create a pre-revprop-change hook"); SVNErrorManager.error(err, SVNLogType.FSFS); } return; } author = author == null ? "" : author; runHook(reposRootDir, hookName, new String[] {String.valueOf(revision), author, propName, action}, propValue); }
public void setRevisionPropertyValue(long revision, String propertyName, SVNPropertyValue propertyValue, boolean bypassPreRevpropHook, boolean bypassPostRevpropHook) throws SVNException { assertValidRevision(revision); try { openRepository(); FSRepositoryUtil.validateProperty(propertyName, propertyValue); String userName = getUserName(); SVNProperties revProps = myFSFS.getRevisionProperties(revision); SVNPropertyValue oldValue = revProps.getSVNPropertyValue(propertyName); String action = null; if (propertyValue == null) { action = FSHooks.REVPROP_DELETE; } else if (oldValue == null) { action = FSHooks.REVPROP_ADD; } else { action = FSHooks.REVPROP_MODIFY; } byte[] bytes = SVNPropertyValue.getPropertyAsBytes(propertyValue); if (FSHooks.isHooksEnabled() && !bypassPreRevpropHook) { FSHooks.runPreRevPropChangeHook(myReposRootDir, propertyName, bytes, userName, revision, action); } myFSFS.setRevisionProperty(revision, propertyName, propertyValue); if (FSHooks.isHooksEnabled() && !bypassPostRevpropHook) { FSHooks.runPostRevPropChangeHook(myReposRootDir, propertyName, bytes, userName, revision, action); } } finally { closeRepository(); } }
FSHooks.runPreUnlockHook(myRepositoryRoot, path, username); FSHooks.runPostUnlockHook(myRepositoryRoot, paths, username); } catch (SVNException svne) { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.REPOS_POST_UNLOCK_HOOK_FAILED, "Unlock succeeded, but post-unlock hook failed");
FSHooks.runPreLockHook(myRepositoryRoot, path, username); SVNLock lock = null; FSHooks.runPostLockHook(myRepositoryRoot, paths, username); } catch (SVNException svne) { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.REPOS_POST_LOCK_HOOK_FAILED, "Lock succeeded, but post-lock hook failed");
public long commitTxn(boolean runPreCommitHook, boolean runPostCommitHook, SVNErrorMessage[] postCommitHookError, StringBuffer conflictPath) throws SVNException { if (myFSFS.isHooksEnabled() && runPreCommitHook) { FSHooks.runPreCommitHook(myFSFS.getRepositoryRoot(), myTxn.getTxnId()); FSHooks.runPostCommitHook(myFSFS.getRepositoryRoot(), newRevision); } catch (SVNException svne) { SVNErrorMessage errorMessage = SVNErrorMessage.create(SVNErrorCode.REPOS_POST_COMMIT_HOOK_FAILED,