Remove archive flag

This commit is contained in:
Rene Pfeuffer
2019-08-20 14:23:52 +02:00
parent 68045c0f3e
commit 3e2c8b7c4b
23 changed files with 8 additions and 349 deletions

View File

@@ -161,7 +161,6 @@ public class ScmConfiguration implements Configuration {
* Authentication realm for basic authentication. * Authentication realm for basic authentication.
*/ */
private String realmDescription = HttpUtil.AUTHENTICATION_REALM; private String realmDescription = HttpUtil.AUTHENTICATION_REALM;
private boolean enableRepositoryArchive = false;
private boolean disableGroupingGrid = false; private boolean disableGroupingGrid = false;
/** /**
* JavaScript date format from moment.js * JavaScript date format from moment.js
@@ -218,7 +217,6 @@ public class ScmConfiguration implements Configuration {
this.forceBaseUrl = other.forceBaseUrl; this.forceBaseUrl = other.forceBaseUrl;
this.baseUrl = other.baseUrl; this.baseUrl = other.baseUrl;
this.disableGroupingGrid = other.disableGroupingGrid; this.disableGroupingGrid = other.disableGroupingGrid;
this.enableRepositoryArchive = other.enableRepositoryArchive;
this.skipFailedAuthenticators = other.skipFailedAuthenticators; this.skipFailedAuthenticators = other.skipFailedAuthenticators;
this.loginAttemptLimit = other.loginAttemptLimit; this.loginAttemptLimit = other.loginAttemptLimit;
this.loginAttemptLimitTimeout = other.loginAttemptLimitTimeout; this.loginAttemptLimitTimeout = other.loginAttemptLimitTimeout;
@@ -343,10 +341,6 @@ public class ScmConfiguration implements Configuration {
return enableProxy; return enableProxy;
} }
public boolean isEnableRepositoryArchive() {
return enableRepositoryArchive;
}
public boolean isForceBaseUrl() { public boolean isForceBaseUrl() {
return forceBaseUrl; return forceBaseUrl;
} }
@@ -393,16 +387,6 @@ public class ScmConfiguration implements Configuration {
this.enableProxy = enableProxy; this.enableProxy = enableProxy;
} }
/**
* Enable or disable the repository archive. Default is disabled.
*
* @param enableRepositoryArchive true to disable the repository archive
* @since 1.14
*/
public void setEnableRepositoryArchive(boolean enableRepositoryArchive) {
this.enableRepositoryArchive = enableRepositoryArchive;
}
public void setForceBaseUrl(boolean forceBaseUrl) { public void setForceBaseUrl(boolean forceBaseUrl) {
this.forceBaseUrl = forceBaseUrl; this.forceBaseUrl = forceBaseUrl;
} }

View File

@@ -85,7 +85,6 @@ public class Repository extends BasicPropertiesAware implements ModelObject, Per
private Set<RepositoryPermission> permissions = new HashSet<>(); private Set<RepositoryPermission> permissions = new HashSet<>();
@XmlElement(name = "public") @XmlElement(name = "public")
private boolean publicReadable = false; private boolean publicReadable = false;
private boolean archived = false;
private String type; private String type;
@@ -216,16 +215,6 @@ public class Repository extends BasicPropertiesAware implements ModelObject, Per
return type; return type;
} }
/**
* Returns true if the repository is archived.
*
* @return true if the repository is archived
* @since 1.14
*/
public boolean isArchived() {
return archived;
}
/** /**
* Returns {@code true} if the repository is healthy. * Returns {@code true} if the repository is healthy.
* *
@@ -264,16 +253,6 @@ public class Repository extends BasicPropertiesAware implements ModelObject, Per
&& ((Util.isEmpty(contact)) || ValidationUtil.isMailAddressValid(contact)); && ((Util.isEmpty(contact)) || ValidationUtil.isMailAddressValid(contact));
} }
/**
* Archive or un archive this repository.
*
* @param archived true to enable archive
* @since 1.14
*/
public void setArchived(boolean archived) {
this.archived = archived;
}
public void setContact(String contact) { public void setContact(String contact) {
this.contact = contact; this.contact = contact;
} }
@@ -354,7 +333,6 @@ public class Repository extends BasicPropertiesAware implements ModelObject, Per
repository.setDescription(description); repository.setDescription(description);
repository.setPermissions(permissions); repository.setPermissions(permissions);
repository.setPublicReadable(publicReadable); repository.setPublicReadable(publicReadable);
repository.setArchived(archived);
// do not copy health check results // do not copy health check results
} }
@@ -383,7 +361,6 @@ public class Repository extends BasicPropertiesAware implements ModelObject, Per
&& Objects.equal(contact, other.contact) && Objects.equal(contact, other.contact)
&& Objects.equal(description, other.description) && Objects.equal(description, other.description)
&& Objects.equal(publicReadable, other.publicReadable) && Objects.equal(publicReadable, other.publicReadable)
&& Objects.equal(archived, other.archived)
&& Objects.equal(permissions, other.permissions) && Objects.equal(permissions, other.permissions)
&& Objects.equal(type, other.type) && Objects.equal(type, other.type)
&& Objects.equal(creationDate, other.creationDate) && Objects.equal(creationDate, other.creationDate)
@@ -395,7 +372,7 @@ public class Repository extends BasicPropertiesAware implements ModelObject, Per
@Override @Override
public int hashCode() { public int hashCode() {
return Objects.hashCode(id, namespace, name, contact, description, publicReadable, return Objects.hashCode(id, namespace, name, contact, description, publicReadable,
archived, permissions, type, creationDate, lastModified, properties, permissions, type, creationDate, lastModified, properties,
healthCheckFailures); healthCheckFailures);
} }
@@ -408,7 +385,6 @@ public class Repository extends BasicPropertiesAware implements ModelObject, Per
.add("contact", contact) .add("contact", contact)
.add("description", description) .add("description", description)
.add("publicReadable", publicReadable) .add("publicReadable", publicReadable)
.add("archived", archived)
.add("permissions", permissions) .add("permissions", permissions)
.add("type", type) .add("type", type)
.add("lastModified", lastModified) .add("lastModified", lastModified)

View File

@@ -1,48 +0,0 @@
/**
* Copyright (c) 2010, Sebastian Sdorra
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of SCM-Manager; nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* http://bitbucket.org/sdorra/scm-manager
*
*/
package sonia.scm.repository;
/**
*
* @author Sebastian Sdorra
*
* @since 1.14
*/
public class RepositoryIsNotArchivedException extends RuntimeException {
private static final long serialVersionUID = 7728748133123987511L;
public RepositoryIsNotArchivedException() {
super("Repository could not be deleted, because it is not archived.");
}
}

View File

@@ -5,6 +5,5 @@
<namespace>space</namespace> <namespace>space</namespace>
<name>existing</name> <name>existing</name>
<public>false</public> <public>false</public>
<archived>false</archived>
<type>xml</type> <type>xml</type>
</repositories> </repositories>

View File

@@ -228,7 +228,6 @@ public class TestData {
.add("contact", "zaphod.beeblebrox@hitchhiker.com") .add("contact", "zaphod.beeblebrox@hitchhiker.com")
.add("description", "Heart of Gold") .add("description", "Heart of Gold")
.add("name", getDefaultRepoName(repositoryType)) .add("name", getDefaultRepoName(repositoryType))
.add("archived", false)
.add("type", repositoryType) .add("type", repositoryType)
.build().toString(); .build().toString();
} }

View File

@@ -8,7 +8,6 @@ export type Config = {
proxyUser: string | null, proxyUser: string | null,
enableProxy: boolean, enableProxy: boolean,
realmDescription: string, realmDescription: string,
enableRepositoryArchive: boolean,
disableGroupingGrid: boolean, disableGroupingGrid: boolean,
dateFormat: string, dateFormat: string,
anonymousAccessEnabled: boolean, anonymousAccessEnabled: boolean,

View File

@@ -36,7 +36,6 @@
}, },
"general-settings": { "general-settings": {
"realm-description": "Realm Beschreibung", "realm-description": "Realm Beschreibung",
"enable-repository-archive": "Repository Archiv aktivieren",
"disable-grouping-grid": "Gruppen deaktivieren", "disable-grouping-grid": "Gruppen deaktivieren",
"date-format": "Datumsformat", "date-format": "Datumsformat",
"anonymous-access-enabled": "Anonyme Zugriffe erlauben", "anonymous-access-enabled": "Anonyme Zugriffe erlauben",
@@ -57,7 +56,6 @@
"dateFormatHelpText": "Moments Datumsformat. Zulässige Formate sind in der MomentJS Dokumentation beschrieben.", "dateFormatHelpText": "Moments Datumsformat. Zulässige Formate sind in der MomentJS Dokumentation beschrieben.",
"pluginUrlHelpText": "Die URL der Plugin Center API. Beschreibung der Platzhalter: version = SCM-Manager Version; os = Betriebssystem; arch = Architektur", "pluginUrlHelpText": "Die URL der Plugin Center API. Beschreibung der Platzhalter: version = SCM-Manager Version; os = Betriebssystem; arch = Architektur",
"enableForwardingHelpText": "mod_proxy Port Weiterleitung aktivieren.", "enableForwardingHelpText": "mod_proxy Port Weiterleitung aktivieren.",
"enableRepositoryArchiveHelpText": "Repository Archive aktivieren. Nach einer Änderung an dieser Einstellung muss die Seite komplett neu geladen werden.",
"disableGroupingGridHelpText": "Repository Gruppen deaktivieren. Nach einer Änderung an dieser Einstellung muss die Seite komplett neu geladen werden.", "disableGroupingGridHelpText": "Repository Gruppen deaktivieren. Nach einer Änderung an dieser Einstellung muss die Seite komplett neu geladen werden.",
"allowAnonymousAccessHelpText": "Anonyme Benutzer haben Zugriff auf öffentliche Repositories.", "allowAnonymousAccessHelpText": "Anonyme Benutzer haben Zugriff auf öffentliche Repositories.",
"skipFailedAuthenticatorsHelpText": "Die Kette der Authentifikatoren wird nicht beendet, wenn ein Authentifikator einen Benutzer findet, ihn aber nicht erfolgreich authentifizieren kann.", "skipFailedAuthenticatorsHelpText": "Die Kette der Authentifikatoren wird nicht beendet, wenn ein Authentifikator einen Benutzer findet, ihn aber nicht erfolgreich authentifizieren kann.",

View File

@@ -36,7 +36,6 @@
}, },
"general-settings": { "general-settings": {
"realm-description": "Realm Description", "realm-description": "Realm Description",
"enable-repository-archive": "Enable Repository Archive",
"disable-grouping-grid": "Disable Grouping Grid", "disable-grouping-grid": "Disable Grouping Grid",
"date-format": "Date Format", "date-format": "Date Format",
"anonymous-access-enabled": "Anonymous Access Enabled", "anonymous-access-enabled": "Anonymous Access Enabled",
@@ -57,7 +56,6 @@
"dateFormatHelpText": "Moments date format. Please have a look at the MomentJS documentation.", "dateFormatHelpText": "Moments date format. Please have a look at the MomentJS documentation.",
"pluginUrlHelpText": "The url of the Plugin Center API. Explanation of the placeholders: version = SCM-Manager Version; os = Operation System; arch = Architecture", "pluginUrlHelpText": "The url of the Plugin Center API. Explanation of the placeholders: version = SCM-Manager Version; os = Operation System; arch = Architecture",
"enableForwardingHelpText": "Enable mod_proxy port forwarding.", "enableForwardingHelpText": "Enable mod_proxy port forwarding.",
"enableRepositoryArchiveHelpText": "Enable repository archives. A complete page reload is required after a change of this value.",
"disableGroupingGridHelpText": "Disable repository Groups. A complete page reload is required after a change of this value.", "disableGroupingGridHelpText": "Disable repository Groups. A complete page reload is required after a change of this value.",
"allowAnonymousAccessHelpText": "Anonymous users have read access on public repositories.", "allowAnonymousAccessHelpText": "Anonymous users have read access on public repositories.",
"skipFailedAuthenticatorsHelpText": "Do not stop the authentication chain, if an authenticator finds the user but fails to authenticate the user.", "skipFailedAuthenticatorsHelpText": "Do not stop the authentication chain, if an authenticator finds the user but fails to authenticate the user.",

View File

@@ -16,7 +16,7 @@ type Props = {
configUpdatePermission: boolean, configUpdatePermission: boolean,
namespaceStrategies?: NamespaceStrategies, namespaceStrategies?: NamespaceStrategies,
// context props // context props
t: string => string, t: string => string
}; };
type State = { type State = {
@@ -41,7 +41,6 @@ class ConfigForm extends React.Component<Props, State> {
proxyUser: null, proxyUser: null,
enableProxy: false, enableProxy: false,
realmDescription: "", realmDescription: "",
enableRepositoryArchive: false,
disableGroupingGrid: false, disableGroupingGrid: false,
dateFormat: "", dateFormat: "",
anonymousAccessEnabled: false, anonymousAccessEnabled: false,
@@ -122,7 +121,6 @@ class ConfigForm extends React.Component<Props, State> {
namespaceStrategies={namespaceStrategies} namespaceStrategies={namespaceStrategies}
loginInfoUrl={config.loginInfoUrl} loginInfoUrl={config.loginInfoUrl}
realmDescription={config.realmDescription} realmDescription={config.realmDescription}
enableRepositoryArchive={config.enableRepositoryArchive}
disableGroupingGrid={config.disableGroupingGrid} disableGroupingGrid={config.disableGroupingGrid}
dateFormat={config.dateFormat} dateFormat={config.dateFormat}
anonymousAccessEnabled={config.anonymousAccessEnabled} anonymousAccessEnabled={config.anonymousAccessEnabled}

View File

@@ -8,7 +8,6 @@ import NamespaceStrategySelect from "./NamespaceStrategySelect";
type Props = { type Props = {
realmDescription: string, realmDescription: string,
loginInfoUrl: string, loginInfoUrl: string,
enableRepositoryArchive: boolean,
disableGroupingGrid: boolean, disableGroupingGrid: boolean,
dateFormat: string, dateFormat: string,
anonymousAccessEnabled: boolean, anonymousAccessEnabled: boolean,

View File

@@ -35,7 +35,6 @@ const config = {
proxyUser: null, proxyUser: null,
enableProxy: false, enableProxy: false,
realmDescription: "SONIA :: SCM Manager", realmDescription: "SONIA :: SCM Manager",
enableRepositoryArchive: false,
disableGroupingGrid: false, disableGroupingGrid: false,
dateFormat: "YYYY-MM-DD HH:mm:ss", dateFormat: "YYYY-MM-DD HH:mm:ss",
anonymousAccessEnabled: false, anonymousAccessEnabled: false,
@@ -64,7 +63,6 @@ const configWithNullValues = {
proxyUser: null, proxyUser: null,
enableProxy: false, enableProxy: false,
realmDescription: "SONIA :: SCM Manager", realmDescription: "SONIA :: SCM Manager",
enableRepositoryArchive: false,
disableGroupingGrid: false, disableGroupingGrid: false,
dateFormat: "YYYY-MM-DD HH:mm:ss", dateFormat: "YYYY-MM-DD HH:mm:ss",
anonymousAccessEnabled: false, anonymousAccessEnabled: false,

View File

@@ -96,7 +96,6 @@ const hitchhikerRestatend: Repository = {
description: "restaurant at the end of the universe", description: "restaurant at the end of the universe",
namespace: "hitchhiker", namespace: "hitchhiker",
name: "restatend", name: "restatend",
archived: false,
type: "git", type: "git",
_links: { _links: {
self: { self: {

View File

@@ -19,7 +19,6 @@ public class ConfigDto extends HalRepresentation {
private String proxyUser; private String proxyUser;
private boolean enableProxy; private boolean enableProxy;
private String realmDescription; private String realmDescription;
private boolean enableRepositoryArchive;
private boolean disableGroupingGrid; private boolean disableGroupingGrid;
private String dateFormat; private String dateFormat;
private boolean anonymousAccessEnabled; private boolean anonymousAccessEnabled;

View File

@@ -5,7 +5,6 @@ import com.webcohesion.enunciate.metadata.rs.StatusCodes;
import com.webcohesion.enunciate.metadata.rs.TypeHint; import com.webcohesion.enunciate.metadata.rs.TypeHint;
import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.NamespaceAndName;
import sonia.scm.repository.Repository; import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryIsNotArchivedException;
import sonia.scm.repository.RepositoryManager; import sonia.scm.repository.RepositoryManager;
import sonia.scm.web.VndMediaType; import sonia.scm.web.VndMediaType;
@@ -63,7 +62,7 @@ public class RepositoryResource {
this.dtoToRepositoryMapper = dtoToRepositoryMapper; this.dtoToRepositoryMapper = dtoToRepositoryMapper;
this.manager = manager; this.manager = manager;
this.repositoryToDtoMapper = repositoryToDtoMapper; this.repositoryToDtoMapper = repositoryToDtoMapper;
this.adapter = new SingleResourceManagerAdapter<>(manager, Repository.class, this::handleNotArchived); this.adapter = new SingleResourceManagerAdapter<>(manager, Repository.class);
this.tagRootResource = tagRootResource; this.tagRootResource = tagRootResource;
this.branchRootResource = branchRootResource; this.branchRootResource = branchRootResource;
this.changesetRootResource = changesetRootResource; this.changesetRootResource = changesetRootResource;
@@ -212,14 +211,6 @@ public class RepositoryResource {
@Path("merge/") @Path("merge/")
public MergeResource merge() {return mergeResource.get(); } public MergeResource merge() {return mergeResource.get(); }
private Optional<Response> handleNotArchived(Throwable throwable) {
if (throwable instanceof RepositoryIsNotArchivedException) {
return Optional.of(Response.status(Response.Status.PRECONDITION_FAILED).build());
} else {
return Optional.empty();
}
}
private Supplier<Repository> loadBy(String namespace, String name) { private Supplier<Repository> loadBy(String namespace, String name) {
NamespaceAndName namespaceAndName = new NamespaceAndName(namespace, name); NamespaceAndName namespaceAndName = new NamespaceAndName(namespace, name);
return () -> Optional.ofNullable(manager.get(namespaceAndName)).orElseThrow(() -> notFound(entity(namespaceAndName))); return () -> Optional.ofNullable(manager.get(namespaceAndName)).orElseThrow(() -> notFound(entity(namespaceAndName)));

View File

@@ -7,7 +7,6 @@ import sonia.scm.ModelObject;
import sonia.scm.NotFoundException; import sonia.scm.NotFoundException;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import java.util.Optional;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.function.Supplier; import java.util.function.Supplier;
@@ -28,20 +27,11 @@ import static javax.ws.rs.core.Response.Status.BAD_REQUEST;
class SingleResourceManagerAdapter<MODEL_OBJECT extends ModelObject, class SingleResourceManagerAdapter<MODEL_OBJECT extends ModelObject,
DTO extends HalRepresentation> { DTO extends HalRepresentation> {
private final Function<Throwable, Optional<Response>> errorHandler;
protected final Manager<MODEL_OBJECT> manager; protected final Manager<MODEL_OBJECT> manager;
protected final Class<MODEL_OBJECT> type; protected final Class<MODEL_OBJECT> type;
SingleResourceManagerAdapter(Manager<MODEL_OBJECT> manager, Class<MODEL_OBJECT> type) { SingleResourceManagerAdapter(Manager<MODEL_OBJECT> manager, Class<MODEL_OBJECT> type) {
this(manager, type, e -> Optional.empty());
}
SingleResourceManagerAdapter(
Manager<MODEL_OBJECT> manager,
Class<MODEL_OBJECT> type,
Function<Throwable, Optional<Response>> errorHandler) {
this.manager = manager; this.manager = manager;
this.errorHandler = errorHandler;
this.type = type; this.type = type;
} }
@@ -74,12 +64,8 @@ class SingleResourceManagerAdapter<MODEL_OBJECT extends ModelObject,
} }
private Response update(MODEL_OBJECT item) { private Response update(MODEL_OBJECT item) {
try { manager.modify(item);
manager.modify(item); return Response.noContent().build();
return Response.noContent().build();
} catch (RuntimeException ex) {
return createErrorResponse(ex);
}
} }
private boolean modelObjectWasModifiedConcurrently(MODEL_OBJECT existing, MODEL_OBJECT updated) { private boolean modelObjectWasModifiedConcurrently(MODEL_OBJECT existing, MODEL_OBJECT updated) {
@@ -100,22 +86,13 @@ class SingleResourceManagerAdapter<MODEL_OBJECT extends ModelObject,
MODEL_OBJECT item = manager.get(name); MODEL_OBJECT item = manager.get(name);
if (item != null) { if (item != null) {
try { manager.delete(item);
manager.delete(item); return Response.noContent().build();
return Response.noContent().build();
} catch (RuntimeException ex) {
return createErrorResponse(ex);
}
} else { } else {
return Response.noContent().build(); return Response.noContent().build();
} }
} }
private Response createErrorResponse(RuntimeException throwable) {
return errorHandler.apply(throwable)
.orElseThrow(() -> throwable);
}
protected String getId(MODEL_OBJECT item) { protected String getId(MODEL_OBJECT item) {
return item.getId(); return item.getId();
} }

View File

@@ -172,9 +172,6 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager {
} }
private void preDelete(Repository toDelete) { private void preDelete(Repository toDelete) {
if (configuration.isEnableRepositoryArchive() && !toDelete.isArchived()) {
throw new RepositoryIsNotArchivedException();
}
fireEvent(HandlerEventType.BEFORE_DELETE, toDelete); fireEvent(HandlerEventType.BEFORE_DELETE, toDelete);
getHandler(toDelete).delete(toDelete); getHandler(toDelete).delete(toDelete);
} }

View File

@@ -168,8 +168,7 @@ public class AuthorizationChangedEventProducer {
} }
private boolean isAuthorizationDataModified(Repository repository, Repository beforeModification) { private boolean isAuthorizationDataModified(Repository repository, Repository beforeModification) {
return repository.isArchived() != beforeModification.isArchived() return repository.isPublicReadable() != beforeModification.isPublicReadable()
|| repository.isPublicReadable() != beforeModification.isPublicReadable()
|| !(repository.getPermissions().containsAll(beforeModification.getPermissions()) && beforeModification.getPermissions().containsAll(repository.getPermissions())); || !(repository.getPermissions().containsAll(beforeModification.getPermissions()) && beforeModification.getPermissions().containsAll(repository.getPermissions()));
} }

View File

@@ -91,7 +91,6 @@ public class MigrateVerbsToPermissionRoles implements UpdateStep {
repository.setHealthCheckFailures(oldRepository.healthCheckFailures); repository.setHealthCheckFailures(oldRepository.healthCheckFailures);
repository.setLastModified(oldRepository.lastModified); repository.setLastModified(oldRepository.lastModified);
repository.setPublicReadable(oldRepository.publicReadable); repository.setPublicReadable(oldRepository.publicReadable);
repository.setArchived(oldRepository.archived);
return repository; return repository;
} }

View File

@@ -37,7 +37,6 @@ public class ConfigDtoToScmConfigurationMapperTest {
assertEquals("user" , config.getProxyUser()); assertEquals("user" , config.getProxyUser());
assertTrue(config.isEnableProxy()); assertTrue(config.isEnableProxy());
assertEquals("realm" , config.getRealmDescription()); assertEquals("realm" , config.getRealmDescription());
assertTrue(config.isEnableRepositoryArchive());
assertTrue(config.isDisableGroupingGrid()); assertTrue(config.isDisableGroupingGrid());
assertEquals("yyyy" , config.getDateFormat()); assertEquals("yyyy" , config.getDateFormat());
assertTrue(config.isAnonymousAccessEnabled()); assertTrue(config.isAnonymousAccessEnabled());
@@ -61,7 +60,6 @@ public class ConfigDtoToScmConfigurationMapperTest {
configDto.setProxyUser("user"); configDto.setProxyUser("user");
configDto.setEnableProxy(true); configDto.setEnableProxy(true);
configDto.setRealmDescription("realm"); configDto.setRealmDescription("realm");
configDto.setEnableRepositoryArchive(true);
configDto.setDisableGroupingGrid(true); configDto.setDisableGroupingGrid(true);
configDto.setDateFormat("yyyy"); configDto.setDateFormat("yyyy");
configDto.setAnonymousAccessEnabled(true); configDto.setAnonymousAccessEnabled(true);

View File

@@ -19,7 +19,6 @@ import org.mockito.Mock;
import sonia.scm.PageResult; import sonia.scm.PageResult;
import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.NamespaceAndName;
import sonia.scm.repository.Repository; import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryIsNotArchivedException;
import sonia.scm.repository.RepositoryManager; import sonia.scm.repository.RepositoryManager;
import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryService;
import sonia.scm.repository.api.RepositoryServiceFactory; import sonia.scm.repository.api.RepositoryServiceFactory;
@@ -41,7 +40,6 @@ import static javax.servlet.http.HttpServletResponse.SC_CONFLICT;
import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND; import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND;
import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT; import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT;
import static javax.servlet.http.HttpServletResponse.SC_OK; import static javax.servlet.http.HttpServletResponse.SC_OK;
import static javax.servlet.http.HttpServletResponse.SC_PRECONDITION_FAILED;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
@@ -270,20 +268,6 @@ public class RepositoryRootResourceTest extends RepositoryTestBase {
verify(repositoryManager).delete(anyObject()); verify(repositoryManager).delete(anyObject());
} }
@Test
public void shouldHandleDeleteIsNotArchivedException() throws Exception {
mockRepository("space", "repo");
doThrow(RepositoryIsNotArchivedException.class).when(repositoryManager).delete(anyObject());
MockHttpRequest request = MockHttpRequest.delete("/" + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/repo");
MockHttpResponse response = new MockHttpResponse();
dispatcher.invoke(request, response);
assertEquals(SC_PRECONDITION_FAILED, response.getStatus());
}
@Test @Test
public void shouldCreateNewRepositoryInCorrectNamespace() throws Exception { public void shouldCreateNewRepositoryInCorrectNamespace() throws Exception {
when(repositoryManager.create(any())).thenAnswer(invocation -> { when(repositoryManager.create(any())).thenAnswer(invocation -> {

View File

@@ -67,7 +67,6 @@ public class ScmConfigurationToConfigDtoMapperTest {
assertEquals("trillian" , dto.getProxyUser()); assertEquals("trillian" , dto.getProxyUser());
assertTrue(dto.isEnableProxy()); assertTrue(dto.isEnableProxy());
assertEquals("description" , dto.getRealmDescription()); assertEquals("description" , dto.getRealmDescription());
assertTrue(dto.isEnableRepositoryArchive());
assertTrue(dto.isDisableGroupingGrid()); assertTrue(dto.isDisableGroupingGrid());
assertEquals("dd" , dto.getDateFormat()); assertEquals("dd" , dto.getDateFormat());
assertTrue(dto.isAnonymousAccessEnabled()); assertTrue(dto.isAnonymousAccessEnabled());
@@ -106,7 +105,6 @@ public class ScmConfigurationToConfigDtoMapperTest {
config.setProxyUser("trillian"); config.setProxyUser("trillian");
config.setEnableProxy(true); config.setEnableProxy(true);
config.setRealmDescription("description"); config.setRealmDescription("description");
config.setEnableRepositoryArchive(true);
config.setDisableGroupingGrid(true); config.setDisableGroupingGrid(true);
config.setDateFormat("dd"); config.setDateFormat("dd");
config.setAnonymousAccessEnabled(true); config.setAnonymousAccessEnabled(true);

View File

@@ -1,181 +0,0 @@
/**
* Copyright (c) 2010, Sebastian Sdorra
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of SCM-Manager; nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* http://bitbucket.org/sdorra/scm-manager
*
*/
package sonia.scm.it;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import sonia.scm.api.v2.resources.ConfigDto;
import sonia.scm.api.v2.resources.RepositoryDto;
import sonia.scm.web.VndMediaType;
import javax.ws.rs.core.MediaType;
import java.net.URI;
import java.util.Collection;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static sonia.scm.it.IntegrationTestUtil.createAdminClient;
import static sonia.scm.it.IntegrationTestUtil.createResource;
import static sonia.scm.it.IntegrationTestUtil.getLink;
import static sonia.scm.it.IntegrationTestUtil.readJson;
import static sonia.scm.it.IntegrationTestUtil.serialize;
import static sonia.scm.it.RepositoryITUtil.createRepository;
import static sonia.scm.it.RepositoryITUtil.deleteRepository;
/**
*
* @author Sebastian Sdorra
*/
@RunWith(Parameterized.class)
public class RepositoryArchiveITCase
{
/**
* Constructs ...
*
*
* @param type
*/
public RepositoryArchiveITCase(String type)
{
this.type = type;
}
//~--- methods --------------------------------------------------------------
@Parameterized.Parameters(name = "{0}")
public static Collection<String[]> createParameters() {
return IntegrationTestUtil.createRepositoryTypeParameters();
}
/**
* Method description
*
*/
@Before
public void createTestRepository() {
client = createAdminClient();
repository = createRepository(client, readJson("repository-" + type + ".json"));
}
/**
* Method description
*
*/
@After
public void deleteTestRepository()
{
setArchiveMode(false);
if (repository != null)
{
deleteRepository(client, repository);
}
}
/**
* Method description
*
*/
@Test
public void testDeleteAllowed() {
setArchiveMode(true);
repository.setArchived(true);
ClientResponse response = createResource(client,
"repositories/" + repository.getNamespace() + "/" + repository.getName())
.type(VndMediaType.REPOSITORY).put(ClientResponse.class, serialize(repository));
assertNotNull(response);
assertEquals(204, response.getStatus());
response = createResource(client,
"repositories/" + repository.getNamespace() + "/" + repository.getName()).delete(ClientResponse.class);
assertNotNull(response);
assertEquals(204, response.getStatus());
repository = null;
}
/**
* Method description
*
*/
@Test
public void testDeleteDenied()
{
setArchiveMode(true);
URI deleteUrl = getLink(repository, "delete");
ClientResponse response = createResource(client, deleteUrl).delete(ClientResponse.class);
assertNotNull(response);
assertEquals(412, response.getStatus());
response.close();
}
/**
* Method description
*
*
* @param archive
*/
private void setArchiveMode(boolean archive)
{
WebResource.Builder resource = createResource(client, "config").type(MediaType.APPLICATION_JSON);
ConfigDto config = resource.get(ConfigDto.class);
assertNotNull(config);
config.setEnableRepositoryArchive(archive);
ClientResponse resp = createResource(client, "config").type(VndMediaType.CONFIG).put(ClientResponse.class, config);
assertNotNull(resp);
assertEquals(204, resp.getStatus());
}
/** Field description */
private ScmClient client;
/** Field description */
private RepositoryDto repository;
/** Field description */
private String type;
}

View File

@@ -13,7 +13,6 @@
<enableSSL>false</enableSSL> <enableSSL>false</enableSSL>
<enablePortForward>false</enablePortForward> <enablePortForward>false</enablePortForward>
<sslPort>8181</sslPort> <sslPort>8181</sslPort>
<enableRepositoryArchive>false</enableRepositoryArchive>
<disableGroupingGrid>false</disableGroupingGrid> <disableGroupingGrid>false</disableGroupingGrid>
<dateFormat>Y-m-d H:i:s</dateFormat> <dateFormat>Y-m-d H:i:s</dateFormat>
<anonymousAccessEnabled>false</anonymousAccessEnabled> <anonymousAccessEnabled>false</anonymousAccessEnabled>