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");
}
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");
}
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);
}
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;
}
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);
}
}
Aggregations