From 8a28d0f3df3d4800f82250eec597150ee5dfc933 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 22 May 2015 12:13:39 -0400
Subject: [PATCH] Add onFork and onRename methods to RepositoryLifeCycleListener

---
 src/site/plugins_extensions.mkd                                       |   10 ++++++++++
 src/main/java/com/gitblit/manager/GitblitManager.java                 |   11 +++++++++++
 src/main/java/com/gitblit/manager/RepositoryManager.java              |   12 +++++++++++-
 src/main/java/com/gitblit/extensions/RepositoryLifeCycleListener.java |   18 ++++++++++++++++++
 4 files changed, 50 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/gitblit/extensions/RepositoryLifeCycleListener.java b/src/main/java/com/gitblit/extensions/RepositoryLifeCycleListener.java
index 5ef03af..e23fca7 100644
--- a/src/main/java/com/gitblit/extensions/RepositoryLifeCycleListener.java
+++ b/src/main/java/com/gitblit/extensions/RepositoryLifeCycleListener.java
@@ -36,6 +36,24 @@
 	public abstract void onCreation(RepositoryModel repository);
 
 	/**
+	 * Called after a repository has been forked.
+	 *
+	 * @param origin
+	 * @param fork
+	 * @since 1.7.0
+	 */
+	public abstract void onFork(RepositoryModel origin, RepositoryModel fork);
+
+	/**
+	 * Called after a repository has been renamed.
+	 *
+	 * @param oldName
+	 * @param repository
+	 * @since 1.7.0
+	 */
+	public abstract void onRename(String oldName, RepositoryModel repository);
+
+	/**
 	 * Called after a repository has been deleted.
 	 *
 	 * @param repository
diff --git a/src/main/java/com/gitblit/manager/GitblitManager.java b/src/main/java/com/gitblit/manager/GitblitManager.java
index 9692e65..deaa534 100644
--- a/src/main/java/com/gitblit/manager/GitblitManager.java
+++ b/src/main/java/com/gitblit/manager/GitblitManager.java
@@ -54,6 +54,7 @@
 import com.gitblit.Constants.Role;
 import com.gitblit.GitBlitException;
 import com.gitblit.IStoredSettings;
+import com.gitblit.extensions.RepositoryLifeCycleListener;
 import com.gitblit.models.FederationModel;
 import com.gitblit.models.FederationProposal;
 import com.gitblit.models.FederationSet;
@@ -276,6 +277,16 @@
 
 		// add this clone to the cached model
 		repositoryManager.addToCachedRepositoryList(cloneModel);
+
+		if (pluginManager != null) {
+			for (RepositoryLifeCycleListener listener : pluginManager.getExtensions(RepositoryLifeCycleListener.class)) {
+				try {
+					listener.onFork(repository, cloneModel);
+				} catch (Throwable t) {
+					logger.error(String.format("failed to call plugin onFork %s", repository.name), t);
+				}
+			}
+		}
 		return cloneModel;
 	}
 
diff --git a/src/main/java/com/gitblit/manager/RepositoryManager.java b/src/main/java/com/gitblit/manager/RepositoryManager.java
index c2c6088..23fd022 100644
--- a/src/main/java/com/gitblit/manager/RepositoryManager.java
+++ b/src/main/java/com/gitblit/manager/RepositoryManager.java
@@ -1375,6 +1375,7 @@
 				repository.name = repository.name.substring(projectPath.length() + 1);
 			}
 		}
+		boolean isRename = false;
 		if (isCreate) {
 			// ensure created repository name ends with .git
 			if (!repository.name.toLowerCase().endsWith(org.eclipse.jgit.lib.Constants.DOT_GIT_EXT)) {
@@ -1391,7 +1392,8 @@
 			r = JGitUtils.createRepository(repositoriesFolder, repository.name, shared);
 		} else {
 			// rename repository
-			if (!repositoryName.equalsIgnoreCase(repository.name)) {
+			isRename = !repositoryName.equalsIgnoreCase(repository.name);
+			if (isRename) {
 				if (!repository.name.toLowerCase().endsWith(
 						org.eclipse.jgit.lib.Constants.DOT_GIT_EXT)) {
 					repository.name += org.eclipse.jgit.lib.Constants.DOT_GIT_EXT;
@@ -1511,6 +1513,14 @@
 					logger.error(String.format("failed to call plugin onCreation %s", repositoryName), t);
 				}
 			}
+		} else if (isRename && pluginManager != null) {
+			for (RepositoryLifeCycleListener listener : pluginManager.getExtensions(RepositoryLifeCycleListener.class)) {
+				try {
+					listener.onRename(repositoryName, repository);
+				} catch (Throwable t) {
+					logger.error(String.format("failed to call plugin onRename %s", repositoryName), t);
+				}
+			}
 		}
 	}
 
diff --git a/src/site/plugins_extensions.mkd b/src/site/plugins_extensions.mkd
index 9e0d170..82dd30b 100644
--- a/src/site/plugins_extensions.mkd
+++ b/src/site/plugins_extensions.mkd
@@ -338,6 +338,16 @@
     }
 
     @Override
+    public void onFork(RepositoryModel origin, RepositoryModel fork) {
+    	log.info("{} forked to {}", origin, fork);
+    }
+
+    @Override
+    public void onRename(String oldName, RepositoryModel repo) {
+    	log.info("{} renamed to {}", oldName, repo);
+    }
+
+    @Override
     public void onDeletion(RepositoryModel repo) {
     	log.info("Gitblit deleted {}", repo);
     }

--
Gitblit v1.9.1