From ce07c4f4ca47eebb53815aaa361a24ea46dc3757 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 07 May 2014 10:27:14 -0400
Subject: [PATCH] Ensure the repository model ref list is refreshed on ref creation or deletion
---
src/main/java/com/gitblit/git/GitblitReceivePack.java | 8 ++++++++
src/main/java/com/gitblit/manager/IRepositoryManager.java | 8 ++++++++
src/main/java/com/gitblit/manager/GitblitManager.java | 5 +++++
releases.moxie | 1 +
src/main/java/com/gitblit/manager/RepositoryManager.java | 12 ++++++++++++
5 files changed, 34 insertions(+), 0 deletions(-)
diff --git a/releases.moxie b/releases.moxie
index 7fbfbcc..fdf0b44 100644
--- a/releases.moxie
+++ b/releases.moxie
@@ -16,6 +16,7 @@
- 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 61f2d67..b4449f0 100644
--- a/src/main/java/com/gitblit/git/GitblitReceivePack.java
+++ b/src/main/java/com/gitblit/git/GitblitReceivePack.java
@@ -331,6 +331,8 @@
return;
}
+ boolean isRefCreationOrDeletion = false;
+
// log ref changes
for (ReceiveCommand cmd : commands) {
@@ -339,9 +341,11 @@
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 @@
}
}
+ 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 5b16ef6..2782e72 100644
--- a/src/main/java/com/gitblit/manager/GitblitManager.java
+++ b/src/main/java/com/gitblit/manager/GitblitManager.java
@@ -929,6 +929,11 @@
}
@Override
+ public void resetRepositoryCache(String repositoryName) {
+ repositoryManager.resetRepositoryCache(repositoryName);
+ }
+
+ @Override
public List<String> 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 fd5fc14..69177f1 100644
--- a/src/main/java/com/gitblit/manager/IRepositoryManager.java
+++ b/src/main/java/com/gitblit/manager/IRepositoryManager.java
@@ -159,6 +159,14 @@
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 a76787b..7351eb9 100644
--- a/src/main/java/com/gitblit/manager/RepositoryManager.java
+++ b/src/main/java/com/gitblit/manager/RepositoryManager.java
@@ -455,6 +455,18 @@
}
/**
+ * 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.
*
*/
--
Gitblit v1.9.1