@@ -35,6 +35,24 @@ public abstract class RepositoryLifeCycleListener implements ExtensionPoint { | |||
*/ | |||
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. | |||
* |
@@ -54,6 +54,7 @@ import com.gitblit.Constants.FederationToken; | |||
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 @@ public class GitblitManager implements IGitblit { | |||
// 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; | |||
} | |||
@@ -1375,6 +1375,7 @@ public class RepositoryManager implements IRepositoryManager { | |||
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 @@ public class RepositoryManager implements IRepositoryManager { | |||
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 @@ public class RepositoryManager implements IRepositoryManager { | |||
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); | |||
} | |||
} | |||
} | |||
} | |||
@@ -337,6 +337,16 @@ public class MyRepoLifeCycleListener extends RepositoryLifeCycleListener { | |||
log.info("Gitblit created {}", repo); | |||
} | |||
@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); |