|
|
|
@ -110,7 +110,7 @@ public class ReceivePackAdvertiseRefsHookTest extends LocalDiskRepositoryTestCas
|
|
|
|
|
|
|
|
|
|
// Fill dst with a some common history.
|
|
|
|
|
//
|
|
|
|
|
TestRepository<Repository> d = new TestRepository<>(dst); |
|
|
|
|
try (TestRepository<Repository> d = new TestRepository<>(dst)) { |
|
|
|
|
a = d.blob("a"); |
|
|
|
|
A = d.commit(d.tree(d.file("a", a))); |
|
|
|
|
B = d.commit().parent(A).create(); |
|
|
|
@ -119,7 +119,8 @@ public class ReceivePackAdvertiseRefsHookTest extends LocalDiskRepositoryTestCas
|
|
|
|
|
// Clone from dst into src
|
|
|
|
|
//
|
|
|
|
|
try (Transport t = Transport.open(src, uriOf(dst))) { |
|
|
|
|
t.fetch(PM, Collections.singleton(new RefSpec("+refs/*:refs/*"))); |
|
|
|
|
t.fetch(PM, |
|
|
|
|
Collections.singleton(new RefSpec("+refs/*:refs/*"))); |
|
|
|
|
assertEquals(B, src.resolve(R_MASTER)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -129,6 +130,7 @@ public class ReceivePackAdvertiseRefsHookTest extends LocalDiskRepositoryTestCas
|
|
|
|
|
P = d.commit(d.tree(d.file("b", b)), A); |
|
|
|
|
d.update(R_PRIVATE, P); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testFilterHidesPrivate() throws Exception { |
|
|
|
@ -241,7 +243,7 @@ public class ReceivePackAdvertiseRefsHookTest extends LocalDiskRepositoryTestCas
|
|
|
|
|
|
|
|
|
|
// Now use b but in a different commit than what is hidden.
|
|
|
|
|
//
|
|
|
|
|
TestRepository<Repository> s = new TestRepository<>(src); |
|
|
|
|
try (TestRepository<Repository> s = new TestRepository<>(src)) { |
|
|
|
|
RevCommit N = s.commit().parent(B).add("q", b).create(); |
|
|
|
|
s.update(R_MASTER, N); |
|
|
|
|
|
|
|
|
@ -264,9 +266,11 @@ public class ReceivePackAdvertiseRefsHookTest extends LocalDiskRepositoryTestCas
|
|
|
|
|
|
|
|
|
|
assertNotNull("have result", r); |
|
|
|
|
assertNull("private not advertised", r.getAdvertisedRef(R_PRIVATE)); |
|
|
|
|
assertSame("master updated", RemoteRefUpdate.Status.OK, u.getStatus()); |
|
|
|
|
assertSame("master updated", RemoteRefUpdate.Status.OK, |
|
|
|
|
u.getStatus()); |
|
|
|
|
assertEquals(N, dst.resolve(R_MASTER)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testCreateBranchAtHiddenCommitFails() throws Exception { |
|
|
|
@ -318,9 +322,11 @@ public class ReceivePackAdvertiseRefsHookTest extends LocalDiskRepositoryTestCas
|
|
|
|
|
@Test |
|
|
|
|
public void testUsingHiddenDeltaBaseFails() throws Exception { |
|
|
|
|
byte[] delta = { 0x1, 0x1, 0x1, 'c' }; |
|
|
|
|
TestRepository<Repository> s = new TestRepository<>(src); |
|
|
|
|
RevCommit N = s.commit().parent(B).add("q", |
|
|
|
|
s.blob(BinaryDelta.apply(dst.open(b).getCachedBytes(), delta))) |
|
|
|
|
try (TestRepository<Repository> s = new TestRepository<>(src)) { |
|
|
|
|
RevCommit N = s.commit().parent(B) |
|
|
|
|
.add("q", |
|
|
|
|
s.blob(BinaryDelta.apply( |
|
|
|
|
dst.open(b).getCachedBytes(), delta))) |
|
|
|
|
.create(); |
|
|
|
|
|
|
|
|
|
final TemporaryBuffer.Heap pack = new TemporaryBuffer.Heap(1024); |
|
|
|
@ -334,8 +340,8 @@ public class ReceivePackAdvertiseRefsHookTest extends LocalDiskRepositoryTestCas
|
|
|
|
|
|
|
|
|
|
final TemporaryBuffer.Heap inBuf = new TemporaryBuffer.Heap(1024); |
|
|
|
|
final PacketLineOut inPckLine = new PacketLineOut(inBuf); |
|
|
|
|
inPckLine.writeString(ObjectId.zeroId().name() + ' ' + N.name() + ' ' |
|
|
|
|
+ "refs/heads/s" + '\0' |
|
|
|
|
inPckLine.writeString(ObjectId.zeroId().name() + ' ' + N.name() |
|
|
|
|
+ ' ' + "refs/heads/s" + '\0' |
|
|
|
|
+ BasePackPushConnection.CAPABILITY_REPORT_STATUS); |
|
|
|
|
inPckLine.end(); |
|
|
|
|
pack.writeTo(inBuf, PM); |
|
|
|
@ -362,16 +368,19 @@ public class ReceivePackAdvertiseRefsHookTest extends LocalDiskRepositoryTestCas
|
|
|
|
|
assertEquals(B.name() + ' ' + R_MASTER, master.substring(0, nul)); |
|
|
|
|
assertSame(PacketLineIn.END, r.readString()); |
|
|
|
|
|
|
|
|
|
assertEquals("unpack error Missing blob " + b.name(), r.readString()); |
|
|
|
|
assertEquals("ng refs/heads/s n/a (unpacker error)", r.readString()); |
|
|
|
|
assertEquals("unpack error Missing blob " + b.name(), |
|
|
|
|
r.readString()); |
|
|
|
|
assertEquals("ng refs/heads/s n/a (unpacker error)", |
|
|
|
|
r.readString()); |
|
|
|
|
assertSame(PacketLineIn.END, r.readString()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testUsingHiddenCommonBlobFails() throws Exception { |
|
|
|
|
// Try to use the 'b' blob that is hidden.
|
|
|
|
|
//
|
|
|
|
|
TestRepository<Repository> s = new TestRepository<>(src); |
|
|
|
|
try (TestRepository<Repository> s = new TestRepository<>(src)) { |
|
|
|
|
RevCommit N = s.commit().parent(B).add("q", s.blob("b")).create(); |
|
|
|
|
|
|
|
|
|
// But don't include it in the pack.
|
|
|
|
@ -379,13 +388,13 @@ public class ReceivePackAdvertiseRefsHookTest extends LocalDiskRepositoryTestCas
|
|
|
|
|
final TemporaryBuffer.Heap pack = new TemporaryBuffer.Heap(1024); |
|
|
|
|
packHeader(pack, 2); |
|
|
|
|
copy(pack, src.open(N)); |
|
|
|
|
copy(pack,src.open(s.parseBody(N).getTree())); |
|
|
|
|
copy(pack, src.open(s.parseBody(N).getTree())); |
|
|
|
|
digest(pack); |
|
|
|
|
|
|
|
|
|
final TemporaryBuffer.Heap inBuf = new TemporaryBuffer.Heap(1024); |
|
|
|
|
final PacketLineOut inPckLine = new PacketLineOut(inBuf); |
|
|
|
|
inPckLine.writeString(ObjectId.zeroId().name() + ' ' + N.name() + ' ' |
|
|
|
|
+ "refs/heads/s" + '\0' |
|
|
|
|
inPckLine.writeString(ObjectId.zeroId().name() + ' ' + N.name() |
|
|
|
|
+ ' ' + "refs/heads/s" + '\0' |
|
|
|
|
+ BasePackPushConnection.CAPABILITY_REPORT_STATUS); |
|
|
|
|
inPckLine.end(); |
|
|
|
|
pack.writeTo(inBuf, PM); |
|
|
|
@ -412,16 +421,19 @@ public class ReceivePackAdvertiseRefsHookTest extends LocalDiskRepositoryTestCas
|
|
|
|
|
assertEquals(B.name() + ' ' + R_MASTER, master.substring(0, nul)); |
|
|
|
|
assertSame(PacketLineIn.END, r.readString()); |
|
|
|
|
|
|
|
|
|
assertEquals("unpack error Missing blob " + b.name(), r.readString()); |
|
|
|
|
assertEquals("ng refs/heads/s n/a (unpacker error)", r.readString()); |
|
|
|
|
assertEquals("unpack error Missing blob " + b.name(), |
|
|
|
|
r.readString()); |
|
|
|
|
assertEquals("ng refs/heads/s n/a (unpacker error)", |
|
|
|
|
r.readString()); |
|
|
|
|
assertSame(PacketLineIn.END, r.readString()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testUsingUnknownBlobFails() throws Exception { |
|
|
|
|
// Try to use the 'n' blob that is not on the server.
|
|
|
|
|
//
|
|
|
|
|
TestRepository<Repository> s = new TestRepository<>(src); |
|
|
|
|
try (TestRepository<Repository> s = new TestRepository<>(src)) { |
|
|
|
|
RevBlob n = s.blob("n"); |
|
|
|
|
RevCommit N = s.commit().parent(B).add("q", n).create(); |
|
|
|
|
|
|
|
|
@ -430,13 +442,13 @@ public class ReceivePackAdvertiseRefsHookTest extends LocalDiskRepositoryTestCas
|
|
|
|
|
final TemporaryBuffer.Heap pack = new TemporaryBuffer.Heap(1024); |
|
|
|
|
packHeader(pack, 2); |
|
|
|
|
copy(pack, src.open(N)); |
|
|
|
|
copy(pack,src.open(s.parseBody(N).getTree())); |
|
|
|
|
copy(pack, src.open(s.parseBody(N).getTree())); |
|
|
|
|
digest(pack); |
|
|
|
|
|
|
|
|
|
final TemporaryBuffer.Heap inBuf = new TemporaryBuffer.Heap(1024); |
|
|
|
|
final PacketLineOut inPckLine = new PacketLineOut(inBuf); |
|
|
|
|
inPckLine.writeString(ObjectId.zeroId().name() + ' ' + N.name() + ' ' |
|
|
|
|
+ "refs/heads/s" + '\0' |
|
|
|
|
inPckLine.writeString(ObjectId.zeroId().name() + ' ' + N.name() |
|
|
|
|
+ ' ' + "refs/heads/s" + '\0' |
|
|
|
|
+ BasePackPushConnection.CAPABILITY_REPORT_STATUS); |
|
|
|
|
inPckLine.end(); |
|
|
|
|
pack.writeTo(inBuf, PM); |
|
|
|
@ -463,10 +475,13 @@ public class ReceivePackAdvertiseRefsHookTest extends LocalDiskRepositoryTestCas
|
|
|
|
|
assertEquals(B.name() + ' ' + R_MASTER, master.substring(0, nul)); |
|
|
|
|
assertSame(PacketLineIn.END, r.readString()); |
|
|
|
|
|
|
|
|
|
assertEquals("unpack error Missing blob " + n.name(), r.readString()); |
|
|
|
|
assertEquals("ng refs/heads/s n/a (unpacker error)", r.readString()); |
|
|
|
|
assertEquals("unpack error Missing blob " + n.name(), |
|
|
|
|
r.readString()); |
|
|
|
|
assertEquals("ng refs/heads/s n/a (unpacker error)", |
|
|
|
|
r.readString()); |
|
|
|
|
assertSame(PacketLineIn.END, r.readString()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testIncludesInvalidGitmodules() throws Exception { |
|
|
|
@ -509,10 +524,10 @@ public class ReceivePackAdvertiseRefsHookTest extends LocalDiskRepositoryTestCas
|
|
|
|
|
.append(" url = -upayload.sh\n") |
|
|
|
|
.toString(); |
|
|
|
|
|
|
|
|
|
TestRepository<Repository> s = new TestRepository<>(src); |
|
|
|
|
try (TestRepository<Repository> s = new TestRepository<>(src)) { |
|
|
|
|
RevBlob blob = s.blob(fakeGitmodules); |
|
|
|
|
RevCommit N = s.commit().parent(B) |
|
|
|
|
.add(".gitmodules", blob).create(); |
|
|
|
|
RevCommit N = s.commit().parent(B).add(".gitmodules", blob) |
|
|
|
|
.create(); |
|
|
|
|
RevTree t = s.parseBody(N).getTree(); |
|
|
|
|
|
|
|
|
|
final TemporaryBuffer.Heap pack = new TemporaryBuffer.Heap(1024); |
|
|
|
@ -524,17 +539,18 @@ public class ReceivePackAdvertiseRefsHookTest extends LocalDiskRepositoryTestCas
|
|
|
|
|
|
|
|
|
|
final TemporaryBuffer.Heap inBuf = new TemporaryBuffer.Heap(1024); |
|
|
|
|
final PacketLineOut inPckLine = new PacketLineOut(inBuf); |
|
|
|
|
inPckLine.writeString(ObjectId.zeroId().name() + ' ' + N.name() + ' ' |
|
|
|
|
+ "refs/heads/s" + '\0' |
|
|
|
|
inPckLine.writeString(ObjectId.zeroId().name() + ' ' + N.name() |
|
|
|
|
+ ' ' + "refs/heads/s" + '\0' |
|
|
|
|
+ BasePackPushConnection.CAPABILITY_REPORT_STATUS); |
|
|
|
|
inPckLine.end(); |
|
|
|
|
pack.writeTo(inBuf, PM); |
|
|
|
|
return inBuf; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testUsingUnknownTreeFails() throws Exception { |
|
|
|
|
TestRepository<Repository> s = new TestRepository<>(src); |
|
|
|
|
try (TestRepository<Repository> s = new TestRepository<>(src)) { |
|
|
|
|
RevCommit N = s.commit().parent(B).add("q", s.blob("a")).create(); |
|
|
|
|
RevTree t = s.parseBody(N).getTree(); |
|
|
|
|
|
|
|
|
@ -547,8 +563,8 @@ public class ReceivePackAdvertiseRefsHookTest extends LocalDiskRepositoryTestCas
|
|
|
|
|
|
|
|
|
|
final TemporaryBuffer.Heap inBuf = new TemporaryBuffer.Heap(1024); |
|
|
|
|
final PacketLineOut inPckLine = new PacketLineOut(inBuf); |
|
|
|
|
inPckLine.writeString(ObjectId.zeroId().name() + ' ' + N.name() + ' ' |
|
|
|
|
+ "refs/heads/s" + '\0' |
|
|
|
|
inPckLine.writeString(ObjectId.zeroId().name() + ' ' + N.name() |
|
|
|
|
+ ' ' + "refs/heads/s" + '\0' |
|
|
|
|
+ BasePackPushConnection.CAPABILITY_REPORT_STATUS); |
|
|
|
|
inPckLine.end(); |
|
|
|
|
pack.writeTo(inBuf, PM); |
|
|
|
@ -575,10 +591,13 @@ public class ReceivePackAdvertiseRefsHookTest extends LocalDiskRepositoryTestCas
|
|
|
|
|
assertEquals(B.name() + ' ' + R_MASTER, master.substring(0, nul)); |
|
|
|
|
assertSame(PacketLineIn.END, r.readString()); |
|
|
|
|
|
|
|
|
|
assertEquals("unpack error Missing tree " + t.name(), r.readString()); |
|
|
|
|
assertEquals("ng refs/heads/s n/a (unpacker error)", r.readString()); |
|
|
|
|
assertEquals("unpack error Missing tree " + t.name(), |
|
|
|
|
r.readString()); |
|
|
|
|
assertEquals("ng refs/heads/s n/a (unpacker error)", |
|
|
|
|
r.readString()); |
|
|
|
|
assertSame(PacketLineIn.END, r.readString()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static void packHeader(TemporaryBuffer.Heap tinyPack, int cnt) |
|
|
|
|
throws IOException { |
|
|
|
|