List of usage examples for org.eclipse.jgit.lib Constants OBJ_BLOB
int OBJ_BLOB
To view the source code for org.eclipse.jgit.lib Constants OBJ_BLOB.
Click Source Link
From source file:com.google.gerrit.server.patch.AutoMerger.java
License:Apache License
/** * Perform an auto-merge of the parents of the given merge commit. * * @return auto-merge commit or {@code null} if an auto-merge commit * couldn't be created. Headers of the returned RevCommit are parsed. */// w ww . ja v a 2 s.c o m public RevCommit merge(Repository repo, RevWalk rw, final ObjectInserter ins, RevCommit merge, ThreeWayMergeStrategy mergeStrategy) throws IOException { rw.parseHeaders(merge); String hash = merge.name(); String refName = RefNames.REFS_CACHE_AUTOMERGE + hash.substring(0, 2) + "/" + hash.substring(2); Ref ref = repo.getRefDatabase().exactRef(refName); if (ref != null && ref.getObjectId() != null) { RevObject obj = rw.parseAny(ref.getObjectId()); if (obj instanceof RevCommit) { return (RevCommit) obj; } return commit(repo, rw, ins, refName, obj, merge); } ResolveMerger m = (ResolveMerger) mergeStrategy.newMerger(repo, true); DirCache dc = DirCache.newInCore(); m.setDirCache(dc); m.setObjectInserter(new ObjectInserter.Filter() { @Override protected ObjectInserter delegate() { return ins; } @Override public void flush() { } @Override public void close() { } }); boolean couldMerge; try { couldMerge = m.merge(merge.getParents()); } catch (IOException e) { // It is not safe to continue further down in this method as throwing // an exception most likely means that the merge tree was not created // and m.getMergeResults() is empty. This would mean that all paths are // unmerged and Gerrit UI would show all paths in the patch list. log.warn("Error attempting automerge " + refName, e); return null; } ObjectId treeId; if (couldMerge) { treeId = m.getResultTreeId(); } else { RevCommit ours = merge.getParent(0); RevCommit theirs = merge.getParent(1); rw.parseBody(ours); rw.parseBody(theirs); String oursMsg = ours.getShortMessage(); String theirsMsg = theirs.getShortMessage(); String oursName = String.format("HEAD (%s %s)", ours.abbreviate(6).name(), oursMsg.substring(0, Math.min(oursMsg.length(), 60))); String theirsName = String.format("BRANCH (%s %s)", theirs.abbreviate(6).name(), theirsMsg.substring(0, Math.min(theirsMsg.length(), 60))); MergeFormatter fmt = new MergeFormatter(); Map<String, MergeResult<? extends Sequence>> r = m.getMergeResults(); Map<String, ObjectId> resolved = new HashMap<>(); for (Map.Entry<String, MergeResult<? extends Sequence>> entry : r.entrySet()) { MergeResult<? extends Sequence> p = entry.getValue(); try (TemporaryBuffer buf = new TemporaryBuffer.LocalFile(null, 10 * 1024 * 1024)) { fmt.formatMerge(buf, p, "BASE", oursName, theirsName, UTF_8.name()); buf.close(); try (InputStream in = buf.openInputStream()) { resolved.put(entry.getKey(), ins.insert(Constants.OBJ_BLOB, buf.length(), in)); } } } DirCacheBuilder builder = dc.builder(); int cnt = dc.getEntryCount(); for (int i = 0; i < cnt;) { DirCacheEntry entry = dc.getEntry(i); if (entry.getStage() == 0) { builder.add(entry); i++; continue; } int next = dc.nextEntry(i); String path = entry.getPathString(); DirCacheEntry res = new DirCacheEntry(path); if (resolved.containsKey(path)) { // For a file with content merge conflict that we produced a result // above on, collapse the file down to a single stage 0 with just // the blob content, and a randomly selected mode (the lowest stage, // which should be the merge base, or ours). res.setFileMode(entry.getFileMode()); res.setObjectId(resolved.get(path)); } else if (next == i + 1) { // If there is exactly one stage present, shouldn't be a conflict... res.setFileMode(entry.getFileMode()); res.setObjectId(entry.getObjectId()); } else if (next == i + 2) { // Two stages suggests a delete/modify conflict. Pick the higher // stage as the automatic result. entry = dc.getEntry(i + 1); res.setFileMode(entry.getFileMode()); res.setObjectId(entry.getObjectId()); } else { // 3 stage conflict, no resolve above // Punt on the 3-stage conflict and show the base, for now. res.setFileMode(entry.getFileMode()); res.setObjectId(entry.getObjectId()); } builder.add(res); i = next; } builder.finish(); treeId = dc.writeTree(ins); } ins.flush(); return commit(repo, rw, ins, refName, treeId, merge); }
From source file:com.google.gerrit.server.patch.PatchFile.java
License:Apache License
private Text load(final ObjectId tree, final String path) throws MissingObjectException, IncorrectObjectTypeException, CorruptObjectException, IOException { if (path == null) { return Text.EMPTY; }/*ww w . j a v a 2 s .c o m*/ final TreeWalk tw = TreeWalk.forPath(repo, path, tree); if (tw == null) { return Text.EMPTY; } if (tw.getFileMode(0).getObjectType() != Constants.OBJ_BLOB) { return Text.EMPTY; } return new Text(repo.open(tw.getObjectId(0), Constants.OBJ_BLOB)); }
From source file:com.google.gerrit.server.patch.PatchListLoader.java
License:Apache License
public static RevTree automerge(Repository repo, RevWalk rw, RevCommit b, ThreeWayMergeStrategy mergeStrategy, boolean save) throws IOException { String hash = b.name();/*from w ww . j a va 2 s . c om*/ String refName = RefNames.REFS_CACHE_AUTOMERGE + hash.substring(0, 2) + "/" + hash.substring(2); Ref ref = repo.getRefDatabase().exactRef(refName); if (ref != null && ref.getObjectId() != null) { return rw.parseTree(ref.getObjectId()); } ResolveMerger m = (ResolveMerger) mergeStrategy.newMerger(repo, true); try (ObjectInserter ins = repo.newObjectInserter()) { DirCache dc = DirCache.newInCore(); m.setDirCache(dc); m.setObjectInserter(new ObjectInserter.Filter() { @Override protected ObjectInserter delegate() { return ins; } @Override public void flush() { } @Override public void close() { } }); boolean couldMerge; try { couldMerge = m.merge(b.getParents()); } catch (IOException e) { // It is not safe to continue further down in this method as throwing // an exception most likely means that the merge tree was not created // and m.getMergeResults() is empty. This would mean that all paths are // unmerged and Gerrit UI would show all paths in the patch list. log.warn("Error attempting automerge " + refName, e); return null; } ObjectId treeId; if (couldMerge) { treeId = m.getResultTreeId(); } else { RevCommit ours = b.getParent(0); RevCommit theirs = b.getParent(1); rw.parseBody(ours); rw.parseBody(theirs); String oursMsg = ours.getShortMessage(); String theirsMsg = theirs.getShortMessage(); String oursName = String.format("HEAD (%s %s)", ours.abbreviate(6).name(), oursMsg.substring(0, Math.min(oursMsg.length(), 60))); String theirsName = String.format("BRANCH (%s %s)", theirs.abbreviate(6).name(), theirsMsg.substring(0, Math.min(theirsMsg.length(), 60))); MergeFormatter fmt = new MergeFormatter(); Map<String, MergeResult<? extends Sequence>> r = m.getMergeResults(); Map<String, ObjectId> resolved = new HashMap<>(); for (Map.Entry<String, MergeResult<? extends Sequence>> entry : r.entrySet()) { MergeResult<? extends Sequence> p = entry.getValue(); try (TemporaryBuffer buf = new TemporaryBuffer.LocalFile(null, 10 * 1024 * 1024)) { fmt.formatMerge(buf, p, "BASE", oursName, theirsName, "UTF-8"); buf.close(); try (InputStream in = buf.openInputStream()) { resolved.put(entry.getKey(), ins.insert(Constants.OBJ_BLOB, buf.length(), in)); } } } DirCacheBuilder builder = dc.builder(); int cnt = dc.getEntryCount(); for (int i = 0; i < cnt;) { DirCacheEntry entry = dc.getEntry(i); if (entry.getStage() == 0) { builder.add(entry); i++; continue; } int next = dc.nextEntry(i); String path = entry.getPathString(); DirCacheEntry res = new DirCacheEntry(path); if (resolved.containsKey(path)) { // For a file with content merge conflict that we produced a result // above on, collapse the file down to a single stage 0 with just // the blob content, and a randomly selected mode (the lowest stage, // which should be the merge base, or ours). res.setFileMode(entry.getFileMode()); res.setObjectId(resolved.get(path)); } else if (next == i + 1) { // If there is exactly one stage present, shouldn't be a conflict... res.setFileMode(entry.getFileMode()); res.setObjectId(entry.getObjectId()); } else if (next == i + 2) { // Two stages suggests a delete/modify conflict. Pick the higher // stage as the automatic result. entry = dc.getEntry(i + 1); res.setFileMode(entry.getFileMode()); res.setObjectId(entry.getObjectId()); } else { // 3 stage conflict, no resolve above // Punt on the 3-stage conflict and show the base, for now. res.setFileMode(entry.getFileMode()); res.setObjectId(entry.getObjectId()); } builder.add(res); i = next; } builder.finish(); treeId = dc.writeTree(ins); } ins.flush(); if (save) { RefUpdate update = repo.updateRef(refName); update.setNewObjectId(treeId); update.disableRefLog(); update.forceUpdate(); } return rw.lookupTree(treeId); } }
From source file:com.google.gerrit.server.StarredChangesUtil.java
License:Apache License
private static TreeSet<String> readLabels(Repository repo, ObjectId id) throws IOException { if (ObjectId.zeroId().equals(id)) { return new TreeSet<>(); }//from w w w . ja v a 2 s . c o m try (ObjectReader reader = repo.newObjectReader()) { ObjectLoader obj = reader.open(id, Constants.OBJ_BLOB); TreeSet<String> labels = new TreeSet<>(); Iterables.addAll(labels, Splitter.on(CharMatcher.whitespace()).omitEmptyStrings() .split(new String(obj.getCachedBytes(Integer.MAX_VALUE), UTF_8))); return labels; } }
From source file:com.google.gerrit.server.StarredChangesUtil.java
License:Apache License
public static ObjectId writeLabels(Repository repo, SortedSet<String> labels) throws IOException { SortedSet<String> invalidLabels = validateLabels(labels); if (!invalidLabels.isEmpty()) { throw new IllegalArgumentException( String.format("Invalid star labels: %s", Joiner.on(", ").join(labels))); }//www . java 2 s. c o m try (ObjectInserter oi = repo.newObjectInserter()) { ObjectId id = oi.insert(Constants.OBJ_BLOB, Joiner.on("\n").join(labels).getBytes(UTF_8)); oi.flush(); return id; } }
From source file:com.google.gerrit.server.tools.hooks.CommitMsgHookTest.java
License:Apache License
private DirCacheEntry file(final String name) throws IOException { try (ObjectInserter oi = repository.newObjectInserter()) { final DirCacheEntry e = new DirCacheEntry(name); e.setFileMode(FileMode.REGULAR_FILE); e.setObjectId(oi.insert(Constants.OBJ_BLOB, Constants.encode(name))); oi.flush();/*from w w w .j av a2 s . c o m*/ return e; } }
From source file:com.google.gitiles.BlobSoyData.java
License:Open Source License
public Map<String, Object> toSoyData(String path, ObjectId blobId) throws MissingObjectException, IOException { Map<String, Object> data = Maps.newHashMapWithExpectedSize(4); data.put("sha", ObjectId.toString(blobId)); ObjectLoader loader = walk.getObjectReader().open(blobId, Constants.OBJ_BLOB); String content;/* w w w. j a v a 2 s . com*/ try { byte[] raw = loader.getCachedBytes(MAX_FILE_SIZE); content = !RawText.isBinary(raw) ? RawParseUtils.decode(raw) : null; } catch (LargeObjectException.OutOfMemory e) { throw e; } catch (LargeObjectException e) { content = null; } data.put("data", content); if (content != null) { data.put("lang", guessPrettifyLang(path, content)); } else if (content == null) { data.put("size", Long.toString(loader.getSize())); } if (path != null && view.getRevision().getPeeledType() == OBJ_COMMIT) { data.put("logUrl", GitilesView.log().copyFrom(view).toUrl()); } return data; }
From source file:com.google.gitiles.doc.ImageLoader.java
License:Open Source License
private String readAndBase64Encode(String path) { String type = getMimeType(path); if (type == null) { return FilterImageDataUri.INSTANCE.getInnocuousOutput(); }/*ww w. ja v a2 s . co m*/ try { TreeWalk tw = TreeWalk.forPath(reader, path, root); if (tw == null || tw.getFileMode(0) != FileMode.REGULAR_FILE) { return FilterImageDataUri.INSTANCE.getInnocuousOutput(); } ObjectId id = tw.getObjectId(0); byte[] raw = reader.open(id, Constants.OBJ_BLOB).getCachedBytes(imageLimit); if (raw.length > imageLimit) { return FilterImageDataUri.INSTANCE.getInnocuousOutput(); } return "data:" + type + ";base64," + BaseEncoding.base64().encode(raw); } catch (LargeObjectException.ExceedsLimit e) { return FilterImageDataUri.INSTANCE.getInnocuousOutput(); } catch (IOException e) { log.error(String.format("cannot read repo %s image %s from %s", view.getRepositoryName(), path, root.name()), e); return FilterImageDataUri.INSTANCE.getInnocuousOutput(); } }
From source file:com.google.gitiles.ReadmeHelper.java
License:Open Source License
SanitizedContent render() { try {/*from w w w . j a va2 s . c om*/ int inputLimit = cfg.getInt("markdown", "inputLimit", 5 << 20); byte[] raw = reader.open(readmeId, Constants.OBJ_BLOB).getCachedBytes(inputLimit); String md = RawParseUtils.decode(raw); RootNode root = GitilesMarkdown.parseFile(view, readmePath, md); if (root == null) { return null; } int imageLimit = cfg.getInt("markdown", "imageLimit", 256 << 10); ImageLoader img = null; if (imageLimit > 0) { img = new ImageLoader(reader, view, rootTree, readmePath, imageLimit); } return new MarkdownToHtml(view, cfg).setImageLoader(img).setReadme(true).toSoyHtml(root); } catch (LargeObjectException | IOException e) { log.error(String.format("error rendering %s/%s", view.getRepositoryName(), readmePath), e); return null; } }
From source file:com.madgag.agit.BlobViewFragment.java
License:Open Source License
@Override public Loader<BlobView> onCreateLoader(int id, Bundle b) { return new AsyncLoader<BlobView>(getActivity()) { public BlobView loadInBackground() { Bundle args = getArguments(); try { Repository repo = new FileRepository(args.getString(GITDIR)); ObjectId revision = repo.resolve(args.getString(UNTIL_REVS)); RevWalk revWalk = new RevWalk(repo); RevCommit commit = revWalk.parseCommit(revision); TreeWalk treeWalk = TreeWalk.forPath(repo, args.getString(PATH), commit.getTree()); ObjectId blobId = treeWalk.getObjectId(0); ObjectLoader objectLoader = revWalk.getObjectReader().open(blobId, Constants.OBJ_BLOB); ObjectStream binaryTestStream = objectLoader.openStream(); boolean blobIsBinary = RawText.isBinary(binaryTestStream); binaryTestStream.close(); Log.d(TAG, "blobIsBinary=" + blobIsBinary); return blobIsBinary ? new BinaryBlobView(objectLoader, treeWalk.getNameString()) : new TextBlobView(objectLoader); } catch (IOException e) { throw new RuntimeException(e); }/*from ww w. j a v a 2s . co m*/ } }; }