From 06ae63123c94038b90153f4847de2c57c0193db8 Mon Sep 17 00:00:00 2001 From: Rafael Cavazin <rafaelcavazin@gmail.com> Date: Sun, 27 Jan 2013 09:46:50 -0500 Subject: [PATCH] updating current development --- src/com/gitblit/utils/JGitUtils.java | 70 ++++++++++++++++++++++++++++++---- 1 files changed, 61 insertions(+), 9 deletions(-) diff --git a/src/com/gitblit/utils/JGitUtils.java b/src/com/gitblit/utils/JGitUtils.java index beaa27d..1f2ae94 100644 --- a/src/com/gitblit/utils/JGitUtils.java +++ b/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 @@ -1457,6 +1455,20 @@ int maxCount) { return getRefs(repository, Constants.R_NOTES, fullName, maxCount); } + + /** + * Returns the list of refs in the specified base ref. If repository does + * not exist or is empty, an empty list is returned. + * + * @param repository + * @param fullName + * if true, /refs/yadayadayada is returned. If false, + * yadayadayada is returned. + * @return list of refs + */ + public static List<RefModel> getRefs(Repository repository, String baseRef) { + return getRefs(repository, baseRef, true, -1); + } /** * Returns a list of references in the repository matching "refs". If the @@ -1570,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; } @@ -1603,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; } /** @@ -1720,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); + } } -- Gitblit v1.9.1