Remote working directory from index writeTree
[egit.git] / org.spearce.jgit / tst / org / spearce / jgit / lib / T0007_Index.java
blob3fadd276fbb6b3b23068ee09b604a21fd596b091
1 package org.spearce.jgit.lib;
3 import java.io.File;
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);
15 new Thread() {
16 public void run() {
17 try {
18 InputStream s = process.getErrorStream();
19 for (int c = s.read(); c != -1; c = s.read()) {
20 System.err.print((char) c);
22 s.close();
23 } catch (IOException e1) {
24 // TODO Auto-generated catch block
25 e1.printStackTrace();
28 }.start();
29 final Thread t2 = new Thread() {
30 public void run() {
31 synchronized (this) {
32 try {
33 InputStream e = process.getInputStream();
34 for (int c = e.read(); c != -1; c = e.read()) {
35 System.out.print((char) c);
37 e.close();
38 } catch (IOException e1) {
39 // TODO Auto-generated catch block
40 e1.printStackTrace();
45 t2.start();
46 process.getOutputStream().close();
47 int ret = process.waitFor();
48 synchronized (t2) {
49 return ret;
53 public void testCreateEmptyIndex() throws Exception {
54 Repository db = new Repository(trash_git);
55 GitIndex index = new GitIndex(db);
56 index.write();
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"));
70 index.write();
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"));
90 index.write();
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"));
103 index.write();
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 {
113 // Prepare tree
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"));
122 index.write();
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);
156 index.write();
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"));
183 index.write();
184 assertEquals(0, system(trash, "git status"));
185 index.writeTree();
186 index.remove(trash, new File(trash, "a:b"));
187 index.write();
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);
202 index.write();
203 assertEquals(0, system(trash, "git status"));
204 index.writeTree();
205 delete(aslashb);
206 delete(acolonb);
207 delete(adotb);
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 {
231 if (!f.delete())
232 throw new IOException("Failed to delete f");