[hg] Better error notification for hg pull. If pull failed, don't process with Update.
authorKirill Likhodedov <kirill.likhodedov@jetbrains.com>
Mon, 25 Apr 2011 15:29:01 +0000 (19:29 +0400)
committerKirill Likhodedov <kirill.likhodedov@jetbrains.com>
Mon, 25 Apr 2011 15:35:32 +0000 (19:35 +0400)
plugins/hg4idea/src/org/zmlx/hg4idea/command/HgPullCommand.java
plugins/hg4idea/src/org/zmlx/hg4idea/provider/update/HgRegularUpdater.java
plugins/hg4idea/src/org/zmlx/hg4idea/provider/update/HgUpdateEnvironment.java
plugins/hg4idea/src/org/zmlx/hg4idea/provider/update/HgUpdater.java

index bf2b1f8f92a946d3216502ebcf24c1c9c574287e..bc83c977a2a756798f00870e09e10369064889b1 100644 (file)
@@ -14,11 +14,11 @@ package org.zmlx.hg4idea.command;
 
 import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.project.Project;
-import com.intellij.openapi.vcs.VcsException;
 import com.intellij.openapi.vfs.VirtualFile;
 import org.apache.commons.lang.StringUtils;
 import org.jetbrains.annotations.NotNull;
 import org.zmlx.hg4idea.HgVcs;
+import org.zmlx.hg4idea.action.HgCommandResultNotifier;
 import org.zmlx.hg4idea.execution.HgCommandExecutor;
 import org.zmlx.hg4idea.execution.HgCommandResult;
 import org.zmlx.hg4idea.util.HgErrorUtil;
@@ -59,7 +59,7 @@ public class HgPullCommand {
     this.source = source;
   }
 
-  public void execute() {
+  public boolean execute() {
     List<String> arguments = new LinkedList<String>();
     if (update) {
       arguments.add("--update");
@@ -79,14 +79,13 @@ public class HgPullCommand {
     final HgCommandResult result = executor.executeInCurrentThread(repo, "pull", arguments);
     if (HgErrorUtil.isAuthorizationError(result)) {
       HgUtil.notifyError(project, "Authorization required", "http authorization required for <code>" + source + "</code>");
+      return false;
     } else if (HgErrorUtil.isAbort(result)) {
-      if (result != null) {
-        LOG.error(new VcsException(result.getRawError()));
-      } else {
-        LOG.error("Error handing result of 'hg pull' execution.");
-      }
+      new HgCommandResultNotifier(project).process(result, null, null);
+      return false;
     } else {
       project.getMessageBus().syncPublisher(HgVcs.REMOTE_TOPIC).update(project);
+      return true;
     }
   }
 
index a5396afbd844d0a0b660e9e56d6453a4a390f9e9..5b3bc24cc53fbc8fdc2d49d9d1c383cb0c6cf3bb 100644 (file)
@@ -61,7 +61,7 @@ public class HgRegularUpdater implements HgUpdater {
     return updateConfiguration.shouldCommitAfterMerge();
   }
 
-  public void update(final UpdatedFiles updatedFiles, ProgressIndicator indicator, List<VcsException> warnings)
+  public boolean update(final UpdatedFiles updatedFiles, ProgressIndicator indicator, List<VcsException> warnings)
     throws VcsException {
     indicator.setText(HgVcsMessages.message("hg4idea.progress.updating", repository.getPath()));
 
@@ -88,7 +88,10 @@ public class HgRegularUpdater implements HgUpdater {
 //    }
 
     if (shouldPull()) {
-      pull(repository, indicator);
+      boolean pullResult = pull(repository, indicator);
+      if (!pullResult) {
+        return false;
+      }
     }
 
     if (shouldUpdate()) {
@@ -125,6 +128,7 @@ public class HgRegularUpdater implements HgUpdater {
       //any kind of update could have resulted in merges and merge conflicts, so run the resolver
       resolvePossibleConflicts(updatedFiles);
     }
+    return true;
   }
 
   private List<HgRevisionNumber> determingRemainingOriginalBranchHeads(List<HgRevisionNumber> branchHeadsBeforePull, List<HgRevisionNumber> branchHeadsAfterPull) {
@@ -207,7 +211,7 @@ public class HgRegularUpdater implements HgUpdater {
     return statusCommand.execute(repository);
   }
 
-  private void pull(VirtualFile repo, ProgressIndicator indicator)
+  private boolean pull(VirtualFile repo, ProgressIndicator indicator)
     throws VcsException {
     indicator.setText2(HgVcsMessages.message("hg4idea.progress.pull.with.update"));
     HgPullCommand hgPullCommand = new HgPullCommand(project, repo);
@@ -215,7 +219,7 @@ public class HgRegularUpdater implements HgUpdater {
     hgPullCommand.setSource(defaultPath);
     hgPullCommand.setUpdate(false);
     hgPullCommand.setRebase(false);
-    hgPullCommand.execute();
+    return hgPullCommand.execute();
   }
 
   private void update(@NotNull VirtualFile repo, ProgressIndicator indicator, UpdatedFiles updatedFiles, List<VcsException> warnings) throws VcsException {
index 061335e36aa8e9fd711b8699ce169a1a00c3f2ad..c96dab15b2dfa3f0a1e84b78e1a1ce74e8ff0e35 100644 (file)
@@ -57,6 +57,7 @@ public class HgUpdateEnvironment implements UpdateEnvironment {
     
     List<VcsException> exceptions = new LinkedList<VcsException>();
 
+    boolean result = true;
     for (FilePath contentRoot : contentRoots) {
       if (indicator != null && indicator.isCanceled()) {
         throw new ProcessCanceledException();
@@ -71,7 +72,7 @@ public class HgUpdateEnvironment implements UpdateEnvironment {
       }
       try {
         HgUpdater updater = hgUpdaterFactory.buildUpdater(repository, updateConfiguration);
-        updater.update(updatedFiles, indicator, exceptions);
+        result &= updater.update(updatedFiles, indicator, exceptions);
       } catch (VcsException e) {
         //TODO include module name where exception occurred
         exceptions.add(e);
@@ -80,7 +81,7 @@ public class HgUpdateEnvironment implements UpdateEnvironment {
         indicator.finishNonCancelableSection();
       }
     }
-    return new UpdateSessionAdapter(exceptions, false);
+    return new UpdateSessionAdapter(exceptions, !result);
   }
 
   public Configurable createConfigurable(Collection<FilePath> contentRoots) {
index e84397083499348365fa552b4a46d0d20f727033..a724f4501acbc09c2f1b26fa3370a2ff2c6be199 100644 (file)
@@ -20,7 +20,7 @@ import java.util.List;
 
 public interface HgUpdater {
 
-  void update(UpdatedFiles updatedFiles, ProgressIndicator indicator, List<VcsException> exceptions)
+  boolean update(UpdatedFiles updatedFiles, ProgressIndicator indicator, List<VcsException> exceptions)
     throws VcsException;
 
   static class UpdateConfiguration{