2 * Copyright (C) 2006 Shawn Pearce <spearce@spearce.org>
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public
6 * License, version 2, as published by the Free Software Foundation.
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * General Public License for more details.
13 * You should have received a copy of the GNU General Public
14 * License along with this library; if not, write to the Free Software
15 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
17 package org
.spearce
.jgit
.lib
;
19 import java
.io
.ByteArrayInputStream
;
21 import java
.io
.FileInputStream
;
22 import java
.io
.FileReader
;
23 import java
.io
.FileWriter
;
24 import java
.io
.IOException
;
25 import java
.io
.PrintWriter
;
27 public class T0003_Basic
extends RepositoryTestCase
{
28 public void test001_Initalize() {
29 final File gitdir
= new File(trash
, ".git");
30 final File objects
= new File(gitdir
, "objects");
31 final File objects_pack
= new File(objects
, "pack");
32 final File objects_info
= new File(objects
, "info");
33 final File refs
= new File(gitdir
, "refs");
34 final File refs_heads
= new File(refs
, "heads");
35 final File refs_tags
= new File(refs
, "tags");
36 final File HEAD
= new File(gitdir
, "HEAD");
38 assertTrue("Exists " + trash
, trash
.isDirectory());
39 assertTrue("Exists " + objects
, objects
.isDirectory());
40 assertTrue("Exists " + objects_pack
, objects_pack
.isDirectory());
41 assertTrue("Exists " + objects_info
, objects_info
.isDirectory());
42 assertEquals(2, objects
.listFiles().length
);
43 assertTrue("Exists " + refs
, refs
.isDirectory());
44 assertTrue("Exists " + refs_heads
, refs_heads
.isDirectory());
45 assertTrue("Exists " + refs_tags
, refs_tags
.isDirectory());
46 assertTrue("Exists " + HEAD
, HEAD
.isFile());
47 assertEquals(23, HEAD
.length());
50 public void test002_WriteEmptyTree() throws IOException
{
51 // One of our test packs contains the empty tree object. If the pack is
52 // open when we create it we won't write the object file out as a loose
53 // object (as it already exists in the pack).
57 final Tree t
= new Tree(db
);
58 t
.accept(new WriteTree(trash
, db
), TreeEntry
.MODIFIED_ONLY
);
59 assertEquals("4b825dc642cb6eb9a060e54bf8d69288fbee4904", t
.getId()
61 final File o
= new File(new File(new File(trash_git
, "objects"), "4b"),
62 "825dc642cb6eb9a060e54bf8d69288fbee4904");
63 assertTrue("Exists " + o
, o
.isFile());
64 assertTrue("Read-only " + o
, !o
.canWrite());
67 public void test002_WriteEmptyTree2() throws IOException
{
68 // File shouldn't exist as it is in a test pack.
70 final Tree t
= new Tree(db
);
71 t
.accept(new WriteTree(trash
, db
), TreeEntry
.MODIFIED_ONLY
);
72 assertEquals("4b825dc642cb6eb9a060e54bf8d69288fbee4904", t
.getId()
74 final File o
= new File(new File(new File(trash_git
, "objects"), "4b"),
75 "825dc642cb6eb9a060e54bf8d69288fbee4904");
76 assertFalse("Exists " + o
, o
.isFile());
79 public void test003_WriteShouldBeEmptyTree() throws IOException
{
80 final Tree t
= new Tree(db
);
81 final ObjectId emptyId
= new ObjectWriter(db
).writeBlob(new byte[0]);
82 t
.addFile("should-be-empty").setId(emptyId
);
83 t
.accept(new WriteTree(trash
, db
), TreeEntry
.MODIFIED_ONLY
);
84 assertEquals("7bb943559a305bdd6bdee2cef6e5df2413c3d30a", t
.getId()
88 o
= new File(new File(new File(trash_git
, "objects"), "7b"),
89 "b943559a305bdd6bdee2cef6e5df2413c3d30a");
90 assertTrue("Exists " + o
, o
.isFile());
91 assertTrue("Read-only " + o
, !o
.canWrite());
93 o
= new File(new File(new File(trash_git
, "objects"), "e6"),
94 "9de29bb2d1d6434b8b29ae775ad8c2e48c5391");
95 assertTrue("Exists " + o
, o
.isFile());
96 assertTrue("Read-only " + o
, !o
.canWrite());
99 public void test004_CheckNewConfig() throws IOException
{
100 final RepositoryConfig c
= db
.getConfig();
102 assertEquals("0", c
.getString("core", null, "repositoryformatversion"));
103 assertEquals("0", c
.getString("CoRe", null, "REPOSITORYFoRmAtVeRsIoN"));
104 assertEquals("true", c
.getString("core", null, "filemode"));
105 assertEquals("true", c
.getString("cOrE", null, "fIlEModE"));
106 assertNull(c
.getString("notavalue", null, "reallyNotAValue"));
110 public void test005_ReadSimpleConfig() throws IOException
{
111 final RepositoryConfig c
= db
.getConfig();
114 assertEquals("0", c
.getString("core", null, "repositoryformatversion"));
115 assertEquals("0", c
.getString("CoRe", null, "REPOSITORYFoRmAtVeRsIoN"));
116 assertEquals("true", c
.getString("core", null, "filemode"));
117 assertEquals("true", c
.getString("cOrE", null, "fIlEModE"));
118 assertNull(c
.getString("notavalue", null, "reallyNotAValue"));
121 public void test006_ReadUglyConfig() throws IOException
{
122 final RepositoryConfig c
= db
.getConfig();
123 final File cfg
= new File(db
.getDirectory(), "config");
124 final FileWriter pw
= new FileWriter(cfg
);
125 final String configStr
= " [core];comment\n\tfilemode = yes\n"
127 + " email = A U Thor <thor@example.com> # Just an example...\n"
128 + " name = \"A Thor \\\\ \\\"\\t \"\n"
129 + " defaultCheckInComment = a many line\\n\\\ncomment\\n\\\n"
134 assertEquals("yes", c
.getString("core", null, "filemode"));
135 assertEquals("A U Thor <thor@example.com>", c
136 .getString("user", null, "email"));
137 assertEquals("A Thor \\ \"\t ", c
.getString("user", null, "name"));
138 assertEquals("a many line\ncomment\n to test", c
.getString("user",
139 null, "defaultCheckInComment"));
141 final FileReader fr
= new FileReader(cfg
);
142 final char[] cbuf
= new char[configStr
.length()];
145 assertEquals(configStr
, new String(cbuf
));
148 public void test007_Open() throws IOException
{
149 final Repository db2
= new Repository(db
.getDirectory());
150 assertEquals(db
.getDirectory(), db2
.getDirectory());
151 assertEquals(db
.getObjectsDirectory(), db2
.getObjectsDirectory());
152 assertNotSame(db
.getConfig(), db2
.getConfig());
155 public void test008_FailOnWrongVersion() throws IOException
{
156 final File cfg
= new File(db
.getDirectory(), "config");
157 final FileWriter pw
= new FileWriter(cfg
);
158 final String badvers
= "ihopethisisneveraversion";
159 final String configStr
= "[core]\n" + "\trepositoryFormatVersion="
165 new Repository(db
.getDirectory());
166 fail("incorrectly opened a bad repository");
167 } catch (IOException ioe
) {
168 assertTrue(ioe
.getMessage().indexOf("format") > 0);
169 assertTrue(ioe
.getMessage().indexOf(badvers
) > 0);
173 public void test009_CreateCommitOldFormat() throws IOException
{
174 writeTrashFile(".git/config", "[core]\n" + "legacyHeaders=1\n");
175 db
.getConfig().load();
177 final Tree t
= new Tree(db
);
178 final FileTreeEntry f
= t
.addFile("i-am-a-file");
179 writeTrashFile(f
.getName(), "and this is the data in me\n");
180 t
.accept(new WriteTree(trash
, db
), TreeEntry
.MODIFIED_ONLY
);
181 assertEquals(ObjectId
.fromString("00b1f73724f493096d1ffa0b0f1f1482dbb8c936"),
184 final Commit c
= new Commit(db
);
185 c
.setAuthor(new PersonIdent(jauthor
, 1154236443000L, -4 * 60));
186 c
.setCommitter(new PersonIdent(jcommitter
, 1154236443000L, -4 * 60));
187 c
.setMessage("A Commit\n");
189 assertEquals(t
.getTreeId(), c
.getTreeId());
191 final ObjectId cmtid
= ObjectId
.fromString(
192 "803aec4aba175e8ab1d666873c984c0308179099");
193 assertEquals(cmtid
, c
.getCommitId());
195 // Verify the commit we just wrote is in the correct format.
196 final XInputStream xis
= new XInputStream(new FileInputStream(db
199 assertEquals(0x78, xis
.readUInt8());
200 assertEquals(0x9c, xis
.readUInt8());
201 assertTrue(0x789c % 31 == 0);
206 // Verify we can read it.
207 final Commit c2
= db
.mapCommit(cmtid
);
209 assertEquals(c
.getMessage(), c2
.getMessage());
210 assertEquals(c
.getTreeId(), c2
.getTreeId());
211 assertEquals(c
.getAuthor(), c2
.getAuthor());
212 assertEquals(c
.getCommitter(), c2
.getCommitter());
215 public void test012_SubtreeExternalSorting() throws IOException
{
216 final ObjectId emptyBlob
= new ObjectWriter(db
).writeBlob(new byte[0]);
217 final Tree t
= new Tree(db
);
218 final FileTreeEntry e0
= t
.addFile("a-");
219 final FileTreeEntry e1
= t
.addFile("a-b");
220 final FileTreeEntry e2
= t
.addFile("a/b");
221 final FileTreeEntry e3
= t
.addFile("a=");
222 final FileTreeEntry e4
= t
.addFile("a=b");
230 t
.accept(new WriteTree(trash
, db
), TreeEntry
.MODIFIED_ONLY
);
231 assertEquals(ObjectId
.fromString("b47a8f0a4190f7572e11212769090523e23eb1ea"),
235 public void test020_createBlobTag() throws IOException
{
236 final ObjectId emptyId
= new ObjectWriter(db
).writeBlob(new byte[0]);
237 final Tag t
= new Tag(db
);
241 t
.setAuthor(new PersonIdent(jauthor
, 1154236443000L, -4 * 60));
242 t
.setMessage("test020 tagged\n");
244 assertEquals("6759556b09fbb4fd8ae5e315134481cc25d46954", t
.getTagId().toString());
246 Tag mapTag
= db
.mapTag("test020");
247 assertEquals("blob", mapTag
.getType());
248 assertEquals("test020 tagged\n", mapTag
.getMessage());
249 assertEquals(new PersonIdent(jauthor
, 1154236443000L, -4 * 60), mapTag
.getAuthor());
250 assertEquals("e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", mapTag
.getObjId().toString());
253 public void test020b_createBlobPlainTag() throws IOException
{
254 test020_createBlobTag();
256 t
.setTag("test020b");
257 t
.setObjId(ObjectId
.fromString("e69de29bb2d1d6434b8b29ae775ad8c2e48c5391"));
260 Tag mapTag
= db
.mapTag("test020b");
261 assertEquals("e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", mapTag
.getObjId().toString());
263 // We do not repeat the plain tag test for other object types
266 public void test021_createTreeTag() throws IOException
{
267 final ObjectId emptyId
= new ObjectWriter(db
).writeBlob(new byte[0]);
268 final Tree almostEmptyTree
= new Tree(db
);
269 almostEmptyTree
.addEntry(new FileTreeEntry(almostEmptyTree
, emptyId
, "empty".getBytes(), false));
270 final ObjectId almostEmptyTreeId
= new ObjectWriter(db
).writeTree(almostEmptyTree
);
271 final Tag t
= new Tag(db
);
272 t
.setObjId(almostEmptyTreeId
);
275 t
.setAuthor(new PersonIdent(jauthor
, 1154236443000L, -4 * 60));
276 t
.setMessage("test021 tagged\n");
278 assertEquals("b0517bc8dbe2096b419d42424cd7030733f4abe5", t
.getTagId().toString());
280 Tag mapTag
= db
.mapTag("test021");
281 assertEquals("tree", mapTag
.getType());
282 assertEquals("test021 tagged\n", mapTag
.getMessage());
283 assertEquals(new PersonIdent(jauthor
, 1154236443000L, -4 * 60), mapTag
.getAuthor());
284 assertEquals("417c01c8795a35b8e835113a85a5c0c1c77f67fb", mapTag
.getObjId().toString());
287 public void test022_createCommitTag() throws IOException
{
288 final ObjectId emptyId
= new ObjectWriter(db
).writeBlob(new byte[0]);
289 final Tree almostEmptyTree
= new Tree(db
);
290 almostEmptyTree
.addEntry(new FileTreeEntry(almostEmptyTree
, emptyId
, "empty".getBytes(), false));
291 final ObjectId almostEmptyTreeId
= new ObjectWriter(db
).writeTree(almostEmptyTree
);
292 final Commit almostEmptyCommit
= new Commit(db
);
293 almostEmptyCommit
.setAuthor(new PersonIdent(jauthor
, 1154236443000L, -2 * 60)); // not exactly the same
294 almostEmptyCommit
.setCommitter(new PersonIdent(jauthor
, 1154236443000L, -2 * 60));
295 almostEmptyCommit
.setMessage("test022\n");
296 almostEmptyCommit
.setTreeId(almostEmptyTreeId
);
297 ObjectId almostEmptyCommitId
= new ObjectWriter(db
).writeCommit(almostEmptyCommit
);
298 final Tag t
= new Tag(db
);
299 t
.setObjId(almostEmptyCommitId
);
302 t
.setAuthor(new PersonIdent(jauthor
, 1154236443000L, -4 * 60));
303 t
.setMessage("test022 tagged\n");
305 assertEquals("0ce2ebdb36076ef0b38adbe077a07d43b43e3807", t
.getTagId().toString());
307 Tag mapTag
= db
.mapTag("test022");
308 assertEquals("commit", mapTag
.getType());
309 assertEquals("test022 tagged\n", mapTag
.getMessage());
310 assertEquals(new PersonIdent(jauthor
, 1154236443000L, -4 * 60), mapTag
.getAuthor());
311 assertEquals("b5d3b45a96b340441f5abb9080411705c51cc86c", mapTag
.getObjId().toString());
314 public void test023_createCommitNonAnullii() throws IOException
{
315 final ObjectId emptyId
= new ObjectWriter(db
).writeBlob(new byte[0]);
316 final Tree almostEmptyTree
= new Tree(db
);
317 almostEmptyTree
.addEntry(new FileTreeEntry(almostEmptyTree
, emptyId
, "empty".getBytes(), false));
318 final ObjectId almostEmptyTreeId
= new ObjectWriter(db
).writeTree(almostEmptyTree
);
319 Commit commit
= new Commit(db
);
320 commit
.setTreeId(almostEmptyTreeId
);
321 commit
.setAuthor(new PersonIdent("Joe H\u00e4cker","joe@example.com",4294967295000L,60));
322 commit
.setCommitter(new PersonIdent("Joe Hacker","joe2@example.com",4294967295000L,60));
323 commit
.setEncoding("UTF-8");
324 commit
.setMessage("\u00dcbergeeks");
325 ObjectId cid
= new ObjectWriter(db
).writeCommit(commit
);
326 assertEquals("4680908112778718f37e686cbebcc912730b3154", cid
.toString());
329 public void test024_createCommitNonAscii() throws IOException
{
330 final ObjectId emptyId
= new ObjectWriter(db
).writeBlob(new byte[0]);
331 final Tree almostEmptyTree
= new Tree(db
);
332 almostEmptyTree
.addEntry(new FileTreeEntry(almostEmptyTree
, emptyId
, "empty".getBytes(), false));
333 final ObjectId almostEmptyTreeId
= new ObjectWriter(db
).writeTree(almostEmptyTree
);
334 Commit commit
= new Commit(db
);
335 commit
.setTreeId(almostEmptyTreeId
);
336 commit
.setAuthor(new PersonIdent("Joe H\u00e4cker","joe@example.com",4294967295000L,60));
337 commit
.setCommitter(new PersonIdent("Joe Hacker","joe2@example.com",4294967295000L,60));
338 commit
.setEncoding("ISO-8859-1");
339 commit
.setMessage("\u00dcbergeeks");
340 ObjectId cid
= new ObjectWriter(db
).writeCommit(commit
);
341 assertEquals("2979b39d385014b33287054b87f77bcb3ecb5ebf", cid
.toString());
344 public void test025_packedRefs() throws IOException
{
345 test020_createBlobTag();
346 test021_createTreeTag();
347 test022_createCommitTag();
349 if (!new File(db
.getDirectory(),"refs/tags/test020").delete()) throw new Error("Cannot delete unpacked tag");
350 if (!new File(db
.getDirectory(),"refs/tags/test021").delete()) throw new Error("Cannot delete unpacked tag");
351 if (!new File(db
.getDirectory(),"refs/tags/test022").delete()) throw new Error("Cannot delete unpacked tag");
353 // We cannot resolve it now, since we have no ref
354 Tag mapTag20missing
= db
.mapTag("test020");
355 assertNull(mapTag20missing
);
357 // Construct packed refs file
358 PrintWriter w
= new PrintWriter(new FileWriter(new File(db
.getDirectory(), "packed-refs")));
359 w
.println("# packed-refs with: peeled");
360 w
.println("6759556b09fbb4fd8ae5e315134481cc25d46954 refs/tags/test020");
361 w
.println("^e69de29bb2d1d6434b8b29ae775ad8c2e48c5391");
362 w
.println("b0517bc8dbe2096b419d42424cd7030733f4abe5 refs/tags/test021");
363 w
.println("^417c01c8795a35b8e835113a85a5c0c1c77f67fb");
364 w
.println("0ce2ebdb36076ef0b38adbe077a07d43b43e3807 refs/tags/test022");
365 w
.println("^b5d3b45a96b340441f5abb9080411705c51cc86c");
368 Tag mapTag20
= db
.mapTag("test020");
369 assertEquals("blob", mapTag20
.getType());
370 assertEquals("test020 tagged\n", mapTag20
.getMessage());
371 assertEquals(new PersonIdent(jauthor
, 1154236443000L, -4 * 60), mapTag20
.getAuthor());
372 assertEquals("e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", mapTag20
.getObjId().toString());
374 Tag mapTag21
= db
.mapTag("test021");
375 assertEquals("tree", mapTag21
.getType());
376 assertEquals("test021 tagged\n", mapTag21
.getMessage());
377 assertEquals(new PersonIdent(jauthor
, 1154236443000L, -4 * 60), mapTag21
.getAuthor());
378 assertEquals("417c01c8795a35b8e835113a85a5c0c1c77f67fb", mapTag21
.getObjId().toString());
380 Tag mapTag22
= db
.mapTag("test022");
381 assertEquals("commit", mapTag22
.getType());
382 assertEquals("test022 tagged\n", mapTag22
.getMessage());
383 assertEquals(new PersonIdent(jauthor
, 1154236443000L, -4 * 60), mapTag22
.getAuthor());
384 assertEquals("b5d3b45a96b340441f5abb9080411705c51cc86c", mapTag22
.getObjId().toString());
387 public void test025_computeSha1NoStore() throws IOException
{
388 byte[] data
= "test025 some data, more than 16 bytes to get good coverage"
389 .getBytes("ISO-8859-1");
390 // TODO: but we do not test legacy header writing
391 final ObjectId id
= new ObjectWriter(db
).computeBlobSha1(data
.length
,
392 new ByteArrayInputStream(data
));
393 assertEquals("4f561df5ecf0dfbd53a0dc0f37262fef075d9dde", id
.toString());
396 public void test026_CreateCommitMultipleparents() throws IOException
{
397 db
.getConfig().load();
399 final Tree t
= new Tree(db
);
400 final FileTreeEntry f
= t
.addFile("i-am-a-file");
401 writeTrashFile(f
.getName(), "and this is the data in me\n");
402 t
.accept(new WriteTree(trash
, db
), TreeEntry
.MODIFIED_ONLY
);
403 assertEquals(ObjectId
.fromString("00b1f73724f493096d1ffa0b0f1f1482dbb8c936"),
406 final Commit c1
= new Commit(db
);
407 c1
.setAuthor(new PersonIdent(jauthor
, 1154236443000L, -4 * 60));
408 c1
.setCommitter(new PersonIdent(jcommitter
, 1154236443000L, -4 * 60));
409 c1
.setMessage("A Commit\n");
411 assertEquals(t
.getTreeId(), c1
.getTreeId());
413 final ObjectId cmtid1
= ObjectId
.fromString(
414 "803aec4aba175e8ab1d666873c984c0308179099");
415 assertEquals(cmtid1
, c1
.getCommitId());
417 final Commit c2
= new Commit(db
);
418 c2
.setAuthor(new PersonIdent(jauthor
, 1154236443000L, -4 * 60));
419 c2
.setCommitter(new PersonIdent(jcommitter
, 1154236443000L, -4 * 60));
420 c2
.setMessage("A Commit 2\n");
422 assertEquals(t
.getTreeId(), c2
.getTreeId());
423 c2
.setParentIds(new ObjectId
[] { c1
.getCommitId() } );
425 final ObjectId cmtid2
= ObjectId
.fromString(
426 "95d068687c91c5c044fb8c77c5154d5247901553");
427 assertEquals(cmtid2
, c2
.getCommitId());
429 Commit rm2
= db
.mapCommit(cmtid2
);
430 assertNotSame(c2
, rm2
); // assert the parsed objects is not from the cache
431 assertEquals(c2
.getAuthor(), rm2
.getAuthor());
432 assertEquals(c2
.getCommitId(), rm2
.getCommitId());
433 assertEquals(c2
.getMessage(), rm2
.getMessage());
434 assertEquals(c2
.getTree().getTreeId(), rm2
.getTree().getTreeId());
435 assertEquals(1, rm2
.getParentIds().length
);
436 assertEquals(c1
.getCommitId(), rm2
.getParentIds()[0]);
438 final Commit c3
= new Commit(db
);
439 c3
.setAuthor(new PersonIdent(jauthor
, 1154236443000L, -4 * 60));
440 c3
.setCommitter(new PersonIdent(jcommitter
, 1154236443000L, -4 * 60));
441 c3
.setMessage("A Commit 3\n");
443 assertEquals(t
.getTreeId(), c3
.getTreeId());
444 c3
.setParentIds(new ObjectId
[] { c1
.getCommitId(), c2
.getCommitId() });
446 final ObjectId cmtid3
= ObjectId
.fromString(
447 "ce6e1ce48fbeeb15a83f628dc8dc2debefa066f4");
448 assertEquals(cmtid3
, c3
.getCommitId());
450 Commit rm3
= db
.mapCommit(cmtid3
);
451 assertNotSame(c3
, rm3
); // assert the parsed objects is not from the cache
452 assertEquals(c3
.getAuthor(), rm3
.getAuthor());
453 assertEquals(c3
.getCommitId(), rm3
.getCommitId());
454 assertEquals(c3
.getMessage(), rm3
.getMessage());
455 assertEquals(c3
.getTree().getTreeId(), rm3
.getTree().getTreeId());
456 assertEquals(2, rm3
.getParentIds().length
);
457 assertEquals(c1
.getCommitId(), rm3
.getParentIds()[0]);
458 assertEquals(c2
.getCommitId(), rm3
.getParentIds()[1]);
460 final Commit c4
= new Commit(db
);
461 c4
.setAuthor(new PersonIdent(jauthor
, 1154236443000L, -4 * 60));
462 c4
.setCommitter(new PersonIdent(jcommitter
, 1154236443000L, -4 * 60));
463 c4
.setMessage("A Commit 4\n");
465 assertEquals(t
.getTreeId(), c3
.getTreeId());
466 c4
.setParentIds(new ObjectId
[] { c1
.getCommitId(), c2
.getCommitId(), c3
.getCommitId() });
468 final ObjectId cmtid4
= ObjectId
.fromString(
469 "d1fca9fe3fef54e5212eb67902c8ed3e79736e27");
470 assertEquals(cmtid4
, c4
.getCommitId());
472 Commit rm4
= db
.mapCommit(cmtid4
);
473 assertNotSame(c4
, rm3
); // assert the parsed objects is not from the cache
474 assertEquals(c4
.getAuthor(), rm4
.getAuthor());
475 assertEquals(c4
.getCommitId(), rm4
.getCommitId());
476 assertEquals(c4
.getMessage(), rm4
.getMessage());
477 assertEquals(c4
.getTree().getTreeId(), rm4
.getTree().getTreeId());
478 assertEquals(3, rm4
.getParentIds().length
);
479 assertEquals(c1
.getCommitId(), rm4
.getParentIds()[0]);
480 assertEquals(c2
.getCommitId(), rm4
.getParentIds()[1]);
481 assertEquals(c3
.getCommitId(), rm4
.getParentIds()[2]);
484 public void test027_UnpackedRefHigherPriorityThanPacked() throws IOException
{
485 PrintWriter writer
= new PrintWriter(new FileWriter(new File(db
.getDirectory(), "refs/heads/a")));
486 String unpackedId
= "7f822839a2fe9760f386cbbbcb3f92c5fe81def7";
487 writer
.println(unpackedId
);
490 ObjectId resolved
= db
.resolve("refs/heads/a");
491 assertEquals(unpackedId
, resolved
.toString());
494 public void test028_LockPackedRef() throws IOException
{
495 writeTrashFile(".git/packed-refs", "7f822839a2fe9760f386cbbbcb3f92c5fe81def7 refs/heads/foobar");
496 writeTrashFile(".git/HEAD", "ref: refs/heads/foobar\n");
498 ObjectId resolve
= db
.resolve("HEAD");
499 assertEquals("7f822839a2fe9760f386cbbbcb3f92c5fe81def7", resolve
.toString());
501 LockFile lockRef
= db
.lockRef("HEAD");
502 ObjectId newId
= ObjectId
.fromString("07f822839a2fe9760f386cbbbcb3f92c5fe81def");
503 lockRef
.write(newId
);
504 assertTrue(lockRef
.commit());
506 assertTrue(new File(db
.getDirectory(), "refs/heads/foobar").exists());
507 assertEquals(newId
, db
.resolve("refs/heads/foobar"));
509 // Again. The ref already exists
510 LockFile lockRef2
= db
.lockRef("HEAD");
511 ObjectId newId2
= ObjectId
.fromString("7f822839a2fe9760f386cbbbcb3f92c5fe81def7");
512 lockRef2
.write(newId2
);
513 assertTrue(lockRef2
.commit());
515 assertTrue(new File(db
.getDirectory(), "refs/heads/foobar").exists());
516 assertEquals(newId2
, db
.resolve("refs/heads/foobar"));
519 public void test029_mapObject() throws IOException
{
520 assertEquals(new byte[0].getClass(), db
.mapObject(ObjectId
.fromString("5b6e7c66c276e7610d4a73c70ec1a1f7c1003259"), null).getClass());
521 assertEquals(Commit
.class, db
.mapObject(ObjectId
.fromString("540a36d136cf413e4b064c2b0e0a4db60f77feab"), null).getClass());
522 assertEquals(Tree
.class, db
.mapObject(ObjectId
.fromString("aabf2ffaec9b497f0950352b3e582d73035c2035"), null).getClass());
523 assertEquals(Tag
.class, db
.mapObject(ObjectId
.fromString("17768080a2318cd89bba4c8b87834401e2095703"), null).getClass());