コード例 #1
0
  @Test
  public void testFilterHidesPrivate() throws Exception {
    Map<String, Ref> refs;
    TransportLocal t =
        new TransportLocal(src, uriOf(dst), dst.getDirectory()) {
          @Override
          ReceivePack createReceivePack(final Repository db) {
            db.close();
            dst.incrementOpen();

            final ReceivePack rp = super.createReceivePack(dst);
            rp.setAdvertiseRefsHook(new HidePrivateHook());
            return rp;
          }
        };
    try {
      PushConnection c = t.openPush();
      try {
        refs = c.getRefsMap();
      } finally {
        c.close();
      }
    } finally {
      t.close();
    }

    assertNotNull(refs);
    assertNull("no private", refs.get(R_PRIVATE));
    assertNull("no HEAD", refs.get(Constants.HEAD));
    assertEquals(1, refs.size());

    Ref master = refs.get(R_MASTER);
    assertNotNull("has master", master);
    assertEquals(B, master.getObjectId());
  }
コード例 #2
0
ファイル: Transport.java プロジェクト: j16sdiz/egit-freenet
  /**
   * Open a new transport instance to connect two repositories.
   *
   * @param local existing local repository.
   * @param remote location of the remote repository.
   * @return the new transport instance. Never null.
   * @throws NotSupportedException the protocol specified is not supported.
   */
  public static Transport open(final Repository local, final URIish remote)
      throws NotSupportedException {
    if (TransportGitSsh.canHandle(remote)) return new TransportGitSsh(local, remote);
    else if (TransportHttp.canHandle(remote)) return new TransportHttp(local, remote);
    else if (TransportSftp.canHandle(remote)) return new TransportSftp(local, remote);
    else if (TransportGitAnon.canHandle(remote)) return new TransportGitAnon(local, remote);
    else if (TransportAmazonS3.canHandle(remote)) return new TransportAmazonS3(local, remote);
    else if (TransportFcp2.canHandle(remote)) return new TransportFcp2(local, remote);
    else if (TransportBundleFile.canHandle(remote)) return new TransportBundleFile(local, remote);
    else if (TransportLocal.canHandle(remote)) return new TransportLocal(local, remote);

    throw new NotSupportedException("URI not supported: " + remote);
  }
コード例 #3
0
  @Test
  public void testSuccess() throws Exception {
    // Manually force a delta of an object so we reuse it later.
    //
    TemporaryBuffer.Heap pack = new TemporaryBuffer.Heap(1024);

    packHeader(pack, 2);
    pack.write((Constants.OBJ_BLOB) << 4 | 1);
    deflate(pack, new byte[] {'a'});

    pack.write((Constants.OBJ_REF_DELTA) << 4 | 4);
    a.copyRawTo(pack);
    deflate(pack, new byte[] {0x1, 0x1, 0x1, 'b'});

    digest(pack);
    openPack(pack);

    // Verify the only storage of b is our packed delta above.
    //
    ObjectDirectory od = (ObjectDirectory) src.getObjectDatabase();
    assertTrue("has b", src.hasObject(b));
    assertFalse("b not loose", od.fileFor(b).exists());

    // Now use b but in a different commit than what is hidden.
    //
    TestRepository<Repository> s = new TestRepository<Repository>(src);
    RevCommit N = s.commit().parent(B).add("q", b).create();
    s.update(R_MASTER, N);

    // Push this new content to the remote, doing strict validation.
    //
    TransportLocal t =
        new TransportLocal(src, uriOf(dst), dst.getDirectory()) {
          @Override
          ReceivePack createReceivePack(final Repository db) {
            db.close();
            dst.incrementOpen();

            final ReceivePack rp = super.createReceivePack(dst);
            rp.setCheckReceivedObjects(true);
            rp.setCheckReferencedObjectsAreReachable(true);
            rp.setAdvertiseRefsHook(new HidePrivateHook());
            return rp;
          }
        };
    RemoteRefUpdate u =
        new RemoteRefUpdate( //
            src, //
            R_MASTER, // src name
            R_MASTER, // dst name
            false, // do not force update
            null, // local tracking branch
            null // expected id
            );
    PushResult r;
    try {
      t.setPushThin(true);
      r = t.push(PM, Collections.singleton(u));
    } finally {
      t.close();
    }

    assertNotNull("have result", r);
    assertNull("private not advertised", r.getAdvertisedRef(R_PRIVATE));
    assertSame("master updated", RemoteRefUpdate.Status.OK, u.getStatus());
    assertEquals(N, dst.resolve(R_MASTER));
  }