Skip to content

Instantly share code, notes, and snippets.

@bltavares
Created January 7, 2016 16:23
Show Gist options
  • Save bltavares/ac0e87695f4c86ea692d to your computer and use it in GitHub Desktop.
Save bltavares/ac0e87695f4c86ea692d to your computer and use it in GitHub Desktop.
diff --git a/src/main/java/br/gov/servicos/editor/git/RepositorioGit.java b/src/main/java/br/gov/servicos/editor/git/RepositorioGit.java
index ef92041..65b7e5f 100644
--- a/src/main/java/br/gov/servicos/editor/git/RepositorioGit.java
+++ b/src/main/java/br/gov/servicos/editor/git/RepositorioGit.java
@@ -7,14 +7,19 @@ import lombok.experimental.FieldDefaults;
import lombok.experimental.NonFinal;
import lombok.extern.slf4j.Slf4j;
import net.logstash.logback.marker.LogstashMarker;
-import org.eclipse.jgit.api.*;
+import org.eclipse.jgit.api.Git;
+import org.eclipse.jgit.api.MergeResult;
+import org.eclipse.jgit.api.RebaseCommand;
+import org.eclipse.jgit.api.RebaseResult;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.api.errors.JGitInternalException;
import org.eclipse.jgit.api.errors.WrongRepositoryStateException;
import org.eclipse.jgit.internal.JGitText;
import org.eclipse.jgit.lib.*;
+import org.eclipse.jgit.merge.MergeStrategy;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevWalk;
+import org.eclipse.jgit.transport.FetchResult;
import org.eclipse.jgit.transport.RefSpec;
import org.eclipse.jgit.transport.TrackingRefUpdate;
import org.eclipse.jgit.treewalk.filter.AndTreeFilter;
@@ -47,7 +52,6 @@ import static org.eclipse.jgit.api.ListBranchCommand.ListMode.ALL;
import static org.eclipse.jgit.api.ListBranchCommand.ListMode.REMOTE;
import static org.eclipse.jgit.lib.ConfigConstants.*;
import static org.eclipse.jgit.lib.Constants.*;
-import static org.eclipse.jgit.merge.MergeStrategy.THEIRS;
@Slf4j
@Service
@@ -257,31 +261,24 @@ public class RepositorioGit {
public void pull() {
try {
- PullResult result = git.pull()
- .setRebase(true)
- .setStrategy(THEIRS)
+ FetchResult fetchResult = git.fetch()
.setProgressMonitor(new LogstashProgressMonitor(log))
.call();
-
+ RebaseResult rebaseResult = git.rebase()
+ .setUpstream("origin/master")
+ .setStrategy(MergeStrategy.THEIRS)
+ .setProgressMonitor(new LogstashProgressMonitor(log))
+ .call();
Marker marker = append("git.state", git.getRepository().getRepositoryState().toString())
.and(append("git.branch", git.getRepository().getBranch()))
- .and(append("pull.fetched.from", result.getFetchedFrom()))
- .and(append("pull.fetch.result.updates", result.getFetchResult() == null ? null : result.getFetchResult().getMessages()))
- .and(append("pull.fetch.result.updates", result.getFetchResult() == null ? null : result.getFetchResult().getTrackingRefUpdates().stream().map(TrackingRefUpdate::getResult).map(Enum::toString).collect(toList())))
- .and(append("pull.rebase.result", result.getRebaseResult() == null ? null : result.getRebaseResult().getStatus().toString()))
- .and(append("pull.merge.result", result.getMergeResult() == null ? null : result.getMergeResult().getMergeStatus().toString()));
-
- log.info(marker, "git pull em {}", git.getRepository().getBranch());
-
- if (!result.isSuccessful()) {
- log.error(append("git.state", git.getRepository().getRepositoryState().toString()), "ERRO AO FAZER REBASE --- INICIANDO ABORT");
- git.rebase().setStrategy(THEIRS).setOperation(RebaseCommand.Operation.ABORT).call();
- log.error(append("git.state", git.getRepository().getRepositoryState().toString()), "ERRO AO FAZER REBASE --- APÓS O ABORT");
- throw new IllegalStateException("Não foi possível completar o git pull");
+ .and(append("pull.fetch.result.updates", fetchResult.getMessages()))
+ .and(append("pull.fetch.result.updates", fetchResult.getTrackingRefUpdates().stream().map(TrackingRefUpdate::getResult).map(Enum::toString).collect(toList())))
+ .and(append("pull.rebase.result", rebaseResult.getStatus().toString()));
+
+ log.info(marker, "git fetch/rebase em {}", git.getRepository().getBranch());
- }
} catch (WrongRepositoryStateException e) { // o repositório pode entrar em estado inválido, e neste caso fazemos um rebase e tentamos
try {
git.rebase().setOperation(RebaseCommand.Operation.ABORT).call();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment