| | |
| | | import com.gitblit.models.FederationModel;
|
| | | import com.gitblit.models.FederationProposal;
|
| | | import com.gitblit.models.FederationSet;
|
| | | import com.gitblit.models.Metric;
|
| | | import com.gitblit.models.ObjectCache;
|
| | | import com.gitblit.models.RepositoryModel;
|
| | | import com.gitblit.models.UserModel;
|
| | | import com.gitblit.utils.ByteFormat;
|
| | | import com.gitblit.utils.FederationUtils;
|
| | | import com.gitblit.utils.JGitUtils;
|
| | | import com.gitblit.utils.JsonUtils;
|
| | | import com.gitblit.utils.MetricUtils;
|
| | | import com.gitblit.utils.StringUtils;
|
| | |
|
| | | /**
|
| | |
| | | .synchronizedList(new ArrayList<FederationModel>());
|
| | |
|
| | | private final Map<String, FederationModel> federationPullResults = new ConcurrentHashMap<String, FederationModel>();
|
| | |
|
| | | private final ObjectCache<Long> repositorySizeCache = new ObjectCache<Long>();
|
| | |
|
| | | private final ObjectCache<List<Metric>> repositoryMetricsCache = new ObjectCache<List<Metric>>();
|
| | |
|
| | | private RepositoryResolver<Void> repositoryResolver;
|
| | |
|
| | |
| | | }
|
| | |
|
| | | /**
|
| | | * Clears all the cached data for the specified repository.
|
| | | * |
| | | * @param repositoryName
|
| | | */
|
| | | public void clearRepositoryCache(String repositoryName) {
|
| | | repositorySizeCache.remove(repositoryName);
|
| | | repositoryMetricsCache.remove(repositoryName);
|
| | | }
|
| | |
|
| | | /**
|
| | | * Returns the list of all repositories available to Gitblit. This method
|
| | | * does not consider user access permissions.
|
| | | *
|
| | |
| | | if (model != null) {
|
| | | repositories.add(model);
|
| | | }
|
| | | }
|
| | | if (getBoolean(Keys.web.showRepositorySizes, true)) {
|
| | | int repoCount = 0;
|
| | | long startTime = System.currentTimeMillis();
|
| | | ByteFormat byteFormat = new ByteFormat();
|
| | | for (RepositoryModel model : repositories) {
|
| | | if (!model.skipSizeCalculation) {
|
| | | repoCount++;
|
| | | model.size = byteFormat.format(calculateSize(model));
|
| | | }
|
| | | }
|
| | | long duration = System.currentTimeMillis() - startTime;
|
| | | logger.info(MessageFormat.format("{0} repository sizes calculated in {1} msecs",
|
| | | repoCount, duration));
|
| | | }
|
| | | return repositories;
|
| | | }
|
| | |
| | | model.showRemoteBranches = getConfig(config, "showRemoteBranches", false);
|
| | | model.isFrozen = getConfig(config, "isFrozen", false);
|
| | | model.showReadme = getConfig(config, "showReadme", false);
|
| | | model.skipSizeCalculation = getConfig(config, "skipSizeCalculation", false);
|
| | | model.federationStrategy = FederationStrategy.fromName(getConfig(config,
|
| | | "federationStrategy", null));
|
| | | model.federationSets = new ArrayList<String>(Arrays.asList(config.getStringList(
|
| | |
| | | model.origin = config.getString("remote", "origin", "url");
|
| | | }
|
| | | r.close();
|
| | | if (getBoolean(Keys.web.showRepositorySizes, true)) {
|
| | | ByteFormat byteFormat = new ByteFormat();
|
| | | model.size = byteFormat.format(calculateSize(model)); |
| | | }
|
| | | return model;
|
| | | }
|
| | |
|
| | | /**
|
| | | * Returns the size in bytes of the repository.
|
| | | * Returns the size in bytes of the repository. Gitblit caches the
|
| | | * repository sizes to reduce the performance penalty of recursive
|
| | | * calculation. The cache is updated if the repository has been changed
|
| | | * since the last calculation.
|
| | | *
|
| | | * @param model
|
| | | * @return size in bytes
|
| | | */
|
| | | public long calculateSize(RepositoryModel model) {
|
| | | if (repositorySizeCache.hasCurrent(model.name, model.lastChange)) {
|
| | | return repositorySizeCache.getObject(model.name);
|
| | | }
|
| | | File gitDir = FileKey.resolve(new File(repositoriesFolder, model.name), FS.DETECTED);
|
| | | return com.gitblit.utils.FileUtils.folderSize(gitDir);
|
| | | long size = com.gitblit.utils.FileUtils.folderSize(gitDir);
|
| | | repositorySizeCache.updateObject(model.name, model.lastChange, size);
|
| | | return size;
|
| | | }
|
| | |
|
| | | /**
|
| | |
| | | }
|
| | |
|
| | | /**
|
| | | * Returns the gitblit string vlaue for the specified key. If key is not
|
| | | * Returns the metrics for the default branch of the specified repository.
|
| | | * This method builds a metrics cache. The cache is updated if the
|
| | | * repository is updated. A new copy of the metrics list is returned on each
|
| | | * call so that modifications to the list are non-destructive.
|
| | | * |
| | | * @param model
|
| | | * @param repository
|
| | | * @return a new array list of metrics
|
| | | */
|
| | | public List<Metric> getRepositoryDefaultMetrics(RepositoryModel model, Repository repository) {
|
| | | if (repositoryMetricsCache.hasCurrent(model.name, model.lastChange)) {
|
| | | return new ArrayList<Metric>(repositoryMetricsCache.getObject(model.name));
|
| | | }
|
| | | List<Metric> metrics = MetricUtils.getDateMetrics(repository, null, true, null);
|
| | | repositoryMetricsCache.updateObject(model.name, model.lastChange, metrics);
|
| | | return new ArrayList<Metric>(metrics);
|
| | | }
|
| | |
|
| | | /**
|
| | | * Returns the gitblit string value for the specified key. If key is not
|
| | | * set, returns defaultValue.
|
| | | *
|
| | | * @param config
|
| | |
| | | "Failed to rename repository permissions ''{0}'' to ''{1}''.",
|
| | | repositoryName, repository.name));
|
| | | }
|
| | |
|
| | | // clear the cache
|
| | | clearRepositoryCache(repositoryName);
|
| | | }
|
| | |
|
| | | // load repository
|
| | |
| | | config.setBoolean("gitblit", null, "showRemoteBranches", repository.showRemoteBranches);
|
| | | config.setBoolean("gitblit", null, "isFrozen", repository.isFrozen);
|
| | | config.setBoolean("gitblit", null, "showReadme", repository.showReadme);
|
| | | config.setBoolean("gitblit", null, "skipSizeCalculation", repository.skipSizeCalculation);
|
| | | config.setStringList("gitblit", null, "federationSets", repository.federationSets);
|
| | | config.setString("gitblit", null, "federationStrategy",
|
| | | repository.federationStrategy.name());
|
| | |
| | | return true;
|
| | | }
|
| | | }
|
| | |
|
| | | // clear the repository cache
|
| | | clearRepositoryCache(repositoryName);
|
| | | } catch (Throwable t) {
|
| | | logger.error(MessageFormat.format("Failed to delete repository {0}", repositoryName), t);
|
| | | }
|