From 18d398e3ab5227fe10fe3f322798a51ce0cd10ca Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Thu, 23 Feb 2012 17:44:53 -0500 Subject: [PATCH] Documentation --- src/com/gitblit/utils/JGitUtils.java | 108 ++++++++++++++++++++++++++++++----------------------- 1 files changed, 61 insertions(+), 47 deletions(-) diff --git a/src/com/gitblit/utils/JGitUtils.java b/src/com/gitblit/utils/JGitUtils.java index 6470634..a9b99a9 100644 --- a/src/com/gitblit/utils/JGitUtils.java +++ b/src/com/gitblit/utils/JGitUtils.java @@ -24,7 +24,6 @@ import java.text.MessageFormat; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.HashMap; @@ -290,21 +289,21 @@ * Returns a list of repository names in the specified folder. * * @param repositoriesFolder - * @param exportAll - * if true, all repositories are listed. If false only the - * repositories with a "git-daemon-export-ok" file are included + * @param onlyBare + * if true, only bare repositories repositories are listed. If + * false all repositories are included. * @param searchSubfolders * recurse into subfolders to find grouped repositories * @return list of repository names */ - public static List<String> getRepositoryList(File repositoriesFolder, boolean exportAll, + public static List<String> getRepositoryList(File repositoriesFolder, boolean onlyBare, boolean searchSubfolders) { List<String> list = new ArrayList<String>(); if (repositoriesFolder == null || !repositoriesFolder.exists()) { return list; } list.addAll(getRepositoryList(repositoriesFolder.getAbsolutePath(), repositoriesFolder, - exportAll, searchSubfolders)); + onlyBare, searchSubfolders)); StringUtils.sortRepositorynames(list); return list; } @@ -316,33 +315,30 @@ * basePath is stripped from the repository name as repositories * are relative to this path * @param searchFolder - * @param exportAll - * if true all repositories are listed. If false only the - * repositories with a "git-daemon-export-ok" file are included + * @param onlyBare + * if true only bare repositories will be listed. if false all + * repositories are included. * @param searchSubfolders * recurse into subfolders to find grouped repositories * @return */ private static List<String> getRepositoryList(String basePath, File searchFolder, - boolean exportAll, boolean searchSubfolders) { + boolean onlyBare, boolean searchSubfolders) { List<String> list = new ArrayList<String>(); for (File file : searchFolder.listFiles()) { if (file.isDirectory()) { File gitDir = FileKey.resolve(new File(searchFolder, file.getName()), FS.DETECTED); if (gitDir != null) { - boolean exportRepository = exportAll - || new File(gitDir, "git-daemon-export-ok").exists(); - - if (!exportRepository) { + if (onlyBare && gitDir.getName().equals(".git")) { continue; } // determine repository name relative to base path String repository = StringUtils.getRelativePath(basePath, file.getAbsolutePath()); list.add(repository); - } else if (searchSubfolders) { + } else if (searchSubfolders && file.canRead()) { // look for repositories in subfolders - list.addAll(getRepositoryList(basePath, file, exportAll, searchSubfolders)); + list.addAll(getRepositoryList(basePath, file, onlyBare, searchSubfolders)); } } } @@ -748,25 +744,40 @@ } /** - * Returns the list of files in the repository that match one of the - * specified extensions. This is a CASE-SENSITIVE search. If the repository - * does not exist or is empty, an empty list is returned. + * Returns the list of files in the repository on the default branch that + * match one of the specified extensions. This is a CASE-SENSITIVE search. + * If the repository does not exist or is empty, an empty list is returned. * * @param repository * @param extensions * @return list of files in repository with a matching extension */ public static List<PathModel> getDocuments(Repository repository, List<String> extensions) { + return getDocuments(repository, extensions, null); + } + + /** + * Returns the list of files in the repository in the specified commit that + * match one of the specified extensions. This is a CASE-SENSITIVE search. + * If the repository does not exist or is empty, an empty list is returned. + * + * @param repository + * @param extensions + * @param objectId + * @return list of files in repository with a matching extension + */ + public static List<PathModel> getDocuments(Repository repository, List<String> extensions, + String objectId) { List<PathModel> list = new ArrayList<PathModel>(); if (!hasCommits(repository)) { return list; } - RevCommit commit = getCommit(repository, null); + RevCommit commit = getCommit(repository, objectId); final TreeWalk tw = new TreeWalk(repository); try { tw.addTree(commit.getTree()); if (extensions != null && extensions.size() > 0) { - Collection<TreeFilter> suffixFilters = new ArrayList<TreeFilter>(); + List<TreeFilter> suffixFilters = new ArrayList<TreeFilter>(); for (String extension : extensions) { if (extension.charAt(0) == '.') { suffixFilters.add(PathSuffixFilter.create("\\" + extension)); @@ -775,7 +786,12 @@ suffixFilters.add(PathSuffixFilter.create("\\." + extension)); } } - TreeFilter filter = OrTreeFilter.create(suffixFilters); + TreeFilter filter; + if (suffixFilters.size() == 1) { + filter = suffixFilters.get(0); + } else { + filter = OrTreeFilter.create(suffixFilters); + } tw.setFilter(filter); tw.setRecursive(true); } @@ -1163,9 +1179,9 @@ * no match is found, the SHA1 is returned. * * @param repository - * @return the ref name or the SHA1 for detached HEADs + * @return the ref name or the SHA1 for a detached HEAD */ - public static String getSymbolicHeadTarget(Repository repository) { + public static String getHEADRef(Repository repository) { String target = null; try { target = repository.getFullBranch(); @@ -1193,58 +1209,56 @@ } /** - * Sets the HEAD symbolic ref name for a repository. The HEAD will - * be detached if the name does not reference a branch. + * Sets the symbolic ref HEAD to the specified target ref. The + * HEAD will be detached if the target ref is not a branch. * * @param repository - * @param name + * @param targetRef + * @return true if successful */ - public static void setSymbolicHeadTarget(Repository repository, String name) { + public static boolean setHEADtoRef(Repository repository, String targetRef) { try { - boolean detach = !name.startsWith(Constants.R_HEADS); // detach if not a branch + // detach HEAD if target ref is not a branch + boolean detach = !targetRef.startsWith(Constants.R_HEADS); RefUpdate.Result result; RefUpdate head = repository.updateRef(Constants.HEAD, detach); if (detach) { // Tag - RevCommit commit = getCommit(repository, name); + RevCommit commit = getCommit(repository, targetRef); head.setNewObjectId(commit.getId()); result = head.forceUpdate(); } else { - result = head.link(name); + result = head.link(targetRef); } switch (result) { case NEW: case FORCED: case NO_CHANGE: case FAST_FORWARD: - break; + return true; default: - LOGGER.error(MessageFormat.format("{0} symbolic HEAD update to {1} returned result {2}", - repository.getDirectory().getAbsolutePath(), name, result)); + LOGGER.error(MessageFormat.format("{0} HEAD update to {1} returned result {2}", + repository.getDirectory().getAbsolutePath(), targetRef, result)); } } catch (Throwable t) { - error(t, repository, "{0} failed to set symbolic HEAD to {1}", name); + error(t, repository, "{0} failed to set HEAD to {1}", targetRef); } + return false; } /** - * Get the full branch and tag ref names for any potential symbolic head targets. + * Get the full branch and tag ref names for any potential HEAD targets. * * @param repository * @return a list of ref names */ public static List<String> getAvailableHeadTargets(Repository repository) { List<String> targets = new ArrayList<String>(); - List<RefModel> branchModels = JGitUtils.getLocalBranches(repository, true, -1); - if (branchModels.size() > 0) { - for (RefModel branchModel : branchModels) { - targets.add(branchModel.getName()); - } + for (RefModel branchModel : JGitUtils.getLocalBranches(repository, true, -1)) { + targets.add(branchModel.getName()); } - List<RefModel> tagModels = JGitUtils.getTags(repository, true, -1); - if (tagModels.size() > 0) { - for (RefModel tagModel : tagModels) { - targets.add(tagModel.getName()); - } + + for (RefModel tagModel : JGitUtils.getTags(repository, true, -1)) { + targets.add(tagModel.getName()); } return targets; } @@ -1483,7 +1497,7 @@ // Create a tree object to reference from a commit TreeFormatter tree = new TreeFormatter(); - tree.append("NEWBRANCH", FileMode.REGULAR_FILE, blobId); + tree.append(".branch", FileMode.REGULAR_FILE, blobId); ObjectId treeId = odi.insert(tree); // Create a commit object -- Gitblit v1.9.1