fix: Revert Refactored code for git discard flow (#21453) (#24196)

Revert #21453
This commit is contained in:
Anagh Hegde 2023-06-07 18:03:07 +05:30
parent 651d90b0ac
commit 0e7b78be98
6 changed files with 55 additions and 37 deletions

View File

@ -172,8 +172,10 @@ class GitSyncAPI extends Api {
});
}
static discardChanges(applicationId: string) {
return Api.put(`${GitSyncAPI.baseURL}/discard/app/${applicationId}`);
static discardChanges(applicationId: string, doPull: boolean) {
return Api.put(
`${GitSyncAPI.baseURL}/discard/app/${applicationId}?doPull=${doPull}`,
);
}
}

View File

@ -930,7 +930,8 @@ function* discardChanges() {
let response: ApiResponse<GitDiscardResponse>;
try {
const appId: string = yield select(getCurrentApplicationId);
response = yield GitSyncAPI.discardChanges(appId);
const doPull = true;
response = yield GitSyncAPI.discardChanges(appId, doPull);
const isValidResponse: boolean = yield validateResponse(
response,
false,

View File

@ -253,9 +253,10 @@ public class GitControllerCE {
@JsonView(Views.Public.class)
@PutMapping("/discard/app/{defaultApplicationId}")
public Mono<ResponseDTO<Application>> discardChanges(@PathVariable String defaultApplicationId,
@RequestParam(required = false, defaultValue = "true") Boolean doPull,
@RequestHeader(name = FieldName.BRANCH_NAME) String branchName) {
log.debug("Going to discard changes for branch {} with defaultApplicationId {}", branchName, defaultApplicationId);
return service.discardChanges(defaultApplicationId, branchName)
return service.discardChanges(defaultApplicationId, branchName, doPull)
.map(result -> new ResponseDTO<>((HttpStatus.OK.value()), result, null));
}

View File

@ -8,14 +8,15 @@ import com.appsmith.server.domains.Application;
import com.appsmith.server.domains.GitApplicationMetadata;
import com.appsmith.server.domains.GitAuth;
import com.appsmith.server.domains.GitProfile;
import com.appsmith.server.dtos.ApplicationImportDTO;
import com.appsmith.server.dtos.GitCommitDTO;
import com.appsmith.server.dtos.GitConnectDTO;
import com.appsmith.server.dtos.ApplicationImportDTO;
import com.appsmith.server.dtos.GitDocsDTO;
import com.appsmith.server.dtos.GitMergeDTO;
import com.appsmith.server.dtos.GitPullDTO;
import reactor.core.publisher.Mono;
import java.util.EnumSet;
import java.util.List;
import java.util.Map;
@ -69,7 +70,7 @@ public interface GitServiceCE {
Mono<Application> deleteBranch(String defaultApplicationId, String branchName);
Mono<Application> discardChanges(String defaultApplicationId, String branchName);
Mono<Application> discardChanges(String defaultApplicationId, String branchName, Boolean doPull);
Mono<List<GitDocsDTO>> getGitDocUrls();

View File

@ -83,6 +83,7 @@ import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.Duration;
import java.util.ArrayList;
import java.time.Instant;
import java.util.ArrayList;
import java.util.HashMap;
@ -2189,7 +2190,7 @@ public class GitServiceCEImpl implements GitServiceCE {
}
@Override
public Mono<Application> discardChanges(String defaultApplicationId, String branchName) {
public Mono<Application> discardChanges(String defaultApplicationId, String branchName, Boolean doPull) {
if (StringUtils.isEmptyOrNull(defaultApplicationId)) {
return Mono.error(new AppsmithException(AppsmithError.INVALID_PARAMETER, FieldName.APPLICATION_ID));
@ -2200,33 +2201,42 @@ public class GitServiceCEImpl implements GitServiceCE {
Mono<Application> defaultApplicationMono = this.getApplicationById(defaultApplicationId);
Mono<Application> discardChangeMono;
// Rehydrate the application from local file system
discardChangeMono = branchedApplicationMono
// Add file lock before proceeding with the git operation
.flatMap(application -> addFileLock(defaultApplicationId).thenReturn(application))
.flatMap(branchedApplication -> {
GitApplicationMetadata gitData = branchedApplication.getGitApplicationMetadata();
if (gitData == null || StringUtils.isEmptyOrNull(gitData.getDefaultApplicationId())) {
return Mono.error(new AppsmithException(AppsmithError.INVALID_GIT_CONFIGURATION, GIT_CONFIG_ERROR));
}
Path repoSuffix = Paths.get(branchedApplication.getWorkspaceId(), gitData.getDefaultApplicationId(), gitData.getRepoName());
return gitExecutor.checkoutToBranch(repoSuffix, branchName)
.then(fileUtils.reconstructApplicationJsonFromGitRepo(
branchedApplication.getWorkspaceId(),
branchedApplication.getGitApplicationMetadata().getDefaultApplicationId(),
branchedApplication.getGitApplicationMetadata().getRepoName(),
branchName)
)
.flatMap(applicationJson ->
importExportApplicationService
.importApplicationInWorkspace(branchedApplication.getWorkspaceId(), applicationJson, branchedApplication.getId(), branchName)
);
})
.flatMap(application -> releaseFileLock(defaultApplicationId)
.then(this.addAnalyticsForGitOperation(AnalyticsEvents.GIT_DISCARD_CHANGES.getEventName(), application, null)))
.map(responseUtils::updateApplicationWithDefaultResources);
if (Boolean.TRUE.equals(doPull)) {
discardChangeMono = defaultApplicationMono
// Add file lock before proceeding with the git operation
.flatMap(application -> addFileLock(defaultApplicationId).thenReturn(application))
.flatMap(defaultApplication -> this.pullAndRehydrateApplication(defaultApplication, branchName))
.map(GitPullDTO::getApplication)
.flatMap(application -> releaseFileLock(defaultApplicationId)
.then(this.addAnalyticsForGitOperation(AnalyticsEvents.GIT_DISCARD_CHANGES.getEventName(), application, null)))
.map(responseUtils::updateApplicationWithDefaultResources);
} else {
// Rehydrate the application from local file system
discardChangeMono = branchedApplicationMono
// Add file lock before proceeding with the git operation
.flatMap(application -> addFileLock(defaultApplicationId).thenReturn(application))
.flatMap(branchedApplication -> {
GitApplicationMetadata gitData = branchedApplication.getGitApplicationMetadata();
if (gitData == null || StringUtils.isEmptyOrNull(gitData.getDefaultApplicationId())) {
return Mono.error(new AppsmithException(AppsmithError.INVALID_GIT_CONFIGURATION, GIT_CONFIG_ERROR));
}
Path repoSuffix = Paths.get(branchedApplication.getWorkspaceId(), gitData.getDefaultApplicationId(), gitData.getRepoName());
return gitExecutor.checkoutToBranch(repoSuffix, branchName)
.then(fileUtils.reconstructApplicationJsonFromGitRepo(
branchedApplication.getWorkspaceId(),
branchedApplication.getGitApplicationMetadata().getDefaultApplicationId(),
branchedApplication.getGitApplicationMetadata().getRepoName(),
branchName)
)
.flatMap(applicationJson ->
importExportApplicationService
.importApplicationInWorkspace(branchedApplication.getWorkspaceId(), applicationJson, branchedApplication.getId(), branchName)
);
})
.flatMap(application -> releaseFileLock(defaultApplicationId)
.then(this.addAnalyticsForGitOperation(AnalyticsEvents.GIT_DISCARD_CHANGES.getEventName(), application, null)))
.map(responseUtils::updateApplicationWithDefaultResources);
}
return Mono.create(sink -> discardChangeMono
.subscribe(sink::success, sink::error, null, sink.currentContext())

View File

@ -12,9 +12,9 @@ import com.appsmith.external.models.DatasourceStorage;
import com.appsmith.external.models.DatasourceStorageDTO;
import com.appsmith.external.models.DefaultResources;
import com.appsmith.external.models.JSValue;
import com.appsmith.external.models.PluginType;
import com.appsmith.server.constants.FieldName;
import com.appsmith.server.domains.ActionCollection;
import com.appsmith.external.models.PluginType;
import com.appsmith.server.domains.Application;
import com.appsmith.server.domains.ApplicationDetail;
import com.appsmith.server.domains.ApplicationPage;
@ -62,6 +62,9 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mockito;
import org.mockito.internal.stubbing.answers.AnswersWithDelay;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
@ -3162,7 +3165,7 @@ public class GitServiceTest {
Mockito.when(gitExecutor.resetToLastCommit(Mockito.any(Path.class), Mockito.anyString()))
.thenReturn(Mono.just(true));
Mono<Application> applicationMono = gitService.discardChanges(application.getId(), application.getGitApplicationMetadata().getBranchName());
Mono<Application> applicationMono = gitService.discardChanges(application.getId(), application.getGitApplicationMetadata().getBranchName(), true);
StepVerifier
.create(applicationMono)
@ -3202,7 +3205,7 @@ public class GitServiceTest {
.thenReturn(Mono.just("fetched"));
gitService
.discardChanges(application.getId(), application.getGitApplicationMetadata().getBranchName())
.discardChanges(application.getId(), application.getGitApplicationMetadata().getBranchName(), true)
.timeout(Duration.ofNanos(100))
.subscribe();