From ce07c4f4ca47eebb53815aaa361a24ea46dc3757 Mon Sep 17 00:00:00 2001 From: James Moger Date: Wed, 7 May 2014 10:27:14 -0400 Subject: Ensure the repository model ref list is refreshed on ref creation or deletion --- releases.moxie | 1 + src/main/java/com/gitblit/git/GitblitReceivePack.java | 8 ++++++++ src/main/java/com/gitblit/manager/GitblitManager.java | 5 +++++ src/main/java/com/gitblit/manager/IRepositoryManager.java | 8 ++++++++ src/main/java/com/gitblit/manager/RepositoryManager.java | 12 ++++++++++++ 5 files changed, 34 insertions(+) diff --git a/releases.moxie b/releases.moxie index 7fbfbcc5..fdf0b440 100644 --- a/releases.moxie +++ b/releases.moxie @@ -16,6 +16,7 @@ r23: { - Fix forcing default locale to en or LANG_CC for web ui (ticket-51) - Fix inconsistency with repository ownership permission checking (ticket-52) - Prevent submission from New|Edit ticket page with empty titles (ticket-53) + - Ensure the repository model ref list is refreshed on ref creation or deletion (ticket-54) - Fix case-sensitivity error in determining fork network (issue-420, ticket-62) - Fix transport determination for SSH urls served on port 22 (issue-421, ticket-63) changes: diff --git a/src/main/java/com/gitblit/git/GitblitReceivePack.java b/src/main/java/com/gitblit/git/GitblitReceivePack.java index 61f2d67d..b4449f06 100644 --- a/src/main/java/com/gitblit/git/GitblitReceivePack.java +++ b/src/main/java/com/gitblit/git/GitblitReceivePack.java @@ -331,6 +331,8 @@ public class GitblitReceivePack extends ReceivePack implements PreReceiveHook, P return; } + boolean isRefCreationOrDeletion = false; + // log ref changes for (ReceiveCommand cmd : commands) { @@ -339,9 +341,11 @@ public class GitblitReceivePack extends ReceivePack implements PreReceiveHook, P switch (cmd.getType()) { case DELETE: LOGGER.info(MessageFormat.format("{0} DELETED {1} in {2} ({3})", user.username, cmd.getRefName(), repository.name, cmd.getOldId().name())); + isRefCreationOrDeletion = true; break; case CREATE: LOGGER.info(MessageFormat.format("{0} CREATED {1} in {2}", user.username, cmd.getRefName(), repository.name)); + isRefCreationOrDeletion = true; break; case UPDATE: LOGGER.info(MessageFormat.format("{0} UPDATED {1} in {2} (from {3} to {4})", user.username, cmd.getRefName(), repository.name, cmd.getOldId().name(), cmd.getNewId().name())); @@ -355,6 +359,10 @@ public class GitblitReceivePack extends ReceivePack implements PreReceiveHook, P } } + if (isRefCreationOrDeletion) { + gitblit.resetRepositoryCache(repository.name); + } + if (repository.useIncrementalPushTags) { // tag each pushed branch tip String emailAddress = user.emailAddress == null ? rp.getRefLogIdent().getEmailAddress() : user.emailAddress; diff --git a/src/main/java/com/gitblit/manager/GitblitManager.java b/src/main/java/com/gitblit/manager/GitblitManager.java index 5b16ef66..2782e724 100644 --- a/src/main/java/com/gitblit/manager/GitblitManager.java +++ b/src/main/java/com/gitblit/manager/GitblitManager.java @@ -928,6 +928,11 @@ public class GitblitManager implements IGitblit { repositoryManager.resetRepositoryListCache(); } + @Override + public void resetRepositoryCache(String repositoryName) { + repositoryManager.resetRepositoryCache(repositoryName); + } + @Override public List getRepositoryList() { return repositoryManager.getRepositoryList(); diff --git a/src/main/java/com/gitblit/manager/IRepositoryManager.java b/src/main/java/com/gitblit/manager/IRepositoryManager.java index fd5fc14b..69177f1e 100644 --- a/src/main/java/com/gitblit/manager/IRepositoryManager.java +++ b/src/main/java/com/gitblit/manager/IRepositoryManager.java @@ -158,6 +158,14 @@ public interface IRepositoryManager extends IManager { */ void resetRepositoryListCache(); + /** + * Reset all caches for this repository. + * + * @param repositoryName + * @since 1.5.1 + */ + void resetRepositoryCache(String repositoryName); + /** * Returns the list of all repositories available to Gitblit. This method * does not consider user access permissions. diff --git a/src/main/java/com/gitblit/manager/RepositoryManager.java b/src/main/java/com/gitblit/manager/RepositoryManager.java index a76787bb..7351eb97 100644 --- a/src/main/java/com/gitblit/manager/RepositoryManager.java +++ b/src/main/java/com/gitblit/manager/RepositoryManager.java @@ -454,6 +454,18 @@ public class RepositoryManager implements IRepositoryManager { CommitCache.instance().clear(repositoryName); } + /** + * Reset all caches for this repository. + * + * @param repositoryName + * @since 1.5.1 + */ + @Override + public void resetRepositoryCache(String repositoryName) { + removeFromCachedRepositoryList(repositoryName); + clearRepositoryMetadataCache(repositoryName); + } + /** * Resets the repository list cache. * -- cgit v1.2.3