List of usage examples for org.eclipse.jgit.lib StoredConfig getString
public String getString(final String section, String subsection, final String name)
From source file:com.gitblit.GitBlit.java
License:Apache License
/** * Creates/updates the repository model keyed by reopsitoryName. Saves all * repository settings in .git/config. This method allows for renaming * repositories and will update user access permissions accordingly. * /* www . j a v a 2s. c o m*/ * All repositories created by this method are bare and automatically have * .git appended to their names, which is the standard convention for bare * repositories. * * @param repositoryName * @param repository * @param isCreate * @throws GitBlitException */ public void updateRepositoryModel(String repositoryName, RepositoryModel repository, boolean isCreate) throws GitBlitException { Repository r = null; if (isCreate) { // ensure created repository name ends with .git if (!repository.name.toLowerCase().endsWith(org.eclipse.jgit.lib.Constants.DOT_GIT_EXT)) { repository.name += org.eclipse.jgit.lib.Constants.DOT_GIT_EXT; } if (new File(repositoriesFolder, repository.name).exists()) { throw new GitBlitException(MessageFormat .format("Can not create repository ''{0}'' because it already exists.", repository.name)); } // create repository logger.info("create repository " + repository.name); r = JGitUtils.createRepository(repositoriesFolder, repository.name); } else { // rename repository if (!repositoryName.equalsIgnoreCase(repository.name)) { if (!repository.name.toLowerCase().endsWith(org.eclipse.jgit.lib.Constants.DOT_GIT_EXT)) { repository.name += org.eclipse.jgit.lib.Constants.DOT_GIT_EXT; } if (new File(repositoriesFolder, repository.name).exists()) { throw new GitBlitException( MessageFormat.format("Failed to rename ''{0}'' because ''{1}'' already exists.", repositoryName, repository.name)); } closeRepository(repositoryName); File folder = new File(repositoriesFolder, repositoryName); File destFolder = new File(repositoriesFolder, repository.name); if (destFolder.exists()) { throw new GitBlitException(MessageFormat.format( "Can not rename repository ''{0}'' to ''{1}'' because ''{1}'' already exists.", repositoryName, repository.name)); } File parentFile = destFolder.getParentFile(); if (!parentFile.exists() && !parentFile.mkdirs()) { throw new GitBlitException( MessageFormat.format("Failed to create folder ''{0}''", parentFile.getAbsolutePath())); } if (!folder.renameTo(destFolder)) { throw new GitBlitException(MessageFormat.format( "Failed to rename repository ''{0}'' to ''{1}''.", repositoryName, repository.name)); } // rename the roles if (!userService.renameRepositoryRole(repositoryName, repository.name)) { throw new GitBlitException( MessageFormat.format("Failed to rename repository permissions ''{0}'' to ''{1}''.", repositoryName, repository.name)); } // rename fork origins in their configs if (!ArrayUtils.isEmpty(repository.forks)) { for (String fork : repository.forks) { Repository rf = getRepository(fork); try { StoredConfig config = rf.getConfig(); String origin = config.getString("remote", "origin", "url"); origin = origin.replace(repositoryName, repository.name); config.setString("remote", "origin", "url", origin); config.save(); } catch (Exception e) { logger.error("Failed to update repository fork config for " + fork, e); } rf.close(); } } // clear the cache clearRepositoryMetadataCache(repositoryName); repository.resetDisplayName(); } // load repository logger.info("edit repository " + repository.name); try { r = repositoryResolver.open(null, repository.name); } catch (RepositoryNotFoundException e) { logger.error("Repository not found", e); } catch (ServiceNotAuthorizedException e) { logger.error("Service not authorized", e); } catch (ServiceNotEnabledException e) { logger.error("Service not enabled", e); } catch (ServiceMayNotContinueException e) { logger.error("Service may not continue", e); } } // update settings if (r != null) { updateConfiguration(r, repository); // only update symbolic head if it changes String currentRef = JGitUtils.getHEADRef(r); if (!StringUtils.isEmpty(repository.HEAD) && !repository.HEAD.equals(currentRef)) { logger.info(MessageFormat.format("Relinking {0} HEAD from {1} to {2}", repository.name, currentRef, repository.HEAD)); if (JGitUtils.setHEADtoRef(r, repository.HEAD)) { // clear the cache clearRepositoryMetadataCache(repository.name); } } // close the repository object r.close(); } // update repository cache removeFromCachedRepositoryList(repositoryName); // model will actually be replaced on next load because config is stale addToCachedRepositoryList(repository.name, repository); }
From source file:com.gitblit.manager.RepositoryManager.java
License:Apache License
/** * Create a repository model from the configuration and repository data. * * @param repositoryName//from ww w . ja v a 2 s .c om * @return a repositoryModel or null if the repository does not exist */ private RepositoryModel loadRepositoryModel(String repositoryName) { Repository r = getRepository(repositoryName); if (r == null) { return null; } RepositoryModel model = new RepositoryModel(); model.isBare = r.isBare(); File basePath = getRepositoriesFolder(); if (model.isBare) { model.name = com.gitblit.utils.FileUtils.getRelativePath(basePath, r.getDirectory()); } else { model.name = com.gitblit.utils.FileUtils.getRelativePath(basePath, r.getDirectory().getParentFile()); } if (StringUtils.isEmpty(model.name)) { // Repository is NOT located relative to the base folder because it // is symlinked. Use the provided repository name. model.name = repositoryName; } model.projectPath = StringUtils.getFirstPathElement(repositoryName); StoredConfig config = r.getConfig(); boolean hasOrigin = false; if (config != null) { // Initialize description from description file hasOrigin = !StringUtils.isEmpty(config.getString("remote", "origin", "url")); if (getConfig(config, "description", null) == null) { File descFile = new File(r.getDirectory(), "description"); if (descFile.exists()) { String desc = com.gitblit.utils.FileUtils.readContent(descFile, System.getProperty("line.separator")); if (!desc.toLowerCase().startsWith("unnamed repository")) { config.setString(Constants.CONFIG_GITBLIT, null, "description", desc); } } } model.description = getConfig(config, "description", ""); model.originRepository = getConfig(config, "originRepository", null); model.addOwners(ArrayUtils.fromString(getConfig(config, "owner", ""))); model.acceptNewPatchsets = getConfig(config, "acceptNewPatchsets", true); model.acceptNewTickets = getConfig(config, "acceptNewTickets", true); model.requireApproval = getConfig(config, "requireApproval", settings.getBoolean(Keys.tickets.requireApproval, false)); model.mergeTo = getConfig(config, "mergeTo", null); model.mergeType = MergeType .fromName(getConfig(config, "mergeType", settings.getString(Keys.tickets.mergeType, null))); model.useIncrementalPushTags = getConfig(config, "useIncrementalPushTags", false); model.incrementalPushTagPrefix = getConfig(config, "incrementalPushTagPrefix", null); model.allowForks = getConfig(config, "allowForks", true); model.accessRestriction = AccessRestrictionType.fromName(getConfig(config, "accessRestriction", settings.getString(Keys.git.defaultAccessRestriction, "PUSH"))); model.authorizationControl = AuthorizationControl.fromName(getConfig(config, "authorizationControl", settings.getString(Keys.git.defaultAuthorizationControl, null))); model.verifyCommitter = getConfig(config, "verifyCommitter", false); model.showRemoteBranches = getConfig(config, "showRemoteBranches", hasOrigin); model.isFrozen = getConfig(config, "isFrozen", false); model.skipSizeCalculation = getConfig(config, "skipSizeCalculation", false); model.skipSummaryMetrics = getConfig(config, "skipSummaryMetrics", false); model.commitMessageRenderer = CommitMessageRenderer.fromName(getConfig(config, "commitMessageRenderer", settings.getString(Keys.web.commitMessageRenderer, null))); model.federationStrategy = FederationStrategy.fromName(getConfig(config, "federationStrategy", null)); model.federationSets = new ArrayList<String>( Arrays.asList(config.getStringList(Constants.CONFIG_GITBLIT, null, "federationSets"))); model.isFederated = getConfig(config, "isFederated", false); model.gcThreshold = getConfig(config, "gcThreshold", settings.getString(Keys.git.defaultGarbageCollectionThreshold, "500KB")); model.gcPeriod = getConfig(config, "gcPeriod", settings.getInteger(Keys.git.defaultGarbageCollectionPeriod, 7)); try { model.lastGC = new SimpleDateFormat(Constants.ISO8601) .parse(getConfig(config, "lastGC", "1970-01-01'T'00:00:00Z")); } catch (Exception e) { model.lastGC = new Date(0); } model.maxActivityCommits = getConfig(config, "maxActivityCommits", settings.getInteger(Keys.web.maxActivityCommits, 0)); model.origin = config.getString("remote", "origin", "url"); if (model.origin != null) { model.origin = model.origin.replace('\\', '/'); model.isMirror = config.getBoolean("remote", "origin", "mirror", false); } model.preReceiveScripts = new ArrayList<String>( Arrays.asList(config.getStringList(Constants.CONFIG_GITBLIT, null, "preReceiveScript"))); model.postReceiveScripts = new ArrayList<String>( Arrays.asList(config.getStringList(Constants.CONFIG_GITBLIT, null, "postReceiveScript"))); model.mailingLists = new ArrayList<String>( Arrays.asList(config.getStringList(Constants.CONFIG_GITBLIT, null, "mailingList"))); model.indexedBranches = new ArrayList<String>( Arrays.asList(config.getStringList(Constants.CONFIG_GITBLIT, null, "indexBranch"))); model.metricAuthorExclusions = new ArrayList<String>( Arrays.asList(config.getStringList(Constants.CONFIG_GITBLIT, null, "metricAuthorExclusions"))); // Custom defined properties model.customFields = new LinkedHashMap<String, String>(); for (String aProperty : config.getNames(Constants.CONFIG_GITBLIT, Constants.CONFIG_CUSTOM_FIELDS)) { model.customFields.put(aProperty, config.getString(Constants.CONFIG_GITBLIT, Constants.CONFIG_CUSTOM_FIELDS, aProperty)); } } model.HEAD = JGitUtils.getHEADRef(r); if (StringUtils.isEmpty(model.mergeTo)) { model.mergeTo = model.HEAD; } model.availableRefs = JGitUtils.getAvailableHeadTargets(r); model.sparkleshareId = JGitUtils.getSparkleshareId(r); model.hasCommits = JGitUtils.hasCommits(r); updateLastChangeFields(r, model); r.close(); if (StringUtils.isEmpty(model.originRepository) && model.origin != null && model.origin.startsWith("file://")) { // repository was cloned locally... perhaps as a fork try { File folder = new File(new URI(model.origin)); String originRepo = com.gitblit.utils.FileUtils.getRelativePath(getRepositoriesFolder(), folder); if (!StringUtils.isEmpty(originRepo)) { // ensure origin still exists File repoFolder = new File(getRepositoriesFolder(), originRepo); if (repoFolder.exists()) { model.originRepository = originRepo.toLowerCase(); // persist the fork origin updateConfiguration(r, model); } } } catch (URISyntaxException e) { logger.error("Failed to determine fork for " + model, e); } } return model; }
From source file:com.gitblit.manager.RepositoryManager.java
License:Apache License
/** * Returns the gitblit string value for the specified key. If key is not * set, returns defaultValue./* ww w . j av a 2 s . com*/ * * @param config * @param field * @param defaultValue * @return field value or defaultValue */ private int getConfig(StoredConfig config, String field, int defaultValue) { String value = config.getString(Constants.CONFIG_GITBLIT, null, field); if (StringUtils.isEmpty(value)) { return defaultValue; } try { return Integer.parseInt(value); } catch (Exception e) { } return defaultValue; }
From source file:com.gitblit.manager.RepositoryManager.java
License:Apache License
/** * Creates/updates the repository model keyed by repositoryName. Saves all * repository settings in .git/config. This method allows for renaming * repositories and will update user access permissions accordingly. * * All repositories created by this method are bare and automatically have * .git appended to their names, which is the standard convention for bare * repositories.//from w ww . j av a 2 s . c om * * @param repositoryName * @param repository * @param isCreate * @throws GitBlitException */ @Override public void updateRepositoryModel(String repositoryName, RepositoryModel repository, boolean isCreate) throws GitBlitException { if (isCollectingGarbage(repositoryName)) { throw new GitBlitException( MessageFormat.format("sorry, Gitblit is busy collecting garbage in {0}", repositoryName)); } Repository r = null; String projectPath = StringUtils.getFirstPathElement(repository.name); if (!StringUtils.isEmpty(projectPath)) { if (projectPath.equalsIgnoreCase(settings.getString(Keys.web.repositoryRootGroupName, "main"))) { // strip leading group name repository.name = repository.name.substring(projectPath.length() + 1); } } boolean isRename = false; if (isCreate) { // ensure created repository name ends with .git if (!repository.name.toLowerCase().endsWith(org.eclipse.jgit.lib.Constants.DOT_GIT_EXT)) { repository.name += org.eclipse.jgit.lib.Constants.DOT_GIT_EXT; } if (hasRepository(repository.name)) { throw new GitBlitException(MessageFormat .format("Can not create repository ''{0}'' because it already exists.", repository.name)); } // create repository logger.info("create repository " + repository.name); String shared = settings.getString(Keys.git.createRepositoriesShared, "FALSE"); r = JGitUtils.createRepository(repositoriesFolder, repository.name, shared); } else { // rename repository isRename = !repositoryName.equalsIgnoreCase(repository.name); if (isRename) { if (!repository.name.toLowerCase().endsWith(org.eclipse.jgit.lib.Constants.DOT_GIT_EXT)) { repository.name += org.eclipse.jgit.lib.Constants.DOT_GIT_EXT; } if (new File(repositoriesFolder, repository.name).exists()) { throw new GitBlitException( MessageFormat.format("Failed to rename ''{0}'' because ''{1}'' already exists.", repositoryName, repository.name)); } close(repositoryName); File folder = new File(repositoriesFolder, repositoryName); File destFolder = new File(repositoriesFolder, repository.name); if (destFolder.exists()) { throw new GitBlitException(MessageFormat.format( "Can not rename repository ''{0}'' to ''{1}'' because ''{1}'' already exists.", repositoryName, repository.name)); } File parentFile = destFolder.getParentFile(); if (!parentFile.exists() && !parentFile.mkdirs()) { throw new GitBlitException( MessageFormat.format("Failed to create folder ''{0}''", parentFile.getAbsolutePath())); } if (!folder.renameTo(destFolder)) { throw new GitBlitException(MessageFormat.format( "Failed to rename repository ''{0}'' to ''{1}''.", repositoryName, repository.name)); } // rename the roles if (!userManager.renameRepositoryRole(repositoryName, repository.name)) { throw new GitBlitException( MessageFormat.format("Failed to rename repository permissions ''{0}'' to ''{1}''.", repositoryName, repository.name)); } // rename fork origins in their configs if (!ArrayUtils.isEmpty(repository.forks)) { for (String fork : repository.forks) { Repository rf = getRepository(fork); try { StoredConfig config = rf.getConfig(); String origin = config.getString("remote", "origin", "url"); origin = origin.replace(repositoryName, repository.name); config.setString("remote", "origin", "url", origin); config.setString(Constants.CONFIG_GITBLIT, null, "originRepository", repository.name); config.save(); } catch (Exception e) { logger.error("Failed to update repository fork config for " + fork, e); } rf.close(); } } // update this repository's origin's fork list if (!StringUtils.isEmpty(repository.originRepository)) { String originKey = getRepositoryKey(repository.originRepository); RepositoryModel origin = repositoryListCache.get(originKey); if (origin != null && !ArrayUtils.isEmpty(origin.forks)) { origin.forks.remove(repositoryName); origin.forks.add(repository.name); } } // clear the cache clearRepositoryMetadataCache(repositoryName); repository.resetDisplayName(); } // load repository logger.info("edit repository " + repository.name); r = getRepository(repository.name); } // update settings if (r != null) { updateConfiguration(r, repository); // Update the description file File descFile = new File(r.getDirectory(), "description"); if (repository.description != null) { com.gitblit.utils.FileUtils.writeContent(descFile, repository.description); } else if (descFile.exists() && !descFile.isDirectory()) { descFile.delete(); } // only update symbolic head if it changes String currentRef = JGitUtils.getHEADRef(r); if (!StringUtils.isEmpty(repository.HEAD) && !repository.HEAD.equals(currentRef)) { logger.info(MessageFormat.format("Relinking {0} HEAD from {1} to {2}", repository.name, currentRef, repository.HEAD)); if (JGitUtils.setHEADtoRef(r, repository.HEAD)) { // clear the cache clearRepositoryMetadataCache(repository.name); } } // Adjust permissions in case we updated the config files JGitUtils.adjustSharedPerm(new File(r.getDirectory().getAbsolutePath(), "config"), settings.getString(Keys.git.createRepositoriesShared, "FALSE")); JGitUtils.adjustSharedPerm(new File(r.getDirectory().getAbsolutePath(), "HEAD"), settings.getString(Keys.git.createRepositoriesShared, "FALSE")); // close the repository object r.close(); } // update repository cache removeFromCachedRepositoryList(repositoryName); // model will actually be replaced on next load because config is stale addToCachedRepositoryList(repository); if (isCreate && pluginManager != null) { for (RepositoryLifeCycleListener listener : pluginManager .getExtensions(RepositoryLifeCycleListener.class)) { try { listener.onCreation(repository); } catch (Throwable t) { logger.error(String.format("failed to call plugin onCreation %s", repositoryName), t); } } } else if (isRename && pluginManager != null) { for (RepositoryLifeCycleListener listener : pluginManager .getExtensions(RepositoryLifeCycleListener.class)) { try { listener.onRename(repositoryName, repository); } catch (Throwable t) { logger.error(String.format("failed to call plugin onRename %s", repositoryName), t); } } } }
From source file:com.gitblit.tickets.ITicketService.java
License:Apache License
/** * Returns the list of labels for the repository. * * @param repository// ww w.ja v a 2 s. c om * @return the list of labels * @since 1.4.0 */ public List<TicketLabel> getLabels(RepositoryModel repository) { String key = repository.name; if (labelsCache.containsKey(key)) { return labelsCache.get(key); } List<TicketLabel> list = new ArrayList<TicketLabel>(); Repository db = repositoryManager.getRepository(repository.name); try { StoredConfig config = db.getConfig(); Set<String> names = config.getSubsections(LABEL); for (String name : names) { TicketLabel label = new TicketLabel(name); label.color = config.getString(LABEL, name, COLOR); list.add(label); } labelsCache.put(key, Collections.unmodifiableList(list)); } catch (Exception e) { log.error("invalid tickets settings for " + repository, e); } finally { db.close(); } return list; }
From source file:com.gitblit.tickets.ITicketService.java
License:Apache License
/** * Returns the list of milestones for the repository. * * @param repository//w w w .j a v a 2s . c o m * @return the list of milestones * @since 1.4.0 */ public List<TicketMilestone> getMilestones(RepositoryModel repository) { String key = repository.name; if (milestonesCache.containsKey(key)) { return milestonesCache.get(key); } List<TicketMilestone> list = new ArrayList<TicketMilestone>(); Repository db = repositoryManager.getRepository(repository.name); try { StoredConfig config = db.getConfig(); Set<String> names = config.getSubsections(MILESTONE); for (String name : names) { TicketMilestone milestone = new TicketMilestone(name); milestone.status = Status.fromObject(config.getString(MILESTONE, name, STATUS), milestone.status); milestone.color = config.getString(MILESTONE, name, COLOR); String due = config.getString(MILESTONE, name, DUE); if (!StringUtils.isEmpty(due)) { try { milestone.due = new SimpleDateFormat(DUE_DATE_PATTERN).parse(due); } catch (ParseException e) { log.error("failed to parse {} milestone {} due date \"{}\"", new Object[] { repository, name, due }); } } list.add(milestone); } milestonesCache.put(key, Collections.unmodifiableList(list)); } catch (Exception e) { log.error("invalid tickets settings for " + repository, e); } finally { db.close(); } return list; }
From source file:com.google.gerrit.server.update.RepoViewTest.java
License:Apache License
@Test public void getConfigIsDefensiveCopy() throws Exception { StoredConfig orig = repo.getConfig(); orig.setString("a", "config", "option", "yes"); orig.save();//from w ww. j a v a 2 s . c o m Config copy = view.getConfig(); copy.setString("a", "config", "option", "no"); assertThat(orig.getString("a", "config", "option")).isEqualTo("yes"); assertThat(repo.getConfig().getString("a", "config", "option")).isEqualTo("yes"); }
From source file:com.google.gitiles.DefaultAccess.java
License:Open Source License
private String loadDescriptionText(Repository repo) throws IOException { String desc = null;/*from ww w . j a v a 2 s .co m*/ StoredConfig config = repo.getConfig(); IOException configError = null; try { config.load(); desc = config.getString("gitweb", null, "description"); } catch (ConfigInvalidException e) { configError = new IOException(e); } if (desc == null) { File descFile = new File(repo.getDirectory(), "description"); if (descFile.exists()) { desc = new String(IO.readFully(descFile)); } else if (configError != null) { throw configError; } } return desc; }
From source file:com.hazelcast.simulator.utils.jars.GitSupport.java
License:Open Source License
private void syncRemoteRepositories(Git git) throws IOException { StoredConfig config = git.getRepository().getConfig(); Set<GitRepository> customRepositoriesCopy = new HashSet<GitRepository>(customRepositories); Set<String> existingRemoteRepoNames = config.getSubsections(CONFIG_REMOTE); for (String remoteName : existingRemoteRepoNames) { String url = config.getString(CONFIG_REMOTE, remoteName, CONFIG_URL); boolean isConfigured = customRepositoriesCopy.remove(new GitRepository(remoteName, url)); if (!isConfigured && isCustomRepository(remoteName)) { removeRepository(config, remoteName); }/*from w w w . jav a 2 s .co m*/ } for (GitRepository repository : customRepositoriesCopy) { addRepository(config, repository); } config.save(); }
From source file:com.microsoft.gittf.core.config.ChangesetCommitMap.java
License:Open Source License
private static void copyConfigurationEntries(StoredConfig source, FileBasedConfig target) { Set<String> downloadedChangesetEntries = source.getNames(ConfigurationConstants.CONFIGURATION_SECTION, ConfigurationConstants.COMMIT_SUBSECTION); for (String changesetEntry : downloadedChangesetEntries) { String commitHash = source.getString(ConfigurationConstants.CONFIGURATION_SECTION, ConfigurationConstants.COMMIT_SUBSECTION, changesetEntry); target.setString(ConfigurationConstants.CONFIGURATION_SECTION, ConfigurationConstants.COMMIT_SUBSECTION, changesetEntry, commitHash); }/*from w ww .j a v a 2s. c o m*/ Set<String> createdCommitEntries = source.getNames(ConfigurationConstants.CONFIGURATION_SECTION, ConfigurationConstants.CHANGESET_SUBSECTION); for (String commitEntry : createdCommitEntries) { int changesetId = source.getInt(ConfigurationConstants.CONFIGURATION_SECTION, ConfigurationConstants.CHANGESET_SUBSECTION, commitEntry, -1); target.setInt(ConfigurationConstants.CONFIGURATION_SECTION, ConfigurationConstants.CHANGESET_SUBSECTION, commitEntry, changesetId); } source.unsetSection(ConfigurationConstants.CONFIGURATION_SECTION, ConfigurationConstants.CHANGESET_SUBSECTION); source.unsetSection(ConfigurationConstants.CONFIGURATION_SECTION, ConfigurationConstants.COMMIT_SUBSECTION); try { target.save(); source.save(); } catch (IOException e) { throw new RuntimeException(e); } }