List of usage examples for org.eclipse.jgit.lib ObjectId fromString
public static ObjectId fromString(String str)
From source file:jetbrains.buildServer.buildTriggers.vcs.git.CommitLoaderImpl.java
License:Apache License
@Nullable public RevCommit findCommit(@NotNull Repository r, @NotNull String sha) { try {// ww w . ja va 2 s .c o m return getCommit(r, ObjectId.fromString(sha)); } catch (Exception e) { return null; } }
From source file:jetbrains.buildServer.buildTriggers.vcs.git.GitAbstractVcsFileContentProvider.java
License:Apache License
private boolean isValid(@Nullable String version) { if (version == null) return false; try {//from w w w . j a v a 2 s. c om ObjectId.fromString(version); return true; } catch (IllegalArgumentException e) { return false; } }
From source file:jetbrains.buildServer.buildTriggers.vcs.git.GitCollectChangesPolicy.java
License:Apache License
private void ensureRepositoryStateLoaded(@NotNull OperationContext context, @NotNull Repository db, @NotNull RepositoryStateData state, @NotNull FetchAllRefs fetch, boolean throwErrors) throws Exception { GitVcsRoot root = context.getGitRoot(); for (Map.Entry<String, String> entry : state.getBranchRevisions().entrySet()) { String ref = entry.getKey(); String revision = GitUtils.versionRevision(entry.getValue()); if (myCommitLoader.findCommit(db, revision) != null) continue; if (!fetch.isInvoked()) fetch.fetchTrackedRefs();//from w w w. j av a 2 s. c o m if (myCommitLoader.findCommit(db, revision) != null) continue; if (!fetch.allRefsFetched()) fetch.fetchAllRefs(); try { myCommitLoader.getCommit(db, ObjectId.fromString(revision)); } catch (IncorrectObjectTypeException e) { LOG.warn("Ref " + ref + " points to a non-commit " + revision); } catch (Exception e) { if (throwErrors) { throw new VcsException("Cannot find revision " + revision + " in branch " + ref + " in VCS root " + LogUtil.describe(root), e); } else { LOG.warn("Cannot find revision " + revision + " in branch " + ref + " in VCS root " + LogUtil.describe(root)); } } } }
From source file:jetbrains.buildServer.buildTriggers.vcs.git.GitCollectChangesPolicy.java
License:Apache License
private List<RevCommit> getCommits(@NotNull RepositoryStateData state, @NotNull Repository r, @NotNull RevWalk walk) throws IOException { List<RevCommit> revisions = new ArrayList<RevCommit>(); for (String revision : state.getBranchRevisions().values()) { ObjectId id = ObjectId.fromString(GitUtils.versionRevision(revision)); if (r.hasObject(id)) { RevObject obj = walk.parseAny(id); if (obj.getType() == Constants.OBJ_COMMIT) revisions.add((RevCommit) obj); }// ww w .ja va 2 s. c om } return revisions; }
From source file:jetbrains.buildServer.buildTriggers.vcs.git.GitMergeSupport.java
License:Apache License
@NotNull public Map<MergeTask, MergeResult> tryMerge(@NotNull VcsRoot root, @NotNull List<MergeTask> tasks, @NotNull MergeOptions options) throws VcsException { Map<MergeTask, MergeResult> mergeResults = new HashMap<MergeTask, MergeResult>(); OperationContext context = myVcs.createContext(root, "merge"); try {/*from www . jav a2 s . c o m*/ Repository db = context.getRepository(); for (MergeTask t : tasks) { ObjectId src = ObjectId.fromString(t.getSourceRevision()); ObjectId dst = ObjectId.fromString(t.getDestinationRevision()); ResolveMerger merger = (ResolveMerger) MergeStrategy.RECURSIVE.newMerger(db, true); try { boolean success = merger.merge(dst, src); if (success) { mergeResults.put(t, MergeResult.createMergeSuccessResult()); } else { mergeResults.put(t, MergeResult.createMergeError(merger.getUnmergedPaths())); } } catch (IOException mergeException) { mergeResults.put(t, MergeResult.createMergeError(mergeException.getMessage())); } } } catch (Exception e) { throw context.wrapException(e); } finally { context.close(); } return mergeResults; }
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();/*from www . j a va2 s.c om*/ //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(); //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);// www . j av a2s. com 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); }
From source file:jetbrains.buildServer.buildTriggers.vcs.git.tests.CollectChangesTest.java
License:Apache License
@TestFor(issues = { "TW-36080", "TW-35700" }) @Test(dataProvider = "separateProcess,newConnectionForPrune") public void branch_turned_into_dir(boolean fetchInSeparateProcess, boolean newConnectionForPrune) throws Exception { myConfig.setSeparateProcessForFetch(fetchInSeparateProcess).setNewConnectionForPrune(newConnectionForPrune); VcsRoot root = vcsRoot().withFetchUrl(myRepo).withBranch("master").build(); RepositoryStateData s1 = createVersionState("refs/heads/master", map("refs/heads/master", "f3f826ce85d6dad25156b2d7550cedeb1a422f4c", "refs/heads/patch-tests", "a894d7d58ffde625019a9ecf8267f5f1d1e5c341")); RepositoryStateData s2 = createVersionState("refs/heads/master", map("refs/heads/master", "3b9fbfbb43e7edfad018b482e15e7f93cca4e69f", "refs/heads/patch-tests", "a894d7d58ffde625019a9ecf8267f5f1d1e5c341")); git().getCollectChangesPolicy().collectChanges(root, s1, s2, CheckoutRules.DEFAULT); //rename refs/heads/patch-tests to refs/heads/patch-tests/a and make it point to commit not yet fetched by TC, so the fetch is required Repository r = new RepositoryBuilder().setGitDir(myRepo).build(); r.getRefDatabase().newRename("refs/heads/patch-tests", "refs/heads/patch-tests/a").rename(); RefUpdate refUpdate = r.updateRef("refs/heads/patch-tests/a"); refUpdate.setForceUpdate(true);//from w ww.j a v a2s . co m refUpdate.setNewObjectId(ObjectId.fromString("39679cc440c83671fbf6ad8083d92517f9602300")); refUpdate.update(); RepositoryStateData s3 = createVersionState("refs/heads/master", map("refs/heads/master", "3b9fbfbb43e7edfad018b482e15e7f93cca4e69f", "refs/heads/patch-tests/a", "39679cc440c83671fbf6ad8083d92517f9602300")); git().getCollectChangesPolicy().collectChanges(root, s2, s3, CheckoutRules.DEFAULT); }
From source file:jetbrains.buildServer.buildTriggers.vcs.git.tests.CollectChangesTest.java
License:Apache License
@TestFor(issues = "TW-43643") public void should_fetch_all_refs_when_commit_not_found() throws Exception { File repo = getRemoteRepositoryDir("TW-43643-1"); VcsRoot rootBranch1 = vcsRoot().withFetchUrl(repo).withBranch("branch1").build(); //clone repository on server RepositoryStateData s1 = RepositoryStateData.createVersionState("refs/heads/branch1", "b56875abce7e1488991223c29ed14cc26ec4b786"); RepositoryStateData s2 = RepositoryStateData.createVersionState("refs/heads/branch1", "22d8a6d243915cb9f878a0ef95a0999bb5f56715"); git().getCollectChangesPolicy().collectChanges(rootBranch1, s1, s2, CheckoutRules.DEFAULT); //update remote repository: branch1 is removed, branch2 is added File updatedRepo = getRemoteRepositoryDir("TW-43643-2"); FileUtil.delete(repo);/*from w w w . j ava2s .co m*/ repo.mkdirs(); FileUtil.copyDir(updatedRepo, repo); //delete clone on server to emulate git gc which prunes the '22d8a6d243915cb9f878a0ef95a0999bb5f56715' //commit unreachable from branches (tags are not fetched by default) MirrorManagerImpl mirrors = new MirrorManagerImpl(myConfig.build(), new HashCalculatorImpl()); File cloneOnServer = mirrors.getMirrorDir(repo.getCanonicalPath()); FileUtil.delete(cloneOnServer); //collect changes in master to clone the repository VcsRoot rootMaster = vcsRoot().withFetchUrl(repo).withBranch("master").build(); RepositoryStateData s3 = RepositoryStateData.createVersionState("refs/heads/master", "b56875abce7e1488991223c29ed14cc26ec4b786"); RepositoryStateData s4 = RepositoryStateData.createVersionState("refs/heads/master", "ea5bd5a6e37ac1592fb1c4864bb38cbce95fa93a"); git().getCollectChangesPolicy().collectChanges(rootMaster, s3, s4, CheckoutRules.DEFAULT); //clone on the server doesn't contain the commit branch1 was pointing to: Repository repository = new RepositoryBuilder().setGitDir(cloneOnServer).setBare().build(); then(repository.hasObject(ObjectId.fromString("22d8a6d243915cb9f878a0ef95a0999bb5f56715"))).isFalse(); //but we we collect changes between branch1 and branch2 we should fetch all //available refs, get the '22d8a6d243915cb9f878a0ef95a0999bb5f56715' reachable from tag //and report changes: VcsRoot rootBranch2 = vcsRoot().withFetchUrl(repo).withBranch("branch2").build(); RepositoryStateData s5 = RepositoryStateData.createVersionState("refs/heads/branch2", "bc979d0e5bc0e6030a9db27c75004e6eb8cdb961"); List<ModificationData> changes = git().getCollectChangesPolicy().collectChanges(rootBranch1, s2, rootBranch2, s5, CheckoutRules.DEFAULT); then(changes).extracting("version").containsExactly("bc979d0e5bc0e6030a9db27c75004e6eb8cdb961"); }
From source file:jetbrains.buildServer.buildTriggers.vcs.git.tests.GitLabelingSupportTest.java
License:Apache License
@Test(dataProvider = "true,false") public void should_push_all_objects_missing_in_remote_repository(boolean usePackHeuristics) throws Exception { myConfig.setUsePackHeuristic(usePackHeuristics); GitVcsSupport git = buildGit();/*from www .jav a 2s . co m*/ File remoteRepoDir = getRemoteRepositoryDir("repo_for_fetch.2"); VcsRoot root = vcsRoot().withFetchUrl(remoteRepoDir).build(); makeCloneOnServer(git, root); //erase commit in the remote repository FileUtil.delete(remoteRepoDir); remoteRepoDir.mkdirs(); FileUtil.copyDir(getRemoteRepositoryDir("repo_for_fetch.1"), remoteRepoDir); //label erased commit String erasedCommit = "d47dda159b27b9a8c4cee4ce98e4435eb5b17168"; git.getLabelingSupport().label("label", erasedCommit, root, CheckoutRules.DEFAULT); //erased commit should appear in the remote repository Repository r = new RepositoryBuilder().setGitDir(remoteRepoDir).build(); RevWalk walk = new RevWalk(r); try { walk.parseCommit(ObjectId.fromString(erasedCommit)); } catch (MissingObjectException e) { fail("Not all objects were pushed, labeled commit " + erasedCommit + " is missing"); } finally { walk.release(); r.close(); } }