1 package org
.spearce
.jgit
.lib
;
4 import java
.io
.FileInputStream
;
5 import java
.io
.IOException
;
6 import java
.io
.InputStream
;
8 import org
.spearce
.jgit
.lib
.GitIndex
.Entry
;
10 public class T0007_Index
extends RepositoryTestCase
{
12 private int system(File dir
, String cmd
) throws IOException
,
13 InterruptedException
{
14 final Process process
= Runtime
.getRuntime().exec(cmd
, null, dir
);
18 InputStream s
= process
.getErrorStream();
19 for (int c
= s
.read(); c
!= -1; c
= s
.read()) {
20 System
.err
.print((char) c
);
23 } catch (IOException e1
) {
24 // TODO Auto-generated catch block
29 final Thread t2
= new Thread() {
33 InputStream e
= process
.getInputStream();
34 for (int c
= e
.read(); c
!= -1; c
= e
.read()) {
35 System
.out
.print((char) c
);
38 } catch (IOException e1
) {
39 // TODO Auto-generated catch block
46 process
.getOutputStream().close();
47 int ret
= process
.waitFor();
53 public void testCreateEmptyIndex() throws Exception
{
54 Repository db
= new Repository(trash_git
);
55 GitIndex index
= new GitIndex(db
);
57 // native git doesn't like an empty index
58 // assertEquals(0,system(trash,"git status"));
61 public void testCreateSimpleSortTestIndex() throws Exception
{
62 Repository db
= new Repository(trash_git
);
63 GitIndex index
= new GitIndex(db
);
64 writeTrashFile("a/b", "data:a/b");
65 writeTrashFile("a:b", "data:a:b");
66 writeTrashFile("a.b", "data:a.b");
67 index
.add(trash
, new File(trash
, "a/b"));
68 index
.add(trash
, new File(trash
, "a:b"));
69 index
.add(trash
, new File(trash
, "a.b"));
71 assertEquals(0, system(trash
, "git status"));
73 assertEquals("a/b", index
.getEntry("a/b").getName());
74 assertEquals("a:b", index
.getEntry("a:b").getName());
75 assertEquals("a.b", index
.getEntry("a.b").getName());
76 assertNull(index
.getEntry("a*b"));
79 public void testUpdateSimpleSortTestIndex() throws Exception
{
80 Repository db
= new Repository(trash_git
);
81 GitIndex index
= new GitIndex(db
);
82 writeTrashFile("a/b", "data:a/b");
83 writeTrashFile("a:b", "data:a:b");
84 writeTrashFile("a.b", "data:a.b");
85 index
.add(trash
, new File(trash
, "a/b"));
86 index
.add(trash
, new File(trash
, "a:b"));
87 index
.add(trash
, new File(trash
, "a.b"));
88 writeTrashFile("a/b", "data:a/b modified");
89 index
.add(trash
, new File(trash
, "a/b"));
91 assertEquals(0, system(trash
, "git status"));
94 public void testWriteTree() throws Exception
{
95 Repository db
= new Repository(trash_git
);
96 GitIndex index
= new GitIndex(db
);
97 writeTrashFile("a/b", "data:a/b");
98 writeTrashFile("a:b", "data:a:b");
99 writeTrashFile("a.b", "data:a.b");
100 index
.add(trash
, new File(trash
, "a/b"));
101 index
.add(trash
, new File(trash
, "a:b"));
102 index
.add(trash
, new File(trash
, "a.b"));
104 assertEquals(0, system(trash
, "git status"));
105 ObjectId id
= index
.writeTree();
106 assertEquals("c696abc3ab8e091c665f49d00eb8919690b3aec3", id
.toString());
108 writeTrashFile("a/b", "data:a/b");
109 index
.add(trash
, new File(trash
, "a/b"));
112 public void testReadTree() throws Exception
{
114 Repository db
= new Repository(trash_git
);
115 GitIndex index
= new GitIndex(db
);
116 writeTrashFile("a/b", "data:a/b");
117 writeTrashFile("a:b", "data:a:b");
118 writeTrashFile("a.b", "data:a.b");
119 index
.add(trash
, new File(trash
, "a/b"));
120 index
.add(trash
, new File(trash
, "a:b"));
121 index
.add(trash
, new File(trash
, "a.b"));
123 assertEquals(0, system(trash
, "git status"));
124 ObjectId id
= index
.writeTree();
125 System
.out
.println("wrote id " + id
);
126 assertEquals("c696abc3ab8e091c665f49d00eb8919690b3aec3", id
.toString());
127 GitIndex index2
= new GitIndex(db
);
129 index2
.readTree(db
.mapTree(new ObjectId(
130 "c696abc3ab8e091c665f49d00eb8919690b3aec3")));
131 Entry
[] members
= index2
.getMembers();
132 assertEquals(3, members
.length
);
133 assertEquals("a.b", members
[0].getName());
134 assertEquals("a/b", members
[1].getName());
135 assertEquals("a:b", members
[2].getName());
136 assertEquals(3, members
.length
);
140 public void testReadTree2() throws Exception
{
141 // Prepare a larger tree to test some odd cases in tree writing
142 Repository db
= new Repository(trash_git
);
143 GitIndex index
= new GitIndex(db
);
144 File f1
= writeTrashFile("a/a/a/a", "data:a/a/a/a");
145 File f2
= writeTrashFile("a/c/c", "data:a/c/c");
146 File f3
= writeTrashFile("a/b", "data:a/b");
147 File f4
= writeTrashFile("a:b", "data:a:b");
148 File f5
= writeTrashFile("a/d", "data:a/d");
149 File f6
= writeTrashFile("a.b", "data:a.b");
150 index
.add(trash
, f1
);
151 index
.add(trash
, f2
);
152 index
.add(trash
, f3
);
153 index
.add(trash
, f4
);
154 index
.add(trash
, f5
);
155 index
.add(trash
, f6
);
157 ObjectId id
= index
.writeTree();
158 System
.out
.println("wrote id " + id
);
159 assertEquals("ba78e065e2c261d4f7b8f42107588051e87e18e9", id
.toString());
160 GitIndex index2
= new GitIndex(db
);
162 index2
.readTree(db
.mapTree(new ObjectId(
163 "ba78e065e2c261d4f7b8f42107588051e87e18e9")));
164 Entry
[] members
= index2
.getMembers();
165 assertEquals(6, members
.length
);
166 assertEquals("a.b", members
[0].getName());
167 assertEquals("a/a/a/a", members
[1].getName());
168 assertEquals("a/b", members
[2].getName());
169 assertEquals("a/c/c", members
[3].getName());
170 assertEquals("a/d", members
[4].getName());
171 assertEquals("a:b", members
[5].getName());
174 public void testDelete() throws Exception
{
175 Repository db
= new Repository(trash_git
);
176 GitIndex index
= new GitIndex(db
);
177 writeTrashFile("a/b", "data:a/b");
178 writeTrashFile("a:b", "data:a:b");
179 writeTrashFile("a.b", "data:a.b");
180 index
.add(trash
, new File(trash
, "a/b"));
181 index
.add(trash
, new File(trash
, "a:b"));
182 index
.add(trash
, new File(trash
, "a.b"));
184 assertEquals(0, system(trash
, "git status"));
186 index
.remove(trash
, new File(trash
, "a:b"));
188 assertEquals("a.b", index
.getMembers()[0].getName());
189 assertEquals("a/b", index
.getMembers()[1].getName());
192 public void testCheckout() throws Exception
{
193 // Prepare tree, remote it and checkout
194 Repository db
= new Repository(trash_git
);
195 GitIndex index
= new GitIndex(db
);
196 File aslashb
= writeTrashFile("a/b", "data:a/b");
197 File acolonb
= writeTrashFile("a:b", "data:a:b");
198 File adotb
= writeTrashFile("a.b", "data:a.b");
199 index
.add(trash
, aslashb
);
200 index
.add(trash
, acolonb
);
201 index
.add(trash
, adotb
);
203 assertEquals(0, system(trash
, "git status"));
208 delete(aslashb
.getParentFile());
210 GitIndex index2
= new GitIndex(db
);
211 assertEquals(0, index2
.getMembers().length
);
213 index2
.readTree(db
.mapTree(new ObjectId(
214 "c696abc3ab8e091c665f49d00eb8919690b3aec3")));
216 index2
.checkout(trash
);
217 assertEquals("data:a/b", content(aslashb
));
218 assertEquals("data:a:b", content(acolonb
));
219 assertEquals("data:a.b", content(adotb
));
222 private String
content(File f
) throws IOException
{
223 byte[] buf
= new byte[(int) f
.length()];
224 FileInputStream is
= new FileInputStream(f
);
225 int read
= is
.read(buf
);
226 assertEquals(f
.length(), read
);
227 return new String(buf
, 0);
230 private void delete(File f
) throws IOException
{
232 throw new IOException("Failed to delete f");