src/main/java/com/gitblit/GitBlit.java
@@ -125,6 +125,7 @@ import com.gitblit.utils.JGitUtils.LastChange; import com.gitblit.utils.JsonUtils; import com.gitblit.utils.MetricUtils; import com.gitblit.utils.ModelUtils; import com.gitblit.utils.ObjectCache; import com.gitblit.utils.StringUtils; import com.gitblit.utils.TimeUtils; @@ -1243,8 +1244,8 @@ // personal repository model.addOwner(user.username); String oldRepositoryName = model.name; model.name = "~" + user.username + model.name.substring(model.projectPath.length()); model.projectPath = "~" + user.username; model.name = user.getPersonalPath() + model.name.substring(model.projectPath.length()); model.projectPath = user.getPersonalPath(); updateRepositoryModel(oldRepositoryName, model, false); } else if (model.isOwner(username)) { // common/shared repo @@ -1853,8 +1854,8 @@ ProjectModel project = configs.get(name.toLowerCase()); if (project == null) { project = new ProjectModel(name); if (name.length() > 0 && name.charAt(0) == '~') { UserModel user = getUserModel(name.substring(1)); if (ModelUtils.isPersonalRepository(name)) { UserModel user = getUserModel(ModelUtils.getUserNameFromRepoPath(name)); if (user != null) { project.title = user.getDisplayName(); project.description = "personal repositories"; @@ -2126,7 +2127,7 @@ * @return the name of the user's fork, null otherwise */ public String getFork(String username, String origin) { String userProject = "~" + username.toLowerCase(); String userProject = ModelUtils.getPersonalPath(username); if (settings.getBoolean(Keys.git.cacheRepositoryList, true)) { String userPath = userProject + "/"; @@ -3818,7 +3819,7 @@ * @throws GitBlitException */ public RepositoryModel fork(RepositoryModel repository, UserModel user) throws GitBlitException { String cloneName = MessageFormat.format("~{0}/{1}.git", user.username, StringUtils.stripDotGit(StringUtils.getLastPathElement(repository.name))); String cloneName = MessageFormat.format("{0}/{1}.git", user.getPersonalPath(), StringUtils.stripDotGit(StringUtils.getLastPathElement(repository.name))); String fromUrl = MessageFormat.format("file://{0}/{1}", repositoriesFolder.getAbsolutePath(), repository.name); // clone the repository src/main/java/com/gitblit/client/EditTeamDialog.java
@@ -51,6 +51,7 @@ import com.gitblit.models.RepositoryModel; import com.gitblit.models.ServerSettings; import com.gitblit.models.TeamModel; import com.gitblit.utils.ModelUtils; import com.gitblit.utils.StringUtils; public class EditTeamDialog extends JDialog { @@ -323,7 +324,7 @@ // repositories list.add(".*"); // all repositories excluding personal repositories list.add("[^~].*"); if (ModelUtils.getUserRepoPrefix().length() == 1) list.add("[^" + ModelUtils.getUserRepoPrefix() +"].*"); String lastProject = null; for (String repo : restricted) { String projectPath = StringUtils.getFirstPathElement(repo); src/main/java/com/gitblit/client/EditUserDialog.java
@@ -57,6 +57,7 @@ import com.gitblit.models.ServerSettings; import com.gitblit.models.TeamModel; import com.gitblit.models.UserModel; import com.gitblit.utils.ModelUtils; import com.gitblit.utils.StringUtils; public class EditUserDialog extends JDialog { @@ -403,7 +404,7 @@ // repositories list.add(".*"); // all repositories excluding personal repositories list.add("[^~].*"); if (ModelUtils.getUserRepoPrefix().length() == 1) list.add("[^" + ModelUtils.getUserRepoPrefix() +"].*"); String lastProject = null; for (String repo : restricted) { String projectPath = StringUtils.getFirstPathElement(repo).toLowerCase(); src/main/java/com/gitblit/models/ProjectModel.java
@@ -21,6 +21,7 @@ import java.util.HashSet; import java.util.Set; import com.gitblit.utils.ModelUtils; import com.gitblit.utils.StringUtils; /** @@ -57,7 +58,7 @@ } public boolean isUserProject() { return name.charAt(0) == '~'; return ModelUtils.isPersonalRepository(name); } public boolean hasRepository(String name) { src/main/java/com/gitblit/models/RepositoryModel.java
@@ -28,6 +28,7 @@ import com.gitblit.Constants.AuthorizationControl; import com.gitblit.Constants.FederationStrategy; import com.gitblit.utils.ArrayUtils; import com.gitblit.utils.ModelUtils; import com.gitblit.utils.StringUtils; /** @@ -177,11 +178,11 @@ } public boolean isPersonalRepository() { return !StringUtils.isEmpty(projectPath) && projectPath.charAt(0) == '~'; return !StringUtils.isEmpty(projectPath) && ModelUtils.isPersonalRepository(projectPath); } public boolean isUsersPersonalRepository(String username) { return !StringUtils.isEmpty(projectPath) && projectPath.equalsIgnoreCase("~" + username); return !StringUtils.isEmpty(projectPath) && ModelUtils.isUsersPersonalRepository(username, projectPath); } public boolean allowAnonymousView() { src/main/java/com/gitblit/models/UserModel.java
@@ -35,6 +35,7 @@ import com.gitblit.Constants.RegistrantType; import com.gitblit.Constants.Unused; import com.gitblit.utils.ArrayUtils; import com.gitblit.utils.ModelUtils; import com.gitblit.utils.StringUtils; /** @@ -567,7 +568,7 @@ } if (canCreate) { String projectPath = StringUtils.getFirstPathElement(repository); if (!StringUtils.isEmpty(projectPath) && projectPath.equalsIgnoreCase("~" + username)) { if (!StringUtils.isEmpty(projectPath) && projectPath.equalsIgnoreCase(getPersonalPath())) { // personal repository return true; } @@ -609,7 +610,7 @@ } public String getPersonalPath() { return "~" + username; return ModelUtils.getPersonalPath(username); } public UserPreferences getPreferences() { @@ -675,6 +676,6 @@ public boolean isMyPersonalRepository(String repository) { String projectPath = StringUtils.getFirstPathElement(repository); return !StringUtils.isEmpty(projectPath) && projectPath.equalsIgnoreCase("~" + username); return !StringUtils.isEmpty(projectPath) && projectPath.equalsIgnoreCase(getPersonalPath()); } } src/main/java/com/gitblit/utils/ModelUtils.java
New file @@ -0,0 +1,52 @@ package com.gitblit.utils; import com.gitblit.IStoredSettings; public class ModelUtils { private static final String DEFAULT_USER_REPO_PREFIX = "~"; private static String userRepoPrefix = DEFAULT_USER_REPO_PREFIX; public static void setUserRepoPrefix(IStoredSettings settings) { userRepoPrefix = settings.getString("repo.userPrefix", DEFAULT_USER_REPO_PREFIX); } public static String getUserRepoPrefix() { return userRepoPrefix; } public static String getPersonalPath(String username) { return userRepoPrefix + username.toLowerCase(); } public static boolean isPersonalRepository(String name) { if ( name.startsWith(getUserRepoPrefix()) ) return true; return false; } public static boolean isUsersPersonalRepository(String username, String name) { if ( name.equalsIgnoreCase(getPersonalPath(username)) ) return true; return false; } public static String getUserNameFromRepoPath(String path) { if ( !isPersonalRepository(path) ) return ""; return path.substring(getUserRepoPrefix().length()); } } src/main/java/com/gitblit/wicket/pages/RootPage.java
@@ -51,6 +51,7 @@ import com.gitblit.models.RepositoryModel; import com.gitblit.models.TeamModel; import com.gitblit.models.UserModel; import com.gitblit.utils.ModelUtils; import com.gitblit.utils.StringUtils; import com.gitblit.wicket.GitBlitWebSession; import com.gitblit.wicket.PageRegistration; @@ -393,7 +394,7 @@ String userName = WicketUtils.getUsername(params); if (StringUtils.isEmpty(projectName)) { if (!StringUtils.isEmpty(userName)) { projectName = "~" + userName; projectName = ModelUtils.getPersonalPath(userName); } } String repositoryName = WicketUtils.getRepositoryName(params); src/main/java/com/gitblit/wicket/pages/RootSubPage.java
@@ -27,6 +27,7 @@ import com.gitblit.GitBlit; import com.gitblit.models.RepositoryModel; import com.gitblit.models.UserModel; import com.gitblit.utils.ModelUtils; import com.gitblit.utils.StringUtils; /** @@ -80,7 +81,7 @@ // all repositories repos.add(".*"); // all repositories excluding personal repositories repos.add("[^~].*"); if (ModelUtils.getUserRepoPrefix().length() == 1) repos.add("[^" + ModelUtils.getUserRepoPrefix() +"].*"); } for (String repo : GitBlit.self().getRepositoryList()) { src/main/java/com/gitblit/wicket/pages/UserPage.java
@@ -84,7 +84,7 @@ user = new UserModel(userName); } String projectName = "~" + userName; String projectName = user.getPersonalPath(); ProjectModel project = GitBlit.self().getProjectModel(projectName); if (project == null) { src/main/java/com/gitblit/wicket/panels/RepositoriesPanel.java
@@ -50,6 +50,7 @@ import com.gitblit.models.RepositoryModel; import com.gitblit.models.UserModel; import com.gitblit.utils.ArrayUtils; import com.gitblit.utils.ModelUtils; import com.gitblit.utils.StringUtils; import com.gitblit.wicket.GitBlitWebSession; import com.gitblit.wicket.WicketUtils; @@ -169,9 +170,9 @@ item.add(row); String name = groupRow.name; if (name.charAt(0) == '~') { if (name.startsWith(ModelUtils.getUserRepoPrefix())) { // user page String username = name.substring(1); String username = ModelUtils.getUserNameFromRepoPath(name); UserModel user = GitBlit.self().getUserModel(username); row.add(new LinkPanel("groupName", null, (user == null ? username : user.getDisplayName()) + " (" + groupRow.count + ")", UserPage.class, WicketUtils.newUsernameParameter(username))); row.add(new Label("groupDescription", getString("gb.personalRepositories")));