Fix build and test failures
[egit.git] / org.eclipse.egit.core.test / src / org / eclipse / egit / core / test / internal / mapping / T0002_history.java
blob2c748ab25561a2a5770affeae4e6ccdbc6bfd283
1 /*******************************************************************************
2 * Copyright (C) 2008, Robin Rosenberg <robin.rosenberg@dewire.com>
3 * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org>
5 * All rights reserved. This program and the accompanying materials
6 * are made available under the terms of the Eclipse Public License v1.0
7 * which accompanies this distribution, and is available at
8 * http://www.eclipse.org/legal/epl-v10.html
9 *******************************************************************************/
10 package org.eclipse.egit.core.test.internal.mapping;
12 import java.io.File;
13 import java.io.FileWriter;
14 import java.io.IOException;
15 import java.util.Date;
16 import java.util.TimeZone;
18 import org.eclipse.core.runtime.NullProgressMonitor;
19 import org.eclipse.egit.core.GitProvider;
20 import org.eclipse.egit.core.op.ConnectProviderOperation;
21 import org.eclipse.egit.core.test.GitTestCase;
22 import org.eclipse.team.core.RepositoryProvider;
23 import org.eclipse.team.core.history.IFileHistory;
24 import org.eclipse.team.core.history.IFileHistoryProvider;
25 import org.eclipse.team.core.history.IFileRevision;
26 import org.eclipse.jgit.lib.Commit;
27 import org.eclipse.jgit.lib.Constants;
28 import org.eclipse.jgit.lib.FileTreeEntry;
29 import org.eclipse.jgit.lib.ObjectId;
30 import org.eclipse.jgit.lib.ObjectWriter;
31 import org.eclipse.jgit.lib.PersonIdent;
32 import org.eclipse.jgit.lib.RefUpdate;
33 import org.eclipse.jgit.lib.Repository;
34 import org.eclipse.jgit.lib.Tree;
36 public class T0002_history extends GitTestCase {
38 protected static final PersonIdent jauthor;
40 protected static final PersonIdent jcommitter;
42 static {
43 jauthor = new PersonIdent("J. Author", "jauthor@example.com");
44 jcommitter = new PersonIdent("J. Committer", "jcommitter@example.com");
47 private File workDir;
48 private File gitDir;
49 private Repository thisGit;
50 private Tree tree;
51 private ObjectWriter objectWriter;
53 protected void setUp() throws Exception {
54 super.setUp();
55 project.createSourceFolder();
56 gitDir = new File(project.getProject().getWorkspace().getRoot()
57 .getRawLocation().toFile(), Constants.DOT_GIT);
58 thisGit = new Repository(gitDir);
59 workDir = thisGit.getWorkDir();
60 thisGit.create();
61 objectWriter = new ObjectWriter(thisGit);
63 tree = new Tree(thisGit);
64 Tree projectTree = tree.addTree("Project-1");
65 File project1_a_txt = createFile("Project-1/A.txt","A.txt - first version\n");
66 addFile(projectTree,project1_a_txt);
67 projectTree.setId(objectWriter.writeTree(projectTree));
68 File project1_b_txt = createFile("Project-1/B.txt","B.txt - first version\n");
69 addFile(projectTree,project1_b_txt);
70 projectTree.setId(objectWriter.writeTree(projectTree));
71 tree.setId(objectWriter.writeTree(tree));
72 Commit commit = new Commit(thisGit);
73 commit.setAuthor(new PersonIdent(jauthor, new Date(0L), TimeZone
74 .getTimeZone("GMT+1")));
75 commit.setCommitter(new PersonIdent(jcommitter, new Date(0L), TimeZone
76 .getTimeZone("GMT+1")));
77 commit.setMessage("Foo\n\nMessage");
78 commit.setTree(tree);
79 ObjectId commitId = objectWriter.writeCommit(commit);
81 tree = new Tree(thisGit);
82 projectTree = tree.addTree("Project-1");
83 addFile(projectTree,project1_a_txt);
85 File project1_b_v2_txt = createFile("Project-1/B.txt","B.txt - second version\n");
86 addFile(projectTree,project1_b_v2_txt);
87 projectTree.setId(objectWriter.writeTree(projectTree));
88 tree.setId(objectWriter.writeTree(tree));
89 commit = new Commit(thisGit);
90 commit.setAuthor(new PersonIdent(jauthor, new Date(0L), TimeZone
91 .getTimeZone("GMT+1")));
92 commit.setCommitter(new PersonIdent(jcommitter, new Date(0L), TimeZone
93 .getTimeZone("GMT+1")));
94 commit.setMessage("Modified");
95 commit.setParentIds(new ObjectId[] { commitId });
96 commit.setTree(tree);
97 commitId = objectWriter.writeCommit(commit);
99 RefUpdate lck = thisGit.updateRef("refs/heads/master");
100 assertNotNull("obtained lock", lck);
101 lck.setNewObjectId(commitId);
102 assertEquals(RefUpdate.Result.NEW, lck.forceUpdate());
104 ConnectProviderOperation operation = new ConnectProviderOperation(
105 project.getProject(), gitDir);
106 operation.run(null);
109 private void addFile(Tree t,File f) throws IOException {
110 ObjectId id = objectWriter.writeBlob(f);
111 t.addEntry(new FileTreeEntry(t,id,f.getName().getBytes("UTF-8"),false));
114 private File createFile(String name, String content) throws IOException {
115 File f = new File(workDir, name);
116 FileWriter fileWriter = new FileWriter(f);
117 fileWriter.write(content);
118 fileWriter.close();
119 return f;
122 public void testSingleRevision_1() {
123 GitProvider provider = (GitProvider)RepositoryProvider.getProvider(project.project);
124 assertNotNull(provider);
125 IFileHistoryProvider fileHistoryProvider = provider.getFileHistoryProvider();
126 IFileHistory fileHistory = fileHistoryProvider.getFileHistoryFor(project.getProject().getWorkspace().getRoot().findMember("Project-1/A.txt"), IFileHistoryProvider.SINGLE_LINE_OF_DESCENT, new NullProgressMonitor());
127 IFileRevision fileRevision = fileHistory.getFileRevision("60f0d7917fe2aed5c92b5bc35dfb55b9b8ada359");
128 assertEquals("60f0d7917fe2aed5c92b5bc35dfb55b9b8ada359", fileRevision.getContentIdentifier());
129 assertEquals("J. Author",fileRevision.getAuthor());
133 public void testSingleRevision_2() {
134 GitProvider provider = (GitProvider)RepositoryProvider.getProvider(project.project);
135 assertNotNull(provider);
136 IFileHistoryProvider fileHistoryProvider = provider.getFileHistoryProvider();
137 IFileHistory fileHistory = fileHistoryProvider.getFileHistoryFor(project.getProject().getWorkspace().getRoot().findMember("Project-1/A.txt"), IFileHistoryProvider.SINGLE_LINE_OF_DESCENT, new NullProgressMonitor());
138 IFileRevision fileRevision = fileHistory.getFileRevision("fd5a571c8a3a4a152e4c413d09d3ecb7d41e1e5f");
139 assertNull(fileRevision); // not matched by getFileHistoryFor
142 public void testSingleRevision_3() {
143 GitProvider provider = (GitProvider)RepositoryProvider.getProvider(project.project);
144 assertNotNull(provider);
145 IFileHistoryProvider fileHistoryProvider = provider.getFileHistoryProvider();
146 IFileHistory fileHistory = fileHistoryProvider.getFileHistoryFor(project.getProject().getWorkspace().getRoot().findMember("Project-1/B.txt"), IFileHistoryProvider.SINGLE_LINE_OF_DESCENT, new NullProgressMonitor());
147 IFileRevision fileRevision = fileHistory.getFileRevision("fd5a571c8a3a4a152e4c413d09d3ecb7d41e1e5f");
148 assertEquals("fd5a571c8a3a4a152e4c413d09d3ecb7d41e1e5f", fileRevision.getContentIdentifier());
149 assertEquals("J. Author",fileRevision.getAuthor());
153 public void testShallowHistory() {
154 GitProvider provider = (GitProvider)RepositoryProvider.getProvider(project.project);
155 assertNotNull(provider);
156 IFileHistoryProvider fileHistoryProvider = provider.getFileHistoryProvider();
157 IFileHistory fileHistory = fileHistoryProvider.getFileHistoryFor(project.getProject().getWorkspace().getRoot().findMember("Project-1/A.txt"), IFileHistoryProvider.SINGLE_LINE_OF_DESCENT, new NullProgressMonitor());
158 IFileRevision[] fileRevisions = fileHistory.getFileRevisions();
159 assertEquals(1, fileRevisions.length);
160 assertEquals("60f0d7917fe2aed5c92b5bc35dfb55b9b8ada359", fileRevisions[0].getContentIdentifier());
161 assertEquals("J. Author",fileRevisions[0].getAuthor());
165 public void testDeepHistory_A() {
166 GitProvider provider = (GitProvider)RepositoryProvider.getProvider(project.project);
167 assertNotNull(provider);
168 IFileHistoryProvider fileHistoryProvider = provider.getFileHistoryProvider();
169 IFileHistory fileHistory = fileHistoryProvider.getFileHistoryFor(project.getProject().getWorkspace().getRoot().findMember("Project-1/A.txt"), IFileHistoryProvider.NONE, new NullProgressMonitor());
170 IFileRevision[] fileRevisions = fileHistory.getFileRevisions();
171 assertEquals(1, fileRevisions.length);
172 assertEquals("60f0d7917fe2aed5c92b5bc35dfb55b9b8ada359", fileRevisions[0].getContentIdentifier());
173 assertEquals("J. Author",fileRevisions[0].getAuthor());
177 public void testDeepHistory_B() {
178 GitProvider provider = (GitProvider)RepositoryProvider.getProvider(project.project);
179 assertNotNull(provider);
180 IFileHistoryProvider fileHistoryProvider = provider.getFileHistoryProvider();
181 IFileHistory fileHistory = fileHistoryProvider.getFileHistoryFor(project.getProject().getWorkspace().getRoot().findMember("Project-1/B.txt"), IFileHistoryProvider.NONE, new NullProgressMonitor());
182 IFileRevision[] fileRevisions = fileHistory.getFileRevisions();
183 assertEquals(2, fileRevisions.length);
184 assertEquals("fd5a571c8a3a4a152e4c413d09d3ecb7d41e1e5f", fileRevisions[0].getContentIdentifier());
185 assertEquals("J. Author",fileRevisions[0].getAuthor());
186 assertEquals("60f0d7917fe2aed5c92b5bc35dfb55b9b8ada359", fileRevisions[1].getContentIdentifier());
187 assertEquals("J. Author",fileRevisions[0].getAuthor());