James Moger
2013-02-25 64b6f382d35e1fea0172b222277dae0312f274e4
src/com/gitblit/utils/JGitUtils.java
@@ -537,7 +537,7 @@
    * @param path
    * @return content as a byte []
    */
   public static byte[] getByteContent(Repository repository, RevTree tree, final String path) {
   public static byte[] getByteContent(Repository repository, RevTree tree, final String path, boolean throwError) {
      RevWalk rw = new RevWalk(repository);
      TreeWalk tw = new TreeWalk(repository);
      tw.setFilter(PathFilterGroup.createFromStrings(Collections.singleton(path)));
@@ -572,7 +572,9 @@
            }
         }
      } catch (Throwable t) {
         error(t, repository, "{0} can't find {1} in tree {2}", path, tree.name());
         if (throwError) {
            error(t, repository, "{0} can't find {1} in tree {2}", path, tree.name());
         }
      } finally {
         rw.dispose();
         tw.release();
@@ -591,7 +593,7 @@
    * @return UTF-8 string content
    */
   public static String getStringContent(Repository repository, RevTree tree, String blobPath, String... charsets) {
      byte[] content = getByteContent(repository, tree, blobPath);
      byte[] content = getByteContent(repository, tree, blobPath, true);
      if (content == null) {
         return null;
      }
@@ -741,11 +743,7 @@
            df.setDetectRenames(true);
            List<DiffEntry> diffs = df.scan(parent.getTree(), commit.getTree());
            for (DiffEntry diff : diffs) {
               String objectId = null;
               if (FileMode.GITLINK.equals(diff.getNewMode())) {
                  objectId = diff.getNewId().name();
               }
               String objectId = diff.getNewId().name();
               if (diff.getChangeType().equals(ChangeType.DELETE)) {
                  list.add(new PathChangeModel(diff.getOldPath(), diff.getOldPath(), 0, diff
                        .getNewMode().getBits(), objectId, commit.getId().getName(), diff
@@ -1584,7 +1582,7 @@
    */
   public static List<SubmoduleModel> getSubmodules(Repository repository, RevTree tree) {
      List<SubmoduleModel> list = new ArrayList<SubmoduleModel>();
      byte [] blob = getByteContent(repository, tree, ".gitmodules");
      byte [] blob = getByteContent(repository, tree, ".gitmodules", false);
      if (blob == null) {
         return list;
      }
@@ -1617,6 +1615,32 @@
         }
      }
      return null;
   }
   public static String getSubmoduleCommitId(Repository repository, String path, RevCommit commit) {
      String commitId = null;
      RevWalk rw = new RevWalk(repository);
      TreeWalk tw = new TreeWalk(repository);
      tw.setFilter(PathFilterGroup.createFromStrings(Collections.singleton(path)));
      try {
         tw.reset(commit.getTree());
         while (tw.next()) {
            if (tw.isSubtree() && !path.equals(tw.getPathString())) {
               tw.enterSubtree();
               continue;
            }
            if (FileMode.GITLINK == tw.getFileMode(0)) {
               commitId = tw.getObjectId(0).getName();
               break;
            }
         }
      } catch (Throwable t) {
         error(t, repository, "{0} can't find {1} in commit {2}", path, commit.name());
      } finally {
         rw.dispose();
         tw.release();
      }
      return commitId;
   }
   /**
@@ -1734,4 +1758,18 @@
      }
      return success;
   }
   /**
    * Reads the sparkleshare id, if present, from the repository.
    *
    * @param repository
    * @return an id or null
    */
   public static String getSparkleshareId(Repository repository) {
      byte[] content = getByteContent(repository, null, ".sparkleshare", false);
      if (content == null) {
         return null;
      }
      return StringUtils.decodeString(content);
   }
}