Refactor Repository's ref reading/writing for aggressive caching
[egit/zawir.git] / org.spearce.egit.core.test / src / org / spearce / egit / core / op / T0001_ConnectProviderOperationTest.java
blobf49c534727c88903e5b71fa20445441027f053bd
1 package org.spearce.egit.core.op;
3 import java.io.ByteArrayInputStream;
4 import java.io.File;
5 import java.io.IOException;
6 import java.util.Date;
7 import java.util.TimeZone;
9 import org.eclipse.core.resources.IFile;
10 import org.eclipse.core.runtime.CoreException;
11 import org.eclipse.core.runtime.IProgressMonitor;
12 import org.eclipse.core.runtime.IStatus;
13 import org.eclipse.core.runtime.jobs.Job;
14 import org.eclipse.team.core.RepositoryProvider;
15 import org.spearce.egit.core.test.GitTestCase;
16 import org.spearce.jgit.lib.Commit;
17 import org.spearce.jgit.lib.FileTreeEntry;
18 import org.spearce.jgit.lib.ObjectId;
19 import org.spearce.jgit.lib.ObjectWriter;
20 import org.spearce.jgit.lib.PersonIdent;
21 import org.spearce.jgit.lib.RefUpdate;
22 import org.spearce.jgit.lib.Repository;
23 import org.spearce.jgit.lib.Tree;
25 public class T0001_ConnectProviderOperationTest extends GitTestCase {
27 public void testNoRepository() throws CoreException {
29 ConnectProviderOperation operation = new ConnectProviderOperation(
30 project.getProject(), null);
31 operation.run(null);
33 // We are shared because we declared as shared
34 assertTrue(RepositoryProvider.isShared(project.getProject()));
35 assertTrue(!gitDir.exists());
38 public void testNewRepository() throws CoreException {
40 File gitDir = new File(project.getProject().getWorkspace().getRoot()
41 .getRawLocation().toFile(), ".git");
42 ConnectProviderOperation operation = new ConnectProviderOperation(
43 project.getProject(), gitDir);
44 operation.run(null);
46 assertTrue(RepositoryProvider.isShared(project.getProject()));
48 assertTrue(gitDir.exists());
51 public void testNewUnsharedFile() throws CoreException, IOException,
52 InterruptedException {
54 project.createSourceFolder();
55 IFile fileA = project.getProject().getFolder("src").getFile("A.java");
56 String srcA = "class A {\n" + "}\n";
57 fileA.create(new ByteArrayInputStream(srcA.getBytes()), false, null);
59 File gitDir = new File(project.getProject().getWorkspace().getRoot()
60 .getRawLocation().toFile(), ".git");
61 Repository thisGit = new Repository(gitDir);
62 thisGit.create();
63 Tree rootTree = new Tree(thisGit);
64 Tree prjTree = rootTree.addTree(project.getProject().getName());
65 Tree srcTree = prjTree.addTree("src");
66 FileTreeEntry entryA = srcTree.addFile("A.java");
67 ObjectWriter writer = new ObjectWriter(thisGit);
68 entryA.setId(writer.writeBlob(fileA.getRawLocation().toFile()));
69 srcTree.setId(writer.writeTree(srcTree));
70 prjTree.setId(writer.writeTree(prjTree));
71 rootTree.setId(writer.writeTree(rootTree));
72 Commit commit = new Commit(thisGit);
73 commit.setTree(rootTree);
74 commit.setAuthor(new PersonIdent("J. Git", "j.git@egit.org", new Date(
75 1999, 1, 1), TimeZone.getTimeZone("GMT+1")));
76 commit.setCommitter(commit.getAuthor());
77 commit.setMessage("testNewUnsharedFile\n\nJunit tests\n");
78 ObjectId id = writer.writeCommit(commit);
79 RefUpdate lck = thisGit.updateRef("refs/heads/master");
80 assertNotNull("obtained lock", lck);
81 lck.setNewObjectId(id);
82 assertEquals(RefUpdate.Result.NEW, lck.forceUpdate());
84 // helper asserts, this is not what we are really testing
85 assertTrue("blob missing", new File(gitDir,
86 "objects/2e/2439c32d01f0ef39644d561945e8f4b2239489").exists());
88 assertTrue("tree missing", new File(gitDir,
89 "objects/87/a105cc4bc0a79885d07ec560c3eee49438acf0").exists());
90 assertTrue("tree missing", new File(gitDir,
91 "objects/08/ccc3d91a14d337a45f355d3d63bd97fd5e4db9").exists());
92 assertTrue("tree missing", new File(gitDir,
93 "objects/9d/aeec817090098f05eeca858e3a552d78b0a346").exists());
94 assertTrue("commit missing", new File(gitDir,
95 "objects/09/6f1a84091b90b6d9fb12f95848da69496305c1").exists());
97 ConnectProviderOperation operation = new ConnectProviderOperation(
98 project.getProject(), null);
99 operation.run(null);
101 final boolean f[] = new boolean[1];
102 new Job("wait") {
103 protected IStatus run(IProgressMonitor monitor) {
105 System.out.println("MyJob");
106 f[0] = true;
107 return null;
111 setRule(project.getProject());
112 schedule();
115 while (!f[0]) {
116 System.out.println("Waiting");
117 Thread.sleep(1000);
119 System.out.println("DONE");