diff options
author | mrbytes <eguervos@msn.com> | 2013-07-19 09:25:05 +0200 |
---|---|---|
committer | mrbytes <eguervos@msn.com> | 2013-07-19 09:25:05 +0200 |
commit | 1c5a45ebe6285b0f6a9b8f50d5467baa11a1ff63 (patch) | |
tree | 8d0afd7adf3b0a1974a107d384e25bcccd1f88f6 /src | |
parent | 4e1f7cde152e35b8b8fd882fb6d54e61754fb13f (diff) | |
parent | 58708c13b6cfc1e8289d1dca698d6d228509c695 (diff) | |
download | gitblit-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.java | 11 | ||||
-rw-r--r-- | src/main/java/com/gitblit/git/ReceiveHook.java | 17 | ||||
-rw-r--r-- | src/main/java/com/gitblit/utils/CommitCache.java | 17 | ||||
-rw-r--r-- | src/main/java/com/gitblit/wicket/GitBlitWebApp_nl.properties | 61 | ||||
-rw-r--r-- | src/main/java/com/gitblit/wicket/GitBlitWebApp_zh_CN.properties | 64 | ||||
-rw-r--r-- | src/main/java/com/gitblit/wicket/pages/BasePage.html | 1 | ||||
-rw-r--r-- | src/test/java/com/gitblit/tests/GitBlitSuite.java | 2 | ||||
-rw-r--r-- | src/test/java/com/gitblit/tests/Issue0271Test.java | 76 | ||||
-rw-r--r-- | src/test/resources/issue0271.conf | 20 |
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 |