com.beijunyi.parallelgit.filesystem.commands.GfsReset Maven / Gradle / Ivy
package com.beijunyi.parallelgit.filesystem.commands;
import java.io.IOException;
import javax.annotation.Nonnull;
import com.beijunyi.parallelgit.filesystem.GfsStatusProvider;
import com.beijunyi.parallelgit.filesystem.GitFileSystem;
import com.beijunyi.parallelgit.filesystem.exceptions.NoBranchException;
import com.beijunyi.parallelgit.filesystem.exceptions.NoHeadCommitException;
import com.beijunyi.parallelgit.utils.BranchUtils;
import org.eclipse.jgit.revwalk.RevCommit;
import static com.beijunyi.parallelgit.filesystem.commands.GfsReset.Status.SUCCESS;
import static com.beijunyi.parallelgit.utils.CommitUtils.getCommit;
public class GfsReset extends GfsCommand {
private boolean soft = false;
private boolean hard = false;
private String branch;
private String revision;
public GfsReset(GitFileSystem gfs) {
super(gfs);
}
@Nonnull
public GfsReset soft(boolean soft) {
this.soft = soft;
return this;
}
@Nonnull
public GfsReset hard(boolean hard) {
this.hard = hard;
return this;
}
@Nonnull
public GfsReset revision(String revision) {
this.revision = revision;
return this;
}
@Nonnull
@Override
protected Result doExecute(GfsStatusProvider.Update update) throws IOException {
prepareBranch();
prepareCommit();
RevCommit commit = getCommit(revision, repo);
BranchUtils.resetBranchHead(branch, commit, repo);
gfs.updateOrigin(commit.getTree());
if(!soft) gfs.reset();
if(hard) update.clearMergeNote();
update.commit(commit);
return Result.success();
}
private void prepareBranch() {
if(!status.isAttached()) throw new NoBranchException();
branch = status.branch();
}
private void prepareCommit() throws IOException {
if(revision == null) {
if(!status.isInitialized()) throw new NoHeadCommitException();
revision = status.commit().getName();
}
}
public enum Status {
SUCCESS,
}
public static class Result implements GfsCommandResult {
private final Status status;
private Result(Status status) {
this.status = status;
}
@Nonnull
public static Result success() {
return new Result(SUCCESS);
}
@Override
public boolean isSuccessful() {
return SUCCESS.equals(status);
}
}
}