remove type from full export endpoint

This commit is contained in:
Eduard Heimbuch
2021-01-28 14:52:12 +01:00
parent 845f0688f7
commit 8ea24e796b
4 changed files with 14 additions and 17 deletions

View File

@@ -89,7 +89,7 @@ public class RepositoryExportResource {
* @since 2.13.0
*/
@GET
@Path("{type}")
@Path("{type: ^(?!full$)[^/]+$}")
@Consumes(VndMediaType.REPOSITORY)
@Operation(summary = "Exports the repository", description = "Exports the repository.", tags = "Repository")
@ApiResponse(
@@ -129,12 +129,11 @@ public class RepositoryExportResource {
* @param uriInfo uri info
* @param namespace namespace of the repository
* @param name name of the repository
* @param type type of the repository
* @return response with readable stream of repository dump
* @since 2.13.0
*/
@GET
@Path("{type}/full")
@Path("full")
@Consumes(VndMediaType.REPOSITORY)
@Operation(summary = "Exports the repository", description = "Exports the repository with metadata and environment information.", tags = "Repository")
@ApiResponse(
@@ -159,10 +158,9 @@ public class RepositoryExportResource {
)
public Response exportFullRepository(@Context UriInfo uriInfo,
@PathParam("namespace") String namespace,
@PathParam("name") String name,
@Pattern(regexp = "\\w{1,10}") @PathParam("type") String type
@PathParam("name") String name
) {
Repository repository = getVerifiedRepository(namespace, name, type);
Repository repository = getVerifiedRepository(namespace, name);
StreamingOutput output = os -> fullScmRepositoryExporter.export(repository, os);
return Response
@@ -171,9 +169,14 @@ public class RepositoryExportResource {
.build();
}
private Repository getVerifiedRepository(@PathParam("namespace") String namespace, @PathParam("name") String name, @PathParam("type") @Pattern(regexp = "\\w{1,10}") String type) {
private Repository getVerifiedRepository(String namespace, String name) {
Repository repository = manager.get(new NamespaceAndName(namespace, name));
RepositoryPermissions.read().check(repository);
return repository;
}
private Repository getVerifiedRepository(String namespace, String name, String type) {
Repository repository = getVerifiedRepository(namespace, name);
if (!type.equals(repository.getType())) {
throw new WrongTypeException(repository);

View File

@@ -109,8 +109,7 @@ public class FullScmRepositoryImporter {
private Repository importRepositoryFromFile(Repository repository, TarArchiveInputStream tais) throws IOException {
ArchiveEntry repositoryEntry = tais.getNextEntry();
String repositoryEntryFileExtension = resolveFileExtensionForRepository(repository);
if (repositoryEntry.getName().endsWith(repositoryEntryFileExtension) && !repositoryEntry.isDirectory()) {
if (!repositoryEntry.isDirectory()) {
return repositoryManager.create(repository, repo -> {
try (RepositoryService service = serviceFactory.create(repo)) {
service.getUnbundleCommand().unbundle(new NoneClosingInputStream(tais));
@@ -130,12 +129,6 @@ public class FullScmRepositoryImporter {
}
}
private String resolveFileExtensionForRepository(Repository repository) {
try (RepositoryService repoService = serviceFactory.create(repository)) {
return "." + repoService.getBundleCommand().getFileExtension();
}
}
private void checkScmEnvironment(Repository repository, TarArchiveInputStream tais) throws IOException {
ArchiveEntry environmentEntry = tais.getNextEntry();
if (environmentEntry.getName().equals(SCM_ENVIRONMENT_FILE_NAME) && !environmentEntry.isDirectory() && environmentEntry.getSize() < _1_MB) {

View File

@@ -775,7 +775,7 @@ public class RepositoryRootResourceTest extends RepositoryTestBase {
when(service.getBundleCommand()).thenReturn(bundleCommandBuilder);
MockHttpRequest request = MockHttpRequest
.get("/" + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/repo/export/svn/full");
.get("/" + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/repo/export/full");
MockHttpResponse response = new MockHttpResponse();
dispatcher.invoke(request, response);

View File

@@ -60,7 +60,7 @@ import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
class FullScmRepositoryImporterTest {
private static final Repository REPOSITORY = RepositoryTestData.createHeartOfGold();
private static final Repository REPOSITORY = RepositoryTestData.createHeartOfGold("svn");
@Mock
private RepositoryServiceFactory serviceFactory;
@@ -105,6 +105,7 @@ class FullScmRepositoryImporterTest {
void shouldImportScmRepositoryArchive() throws IOException {
when(compatibilityChecker.check(any())).thenReturn(true);
when(repositoryManager.create(eq(REPOSITORY), any())).thenReturn(REPOSITORY);
when(service.getBundleCommand().getFileExtension()).thenReturn("dump");
Repository repository = fullImporter.importFromStream(REPOSITORY, Resources.getResource("sonia/scm/repository/import/scm-import.tar.gz").openStream());
assertThat(repository).isEqualTo(REPOSITORY);