List of usage examples for org.eclipse.jgit.lib Repository newObjectInserter
@NonNull
public ObjectInserter newObjectInserter()
From source file:com.google.gerrit.server.notedb.ChangeRebuilder.java
License:Apache License
private void writeToBatch(BatchMetaDataUpdate batch, AbstractChangeUpdate update, Repository repo) throws IOException, OrmException { try (ObjectInserter inserter = repo.newObjectInserter()) { update.setInserter(inserter);//from ww w .j a v a 2 s .c om update.writeCommit(batch); } }
From source file:com.google.gerrit.server.notedb.ChangeRebuilderImpl.java
License:Apache License
@Override public boolean rebuildProject(ReviewDb db, ImmutableMultimap<Project.NameKey, Change.Id> allChanges, Project.NameKey project, Repository allUsersRepo) throws NoSuchChangeException, IOException, OrmException, ConfigInvalidException { checkArgument(allChanges.containsKey(project)); boolean ok = true; ProgressMonitor pm = new TextProgressMonitor(new PrintWriter(System.out)); NoteDbUpdateManager manager = updateManagerFactory.create(project); pm.beginTask(FormatUtil.elide(project.get(), 50), allChanges.get(project).size()); try (ObjectInserter allUsersInserter = allUsersRepo.newObjectInserter(); RevWalk allUsersRw = new RevWalk(allUsersInserter.newReader())) { manager.setAllUsersRepo(allUsersRepo, allUsersRw, allUsersInserter, new ChainedReceiveCommands()); for (Change.Id changeId : allChanges.get(project)) { try { buildUpdates(manager, ChangeBundle.fromReviewDb(db, changeId)); } catch (Throwable t) { log.error("Failed to rebuild change " + changeId, t); ok = false;//from w ww . ja v a 2 s .com } pm.update(1); } manager.execute(); } finally { pm.endTask(); } return ok; }
From source file:com.google.gerrit.server.notedb.NoteDbUpdateManager.java
License:Apache License
private OpenRepo openRepo(Project.NameKey p) throws IOException { Repository repo = repoManager.openRepository(p); ObjectInserter ins = repo.newObjectInserter(); return new OpenRepo(repo, new RevWalk(ins.newReader()), ins, new ChainedReceiveCommands(), true); }
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 w w . ja v a 2s . c o m 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.patch.PatchListLoader.java
License:Apache License
private static ObjectId emptyTree(final Repository repo) throws IOException { try (ObjectInserter oi = repo.newObjectInserter()) { ObjectId id = oi.insert(Constants.OBJ_TREE, new byte[] {}); oi.flush();//from w w w. j a v a2s. c om return id; } }
From source file:com.google.gerrit.server.project.CreateProject.java
License:Apache License
private void createEmptyCommits(Repository repo, Project.NameKey project, List<String> refs) throws IOException { try (ObjectInserter oi = repo.newObjectInserter()) { CommitBuilder cb = new CommitBuilder(); cb.setTreeId(oi.insert(Constants.OBJ_TREE, new byte[] {})); cb.setAuthor(metaDataUpdateFactory.getUserPersonIdent()); cb.setCommitter(serverIdent);// w ww .ja v a2 s. c om cb.setMessage("Initial empty repository\n"); ObjectId id = oi.insert(cb); oi.flush(); for (String ref : refs) { RefUpdate ru = repo.updateRef(ref); ru.setNewObjectId(id); Result result = ru.update(); switch (result) { case NEW: referenceUpdated.fire(project, ru, ReceiveCommand.Type.CREATE); break; default: { throw new IOException(String.format("Failed to create ref \"%s\": %s", ref, result.name())); } } } } catch (IOException e) { log.error("Cannot create empty commit for " + project.get(), e); throw e; } }
From source file:com.google.gerrit.server.project.PerformCreateProject.java
License:Apache License
private void createEmptyCommits(final Repository repo, final Project.NameKey project, final List<String> refs) throws IOException { ObjectInserter oi = repo.newObjectInserter(); try {//from w w w .ja v a2 s.c o m CommitBuilder cb = new CommitBuilder(); cb.setTreeId(oi.insert(Constants.OBJ_TREE, new byte[] {})); cb.setAuthor(metaDataUpdateFactory.getUserPersonIdent()); cb.setCommitter(serverIdent); cb.setMessage("Initial empty repository\n"); ObjectId id = oi.insert(cb); oi.flush(); for (String ref : refs) { RefUpdate ru = repo.updateRef(ref); ru.setNewObjectId(id); final Result result = ru.update(); switch (result) { case NEW: referenceUpdated.fire(project, ru); break; default: { throw new IOException(String.format("Failed to create ref \"%s\": %s", ref, result.name())); } } } } catch (IOException e) { log.error("Cannot create empty commit for " + createProjectArgs.getProjectName(), e); throw e; } finally { oi.release(); } }
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))); }/*from w w w . j a v a 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.update.UnfusedNoteDbBatchUpdate.java
License:Apache License
private Map<Change.Id, ChangeResult> executeChangeOps(boolean dryrun) throws Exception { logDebug("Executing change ops"); Map<Change.Id, ChangeResult> result = Maps.newLinkedHashMapWithExpectedSize(ops.keySet().size()); initRepository();/*from ww w . java 2s.co m*/ Repository repo = repoView.getRepository(); // TODO(dborowitz): Teach NoteDbUpdateManager to allow reusing the same inserter and batch ref // update as in executeUpdateRepo. try (ObjectInserter ins = repo.newObjectInserter(); ObjectReader reader = ins.newReader(); RevWalk rw = new RevWalk(reader); NoteDbUpdateManager updateManager = updateManagerFactory.create(project).setChangeRepo(repo, rw, ins, new ChainedReceiveCommands(repo))) { if (user.isIdentifiedUser()) { updateManager.setRefLogIdent(user.asIdentifiedUser().newRefLogIdent(when, tz)); } for (Map.Entry<Change.Id, Collection<BatchUpdateOp>> e : ops.asMap().entrySet()) { Change.Id id = e.getKey(); ChangeContextImpl ctx = newChangeContext(id); boolean dirty = false; logDebug("Applying {} ops for change {}", e.getValue().size(), id); for (BatchUpdateOp op : e.getValue()) { dirty |= op.updateChange(ctx); } if (!dirty) { logDebug("No ops reported dirty, short-circuiting"); result.put(id, ChangeResult.SKIPPED); continue; } for (ChangeUpdate u : ctx.updates.values()) { updateManager.add(u); } if (ctx.deleted) { logDebug("Change {} was deleted", id); updateManager.deleteChange(id); result.put(id, ChangeResult.DELETED); } else { result.put(id, ChangeResult.UPSERTED); } } if (!dryrun) { logDebug("Executing NoteDb updates"); updateManager.execute(); } } return result; }
From source file:com.google.gerrit.sshd.commands.CreateProject.java
License:Apache License
private void createEmptyCommit(final Repository repo, final Project.NameKey project, final String ref) throws IOException { ObjectInserter oi = repo.newObjectInserter(); try {//from w w w . ja v a 2 s . co m CommitBuilder cb = new CommitBuilder(); cb.setTreeId(oi.insert(Constants.OBJ_TREE, new byte[] {})); cb.setAuthor(metaDataUpdateFactory.getUserPersonIdent()); cb.setCommitter(serverIdent); cb.setMessage("Initial empty repository\n"); ObjectId id = oi.insert(cb); oi.flush(); RefUpdate ru = repo.updateRef(Constants.HEAD); ru.setNewObjectId(id); final Result result = ru.update(); switch (result) { case NEW: rq.scheduleUpdate(project, ref); break; default: { throw new IOException(result.name()); } } } catch (IOException e) { log.error("Cannot create empty commit for " + projectName, e); throw e; } finally { oi.release(); } }