summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authormrbytes <eguervos@msn.com>2013-07-19 09:25:05 +0200
committermrbytes <eguervos@msn.com>2013-07-19 09:25:05 +0200
commit1c5a45ebe6285b0f6a9b8f50d5467baa11a1ff63 (patch)
tree8d0afd7adf3b0a1974a107d384e25bcccd1f88f6 /src
parent4e1f7cde152e35b8b8fd882fb6d54e61754fb13f (diff)
parent58708c13b6cfc1e8289d1dca698d6d228509c695 (diff)
downloadgitblit-1c5a45ebe6285b0f6a9b8f50d5467baa11a1ff63.tar.gz
gitblit-1c5a45ebe6285b0f6a9b8f50d5467baa11a1ff63.zip
Merge branch 'master' of https://github.com/gitblit/gitblit
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/gitblit/GitBlit.java11
-rw-r--r--src/main/java/com/gitblit/git/ReceiveHook.java17
-rw-r--r--src/main/java/com/gitblit/utils/CommitCache.java17
-rw-r--r--src/main/java/com/gitblit/wicket/GitBlitWebApp_nl.properties61
-rw-r--r--src/main/java/com/gitblit/wicket/GitBlitWebApp_zh_CN.properties64
-rw-r--r--src/main/java/com/gitblit/wicket/pages/BasePage.html1
-rw-r--r--src/test/java/com/gitblit/tests/GitBlitSuite.java2
-rw-r--r--src/test/java/com/gitblit/tests/Issue0271Test.java76
-rw-r--r--src/test/resources/issue0271.conf20
9 files changed, 259 insertions, 10 deletions
diff --git a/src/main/java/com/gitblit/GitBlit.java b/src/main/java/com/gitblit/GitBlit.java
index 301591f5..35ef7708 100644
--- a/src/main/java/com/gitblit/GitBlit.java
+++ b/src/main/java/com/gitblit/GitBlit.java
@@ -84,6 +84,7 @@ import org.slf4j.LoggerFactory;
import com.gitblit.Constants.AccessPermission;
import com.gitblit.Constants.AccessRestrictionType;
+import com.gitblit.Constants.AccountType;
import com.gitblit.Constants.AuthenticationType;
import com.gitblit.Constants.AuthorizationControl;
import com.gitblit.Constants.FederationRequest;
@@ -695,12 +696,12 @@ public class GitBlit implements ServletContextListener {
public boolean supportsCredentialChanges(UserModel user) {
if (user == null) {
return false;
- } else if (!Constants.EXTERNAL_ACCOUNT.equals(user.password)) {
- // credentials likely maintained by Gitblit
- return userService.supportsCredentialChanges();
+ } else if (AccountType.LOCAL.equals(user.accountType)) {
+ // local account, we can change credentials
+ return true;
} else {
- // credentials are externally maintained
- return false;
+ // external account, ask user service
+ return userService.supportsCredentialChanges();
}
}
diff --git a/src/main/java/com/gitblit/git/ReceiveHook.java b/src/main/java/com/gitblit/git/ReceiveHook.java
index e0b77987..d75a2385 100644
--- a/src/main/java/com/gitblit/git/ReceiveHook.java
+++ b/src/main/java/com/gitblit/git/ReceiveHook.java
@@ -36,6 +36,7 @@ import org.eclipse.jgit.transport.ReceivePack;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.gitblit.Constants;
import com.gitblit.Constants.AccessRestrictionType;
import com.gitblit.GitBlit;
import com.gitblit.Keys;
@@ -44,6 +45,7 @@ import com.gitblit.models.RepositoryModel;
import com.gitblit.models.UserModel;
import com.gitblit.utils.ArrayUtils;
import com.gitblit.utils.ClientLogger;
+import com.gitblit.utils.CommitCache;
import com.gitblit.utils.JGitUtils;
import com.gitblit.utils.RefLogUtils;
import com.gitblit.utils.StringUtils;
@@ -186,6 +188,21 @@ public class ReceiveHook implements PreReceiveHook, PostReceiveHook {
return;
}
}
+
+ // reset branch commit cache on REWIND and DELETE
+ for (ReceiveCommand cmd : commands) {
+ String ref = cmd.getRefName();
+ if (ref.startsWith(Constants.R_HEADS)) {
+ switch (cmd.getType()) {
+ case UPDATE_NONFASTFORWARD:
+ case DELETE:
+ CommitCache.instance().clear(repository.name, ref);
+ break;
+ default:
+ break;
+ }
+ }
+ }
Set<String> scripts = new LinkedHashSet<String>();
scripts.addAll(GitBlit.self().getPreReceiveScriptsInherited(repository));
diff --git a/src/main/java/com/gitblit/utils/CommitCache.java b/src/main/java/com/gitblit/utils/CommitCache.java
index 9db5f0c9..e84506ea 100644
--- a/src/main/java/com/gitblit/utils/CommitCache.java
+++ b/src/main/java/com/gitblit/utils/CommitCache.java
@@ -110,6 +110,23 @@ public class CommitCache {
}
/**
+ * Clears the commit cache for a specific branch of a specific repository.
+ *
+ * @param repositoryName
+ * @param branch
+ */
+ public void clear(String repositoryName, String branch) {
+ String repoKey = repositoryName.toLowerCase();
+ ObjectCache<List<RepositoryCommit>> repoCache = cache.get(repoKey);
+ if (repoCache != null) {
+ List<RepositoryCommit> commits = repoCache.remove(branch.toLowerCase());
+ if (!ArrayUtils.isEmpty(commits)) {
+ logger.info(MessageFormat.format("{0}:{1} commit cache cleared", repositoryName, branch));
+ }
+ }
+ }
+
+ /**
* Get all commits for the specified repository:branch that are in the cache.
*
* @param repositoryName
diff --git a/src/main/java/com/gitblit/wicket/GitBlitWebApp_nl.properties b/src/main/java/com/gitblit/wicket/GitBlitWebApp_nl.properties
index f1281e14..dac85a72 100644
--- a/src/main/java/com/gitblit/wicket/GitBlitWebApp_nl.properties
+++ b/src/main/java/com/gitblit/wicket/GitBlitWebApp_nl.properties
@@ -441,5 +441,64 @@ gb.validity = geldigheid
gb.siteName = site naam
gb.siteNameDescription = korte, verduidelijkende naam van deze server
gb.excludeFromActivity = sluit uit van activiteitspagina
+gb.isSparkleshared = repository is Sparkleshared
+gb.owners = owners
gb.sessionEnded = Sessie is afgesloten
-gb.closeBrowser = Sluit de browser af om de sessie helemaal te beeindigen. \ No newline at end of file
+gb.closeBrowser = Sluit de browser af om de sessie helemaal te beeindigen.
+gb.doesNotExistInTree = {0} bestaat niet in de tree {1}
+gb.enableIncrementalPushTags = enable incrementele push tags
+gb.useIncrementalPushTagsDescription = bij een push, automatisch tag elke branch tip met een incrementeel revisie nummer
+gb.incrementalPushTagMessage = Auto-tagged [{0}] branch door een push
+gb.externalPermissions = {0} toegangsrechten worden exter beheert
+gb.viewAccess = U heeft geen Gitblit lees- of schrijfrechten
+gb.overview = overview
+gb.dashboard = dashboard
+gb.monthlyActivity = maandelijkse activiteit
+gb.myProfile = mijn profiel
+gb.compare = vergelijk
+gb.manual = manual
+gb.from = van
+gb.to = aan
+gb.at = op
+gb.of = van
+gb.in = in
+gb.moreChanges = alle wijzigingen...
+gb.pushedNCommitsTo = push {0} commits naar
+gb.pushedOneCommitTo = push 1 commit naar
+gb.commitsTo = {0} commits naar
+gb.oneCommitTo = 1 commit naar
+gb.byNAuthors = door {0} auteurs
+gb.byOneAuthor = door {0}
+gb.viewComparison = toon vergelijking van deze {0} commits \u00bb
+gb.nMoreCommits = {0} commits \u00bb
+gb.oneMoreCommit = 1 commit \u00bb
+gb.pushedNewTag = push nieuwe tag
+gb.createdNewTag = nieuww tag gemaakt
+gb.deletedTag = tag verwijderd
+gb.pushedNewBranch = push neuwe branch
+gb.createdNewBranch = nieuwe branch gemaakt
+gb.deletedBranch = branch verwijderd
+gb.createdNewPullRequest = pull verzoek gemaakt
+gb.mergedPullRequest = pull verzoek gemerged
+gb.rewind = REWIND
+gb.star = markeer
+gb.unstar = demarkeer
+gb.stargazers = sterrenkijkers
+gb.starredRepositories = repositories met een ster
+gb.failedToUpdateUser = Bijwerken gebruikersaccount niet gelukt!
+gb.myRepositories = mijn repositories
+gb.noActivity = er is geen activiteit geweest in de laatste {0} dagen
+gb.findSomeRepositories = vind repositories
+gb.metricAuthorExclusions = author metric exclusions
+gb.myDashboard = mijn dashboard
+gb.failedToFindAccount = kan gebruikersaccount ''{0}'' niet vinden
+gb.reflog = reflog
+gb.active = actief
+gb.starred = gemarkeerd
+gb.owned = eigendom
+gb.starredAndOwned = gemarkeerd & eigendom
+gb.reviewPatchset = review {0} patchset {1}
+gb.todaysActivityStats = vandaag / {1} commits door {2} auteurs
+gb.todaysActivityNone = vandaag / geen
+gb.noActivityToday = er is vandaag geen activiteit geweest
+gb.anonymousUser= anoniem
diff --git a/src/main/java/com/gitblit/wicket/GitBlitWebApp_zh_CN.properties b/src/main/java/com/gitblit/wicket/GitBlitWebApp_zh_CN.properties
index 96e2067b..3f1ab0d5 100644
--- a/src/main/java/com/gitblit/wicket/GitBlitWebApp_zh_CN.properties
+++ b/src/main/java/com/gitblit/wicket/GitBlitWebApp_zh_CN.properties
@@ -441,6 +441,64 @@ gb.validity = \u5408\u6cd5\u6027
gb.siteName = \u7f51\u7ad9\u540d\u79f0
gb.siteNameDescription = \u60a8\u7684\u670d\u52a1\u5668\u7684\u7b80\u8981\u63cf\u8ff0
gb.excludeFromActivity = \u4ece\u6d3b\u52a8\u9875\u9762\u6392\u9664
-gb.isSparkleshared = repository is Sparkleshared
-gb.sessionEnded = Session has been closed
-gb.closeBrowser = Please close the browser to properly end the session. \ No newline at end of file
+gb.isSparkleshared = \u7248\u672c\u5e93\u5df2\u901a\u8fc7Sparkleshare\u5b8c\u6210\u540c\u6b65
+gb.owners = \u62e5\u6709\u8005
+gb.sessionEnded = \u4f1a\u8bdd\u5df2\u5173\u95ed
+gb.closeBrowser = \u8bf7\u5173\u95ed\u6d4f\u89c8\u5668\u4ee5\u4fbf\u6b63\u5e38\u5173\u95ed\u4f1a\u8bdd\u3002
+gb.doesNotExistInTree = {1} \u76ee\u5f55\u4e2d\u4e0d\u5b58\u5728 {0}
+gb.enableIncrementalPushTags = \u5141\u8bb8\u9012\u589e\u5f0f\u63a8\u9001\u6807\u7b7e
+gb.useIncrementalPushTagsDescription = \u6bcf\u6b21\u63a8\u9001\u65f6\uff0c\u81ea\u52a8\u4e3a\u6bcf\u4e2a\u5206\u652f\u6dfb\u52a0\u9012\u589e\u7684revision\u7f16\u53f7
+gb.incrementalPushTagMessage = \u63a8\u9001\u65f6\u81ea\u52a8\u4e3a\u5206\u652f [{0}] \u6dfb\u52a0\u6807\u7b7e
+gb.externalPermissions = {0} \u7684\u8bbf\u95ee\u6743\u9650\u5c5e\u4e8e\u5916\u90e8\u63a7\u5236
+gb.viewAccess = \u60a8\u6ca1\u6709 Gitblit \u8bfb\u6216\u5199\u7684\u6743\u9650
+gb.overview = \u603b\u89c8
+gb.dashboard = \u516c\u544a\u677f
+gb.monthlyActivity = \u6708\u5ea6\u6d3b\u52a8
+gb.myProfile = \u7528\u6237\u4e2d\u5fc3
+gb.compare = \u5bf9\u6bd4
+gb.manual = \u624b\u518c
+gb.from = from
+gb.to = to
+gb.at = at
+gb.of = of
+gb.in = in
+gb.moreChanges = \u6240\u6709\u53d8\u52a8...
+gb.pushedNCommitsTo = \u5df2\u63a8\u9001 {0} \u6b21\u81f3
+gb.pushedOneCommitTo = \u5df2\u63a8\u9001 1 \u6b21\u81f3
+gb.commitsTo = {0} \u6b21\u63a8\u9001\u81f3
+gb.oneCommitTo = 1 \u6b21\u63a8\u9001\u81f3
+gb.byNAuthors = \u6765\u81ea {0}
+gb.byOneAuthor = \u6765\u81ea {0}
+gb.viewComparison = \u5bf9\u6bd4\u4ee5\u4e0b {0} \u6b21\u63d0\u4ea4\u5185\u5bb9 \xbb
+gb.nMoreCommits = \u5176\u4ed6 {0} \u6b21\u63d0\u4ea4\xbb
+gb.oneMoreCommit = \u5176\u4ed6 1 \u6b21\u63d0\u4ea4 \xbb
+gb.pushedNewTag = \u63a8\u9001\u65b0\u6807\u7b7e
+gb.createdNewTag = \u521b\u5efa\u65b0\u6807\u7b7e
+gb.deletedTag = \u5220\u9664\u6807\u7b7e
+gb.pushedNewBranch = \u63a8\u9001\u65b0\u5206\u652f
+gb.createdNewBranch = \u521b\u5efa\u65b0\u5206\u652f
+gb.deletedBranch = \u5df2\u5220\u9664\u5206\u652f
+gb.createdNewPullRequest = \u521b\u5efa pull request
+gb.mergedPullRequest = \u5408\u5e76 pull request
+gb.rewind = REWIND
+gb.star = \u5173\u6ce8
+gb.unstar = \u53d6\u6d88\u5173\u6ce8
+gb.stargazers = stargazers
+gb.starredRepositories = \u5df2\u5173\u6ce8\u7248\u672c\u5e93
+gb.failedToUpdateUser = \u66f4\u65b0\u7528\u6237\u8d26\u6237\u4fe1\u606f\u5931\u8d25!
+gb.myRepositories = \u6211\u7684\u7248\u672c\u5e93
+gb.noActivity = \u6700\u8fd1 {0} \u5929\u5185\u6ca1\u6709\u4efb\u4f55\u6d3b\u52a8
+gb.findSomeRepositories = \u5bfb\u627e\u7248\u672c\u5e93
+gb.metricAuthorExclusions = author metric exclusions
+gb.myDashboard = \u6211\u7684\u516c\u544a\u677f
+gb.failedToFindAccount = \u5bfb\u627e\u8d26\u6237 ''{0}'' \u5931\u8d25
+gb.reflog = reflog
+gb.active = \u6d3b\u52a8
+gb.starred = \u5df2\u5173\u6ce8
+gb.owned = \u5c5e\u4e8e\u60a8
+gb.starredAndOwned = \u5df2\u5173\u6ce8 & \u5c5e\u4e8e\u60a8
+gb.reviewPatchset = review {0} patchset {1}
+gb.todaysActivityStats = \u4eca\u5929 / \u6765\u81ea {2} \u7684 {1} \u6b21\u63d0\u4ea4
+gb.todaysActivityNone = \u4eca\u5929 / \u65e0
+gb.noActivityToday = \u4eca\u5929\u6ca1\u6709\u4efb\u4f55\u6d3b\u52a8
+gb.anonymousUser = \u533f\u540d
diff --git a/src/main/java/com/gitblit/wicket/pages/BasePage.html b/src/main/java/com/gitblit/wicket/pages/BasePage.html
index 0f96f343..e0840b28 100644
--- a/src/main/java/com/gitblit/wicket/pages/BasePage.html
+++ b/src/main/java/com/gitblit/wicket/pages/BasePage.html
@@ -8,6 +8,7 @@
<!-- Head -->
<wicket:head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<title wicket:id="title">[page title]</title>
<link rel="icon" href="gitblt-favicon.png" type="image/png" />
diff --git a/src/test/java/com/gitblit/tests/GitBlitSuite.java b/src/test/java/com/gitblit/tests/GitBlitSuite.java
index a2263298..6fff241c 100644
--- a/src/test/java/com/gitblit/tests/GitBlitSuite.java
+++ b/src/test/java/com/gitblit/tests/GitBlitSuite.java
@@ -60,7 +60,7 @@ import com.gitblit.utils.JGitUtils;
DiffUtilsTest.class, MetricUtilsTest.class, TicgitUtilsTest.class, X509UtilsTest.class,
GitBlitTest.class, FederationTests.class, RpcTests.class, GitServletTest.class, GitDaemonTest.class,
GroovyScriptTest.class, LuceneExecutorTest.class, IssuesTest.class, RepositoryModelTest.class,
- FanoutServiceTest.class, Issue0259Test.class })
+ FanoutServiceTest.class, Issue0259Test.class, Issue0271Test.class })
public class GitBlitSuite {
public static final File REPOSITORIES = new File("data/git");
diff --git a/src/test/java/com/gitblit/tests/Issue0271Test.java b/src/test/java/com/gitblit/tests/Issue0271Test.java
new file mode 100644
index 00000000..437c5b9e
--- /dev/null
+++ b/src/test/java/com/gitblit/tests/Issue0271Test.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2013 gitblit.com.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.gitblit.tests;
+
+import java.io.File;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.gitblit.ConfigUserService;
+import com.gitblit.Constants.AccessPermission;
+import com.gitblit.Constants.AccessRestrictionType;
+import com.gitblit.models.RepositoryModel;
+import com.gitblit.models.UserModel;
+
+/**
+ * https://code.google.com/p/gitblit/issues/detail?id=271
+ *
+ * Reported Problem:
+ * Inherited team permissions are incorrect.
+ *
+ * @see src/test/resources/issue0270.conf
+ *
+ * @author James Moger
+ *
+ */
+public class Issue0271Test extends Assert {
+
+ RepositoryModel repo(String name, AccessRestrictionType restriction) {
+ RepositoryModel repo = new RepositoryModel();
+ repo.name = name;
+ repo.accessRestriction = restriction;
+ return repo;
+ }
+
+ /**
+ * Test the provided users.conf file for expected access permissions.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testFile() throws Exception {
+ File realmFile = new File("src/test/resources/issue0271.conf");
+ ConfigUserService service = new ConfigUserService(realmFile);
+
+ RepositoryModel test = repo("test.git", AccessRestrictionType.VIEW);
+ RepositoryModel teama_test = repo("teama/test.git", AccessRestrictionType.VIEW);
+
+ UserModel a = service.getUserModel("a");
+ UserModel b = service.getUserModel("b");
+ UserModel c = service.getUserModel("c");
+
+ // assert V for test.git
+ assertEquals(AccessPermission.VIEW, a.getRepositoryPermission(test).permission);
+ assertEquals(AccessPermission.VIEW, b.getRepositoryPermission(test).permission);
+ assertEquals(AccessPermission.VIEW, c.getRepositoryPermission(test).permission);
+
+ // assert expected permissions for teama/test.git
+ assertEquals(AccessPermission.VIEW, a.getRepositoryPermission(teama_test).permission);
+ assertEquals(AccessPermission.PUSH, b.getRepositoryPermission(teama_test).permission);
+ assertEquals(AccessPermission.CREATE, c.getRepositoryPermission(teama_test).permission);
+ }
+} \ No newline at end of file
diff --git a/src/test/resources/issue0271.conf b/src/test/resources/issue0271.conf
new file mode 100644
index 00000000..c77ca921
--- /dev/null
+++ b/src/test/resources/issue0271.conf
@@ -0,0 +1,20 @@
+[user "A"]
+ password = apassword
+ role = "#none"
+[user "B"]
+ password = apassword
+ role = "#none"
+[user "C"]
+ password = apassword
+ role = "#none"
+ repository = RWC:teama/.*
+[team "developers"]
+ role = "#none"
+ repository = V:.*
+ user = A
+ user = B
+ user = C
+[team "teama"]
+ repository = RW:teama/.*
+ user = B
+ user = C