Index: src/main/java/hudson/scm/SubversionSCM.java =================================================================== RCS file: /cvs/hudson/hudson/main/core/src/main/java/hudson/scm/SubversionSCM.java,v retrieving revision 1.127 diff -u -r1.127 SubversionSCM.java --- src/main/java/hudson/scm/SubversionSCM.java 14 Mar 2008 06:59:34 -0000 1.127 +++ src/main/java/hudson/scm/SubversionSCM.java 23 Mar 2008 06:53:20 -0000 @@ -115,6 +115,7 @@ private ModuleLocation[] locations = new ModuleLocation[0]; private boolean useUpdate; + private boolean deleteIfLocked; private final SubversionRepositoryBrowser browser; // No longer in use but left for serialization compatibility. @@ -122,7 +123,7 @@ private String modules; public SubversionSCM(String[] remoteLocations, String[] localLocations, - boolean useUpdate, SubversionRepositoryBrowser browser) { + boolean useUpdate, boolean deleteIfLocked, SubversionRepositoryBrowser browser) { List modules = new ArrayList(); if (remoteLocations != null && localLocations != null) { @@ -181,6 +182,10 @@ return useUpdate; } + public boolean isDeleteIfLocked() { + return deleteIfLocked; + } + @Override public SubversionRepositoryBrowser getBrowser() { return browser; @@ -574,6 +579,17 @@ manager.dispose(); } } + + private static boolean isWorkingCopyLocked(File workspace) throws SVNException { + final SVNClientManager manager = SVNClientManager.newInstance(SVNWCUtil.createDefaultOptions(true)); + try { + SVNStatus status = manager.getStatusClient().doStatus(workspace, false); + return status.isLocked(); + } finally { + manager.dispose(); + } + + } /** * Gets the SVN metadata for the remote repository. @@ -691,6 +707,12 @@ listener.getLogger().println("Checking out a fresh workspace because the workspace is not "+url); return false; } + + if (isWorkingCopyLocked(ws)) { + listener.getLogger().println("Checking out a fresh workspace because the workspace is locked"); + return false; + } + } catch (SVNException e) { listener.getLogger().println("Checking out a fresh workspace because Hudson failed to detect the current workspace "+module); e.printStackTrace(listener.error(e.getMessage())); @@ -1010,6 +1032,7 @@ req.getParameterValues("svn.location_remote"), req.getParameterValues("svn.location_local"), req.getParameter("svn_use_update") != null, + req.getParameter("svn_delete_if_locked") != null, RepositoryBrowsers.createInstance(SubversionRepositoryBrowser.class, req, "svn.browser")); }