List of usage examples for org.eclipse.jgit.lib RefUpdate update
public Result update() throws IOException
From source file:com.google.gerrit.server.schema.Schema_146.java
License:Apache License
private void rewriteUserBranch(Repository repo, RevWalk rw, ObjectInserter oi, ObjectId emptyTree, Ref ref, Account account) throws IOException { ObjectId current = createInitialEmptyCommit(oi, emptyTree, account.getRegisteredOn()); rw.reset();/*from ww w .j a va 2 s. com*/ rw.sort(RevSort.TOPO); rw.sort(RevSort.REVERSE, true); rw.markStart(rw.parseCommit(ref.getObjectId())); RevCommit c; while ((c = rw.next()) != null) { if (isInitialEmptyCommit(emptyTree, c)) { return; } CommitBuilder cb = new CommitBuilder(); cb.setParentId(current); cb.setTreeId(c.getTree()); cb.setAuthor(c.getAuthorIdent()); cb.setCommitter(c.getCommitterIdent()); cb.setMessage(c.getFullMessage()); cb.setEncoding(c.getEncoding()); current = oi.insert(cb); } oi.flush(); RefUpdate ru = repo.updateRef(ref.getName()); ru.setExpectedOldObjectId(ref.getObjectId()); ru.setNewObjectId(current); ru.setForceUpdate(true); ru.setRefLogIdent(serverIdent); ru.setRefLogMessage(getClass().getSimpleName(), true); Result result = ru.update(); if (result != Result.FORCED) { throw new IOException(String.format("Failed to update ref %s: %s", ref.getName(), result.name())); } }
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 {// w w w . j a va2s . com 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(); } }
From source file:com.googlesource.gerrit.plugins.manifest.TempRef.java
License:Apache License
@Inject public TempRef(GitRepositoryManager repoManager, @Assisted Branch.NameKey branch) throws IOException { this.repoManager = repoManager; Project.NameKey project = branch.getParentKey(); tempRef = new Branch.NameKey(project, "refs/temp/" + UUID.randomUUID().toString()); Repository repo = repoManager.openRepository(project); try {//w w w .j a v a 2 s. c om RefUpdate refUpdate = repo.updateRef(tempRef.get()); refUpdate.setNewObjectId(repo.getRef(branch.get()).getObjectId()); refUpdate.setForceUpdate(true); refUpdate.update(); } finally { repo.close(); } }
From source file:com.googlesource.gerrit.plugins.refprotection.BackupRef.java
License:Open Source License
public void createBackup(RefUpdatedEvent event, ProjectResource project) { String refName = event.getRefName(); try (Repository git = repoManager.openRepository(project.getNameKey())) { String backupRef = get(project, refName); // No-op if the backup branch name is same as the original if (backupRef.equals(refName)) { return; }//from ww w.j a v a 2 s .c om try (RevWalk revWalk = new RevWalk(git)) { RefUpdateAttribute refUpdate = event.refUpdate.get(); if (cfg.getFromGerritConfig(pluginName).getBoolean("createTag", false)) { TagBuilder tag = new TagBuilder(); AccountAttribute submitter = event.submitter.get(); tag.setTagger(new PersonIdent(submitter.name, submitter.email)); tag.setObjectId(revWalk.parseCommit(ObjectId.fromString(refUpdate.oldRev))); String update = "Non-fast-forward update to"; if (refUpdate.newRev.equals(ObjectId.zeroId().getName())) { update = "Deleted"; } String type = "branch"; String fullMessage = ""; if (refUpdate.refName.startsWith(R_TAGS)) { type = "tag"; try { RevTag origTag = revWalk.parseTag(ObjectId.fromString(refUpdate.oldRev)); SimpleDateFormat format = new SimpleDateFormat("EEE MMM d HH:mm:ss yyyy ZZZZ"); PersonIdent taggerIdent = origTag.getTaggerIdent(); String tagger = String.format("Tagger: %s <%s>\nDate: %s", taggerIdent.getName(), taggerIdent.getEmailAddress(), format.format(taggerIdent.getWhen())); fullMessage = "\n\nOriginal tag:\n" + tagger + "\n\n" + origTag.getFullMessage(); } catch (MissingObjectException e) { log.warn("Original tag does not exist", e); } catch (IncorrectObjectTypeException e) { log.warn("Original tag was not a tag", e); } catch (IOException e) { log.warn("Unable to read original tag details", e); } } tag.setMessage(update + " " + type + " " + refUpdate.refName + fullMessage); tag.setTag(backupRef); ObjectInserter inserter = git.newObjectInserter(); ObjectId tagId = inserter.insert(tag); inserter.flush(); RefUpdate tagRef = git.updateRef(tag.getTag()); tagRef.setNewObjectId(tagId); tagRef.setRefLogMessage("tagged deleted branch/tag " + tag.getTag(), false); tagRef.setForceUpdate(false); Result result = tagRef.update(); switch (result) { case NEW: case FORCED: log.debug("Successfully created backup tag"); break; case LOCK_FAILURE: log.error("Failed to lock repository while creating backup tag"); break; case REJECTED: log.error("Tag already exists while creating backup tag"); break; default: log.error("Unknown error while creating backup tag"); } } else { BranchInput input = new BranchInput(); input.ref = backupRef; // We need to parse the commit to ensure if it's a tag, we get the // commit the tag points to! input.revision = ObjectId .toString(revWalk.parseCommit(ObjectId.fromString(refUpdate.oldRev)).getId()); try { createBranchFactory.create(backupRef).apply(project, input); } catch (BadRequestException | AuthException | ResourceConflictException | IOException e) { log.error(e.getMessage(), e); } } } } catch (RepositoryNotFoundException e) { log.error("Repository does not exist", e); } catch (IOException e) { log.error("Could not open repository", e); } }
From source file:com.microsoft.gittf.core.tasks.CloneTask.java
License:Open Source License
@Override public TaskStatus run(final TaskProgressMonitor progressMonitor) throws Exception { final String taskName = Messages.formatString("CloneTask.CloningFormat", //$NON-NLS-1$ tfsPath,/* ww w .j a v a 2s . co m*/ bare ? repository.getDirectory().getAbsolutePath() : repository.getWorkTree().getAbsolutePath()); progressMonitor.beginTask(taskName, 1, TaskProgressDisplay.DISPLAY_PROGRESS.combine(TaskProgressDisplay.DISPLAY_SUBTASK_DETAIL)); /* * Query the changesets. */ /* See if this is an actual server path. */ final Item item = vcClient.getItem(tfsPath, versionSpec, DeletedState.NON_DELETED, GetItemsOptions.NONE); Check.notNull(item, "item"); //$NON-NLS-1$ if (item.getItemType() != ItemType.FOLDER) { return new TaskStatus(TaskStatus.ERROR, Messages.formatString("CloneTask.CannotCloneFileFormat", tfsPath)); //$NON-NLS-1$ } /* Determine the latest changeset on the server. */ final Changeset[] changesets = vcClient.queryHistory(tfsPath, versionSpec, 0, RecursionType.FULL, null, new ChangesetVersionSpec(0), versionSpec, depth, false, false, false, false); /* * Create and configure the repository. */ repository.create(bare); final ConfigureRepositoryTask configureTask = new ConfigureRepositoryTask(repository, serverURI, tfsPath); configureTask.setTag(tag); final TaskStatus configureStatus = new TaskExecutor(new NullTaskProgressMonitor()).execute(configureTask); if (!configureStatus.isOK()) { return configureStatus; } if (changesets.length > 0) { ObjectId lastCommitID = null; ObjectId lastTreeID = null; Item[] previousChangesetItems = null; /* * Download changesets. */ final int numberOfChangesetToDownload = changesets.length; progressMonitor.setWork(numberOfChangesetToDownload); for (int i = numberOfChangesetToDownload; i > 0; i--) { CreateCommitForChangesetVersionSpecTask commitTask = new CreateCommitForChangesetVersionSpecTask( repository, vcClient, changesets[i - 1], previousChangesetItems, lastCommitID, witClient); TaskStatus commitStatus = new TaskExecutor(progressMonitor.newSubTask(1)).execute(commitTask); if (!commitStatus.isOK()) { return commitStatus; } lastCommitID = commitTask.getCommitID(); lastTreeID = commitTask.getCommitTreeID(); previousChangesetItems = commitTask.getCommittedItems(); Check.notNull(lastCommitID, "lastCommitID"); //$NON-NLS-1$ Check.notNull(lastTreeID, "lastTreeID"); //$NON-NLS-1$ new ChangesetCommitMap(repository).setChangesetCommit(changesets[i - 1].getChangesetID(), commitTask.getCommitID()); progressMonitor.displayVerbose(Messages.formatString("CloneTask.ClonedFormat", //$NON-NLS-1$ Integer.toString(changesets[i - 1].getChangesetID()), ObjectIdUtil.abbreviate(repository, lastCommitID))); } progressMonitor.setDetail(Messages.getString("CloneTask.Finalizing")); //$NON-NLS-1$ /* Update master head reference */ RefUpdate ref = repository.updateRef(Constants.R_HEADS + Constants.MASTER); ref.setNewObjectId(lastCommitID); ref.update(); /* Create tfs branch */ TfsBranchUtil.create(repository, Constants.R_HEADS + Constants.MASTER); /* * Check out the cloned commit. */ if (!bare) { DirCache dirCache = repository.lockDirCache(); DirCacheCheckout checkout = new DirCacheCheckout(repository, dirCache, lastTreeID); checkout.checkout(); dirCache.unlock(); RepositoryUtil.fixFileAttributes(repository); } progressMonitor.endTask(); final int finalChangesetID = changesets[0].getChangesetID(); if (numberOfChangesetToDownload == 1) { progressMonitor.displayMessage(Messages.formatString("CloneTask.ClonedFormat", //$NON-NLS-1$ Integer.toString(finalChangesetID), ObjectIdUtil.abbreviate(repository, lastCommitID))); } else { progressMonitor.displayMessage(Messages.formatString("CloneTask.ClonedMultipleFormat", //$NON-NLS-1$ changesets.length, Integer.toString(finalChangesetID), ObjectIdUtil.abbreviate(repository, lastCommitID))); } } else { // the folder exists on the server but is empty progressMonitor.displayMessage(Messages.getString("CloneTask.NothingToDownload")); //$NON-NLS-1$ progressMonitor.displayMessage(Messages.formatString("CloneTask.ClonedFolderEmptyFormat", //$NON-NLS-1$ tfsPath)); } log.info("Clone task completed."); //$NON-NLS-1$ return TaskStatus.OK_STATUS; }
From source file:com.microsoft.gittf.core.util.TfsBranchUtil.java
License:Open Source License
/** * Updates the remote tracking branch and branch to point at the commit * specified./*from w ww. j av a2s. c om*/ * * @param repository * @param commitId * @throws IOException * @throws RefAlreadyExistsException * @throws RefNotFoundException * @throws InvalidRefNameException * @throws GitAPIException */ public static void update(Repository repository, ObjectId commitId) throws IOException, RefAlreadyExistsException, RefNotFoundException, InvalidRefNameException, GitAPIException { if (repository.isBare()) { Ref tfsBranchRef = repository.getRef(Constants.R_HEADS + GitTFConstants.GIT_TF_BRANCHNAME); if (tfsBranchRef == null) { create(repository); } RefUpdate ref = repository.updateRef(Constants.R_HEADS + GitTFConstants.GIT_TF_BRANCHNAME); ref.setNewObjectId(commitId); ref.setForceUpdate(true); ref.update(); } TfsRemoteReferenceUpdate remoteRefUpdate = new TfsRemoteReferenceUpdate(repository, commitId.name()); remoteRefUpdate.update(); }
From source file:com.palantir.gerrit.gerritci.servlets.JobsServlet.java
License:Apache License
public static void updateProjectRef(ObjectId treeId, ObjectInserter objectInserter, Repository repository, CurrentUser currentUser) throws IOException, NoFilepatternException, GitAPIException { // Create a branch Ref gerritCiRef = repository.getRef("refs/meta/gerrit-ci"); CommitBuilder commitBuilder = new CommitBuilder(); commitBuilder.setTreeId(treeId);//from ww w . j a v a 2 s . c o m logger.info("treeId: " + treeId); if (gerritCiRef != null) { ObjectId prevCommit = gerritCiRef.getObjectId(); logger.info("prevCommit: " + prevCommit); commitBuilder.setParentId(prevCommit); } // build commit logger.info("Adding git tree : " + treeId); commitBuilder.setMessage("Modify project build rules."); final IdentifiedUser iUser = (IdentifiedUser) currentUser; PersonIdent user = new PersonIdent(currentUser.getUserName(), iUser.getEmailAddresses().iterator().next()); commitBuilder.setAuthor(user); commitBuilder.setCommitter(user); ObjectId commitId = objectInserter.insert(commitBuilder); objectInserter.flush(); logger.info(" Making new commit: " + commitId); RefUpdate newRef = repository.updateRef("refs/meta/gerrit-ci"); newRef.setNewObjectId(commitId); newRef.update(); repository.close(); }
From source file:jbyoshi.gitupdate.processor.FastForward.java
License:Apache License
private static boolean tryFastForward(Repository repo, Ref ref, Ref target, Report report) throws GitAPIException, IOException { if (ref == null || target == null) { return false; }//from www .j a va2 s .c o m target = repo.peel(target); if (!ref.equals(repo.getRef(Constants.HEAD).getTarget())) { try (RevWalk revWalk = new RevWalk(repo)) { ObjectId targetId = target.getPeeledObjectId(); if (targetId == null) { targetId = target.getObjectId(); } RevCommit targetCommit = revWalk.lookupCommit(targetId); ObjectId sourceId = ref.getObjectId(); RevCommit sourceCommit = revWalk.lookupCommit(sourceId); if (revWalk.isMergedInto(sourceCommit, targetCommit)) { RefUpdate refUpdate = repo.updateRef(ref.getName()); refUpdate.setNewObjectId(targetCommit); refUpdate.setRefLogMessage("Fast forward", false); refUpdate.setExpectedOldObjectId(sourceId); Result rc = refUpdate.update(); switch (rc) { case NEW: case FAST_FORWARD: report.newChild(ref.getName() + " -> " + target.getName()).modified(); return true; case REJECTED: case LOCK_FAILURE: report.newErrorChild(new ConcurrentRefUpdateException(JGitText.get().couldNotLockHEAD, refUpdate.getRef(), rc)); break; case NO_CHANGE: break; default: report.newErrorChild(new JGitInternalException(MessageFormat .format(JGitText.get().updatingRefFailed, ref.getName(), targetId.toString(), rc))); break; } } return false; } } try { MergeResult result = Git.wrap(repo).merge().setFastForward(MergeCommand.FastForwardMode.FF_ONLY) .include(target.getTarget()).call(); if (result.getMergeStatus() == MergeResult.MergeStatus.ALREADY_UP_TO_DATE) { // Ignore } else if (result.getMergeStatus() == MergeResult.MergeStatus.FAST_FORWARD) { report.newChild("Fast-forwarded " + ref.getName() + " to " + target.getName()).modified(); return true; } else { report.newChild("Fast-forward failed: status " + result.getMergeStatus()).error(); } } catch (NoHeadException e) { // Ignore } return false; }
From source file:jetbrains.buildServer.buildTriggers.vcs.git.tests.AgentVcsSupportTest.java
License:Apache License
@TestFor(issues = "TW-46854") @Test(dataProvider = "mirrors") public void should_update_remote_tracking_branch_in_case_of_fast_forward_update(boolean useMirrors) throws Exception { File remoteRepo = myTempFiles.createTempDir(); copyRepository(dataFile("repo_for_fetch.2"), remoteRepo); VcsRootImpl root = vcsRoot().withAgentGitPath(getGitPath()).withFetchUrl(remoteRepo) .withUseMirrors(useMirrors).build(); String buildBranchParam = GitUtils.getGitRootBranchParamName(root); //run build in master branch AgentRunningBuild build = createRunningBuild(map(buildBranchParam, "refs/heads/master")); myVcsSupport.updateSources(root, CheckoutRules.DEFAULT, "d47dda159b27b9a8c4cee4ce98e4435eb5b17168", myCheckoutDir, build, false); //fast-forward update master to point to the same commit as master Repository remote = new RepositoryBuilder().setGitDir(remoteRepo).build(); RefUpdate refUpdate = remote.updateRef("refs/heads/personal"); refUpdate.setNewObjectId(ObjectId.fromString("add81050184d3c818560bdd8839f50024c188586")); refUpdate.update(); //run build in personal branch build = createRunningBuild(map(buildBranchParam, "refs/heads/personal")); myVcsSupport.updateSources(root, CheckoutRules.DEFAULT, "add81050184d3c818560bdd8839f50024c188586", myCheckoutDir, build, false); //fast-forward update personal branch to point to the same commit as master refUpdate = remote.updateRef("refs/heads/personal"); refUpdate.setNewObjectId(ObjectId.fromString("d47dda159b27b9a8c4cee4ce98e4435eb5b17168")); refUpdate.update();/*from w w w. j av a 2s.c om*/ //run build on updated personal branch build = createRunningBuild(map(buildBranchParam, "refs/heads/personal")); myVcsSupport.updateSources(root, CheckoutRules.DEFAULT, "d47dda159b27b9a8c4cee4ce98e4435eb5b17168", myCheckoutDir, build, false); //both branch and its remote-tracking branch should be updated Repository r = new RepositoryBuilder().setWorkTree(myCheckoutDir).build(); then(r.getAllRefs().get("refs/heads/personal").getObjectId().name()) .isEqualTo("d47dda159b27b9a8c4cee4ce98e4435eb5b17168"); then(r.getAllRefs().get("refs/remotes/origin/personal").getObjectId().name()) .isEqualTo("d47dda159b27b9a8c4cee4ce98e4435eb5b17168"); }
From source file:jetbrains.buildServer.buildTriggers.vcs.git.tests.AgentVcsSupportTest.java
License:Apache License
public void when_fetch_for_mirror_failed_remove_it_and_try_again() throws Exception { File repo = dataFile("repo_for_fetch.1"); File remoteRepo = myTempFiles.createTempDir(); copyRepository(repo, remoteRepo);/* w ww .java 2 s . co m*/ VcsRootImpl root = vcsRoot().withAgentGitPath(getGitPath()).withFetchUrl(GitUtils.toURL(remoteRepo)) .build(); AgentRunningBuild buildWithMirrors = createRunningBuild(true); myVcsSupport.updateSources(root, CheckoutRules.DEFAULT, "add81050184d3c818560bdd8839f50024c188586", myCheckoutDir, buildWithMirrors, false); //create branch tmp in the mirror File mirror = myBuilder.getMirrorManager().getMirrorDir(GitUtils.toURL(remoteRepo)); Repository r = new RepositoryBuilder().setBare().setGitDir(mirror).build(); RefUpdate update = r.updateRef("refs/heads/tmp"); update.setNewObjectId(ObjectId.fromString("add81050184d3c818560bdd8839f50024c188586")); update.update(); //update remote repo delete(remoteRepo); File updatedRepo = dataFile("repo_for_fetch.2.personal"); copyRepository(updatedRepo, remoteRepo); //create branch tmp/1 in remote repo, so fetch will fail r = new RepositoryBuilder().setBare().setGitDir(remoteRepo).build(); update = r.updateRef("refs/heads/tmp/1"); update.setNewObjectId(ObjectId.fromString("d47dda159b27b9a8c4cee4ce98e4435eb5b17168")); update.update(); //update succeeds myVcsSupport.updateSources(root, CheckoutRules.DEFAULT, "d47dda159b27b9a8c4cee4ce98e4435eb5b17168", myCheckoutDir, buildWithMirrors, false); }