From cb285cbfddfc0b633d6b8cdb4dc0d2bd2b8b51ef Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Thu, 05 Jan 2012 17:34:05 -0500 Subject: [PATCH] Fixed bug in receive hook for repositories in subfolders --- src/com/gitblit/wicket/pages/RootPage.java | 148 +++++++++++++++++++++++++++++++++---------------- 1 files changed, 100 insertions(+), 48 deletions(-) diff --git a/src/com/gitblit/wicket/pages/RootPage.java b/src/com/gitblit/wicket/pages/RootPage.java index f8fd8a8..cbf9cfe 100644 --- a/src/com/gitblit/wicket/pages/RootPage.java +++ b/src/com/gitblit/wicket/pages/RootPage.java @@ -17,8 +17,12 @@ import java.text.MessageFormat; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; import java.util.Collections; +import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -94,7 +98,8 @@ // navigation links List<PageRegistration> pages = new ArrayList<PageRegistration>(); - pages.add(new PageRegistration("gb.repositories", RepositoriesPage.class, getRootPageParameters())); + pages.add(new PageRegistration("gb.repositories", RepositoriesPage.class, + getRootPageParameters())); pages.add(new PageRegistration("gb.activity", ActivityPage.class, getRootPageParameters())); if (showAdmin) { pages.add(new PageRegistration("gb.users", UsersPage.class)); @@ -163,14 +168,28 @@ super.setupPage(repositoryName, pageName); } - + private PageParameters getRootPageParameters() { - PageParameters params = getPageParameters(); - if (params != null) { - // remove named repository parameter - params.remove("r"); + if (reusePageParameters()) { + PageParameters pp = getPageParameters(); + if (pp != null) { + PageParameters params = new PageParameters(pp); + // remove named repository parameter + params.remove("r"); + + // remove days back parameter if it is the default value + if (params.containsKey("db") + && params.getInt("db") == GitBlit.getInteger(Keys.web.activityDuration, 14)) { + params.remove("db"); + } + return params; + } } - return params; + return null; + } + + protected boolean reusePageParameters() { + return false; } private void loginUser(UserModel user) { @@ -195,7 +214,7 @@ } - protected List<DropDownMenuItem> getFilterMenuItems() { + protected List<DropDownMenuItem> getRepositoryFilterItems(PageParameters params) { final UserModel user = GitBlitWebSession.get().getUser(); Set<DropDownMenuItem> filters = new LinkedHashSet<DropDownMenuItem>(); List<RepositoryModel> repositories = GitBlit.self().getRepositoryModels(user); @@ -217,7 +236,7 @@ Collections.sort(sets); for (String set : sets) { filters.add(new DropDownMenuItem(MessageFormat.format("{0} ({1})", set, - setMap.get(set).get()), "set", set)); + setMap.get(set).get()), "set", set, params)); } // divider filters.add(new DropDownMenuItem()); @@ -229,7 +248,7 @@ Collections.sort(teams); for (TeamModel team : teams) { filters.add(new DropDownMenuItem(MessageFormat.format("{0} ({1})", team.name, - team.repositories.size()), "team", team.name)); + team.repositories.size()), "team", team.name, params)); } // divider filters.add(new DropDownMenuItem()); @@ -243,7 +262,7 @@ for (String expression : expressions) { if (!StringUtils.isEmpty(expression)) { addedExpression = true; - filters.add(new DropDownMenuItem(null, "x", expression)); + filters.add(new DropDownMenuItem(null, "x", expression, params)); } } // if we added any custom expressions, add a divider @@ -251,14 +270,25 @@ filters.add(new DropDownMenuItem()); } } - - if (filters.size() > 0) { - // add All Repositories - filters.add(new DropDownMenuItem(MessageFormat.format("{0} ({1})", - getString("gb.tokenJurDescription"), repositories.size()), null, null)); - } - return new ArrayList<DropDownMenuItem>(filters); + } + + protected List<DropDownMenuItem> getTimeFilterItems(PageParameters params) { + // days back choices - additive parameters + int daysBack = GitBlit.getInteger(Keys.web.activityDuration, 14); + if (daysBack < 1) { + daysBack = 14; + } + List<DropDownMenuItem> items = new ArrayList<DropDownMenuItem>(); + Set<Integer> choicesSet = new HashSet<Integer>(Arrays.asList(daysBack, 14, 28, 60, 90, 180)); + List<Integer> choices = new ArrayList<Integer>(choicesSet); + Collections.sort(choices); + for (Integer db : choices) { + String txt = "last " + db + (db.intValue() > 1 ? " days" : "day"); + items.add(new DropDownMenuItem(txt, "db", db.toString(), params)); + } + items.add(new DropDownMenuItem()); + return items; } protected List<RepositoryModel> getRepositories(PageParameters params) { @@ -267,74 +297,96 @@ return GitBlit.self().getRepositoryModels(user); } + boolean hasParameter = false; String repositoryName = WicketUtils.getRepositoryName(params); String set = WicketUtils.getSet(params); String regex = WicketUtils.getRegEx(params); String team = WicketUtils.getTeam(params); + int daysBack = params.getInt("db", 0); - List<RepositoryModel> models = null; + List<RepositoryModel> availableModels = GitBlit.self().getRepositoryModels(user); + Set<RepositoryModel> models = new HashSet<RepositoryModel>(); if (!StringUtils.isEmpty(repositoryName)) { // try named repository - models = new ArrayList<RepositoryModel>(); - RepositoryModel model = GitBlit.self().getRepositoryModel(repositoryName); - if (user.canAccessRepository(model)) { - models.add(model); + hasParameter = true; + for (RepositoryModel model : availableModels) { + if (model.name.equalsIgnoreCase(repositoryName)) { + models.add(model); + break; + } } - } - - // get all user accessible repositories - if (models == null) { - models = GitBlit.self().getRepositoryModels(user); } if (!StringUtils.isEmpty(regex)) { // filter the repositories by the regex - List<RepositoryModel> accessible = GitBlit.self().getRepositoryModels(user); - List<RepositoryModel> matchingModels = new ArrayList<RepositoryModel>(); + hasParameter = true; Pattern pattern = Pattern.compile(regex); - for (RepositoryModel aModel : accessible) { - if (pattern.matcher(aModel.name).find()) { - matchingModels.add(aModel); + for (RepositoryModel model : availableModels) { + if (pattern.matcher(model.name).find()) { + models.add(model); } } - models = matchingModels; - } else if (!StringUtils.isEmpty(set)) { + } + + if (!StringUtils.isEmpty(set)) { // filter the repositories by the specified sets + hasParameter = true; List<String> sets = StringUtils.getStringsFromValue(set, ","); - List<RepositoryModel> matchingModels = new ArrayList<RepositoryModel>(); - for (RepositoryModel model : models) { + for (RepositoryModel model : availableModels) { for (String curr : sets) { if (model.federationSets.contains(curr)) { - matchingModels.add(model); + models.add(model); } } } - models = matchingModels; - } else if (!StringUtils.isEmpty(team)) { + } + + if (!StringUtils.isEmpty(team)) { // filter the repositories by the specified teams + hasParameter = true; List<String> teams = StringUtils.getStringsFromValue(team, ","); // need TeamModels first List<TeamModel> teamModels = new ArrayList<TeamModel>(); for (String name : teams) { - TeamModel model = GitBlit.self().getTeamModel(name); - if (model != null) { - teamModels.add(model); + TeamModel teamModel = GitBlit.self().getTeamModel(name); + if (teamModel != null) { + teamModels.add(teamModel); } } // brute-force our way through finding the matching models - List<RepositoryModel> matchingModels = new ArrayList<RepositoryModel>(); - for (RepositoryModel repositoryModel : models) { + for (RepositoryModel repositoryModel : availableModels) { for (TeamModel teamModel : teamModels) { if (teamModel.hasRepository(repositoryModel.name)) { - matchingModels.add(repositoryModel); + models.add(repositoryModel); } } } - models = matchingModels; } - return models; + + if (!hasParameter) { + models.addAll(availableModels); + } + + // time-filter the list + if (daysBack > 0) { + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.HOUR_OF_DAY, 0); + cal.set(Calendar.MINUTE, 0); + cal.set(Calendar.SECOND, 0); + cal.set(Calendar.MILLISECOND, 0); + cal.add(Calendar.DATE, -1 * daysBack); + Date threshold = cal.getTime(); + Set<RepositoryModel> timeFiltered = new HashSet<RepositoryModel>(); + for (RepositoryModel model : models) { + if (model.lastChange.after(threshold)) { + timeFiltered.add(model); + } + } + models = timeFiltered; + } + return new ArrayList<RepositoryModel>(models); } } -- Gitblit v1.9.1