示例#1
0
 protected static Repository createRepository(@NotNull File file) throws IOException {
   if (file.exists() || file.mkdirs()) {
     final FileRepository repository = new FileRepository(file);
     repository.create(true);
     return repository;
   }
   throw new FileNotFoundException(file.getPath());
 }
示例#2
0
  @Test
  public void testAbbreviateIsActuallyUnique() throws Exception {
    // This test is far more difficult. We have to manually craft
    // an input that contains collisions at a particular prefix,
    // but this is computationally difficult. Instead we force an
    // index file to have what we want.
    //

    ObjectId id = id("9d5b926ed164e8ee88d3b8b1e525d699adda01ba");
    byte[] idBuf = toByteArray(id);
    List<PackedObjectInfo> objects = new ArrayList<PackedObjectInfo>();
    for (int i = 0; i < 256; i++) {
      idBuf[9] = (byte) i;
      objects.add(new PackedObjectInfo(ObjectId.fromRaw(idBuf)));
    }

    String packName = "pack-" + id.name();
    File packDir = new File(db.getObjectDatabase().getDirectory(), "pack");
    File idxFile = new File(packDir, packName + ".idx");
    File packFile = new File(packDir, packName + ".pack");
    FileUtils.mkdir(packDir, true);
    OutputStream dst = new SafeBufferedOutputStream(new FileOutputStream(idxFile));
    try {
      PackIndexWriter writer = new PackIndexWriterV2(dst);
      writer.write(objects, new byte[OBJECT_ID_LENGTH]);
    } finally {
      dst.close();
    }
    new FileOutputStream(packFile).close();

    assertEquals(id.abbreviate(20), reader.abbreviate(id, 2));

    AbbreviatedObjectId abbrev8 = id.abbreviate(8);
    Collection<ObjectId> matches = reader.resolve(abbrev8);
    assertNotNull(matches);
    assertEquals(objects.size(), matches.size());
    for (PackedObjectInfo info : objects)
      assertTrue("contains " + info.name(), matches.contains(info));

    try {
      db.resolve(abbrev8.name());
      fail("did not throw AmbiguousObjectException");
    } catch (AmbiguousObjectException err) {
      assertEquals(abbrev8, err.getAbbreviatedObjectId());
      matches = err.getCandidates();
      assertNotNull(matches);
      assertEquals(objects.size(), matches.size());
      for (PackedObjectInfo info : objects)
        assertTrue("contains " + info.name(), matches.contains(info));
    }

    assertEquals(id, db.resolve(id.abbreviate(20).name()));
  }
示例#3
0
 @Before
 public void setUp() throws Exception {
   super.setUp();
   db = createBareRepository();
   reader = db.newObjectReader();
   test = new TestRepository<Repository>(db);
 }
示例#4
0
  @Test
  public void testAbbreviateLooseBlob() throws Exception {
    ObjectId id = test.blob("test");

    assertEquals(id.abbreviate(2), reader.abbreviate(id, 2));
    assertEquals(id.abbreviate(7), reader.abbreviate(id, 7));
    assertEquals(id.abbreviate(8), reader.abbreviate(id, 8));
    assertEquals(id.abbreviate(10), reader.abbreviate(id, 10));
    assertEquals(id.abbreviate(16), reader.abbreviate(id, 16));

    Collection<ObjectId> matches = reader.resolve(reader.abbreviate(id, 8));
    assertNotNull(matches);
    assertEquals(1, matches.size());
    assertEquals(id, matches.iterator().next());

    assertEquals(id, db.resolve(reader.abbreviate(id, 8).name()));
  }
示例#5
0
  @Test
  public void testAbbreviatePackedBlob() throws Exception {
    RevBlob id = test.blob("test");
    test.branch("master").commit().add("test", id).child();
    test.packAndPrune();
    assertTrue(reader.has(id));

    assertEquals(id.abbreviate(7), reader.abbreviate(id, 7));
    assertEquals(id.abbreviate(8), reader.abbreviate(id, 8));
    assertEquals(id.abbreviate(10), reader.abbreviate(id, 10));
    assertEquals(id.abbreviate(16), reader.abbreviate(id, 16));

    Collection<ObjectId> matches = reader.resolve(reader.abbreviate(id, 8));
    assertNotNull(matches);
    assertEquals(1, matches.size());
    assertEquals(id, matches.iterator().next());

    assertEquals(id, db.resolve(reader.abbreviate(id, 8).name()));
  }