Search in sources :

Example 31 with Change

use of org.eclipse.egit.core.synchronize.GitCommitsModelCache.Change in project egit by eclipse.

the class WorkingTreeChangeCacheTest method shouldListTwoWorkspaceDeletionsInFolder.

@Test
public void shouldListTwoWorkspaceDeletionsInFolder() throws Exception {
    // given
    writeTrashFile(db, "folder/a.txt", "trash");
    writeTrashFile(db, "folder/b.txt", "trash");
    try (Git git = new Git(db)) {
        git.add().addFilepattern("folder/a.txt").addFilepattern("folder/b.txt").call();
    }
    deleteTrashFile(db, "folder/a.txt");
    deleteTrashFile(db, "folder/b.txt");
    // when
    Map<String, Change> result = WorkingTreeChangeCache.build(db);
    // then
    assertThat(result.size(), is(2));
    assertFileDeletion(result, "folder/a.txt", "a.txt");
    assertFileDeletion(result, "folder/b.txt", "b.txt");
}
Also used : Git(org.eclipse.jgit.api.Git) Change(org.eclipse.egit.core.synchronize.GitCommitsModelCache.Change) Test(org.junit.Test)

Example 32 with Change

use of org.eclipse.egit.core.synchronize.GitCommitsModelCache.Change in project egit by eclipse.

the class WorkingTreeChangeCacheTest method shouldListTwoWorkspaceDeletions.

@Test
public void shouldListTwoWorkspaceDeletions() throws Exception {
    // given
    writeTrashFile(db, "a.txt", "trash");
    writeTrashFile(db, "b.txt", "trash");
    try (Git git = new Git(db)) {
        git.add().addFilepattern("a.txt").addFilepattern("b.txt").call();
    }
    deleteTrashFile(db, "a.txt");
    deleteTrashFile(db, "b.txt");
    // when
    Map<String, Change> result = WorkingTreeChangeCache.build(db);
    // then
    assertThat(result.size(), is(2));
    assertFileDeletion(result, "a.txt", "a.txt");
    assertFileDeletion(result, "b.txt", "b.txt");
}
Also used : Git(org.eclipse.jgit.api.Git) Change(org.eclipse.egit.core.synchronize.GitCommitsModelCache.Change) Test(org.junit.Test)

Example 33 with Change

use of org.eclipse.egit.core.synchronize.GitCommitsModelCache.Change in project egit by eclipse.

the class GitModelCacheTest method shouldReturnChildren.

@Test
public void shouldReturnChildren() throws Exception {
    Repository repo = lookupRepository(leftRepoFile);
    writeTrashFile(repo, "dir/a.txt", "trash");
    writeTrashFile(repo, "dir/b.txt", "trash");
    writeTrashFile(repo, "dir/c.txt", "trash");
    writeTrashFile(repo, "dir/d.txt", "trash");
    try (Git git = new Git(repo)) {
        git.add().addFilepattern("dir").call();
    }
    Map<String, Change> changes = StagedChangeCache.build(repo);
    assertEquals(4, changes.size());
    GitModelCache cache = new GitModelCache(createModelRepository(), repo, changes);
    GitModelObject[] cacheChildren = cache.getChildren();
    assertEquals(1, cacheChildren.length);
    GitModelObject dir = cacheChildren[0];
    assertEquals("dir", dir.getName());
    GitModelObject[] dirChildren = dir.getChildren();
    assertEquals(4, dirChildren.length);
}
Also used : Repository(org.eclipse.jgit.lib.Repository) Git(org.eclipse.jgit.api.Git) Change(org.eclipse.egit.core.synchronize.GitCommitsModelCache.Change) Test(org.junit.Test)

Example 34 with Change

use of org.eclipse.egit.core.synchronize.GitCommitsModelCache.Change in project egit by eclipse.

the class GitModelRepository method getWorkingChanges.

private List<GitModelObjectContainer> getWorkingChanges() {
    List<GitModelObjectContainer> result = new ArrayList<>();
    if (gsd.shouldIncludeLocal()) {
        Repository repo = gsd.getRepository();
        Map<String, Change> stagedChanges = StagedChangeCache.build(repo);
        GitModelCache gitCache = new GitModelCache(this, repo, stagedChanges);
        int gitCacheLen = gitCache.getChildren().length;
        Map<String, Change> workingChanges = WorkingTreeChangeCache.build(repo);
        GitModelWorkingTree gitWorkingTree = new GitModelWorkingTree(this, repo, workingChanges);
        int gitWorkingTreeLen = gitWorkingTree.getChildren().length;
        if (gitCacheLen > 0 || gitWorkingTreeLen > 0) {
            result.add(gitCache);
            result.add(gitWorkingTree);
        }
    }
    return result;
}
Also used : Repository(org.eclipse.jgit.lib.Repository) ArrayList(java.util.ArrayList) Change(org.eclipse.egit.core.synchronize.GitCommitsModelCache.Change)

Example 35 with Change

use of org.eclipse.egit.core.synchronize.GitCommitsModelCache.Change in project egit by eclipse.

the class StagedChangeCache method build.

/**
 * @param repo
 *            repository which should be scanned
 * @return list of changes in git staging area
 */
public static Map<String, Change> build(Repository repo) {
    try (TreeWalk tw = new TreeWalk(repo)) {
        tw.addTree(new DirCacheIterator(repo.readDirCache()));
        ObjectId headId = repo.resolve(HEAD);
        RevCommit headCommit = null;
        if (headId != null) {
            try (RevWalk rw = new RevWalk(repo)) {
                headCommit = rw.parseCommit(headId);
            }
        }
        AbbreviatedObjectId commitId;
        if (headCommit != null) {
            tw.addTree(headCommit.getTree());
            commitId = AbbreviatedObjectId.fromObjectId(headCommit);
        } else {
            tw.addTree(new EmptyTreeIterator());
            commitId = AbbreviatedObjectId.fromObjectId(zeroId());
        }
        tw.setRecursive(true);
        headCommit = null;
        MutableObjectId idBuf = new MutableObjectId();
        Map<String, Change> result = new HashMap<String, Change>();
        while (tw.next()) {
            if (!shouldIncludeEntry(tw))
                continue;
            Change change = new Change();
            change.name = tw.getNameString();
            change.remoteCommitId = commitId;
            tw.getObjectId(idBuf, 0);
            change.objectId = AbbreviatedObjectId.fromObjectId(idBuf);
            tw.getObjectId(idBuf, 1);
            change.remoteObjectId = AbbreviatedObjectId.fromObjectId(idBuf);
            calculateAndSetChangeKind(RIGHT, change);
            result.put(tw.getPathString(), change);
        }
        return result;
    } catch (IOException e) {
        Activator.logError(e.getMessage(), e);
        return new HashMap<String, Change>(0);
    }
}
Also used : MutableObjectId(org.eclipse.jgit.lib.MutableObjectId) ObjectId(org.eclipse.jgit.lib.ObjectId) AbbreviatedObjectId(org.eclipse.jgit.lib.AbbreviatedObjectId) HashMap(java.util.HashMap) Change(org.eclipse.egit.core.synchronize.GitCommitsModelCache.Change) IOException(java.io.IOException) RevWalk(org.eclipse.jgit.revwalk.RevWalk) MutableObjectId(org.eclipse.jgit.lib.MutableObjectId) AbbreviatedObjectId(org.eclipse.jgit.lib.AbbreviatedObjectId) EmptyTreeIterator(org.eclipse.jgit.treewalk.EmptyTreeIterator) DirCacheIterator(org.eclipse.jgit.dircache.DirCacheIterator) TreeWalk(org.eclipse.jgit.treewalk.TreeWalk) RevCommit(org.eclipse.jgit.revwalk.RevCommit)

Aggregations

Change (org.eclipse.egit.core.synchronize.GitCommitsModelCache.Change)35 Test (org.junit.Test)29 Git (org.eclipse.jgit.api.Git)21 HashMap (java.util.HashMap)3 Repository (org.eclipse.jgit.lib.Repository)3 IOException (java.io.IOException)2 ArrayList (java.util.ArrayList)2 IPath (org.eclipse.core.runtime.IPath)2 DirCacheIterator (org.eclipse.jgit.dircache.DirCacheIterator)2 MutableObjectId (org.eclipse.jgit.lib.MutableObjectId)2 TreeWalk (org.eclipse.jgit.treewalk.TreeWalk)2 Map (java.util.Map)1 Path (org.eclipse.core.runtime.Path)1 FileModelFactory (org.eclipse.egit.ui.internal.synchronize.model.TreeBuilder.FileModelFactory)1 TreeModelFactory (org.eclipse.egit.ui.internal.synchronize.model.TreeBuilder.TreeModelFactory)1 AbbreviatedObjectId (org.eclipse.jgit.lib.AbbreviatedObjectId)1 ObjectId (org.eclipse.jgit.lib.ObjectId)1 RevCommit (org.eclipse.jgit.revwalk.RevCommit)1 RevWalk (org.eclipse.jgit.revwalk.RevWalk)1 EmptyTreeIterator (org.eclipse.jgit.treewalk.EmptyTreeIterator)1