diff options
author | Rafael Cavazin <rafaelcavazin@gmail.com> | 2013-01-27 12:46:50 -0200 |
---|---|---|
committer | Rafael Cavazin <rafaelcavazin@gmail.com> | 2013-01-27 12:46:50 -0200 |
commit | 06ae63123c94038b90153f4847de2c57c0193db8 (patch) | |
tree | 552bf7cfa3af0f314ac1337a12147b3ec515a1a5 /src/com/gitblit/utils/JGitUtils.java | |
parent | 71a71dad2df82bf8256c91bc48a600bafdef0d33 (diff) | |
parent | c7acc2e1fa86102bb87e715c8fe4e336329fbcc6 (diff) | |
download | gitblit-06ae63123c94038b90153f4847de2c57c0193db8.tar.gz gitblit-06ae63123c94038b90153f4847de2c57c0193db8.zip |
updating current development
Merge remote-tracking branch 'upstream/master' into translation_to_pt-br
Diffstat (limited to 'src/com/gitblit/utils/JGitUtils.java')
-rw-r--r-- | 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 beaa27da..1f2ae943 100644 --- a/src/com/gitblit/utils/JGitUtils.java +++ b/src/com/gitblit/utils/JGitUtils.java @@ -537,7 +537,7 @@ public class JGitUtils { * @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 @@ public class JGitUtils { }
}
} 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 @@ public class JGitUtils { * @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 @@ public class JGitUtils { 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 @@ public class JGitUtils { 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 class JGitUtils { */
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;
}
@@ -1604,6 +1616,32 @@ public class JGitUtils { }
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;
+ }
/**
* Returns the list of notes entered about the commit from the refs/notes
@@ -1720,4 +1758,18 @@ public class JGitUtils { }
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);
+ }
}
|