Example usage for org.eclipse.jgit.lib ObjectId fromString

List of usage examples for org.eclipse.jgit.lib ObjectId fromString

Introduction

In this page you can find the example usage for org.eclipse.jgit.lib ObjectId fromString.

Prototype

public static ObjectId fromString(String str) 

Source Link

Document

Convert an ObjectId from hex characters.

Usage

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();
    }
}