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
;
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
;
43 jauthor
= new PersonIdent("J. Author", "jauthor@example.com");
44 jcommitter
= new PersonIdent("J. Committer", "jcommitter@example.com");
49 private Repository thisGit
;
51 private ObjectWriter objectWriter
;
53 protected void setUp() throws Exception
{
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();
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");
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
});
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
);
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
);
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());