diff options
Diffstat (limited to 'plugins/svn4idea/src/org/jetbrains/idea/svn/branchConfig/BranchesLoader.java')
-rw-r--r-- | plugins/svn4idea/src/org/jetbrains/idea/svn/branchConfig/BranchesLoader.java | 64 |
1 files changed, 53 insertions, 11 deletions
diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/branchConfig/BranchesLoader.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/branchConfig/BranchesLoader.java index 10f4574c7f39..ba0288da9699 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/branchConfig/BranchesLoader.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/branchConfig/BranchesLoader.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,14 +16,16 @@ package org.jetbrains.idea.svn.branchConfig; import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.MessageType; import com.intellij.openapi.vcs.VcsException; +import com.intellij.openapi.vcs.ui.VcsBalloonProblemNotifier; +import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.svn.SvnConfiguration; import org.jetbrains.idea.svn.SvnVcs; import org.jetbrains.idea.svn.api.Depth; import org.jetbrains.idea.svn.browse.DirectoryEntry; import org.jetbrains.idea.svn.browse.DirectoryEntryConsumer; -import org.jetbrains.idea.svn.integrate.SvnBranchItem; import org.tmatesoft.svn.core.*; import org.tmatesoft.svn.core.wc.SVNLogClient; import org.tmatesoft.svn.core.wc.SVNRevision; @@ -33,27 +35,60 @@ import java.util.Collections; import java.util.LinkedList; import java.util.List; -public class BranchesLoader { +/** + * @author Konstantin Kolosovsky. + */ +public class BranchesLoader implements Runnable { + @NotNull private final Project myProject; + @NotNull private final NewRootBunch myBunch; + @NotNull private final VirtualFile myRoot; + @NotNull private final String myUrl; + @NotNull private final InfoReliability myInfoReliability; + private final boolean myPassive; + + public BranchesLoader(@NotNull Project project, + @NotNull NewRootBunch bunch, + @NotNull String url, + @NotNull InfoReliability infoReliability, + @NotNull VirtualFile root, + boolean passive) { + myProject = project; + myBunch = bunch; + myUrl = url; + myInfoReliability = infoReliability; + myRoot = root; + myPassive = passive; + } - private BranchesLoader() { + public void run() { + try { + List<SvnBranchItem> branches = loadBranches(); + myBunch.updateBranches(myRoot, myUrl, new InfoStorage<List<SvnBranchItem>>(branches, myInfoReliability)); + } + catch (VcsException e) { + showError(e); + } + catch (SVNException e) { + showError(e); + } } - public static List<SvnBranchItem> loadBranches(final Project project, final String url, boolean passive) throws SVNException, - VcsException { - final SvnConfiguration configuration = SvnConfiguration.getInstance(project); - final SvnVcs vcs = SvnVcs.getInstance(project); - SVNURL branchesUrl = SVNURL.parseURIEncoded(url); + @NotNull + public List<SvnBranchItem> loadBranches() throws SVNException, VcsException { + final SvnConfiguration configuration = SvnConfiguration.getInstance(myProject); + final SvnVcs vcs = SvnVcs.getInstance(myProject); + SVNURL branchesUrl = SVNURL.parseURIEncoded(myUrl); List<SvnBranchItem> result = new LinkedList<SvnBranchItem>(); SvnTarget target = SvnTarget.fromURL(branchesUrl); - if (!passive) { + if (!myPassive) { // TODO: Implement ability to specify interactive/non-interactive auth mode for clients DirectoryEntryConsumer handler = createConsumer(branchesUrl, result); vcs.getFactory(target).createBrowseClient().list(target, SVNRevision.HEAD, Depth.IMMEDIATES, handler); } else { ISVNDirEntryHandler handler = createHandler(branchesUrl, result); - SVNLogClient client = vcs.getSvnKitManager().createLogClient(configuration.getPassiveAuthenticationManager(project)); + SVNLogClient client = vcs.getSvnKitManager().createLogClient(configuration.getPassiveAuthenticationManager(myProject)); client .doList(target.getURL(), target.getPegRevision(), SVNRevision.HEAD, false, SVNDepth.IMMEDIATES, SVNDirEntry.DIRENT_ALL, handler); } @@ -62,6 +97,13 @@ public class BranchesLoader { return result; } + private void showError(Exception e) { + // already logged inside + if (InfoReliability.setByUser.equals(myInfoReliability)) { + VcsBalloonProblemNotifier.showOverChangesView(myProject, "Branches load error: " + e.getMessage(), MessageType.ERROR); + } + } + @NotNull private static ISVNDirEntryHandler createHandler(@NotNull final SVNURL branchesUrl, @NotNull final List<SvnBranchItem> result) { return new ISVNDirEntryHandler() { |