James Moger
2012-02-09 e7883877a98dfcae3f75f1c1a562120d89aed22a
src/com/gitblit/utils/JGitUtils.java
@@ -290,21 +290,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 +316,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));
            }
         }
      }
@@ -1163,9 +1160,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 +1190,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;
   }