Search in sources :

Example 86 with RevCommit

use of org.eclipse.jgit.revwalk.RevCommit in project fabric8 by jboss-fuse.

the class GitPatchRepositoryImpl method getFileContent.

@Override
public String getFileContent(Git fork, String sha1, String fileName) throws IOException {
    ObjectReader objectReader = fork.getRepository().newObjectReader();
    RevCommit commit = new RevWalk(fork.getRepository()).parseCommit(fork.getRepository().resolve(sha1));
    TreeWalk tw = new TreeWalk(fork.getRepository());
    tw.addTree(commit.getTree());
    tw.setRecursive(false);
    tw.setFilter(PathFilter.create(fileName));
    if (tw.next()) {
        ObjectId objectId = tw.getObjectId(0);
        ObjectLoader loader = fork.getRepository().open(objectId);
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        loader.copyTo(out);
        return new String(out.toByteArray(), "UTF-8");
    }
    return null;
}
Also used : ObjectId(org.eclipse.jgit.lib.ObjectId) ObjectReader(org.eclipse.jgit.lib.ObjectReader) ObjectLoader(org.eclipse.jgit.lib.ObjectLoader) ByteArrayOutputStream(org.apache.commons.io.output.ByteArrayOutputStream) RevWalk(org.eclipse.jgit.revwalk.RevWalk) TreeWalk(org.eclipse.jgit.treewalk.TreeWalk) RevCommit(org.eclipse.jgit.revwalk.RevCommit)

Example 87 with RevCommit

use of org.eclipse.jgit.revwalk.RevCommit in project fabric8 by jboss-fuse.

the class GitPatchRepositoryImpl method findTagsBetween.

@Override
public Map<String, RevTag> findTagsBetween(Git git, RevCommit c1, RevCommit c2) throws GitAPIException, IOException {
    Map<ObjectId, List<RevTag>> reverseReferences = new HashMap<>();
    RevWalk walk = new RevWalk(git.getRepository());
    for (Ref t : git.tagList().call()) {
        Ref peeled = git.getRepository().peel(t);
        if (peeled != null && peeled.getPeeledObjectId() != null) {
            if (!reverseReferences.containsKey(peeled.getPeeledObjectId())) {
                reverseReferences.put(peeled.getPeeledObjectId(), new LinkedList<RevTag>());
            }
            reverseReferences.get(peeled.getPeeledObjectId()).add(walk.parseTag(t.getObjectId()));
        }
    }
    Map<String, RevTag> result = new HashMap<>();
    Iterable<RevCommit> commits = git.log().addRange(c1, c2).call();
    for (RevCommit commit : commits) {
        if (reverseReferences.containsKey(commit.getId())) {
            for (RevTag tag : reverseReferences.get(commit.getId())) {
                result.put(tag.getTagName(), tag);
            }
        }
    }
    return result;
}
Also used : Ref(org.eclipse.jgit.lib.Ref) RevTag(org.eclipse.jgit.revwalk.RevTag) ObjectId(org.eclipse.jgit.lib.ObjectId) HashMap(java.util.HashMap) LinkedList(java.util.LinkedList) List(java.util.List) RevWalk(org.eclipse.jgit.revwalk.RevWalk) RevCommit(org.eclipse.jgit.revwalk.RevCommit)

Example 88 with RevCommit

use of org.eclipse.jgit.revwalk.RevCommit in project fabric8 by jboss-fuse.

the class GitPatchRepositoryIT method latestTag.

@Test
public void latestTag() throws GitAPIException, IOException {
    Git repo = repository.findOrCreateGitRepository(new File(patchesHome, "r3"), false);
    RevCommit c1 = repository.prepareCommit(repo, "commit1").call();
    RevCommit c2 = repository.prepareCommit(repo, "commit2").call();
    RevCommit c3 = repository.prepareCommit(repo, "commit3").call();
    repo.tag().setName("baseline-1.2.3").setObjectId(c1).call();
    repo.tag().setName("baseline-y-z-1.2.4").setObjectId(c1).call();
    // lower version, newer commit/tag
    repo.tag().setName("baseline-1.2.1").setObjectId(c3).call();
    repo.tag().setName("baseline-x-1.2.2").setObjectId(c3).call();
    RevTag tag = repository.findLatestBaseline(repo);
    assertThat(tag.getTagName(), equalTo("baseline-y-z-1.2.4"));
    assertThat(tag.getObject(), equalTo(c1.getId()));
}
Also used : Git(org.eclipse.jgit.api.Git) RevTag(org.eclipse.jgit.revwalk.RevTag) File(java.io.File) RevCommit(org.eclipse.jgit.revwalk.RevCommit) Test(org.junit.Test)

Example 89 with RevCommit

use of org.eclipse.jgit.revwalk.RevCommit in project fabric8 by jboss-fuse.

the class GitPatchRepositoryIT method currentBaseline.

@Test
public void currentBaseline() throws GitAPIException, IOException {
    Git repo = repository.findOrCreateGitRepository(new File(patchesHome, "r4"), false);
    repo.checkout().setName(GitPatchRepository.HISTORY_BRANCH).call();
    RevCommit c1 = repository.prepareCommit(repo, "commit1").call();
    repo.tag().setName("baseline-1.2.3").setObjectId(c1).call();
    RevCommit c2 = repository.prepareCommit(repo, "commit2").call();
    // for the purpose of test
    repo.tag().setName("baseline-1.2.1").setObjectId(c2).call();
    // 2nd tag for the same commit
    repo.tag().setName("baseline-in-fabric-1.2.1").setObjectId(c2).call();
    RevCommit c3 = repository.prepareCommit(repo, "commit3").call();
    RevTag tag1 = repository.findLatestBaseline(repo);
    assertThat(tag1.getTagName(), equalTo("baseline-1.2.3"));
    assertThat(tag1.getObject(), equalTo(c1.getId()));
    RevTag tag2 = repository.findCurrentBaseline(repo);
    assertThat(tag2.getTagName(), equalTo("baseline-in-fabric-1.2.1"));
    assertThat(tag2.getObject(), equalTo(c2.getId()));
}
Also used : Git(org.eclipse.jgit.api.Git) RevTag(org.eclipse.jgit.revwalk.RevTag) File(java.io.File) RevCommit(org.eclipse.jgit.revwalk.RevCommit) Test(org.junit.Test)

Example 90 with RevCommit

use of org.eclipse.jgit.revwalk.RevCommit in project fabric8 by jboss-fuse.

the class GitPatchManagementServiceForStandaloneChildContainersIT method installNonRollupPatch.

@Test
public void installNonRollupPatch() throws IOException, GitAPIException {
    initializationPerformedBaselineDistributionFoundInPatches();
    freshKarafStandaloneDistro();
    PatchManagement management = (PatchManagement) pm;
    GitPatchRepository repository = ((GitPatchManagementServiceImpl) pm).getGitPatchRepository();
    Git fork = repository.cloneRepository(repository.findOrCreateMainGitRepository(), true);
    // no changes, but commit
    ((GitPatchManagementServiceImpl) pm).applyUserChanges(fork);
    repository.prepareCommit(fork, "artificial change, not treated as user change (could be a patch)").call();
    repository.push(fork);
    FileUtils.write(new File(karafBase, "bin/shutdown"), "#!/bin/bash\nexit 42");
    ((GitPatchManagementServiceImpl) pm).applyUserChanges(fork);
    repository.closeRepository(fork, true);
    preparePatchZip("src/test/resources/content/patch1", "target/karaf/patches/source/patch-1.zip", false);
    List<PatchData> patches = management.fetchPatches(new File("target/karaf/patches/source/patch-1.zip").toURI().toURL());
    Patch patch = management.trackPatch(patches.get(0));
    String tx = management.beginInstallation(PatchKind.NON_ROLLUP);
    management.install(tx, patch, null);
    @SuppressWarnings("unchecked") Map<String, Git> transactions = (Map<String, Git>) getField(management, "pendingTransactions");
    assertThat(transactions.size(), equalTo(1));
    fork = transactions.values().iterator().next();
    ObjectId since = fork.getRepository().resolve("baseline-child-2.4.0.redhat-620133^{commit}");
    ObjectId to = fork.getRepository().resolve(tx);
    Iterable<RevCommit> commits = fork.log().addRange(since, to).call();
    List<String> commitList = Arrays.asList("[PATCH] Installing patch my-patch-1", "[PATCH] Apply user changes", "artificial change, not treated as user change (could be a patch)", "[PATCH] Apply user changes");
    int n = 0;
    for (RevCommit c : commits) {
        String msg = c.getShortMessage();
        assertThat(msg, equalTo(commitList.get(n++)));
    }
    assertThat(n, equalTo(commitList.size()));
    assertThat(fork.tagList().call().size(), equalTo(4));
    assertTrue(repository.containsTag(fork, "patch-management"));
    assertTrue(repository.containsTag(fork, "baseline-6.2.0"));
    assertTrue(repository.containsTag(fork, "baseline-child-2.4.0.redhat-620133"));
    assertFalse(repository.containsTag(fork, "patch-my-patch-1"));
    assertTrue(repository.containsTag(fork, "patch-my-patch-1-child"));
    assertThat("The conflict should be resolved in special way", FileUtils.readFileToString(new File(karafHome, "bin/setenv")), equalTo("JAVA_MIN_MEM=2G # Minimum memory for the JVM\n"));
}
Also used : ObjectId(org.eclipse.jgit.lib.ObjectId) GitPatchRepository(io.fabric8.patch.management.impl.GitPatchRepository) GitPatchManagementServiceImpl(io.fabric8.patch.management.impl.GitPatchManagementServiceImpl) Git(org.eclipse.jgit.api.Git) File(java.io.File) Map(java.util.Map) RevCommit(org.eclipse.jgit.revwalk.RevCommit) Test(org.junit.Test)

Aggregations

RevCommit (org.eclipse.jgit.revwalk.RevCommit)1302 Test (org.junit.Test)650 RevWalk (org.eclipse.jgit.revwalk.RevWalk)333 ObjectId (org.eclipse.jgit.lib.ObjectId)295 Repository (org.eclipse.jgit.lib.Repository)273 IOException (java.io.IOException)222 AbstractDaemonTest (com.google.gerrit.acceptance.AbstractDaemonTest)190 Ref (org.eclipse.jgit.lib.Ref)174 File (java.io.File)134 ArrayList (java.util.ArrayList)134 PushOneCommit (com.google.gerrit.acceptance.PushOneCommit)133 Git (org.eclipse.jgit.api.Git)133 PersonIdent (org.eclipse.jgit.lib.PersonIdent)105 Change (com.google.gerrit.entities.Change)87 TestRepository (org.eclipse.jgit.junit.TestRepository)72 GitAPIException (org.eclipse.jgit.api.errors.GitAPIException)70 ObjectReader (org.eclipse.jgit.lib.ObjectReader)64 ChangeInfo (com.google.gerrit.extensions.common.ChangeInfo)61 List (java.util.List)61 HashMap (java.util.HashMap)57