mirror of
				https://github.com/scm-manager/scm-manager.git
				synced 2025-10-31 10:35:56 +01:00 
			
		
		
		
	fix missing change paths in svn pre receive hook
This commit is contained in:
		| @@ -0,0 +1,88 @@ | ||||
| /** | ||||
|  * Copyright (c) 2010, Sebastian Sdorra | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions are met: | ||||
|  * | ||||
|  * 1. Redistributions of source code must retain the above copyright notice, | ||||
|  *    this list of conditions and the following disclaimer. | ||||
|  * 2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|  *    this list of conditions and the following disclaimer in the documentation | ||||
|  *    and/or other materials provided with the distribution. | ||||
|  * 3. Neither the name of SCM-Manager; nor the names of its | ||||
|  *    contributors may be used to endorse or promote products derived from this | ||||
|  *    software without specific prior written permission. | ||||
|  * | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||||
|  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||
|  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
|  * DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY | ||||
|  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
|  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
|  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
|  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
|  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  * | ||||
|  * http://bitbucket.org/sdorra/scm-manager | ||||
|  * | ||||
|  */ | ||||
|  | ||||
|  | ||||
|  | ||||
| package sonia.scm.repository; | ||||
|  | ||||
| //~--- non-JDK imports -------------------------------------------------------- | ||||
|  | ||||
| import org.tmatesoft.svn.core.SVNException; | ||||
| import org.tmatesoft.svn.core.wc.admin.ISVNChangeEntryHandler; | ||||
| import org.tmatesoft.svn.core.wc.admin.SVNChangeEntry; | ||||
|  | ||||
| /** | ||||
|  * | ||||
|  * @author Sebastian Sdorra | ||||
|  */ | ||||
| public class SvnModificationHandler implements ISVNChangeEntryHandler | ||||
| { | ||||
|  | ||||
|   /** | ||||
|    * Constructs ... | ||||
|    * | ||||
|    * | ||||
|    * @param changeset | ||||
|    */ | ||||
|   public SvnModificationHandler(Changeset changeset) | ||||
|   { | ||||
|     this.changeset = changeset; | ||||
|   } | ||||
|  | ||||
|   //~--- methods -------------------------------------------------------------- | ||||
|  | ||||
|   /** | ||||
|    * Method description | ||||
|    * | ||||
|    * | ||||
|    * @param entry | ||||
|    * | ||||
|    * @throws SVNException | ||||
|    */ | ||||
|   @Override | ||||
|   public void handleEntry(SVNChangeEntry entry) throws SVNException | ||||
|   { | ||||
|     Modifications modification = changeset.getModifications(); | ||||
|  | ||||
|     if (modification == null) | ||||
|     { | ||||
|       modification = new Modifications(); | ||||
|       changeset.setModifications(modification); | ||||
|     } | ||||
|  | ||||
|     SvnUtil.appendModification(modification, entry); | ||||
|   } | ||||
|  | ||||
|   //~--- fields --------------------------------------------------------------- | ||||
|  | ||||
|   /** Field description */ | ||||
|   private Changeset changeset; | ||||
| } | ||||
| @@ -131,7 +131,15 @@ public class SvnPreReceiveHookEvent extends AbstractRepositoryHookEvent | ||||
|  | ||||
|       if (entry != null) | ||||
|       { | ||||
|         csets.add(SvnUtil.createChangeset(entry)); | ||||
|         Changeset c = SvnUtil.createChangeset(entry); | ||||
|  | ||||
|         clientManager.doGetChanged(repositoryDirectory, transaction, | ||||
|                                    new SvnModificationHandler(c), true); | ||||
|         csets.add(c); | ||||
|       } | ||||
|       else if (logger.isWarnEnabled()) | ||||
|       { | ||||
|         logger.warn("could not find log entry for pre receive hook"); | ||||
|       } | ||||
|     } | ||||
|     catch (Exception ex) | ||||
|   | ||||
| @@ -37,6 +37,7 @@ package sonia.scm.repository; | ||||
|  | ||||
| import org.tmatesoft.svn.core.SVNLogEntry; | ||||
| import org.tmatesoft.svn.core.SVNLogEntryPath; | ||||
| import org.tmatesoft.svn.core.wc.admin.SVNChangeEntry; | ||||
|  | ||||
| import sonia.scm.util.Util; | ||||
|  | ||||
| @@ -51,6 +52,62 @@ import java.util.Map; | ||||
| public class SvnUtil | ||||
| { | ||||
|  | ||||
|   /** | ||||
|    * TODO: type replaced | ||||
|    * | ||||
|    * | ||||
|    * @param modifications | ||||
|    * @param entry | ||||
|    */ | ||||
|   public static void appendModification(Modifications modifications, | ||||
|           SVNLogEntryPath entry) | ||||
|   { | ||||
|     appendModification(modifications, entry.getType(), entry.getPath()); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Method description | ||||
|    * | ||||
|    * | ||||
|    * @param modifications | ||||
|    * @param entry | ||||
|    */ | ||||
|   public static void appendModification(Modifications modifications, | ||||
|           SVNChangeEntry entry) | ||||
|   { | ||||
|     appendModification(modifications, entry.getType(), entry.getPath()); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Method description | ||||
|    * | ||||
|    * | ||||
|    * @param modifications | ||||
|    * @param type | ||||
|    * @param path | ||||
|    */ | ||||
|   public static void appendModification(Modifications modifications, char type, | ||||
|           String path) | ||||
|   { | ||||
|     switch (type) | ||||
|     { | ||||
|       case SVNLogEntryPath.TYPE_ADDED : | ||||
|         modifications.getAdded().add(path); | ||||
|  | ||||
|         break; | ||||
|  | ||||
|       case SVNLogEntryPath.TYPE_DELETED : | ||||
|         modifications.getRemoved().add(path); | ||||
|  | ||||
|         break; | ||||
|  | ||||
|       case SVNLogEntryPath.TYPE_MODIFIED : | ||||
|         modifications.getModified().add(path); | ||||
|  | ||||
|         break; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Method description | ||||
|    * | ||||
| @@ -80,33 +137,4 @@ public class SvnUtil | ||||
|  | ||||
|     return changeset; | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * TODO: type replaced | ||||
|    * | ||||
|    * | ||||
|    * @param modifications | ||||
|    * @param entry | ||||
|    */ | ||||
|   private static void appendModification(Modifications modifications, | ||||
|           SVNLogEntryPath entry) | ||||
|   { | ||||
|     switch (entry.getType()) | ||||
|     { | ||||
|       case SVNLogEntryPath.TYPE_ADDED : | ||||
|         modifications.getAdded().add(entry.getPath()); | ||||
|  | ||||
|         break; | ||||
|  | ||||
|       case SVNLogEntryPath.TYPE_DELETED : | ||||
|         modifications.getRemoved().add(entry.getPath()); | ||||
|  | ||||
|         break; | ||||
|  | ||||
|       case SVNLogEntryPath.TYPE_MODIFIED : | ||||
|         modifications.getModified().add(entry.getPath()); | ||||
|  | ||||
|         break; | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user