diff --git a/build/scripts/layouts.gant b/build/scripts/layouts.gant
index 0fafd4f1e2d2..c1fc719fd3f2 100644
--- a/build/scripts/layouts.gant
+++ b/build/scripts/layouts.gant
@@ -235,6 +235,7 @@ public def layoutCommunityPlugins(String home) {
}
fileset(dir: "$home/plugins/git4idea/lib/jgit") {
include(name: "org.eclipse.jgit*.jar")
+ include(name: "jsch*.jar")
exclude(name: "*.zip")
}
}
diff --git a/build/scripts/libLicenses.gant b/build/scripts/libLicenses.gant
index 50fec4635b80..8817ee37d3f9 100644
--- a/build/scripts/libLicenses.gant
+++ b/build/scripts/libLicenses.gant
@@ -185,6 +185,7 @@ libraryLicense(name: "JGoodies Forms", libraryName: "jgoodies-forms", version: "
libraryLicense(name: "JGoodies Looks", attachedTo: "platform-impl", version: "2.2.2", license: "BSD ", url: "http://www.jgoodies.com/freeware/looks/", licenseUrl: "http://www.jgoodies.com/downloads/libraries.html")
libraryLicense(name: "JNA", libraryName: "jna", version: "3.2.4", license: "LGPL 2.1", url: "https://jna.dev.java.net/", licenseUrl: "http://www.opensource.org/licenses/lgpl-2.1.php")
libraryLicense(name: "JNA", libraryName: "jna.jar", version: "3.2.7", license: "LGPL 2.1", url: "https://jna.dev.java.net/", licenseUrl: "http://www.opensource.org/licenses/lgpl-2.1.php")
+libraryLicense(name: "JSch", libraryName: "JSch", version: "0.1.44", license: "BSD", url: "http://www.jcraft.com/jsch/", licenseUrl: "http://www.jcraft.com/jsch/LICENSE.txt")
libraryLicense(name: "JUnit", libraryName: "JUnit3", version: "3.8.1", license: "CPL 1.0", url: "http://junit.org/")
libraryLicense(name: "JUnit", libraryName: "JUnit4", version: "4.8", license: "CPL 1.0", url: "http://junit.org/")
libraryLicense(name: "Log4j", libraryName: "Log4J", version: "1.2", license: "Apache 2.0", url: "http://logging.apache.org/log4j/1.2/index.html", licenseUrl: "http://logging.apache.org/license.html")
diff --git a/lib/sanselan-0.98-snapshot.jar b/lib/sanselan-0.98-snapshot.jar
index f61b34ec92b7..8ed4e052cbd3 100644
Binary files a/lib/sanselan-0.98-snapshot.jar and b/lib/sanselan-0.98-snapshot.jar differ
diff --git a/lib/src/sanselan-0.98-snapshot-src.jar b/lib/src/sanselan-0.98-snapshot-src.jar
index 782638b13b48..8ae3839fb72d 100644
Binary files a/lib/src/sanselan-0.98-snapshot-src.jar and b/lib/src/sanselan-0.98-snapshot-src.jar differ
diff --git a/platform/lang-impl/src/com/intellij/application/options/CodeStyleAbstractPanel.java b/platform/lang-impl/src/com/intellij/application/options/CodeStyleAbstractPanel.java
index 22a5b1646792..cb467e646318 100644
--- a/platform/lang-impl/src/com/intellij/application/options/CodeStyleAbstractPanel.java
+++ b/platform/lang-impl/src/com/intellij/application/options/CodeStyleAbstractPanel.java
@@ -620,5 +620,9 @@ public abstract class CodeStyleAbstractPanel implements Disposable {
copyMenu.removeAll();
}
}
+
+ public boolean isCopyFromMenuAvailable() {
+ return false;
+ }
}
diff --git a/platform/lang-impl/src/com/intellij/application/options/TabbedLanguageCodeStylePanel.java b/platform/lang-impl/src/com/intellij/application/options/TabbedLanguageCodeStylePanel.java
index b9686d105990..825f68742046 100644
--- a/platform/lang-impl/src/com/intellij/application/options/TabbedLanguageCodeStylePanel.java
+++ b/platform/lang-impl/src/com/intellij/application/options/TabbedLanguageCodeStylePanel.java
@@ -476,7 +476,12 @@ public abstract class TabbedLanguageCodeStylePanel extends CodeStyleAbstractPane
myConfigurable.reset();
}
}
-
+
+ @Override
+ public boolean isCopyFromMenuAvailable() {
+ return true;
+ }
+
//========================================================================================================================================
private class MyIndentOptionsWrapper extends CodeStyleAbstractPanel {
diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/CodeStyleSchemesPanel.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/CodeStyleSchemesPanel.java
index c0fcbc095ae2..821eff38cc88 100644
--- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/CodeStyleSchemesPanel.java
+++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/CodeStyleSchemesPanel.java
@@ -317,11 +317,7 @@ public class CodeStyleSchemesPanel{
public void setCodeStyleSettingsPanel(NewCodeStyleSettingsPanel settingsPanel) {
mySettingsPanel = settingsPanel;
CodeStyleAbstractPanel selectedPanel = mySettingsPanel.getSelectedPanel();
- if (selectedPanel != null) {
- initCopyFromMenu();
- selectedPanel.setupCopyFromMenu(myCopyFromMenu);
- }
- myCopyFromButton.setEnabled(myCopyFromMenu.getItemCount() > 0);
+ myCopyFromButton.setEnabled(selectedPanel != null && selectedPanel.isCopyFromMenuAvailable());
}
private void onSettingsTypeChange() {
@@ -344,6 +340,14 @@ public class CodeStyleSchemesPanel{
myCopyFromMenu = new PopupMenu();
myCopyFromButton.add(myCopyFromMenu);
}
+ CodeStyleAbstractPanel selectedPanel = mySettingsPanel.getSelectedPanel();
+ if (selectedPanel != null) {
+ selectedPanel.setupCopyFromMenu(myCopyFromMenu);
+ myCopyFromButton.setEnabled(myCopyFromMenu.getItemCount() > 0);
+ }
+ else {
+ myCopyFromButton.setEnabled(false);
+ }
}
}
diff --git a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarItem.java b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarItem.java
index b0b432952c37..e8385b9da65a 100644
--- a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarItem.java
+++ b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarItem.java
@@ -119,7 +119,7 @@ public class NavBarItem extends SimpleColoredComponent implements Disposable {
final Color bg = getBackground();
append(myText, new SimpleTextAttributes(bg, fg, myAttributes.getWaveColor(), myAttributes.getStyle()));
- repaint();
+ //repaint();
}
public boolean isInactive() {
diff --git a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPanel.java b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPanel.java
index 562510d6f988..8505671a8878 100644
--- a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPanel.java
+++ b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPanel.java
@@ -29,6 +29,7 @@ import com.intellij.ide.projectView.ProjectView;
import com.intellij.ide.projectView.impl.AbstractProjectViewPane;
import com.intellij.ide.projectView.impl.ProjectRootsUtil;
import com.intellij.ide.projectView.impl.TransferableWrapper;
+import com.intellij.ide.ui.UISettings;
import com.intellij.ide.ui.customization.CustomActionsSchema;
import com.intellij.ide.util.DeleteHandler;
import com.intellij.openapi.Disposable;
@@ -245,6 +246,11 @@ public class NavBarPanel extends JPanel implements DataProvider, PopupOwner, Dis
for (NavBarItem item : myList) {
item.update();
}
+ if (UISettings.getInstance().SHOW_NAVIGATION_BAR) {
+ JComponent parent = (JComponent)getParent().getParent().getParent().getParent().getParent().getParent();
+ parent.revalidate();
+ parent.repaint();
+ }
}
public void rebuildAndSelectTail(final boolean requestFocus) {
diff --git a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarRootPaneExtension.java b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarRootPaneExtension.java
index ab9e9c70cdcf..72be59e5caff 100644
--- a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarRootPaneExtension.java
+++ b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarRootPaneExtension.java
@@ -83,14 +83,9 @@ public class NavBarRootPaneExtension extends IdeRootPaneNorthExtension {
public JComponent getComponent() {
if (myWrapperPanel == null) {
myWrapperPanel = new JPanel(new BorderLayout()) {
- @Override
- protected void paintChildren(Graphics g) {
- super.paintChildren(g);
- NavBarUIManager.getUI().doPaintWrapperPanelChildren((Graphics2D)g, getBounds(), isMainToolbarVisible());
- }
-
@Override
protected void paintComponent(Graphics g) {
+ super.paintComponent(g);
NavBarUIManager.getUI().doPaintWrapperPanel((Graphics2D)g, getBounds(), isMainToolbarVisible());
}
diff --git a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/ui/AbstractNavBarUI.java b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/ui/AbstractNavBarUI.java
index 57f88056f909..f95651a8844e 100644
--- a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/ui/AbstractNavBarUI.java
+++ b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/ui/AbstractNavBarUI.java
@@ -158,10 +158,6 @@ public abstract class AbstractNavBarUI implements NavBarUI {
return size;
}
- @Override
- public void doPaintWrapperPanelChildren(Graphics2D g, Rectangle bounds, boolean mainToolbarVisible) {
- }
-
@Override
public Insets getWrapperPanelInsets(Insets insets) {
return JBInsets.NONE;
@@ -171,8 +167,8 @@ public abstract class AbstractNavBarUI implements NavBarUI {
public void doPaintNavBarPanel(Graphics2D g, Rectangle r, boolean mainToolbarVisible, boolean undocked) {
final Color startColor = UIUtil.getControlColor();
final Color endColor = ColorUtil.shift(startColor, 7.0d / 8.0d);
- g.setPaint(new GradientPaint(0, 0, startColor, 0, r.height, endColor));
- g.fillRect(0, 0, r.width, r.height);
+ g.setPaint(new GradientPaint(0, 0, startColor, 0, r.height-1, endColor));
+ g.fillRect(0, 0, r.width, r.height-1);
if (!undocked) {
g.setColor(new Color(255, 255, 255, 220));
@@ -184,7 +180,7 @@ public abstract class AbstractNavBarUI implements NavBarUI {
g.drawLine(0, r.height-1, r.width, r.height-1);
if (!mainToolbarVisible) {
- UIUtil.drawDottedLine(g, r.width - 1, 0, r.width - 1, r.height, null, Color.GRAY);
+ UIUtil.drawDottedLine(g, r.width - 1, 0, r.width - 1, r.height-1, null, Color.GRAY);
}
}
}
diff --git a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/ui/AquaNavBarUI.java b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/ui/AquaNavBarUI.java
index e921910d4bb2..b9a3f6e40a2a 100644
--- a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/ui/AquaNavBarUI.java
+++ b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/ui/AquaNavBarUI.java
@@ -34,17 +34,6 @@ public class AquaNavBarUI extends AbstractNavBarUI {
return !selected;
}
- @Override
- public void doPaintWrapperPanelChildren(Graphics2D g, Rectangle bounds, boolean mainToolbarVisible) {
- super.doPaintWrapperPanelChildren(g, bounds, mainToolbarVisible);
- if (!mainToolbarVisible) {
- g.setColor(new Color(0, 0, 0, 90));
- g.drawLine(0, bounds.height - 2, bounds.width, bounds.height - 2);
- g.setColor(new Color(0, 0, 0, 20));
- g.drawLine(0, bounds.height - 1, bounds.width, bounds.height - 1);
- }
- }
-
@Override
public void doPaintWrapperPanel(Graphics2D g, Rectangle bounds, boolean mainToolbarVisible) {
if (mainToolbarVisible) {
@@ -52,6 +41,10 @@ public class AquaNavBarUI extends AbstractNavBarUI {
g.fillRect(0, 0, bounds.width, bounds.height);
} else {
UIUtil.drawGradientHToolbarBackground(g, bounds.width, bounds.height);
+ g.setColor(new Color(0, 0, 0, 90));
+ g.drawLine(0, bounds.height - 1, bounds.width, bounds.height - 1);
+ g.setColor(new Color(0, 0, 0, 20));
+ g.drawLine(0, bounds.height, bounds.width, bounds.height);
}
}
@@ -62,9 +55,12 @@ public class AquaNavBarUI extends AbstractNavBarUI {
@Override
public void doPaintNavBarPanel(Graphics2D g, Rectangle r, boolean mainToolbarVisible, boolean undocked) {
- g.setPaint(new GradientPaint(0, 0, new Color(240, 240, 240), 0, r.height, new Color(210, 210, 210)));
- g.fillRect(0, 0, r.width, r.height);
-
+ if (mainToolbarVisible) {
+ g.setPaint(new GradientPaint(0, 0, new Color(240, 240, 240), 0, r.height, new Color(210, 210, 210)));
+ g.fillRect(0, 0, r.width, r.height);
+ } else {
+ UIUtil.drawGradientHToolbarBackground(g, r.width, r.height);
+ }
if (!undocked) {
g.setColor(new Color(255, 255, 255, 220));
g.drawLine(0, 1, r.width, 1);
diff --git a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/ui/NavBarUI.java b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/ui/NavBarUI.java
index ecf883bdaa0a..ec9ccb3b889f 100644
--- a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/ui/NavBarUI.java
+++ b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/ui/NavBarUI.java
@@ -42,7 +42,6 @@ public interface NavBarUI {
Color getForeground(boolean selected, boolean focused, boolean inactive);
void doPaintWrapperPanel(Graphics2D g, Rectangle bounds, boolean mainToolbarVisible);
- void doPaintWrapperPanelChildren(Graphics2D g, Rectangle bounds, boolean mainToolbarVisible);
void doPaintNavBarPanel(Graphics2D g, Rectangle bounds, boolean mainToolbarVisible, boolean undocked);
diff --git a/platform/platform-api/src/com/intellij/openapi/actionSystem/ex/ComboBoxAction.java b/platform/platform-api/src/com/intellij/openapi/actionSystem/ex/ComboBoxAction.java
index 9908e1899c48..0c3dbf7f5cd8 100644
--- a/platform/platform-api/src/com/intellij/openapi/actionSystem/ex/ComboBoxAction.java
+++ b/platform/platform-api/src/com/intellij/openapi/actionSystem/ex/ComboBoxAction.java
@@ -99,6 +99,7 @@ public abstract class ComboBoxAction extends AnAction implements CustomComponent
setMargin(new Insets(margins.top, 2, margins.bottom, 2));
if (isSmallVariant()) {
setBorder(IdeBorderFactory.createEmptyBorder(0));
+ setFont(UIUtil.getLabelFont().deriveFont(11.0f));
}
addActionListener(
new ActionListener() {
@@ -292,7 +293,7 @@ public abstract class ComboBoxAction extends AnAction implements CustomComponent
x += icon.getIconWidth() + 3;
}
if (!StringUtil.isEmpty(getText())) {
- final Font font = UIUtil.getButtonFont();
+ final Font font = getFont();
g2.setFont(font);
g2.setColor(UIManager.getColor("Button.foreground"));
g2.drawString(getText(), x, (size.height + font.getSize())/2 - 1);
diff --git a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionToolbarImpl.java b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionToolbarImpl.java
index 8bdd36a09f1f..9c036b39bab3 100644
--- a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionToolbarImpl.java
+++ b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionToolbarImpl.java
@@ -161,7 +161,11 @@ public class ActionToolbarImpl extends JPanel implements ActionToolbar {
private boolean doMacEnhancementsForMainToolbar() {
return (UIUtil.isUnderAquaLookAndFeel() && ActionPlaces.MAIN_TOOLBAR.equals(myPlace))
- || ActionPlaces.NAVIGATION_BAR.equals(myPlace);
+ || isInsideNavBar();
+ }
+
+ private boolean isInsideNavBar() {
+ return ActionPlaces.NAVIGATION_BAR.equals(myPlace);
}
@Override
@@ -187,7 +191,7 @@ public class ActionToolbarImpl extends JPanel implements ActionToolbar {
}
protected void paintComponent(final Graphics g) {
- if (ActionPlaces.NAVIGATION_BAR.equals(myPlace)) {
+ if (isInsideNavBar()) {
final Dimension size = getSize();
g.setColor(UIUtil.getBorderColor());
g.drawLine(0, size.height - 1, size.width, size.height - 1);
@@ -258,7 +262,7 @@ public class ActionToolbarImpl extends JPanel implements ActionToolbar {
}
private Dimension getMinimumButtonSize() {
- return ActionPlaces.NAVIGATION_BAR.equals(myPlace) ? NAVBAR_MINIMUM_BUTTON_SIZE : DEFAULT_MINIMUM_BUTTON_SIZE;
+ return isInsideNavBar() ? NAVBAR_MINIMUM_BUTTON_SIZE : DEFAULT_MINIMUM_BUTTON_SIZE;
}
public ActionButton createToolbarButton(final AnAction action, final ActionButtonLook look, final String place, final Presentation presentation, final Dimension minimumSize) {
@@ -1178,9 +1182,9 @@ public class ActionToolbarImpl extends JPanel implements ActionToolbar {
setBorder(new EmptyBorder(0, 0, 0, 0));
setOpaque(false);
} else {
- if (ActionPlaces.NAVIGATION_BAR.equals(myPlace)) {
+ if (isInsideNavBar()) {
setMinimumButtonSize(NAVBAR_MINIMUM_BUTTON_SIZE);
- setBorder(BorderFactory.createEmptyBorder(1, 2, 1, 2));
+ setBorder(BorderFactory.createEmptyBorder(1, 3, 1, 3));
setOpaque(true);
} else {
setMinimumButtonSize(DEFAULT_MINIMUM_BUTTON_SIZE);
diff --git a/plugins/git4idea/git4idea.iml b/plugins/git4idea/git4idea.iml
index 58d7434e8cb4..3a86683611e2 100644
--- a/plugins/git4idea/git4idea.iml
+++ b/plugins/git4idea/git4idea.iml
@@ -57,6 +57,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/plugins/git4idea/lib/jgit/jsch-0.1.44.jar b/plugins/git4idea/lib/jgit/jsch-0.1.44.jar
new file mode 100644
index 000000000000..644850c83eb7
Binary files /dev/null and b/plugins/git4idea/lib/jgit/jsch-0.1.44.jar differ
diff --git a/plugins/git4idea/lib/jgit/jsch-0.1.44.zip b/plugins/git4idea/lib/jgit/jsch-0.1.44.zip
new file mode 100644
index 000000000000..10f3e7cc34d6
Binary files /dev/null and b/plugins/git4idea/lib/jgit/jsch-0.1.44.zip differ
diff --git a/plugins/git4idea/src/git4idea/Git.java b/plugins/git4idea/src/git4idea/Git.java
index c7ee59d4f1f8..208219fd1c9f 100644
--- a/plugins/git4idea/src/git4idea/Git.java
+++ b/plugins/git4idea/src/git4idea/Git.java
@@ -30,6 +30,7 @@ import git4idea.repo.GitRepository;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.io.File;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
@@ -121,6 +122,14 @@ public class Git {
return untrackedFiles;
}
+
+ @NotNull
+ public static GitCommandResult clone(@NotNull Project project, @NotNull File parentDirectory, @NotNull String url, @NotNull String clonedDirectoryName) {
+ GitLineHandler handler = new GitLineHandler(project, parentDirectory, GitCommand.CLONE);
+ handler.addParameters(url);
+ handler.addParameters(clonedDirectoryName);
+ return run(handler, true);
+ }
/**
* {@code git checkout <reference>}
diff --git a/plugins/git4idea/src/git4idea/checkout/GitCheckoutProvider.java b/plugins/git4idea/src/git4idea/checkout/GitCheckoutProvider.java
index fc511d8a5d43..6d73148d4193 100644
--- a/plugins/git4idea/src/git4idea/checkout/GitCheckoutProvider.java
+++ b/plugins/git4idea/src/git4idea/checkout/GitCheckoutProvider.java
@@ -15,30 +15,26 @@
*/
package git4idea.checkout;
-import com.intellij.openapi.diagnostic.Logger;
+import com.intellij.notification.NotificationType;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.Task;
import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vcs.CheckoutProvider;
-import com.intellij.openapi.vcs.VcsException;
import com.intellij.openapi.vcs.changes.VcsDirtyScopeManager;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.vcsUtil.VcsUtil;
import git4idea.Git;
import git4idea.GitVcs;
import git4idea.actions.BasicAction;
-import git4idea.commands.GitCommand;
-import git4idea.commands.GitSimpleHandler;
+import git4idea.commands.GitCommandResult;
import git4idea.i18n.GitBundle;
-import git4idea.ui.GitUIUtil;
+import git4idea.jgit.GitHttpAdapter;
+import git4idea.update.GitFetchResult;
import git4idea.update.GitFetcher;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.File;
-import java.util.Collections;
import java.util.concurrent.atomic.AtomicBoolean;
/**
@@ -46,8 +42,6 @@ import java.util.concurrent.atomic.AtomicBoolean;
*/
public class GitCheckoutProvider implements CheckoutProvider {
- private static final Logger LOG = Logger.getInstance(GitCheckoutProvider.class);
-
public String getVcsName() {
return "_Git";
}
@@ -81,7 +75,7 @@ public class GitCheckoutProvider implements CheckoutProvider {
new Task.Backgroundable(project, GitBundle.message("cloning.repository", sourceRepositoryURL)) {
@Override
public void run(@NotNull ProgressIndicator indicator) {
- cloneResult.set(doClone(indicator, project, directoryName, parentDirectory, sourceRepositoryURL));
+ cloneResult.set(doClone(project, directoryName, parentDirectory, sourceRepositoryURL));
}
@Override
@@ -104,87 +98,25 @@ public class GitCheckoutProvider implements CheckoutProvider {
}.queue();
}
- private static boolean doClone(ProgressIndicator indicator, Project project, String directoryName, String parentDirectory, String sourceRepositoryURL) {
- File dir = mkdir(project, directoryName, parentDirectory);
- if (dir == null) {
- return false;
+ private static boolean doClone(@NotNull Project project, @NotNull String directoryName, @NotNull String parentDirectory, @NotNull String sourceRepositoryURL) {
+ if (GitHttpAdapter.isHttpUrl(sourceRepositoryURL)) {
+ GitFetchResult result = GitHttpAdapter.cloneRepository(project, new File(parentDirectory, directoryName), sourceRepositoryURL);
+ GitFetcher.displayFetchResult(project, result, "Clone failed", result.getErrors());
+ return result.isSuccess();
}
- VirtualFile root = VcsUtil.getVirtualFileWithRefresh(dir);
- if (root != null &&
- init(project, root) &&
- addRemote(project, root, sourceRepositoryURL) &&
- fetch(project, root, indicator) &&
- checkout(project, root)) {
+ else {
+ return cloneNatively(project, new File(parentDirectory), sourceRepositoryURL, directoryName);
+ }
+ }
+
+ private static boolean cloneNatively(Project project, File directory, String url, String cloneDirectoryName) {
+ GitCommandResult result = Git.clone(project, directory, url, cloneDirectoryName);
+ if (result.success()) {
return true;
}
- cleanup(dir);
+ GitVcs.IMPORTANT_ERROR_NOTIFICATION.createNotification("Clone failed", result.getErrorOutputAsHtmlString(), NotificationType.ERROR, null)
+ .notify(project.isDefault() ? null : project);
return false;
}
- private static void cleanup(@NotNull File dir) {
- FileUtil.delete(dir);
- }
-
- private static @Nullable File mkdir(Project project, String directoryName, String parentDirectory) {
- final File dir = new File(parentDirectory, directoryName);
- if (dir.exists()) {
- GitUIUtil.notifyError(project, "Couldn't clone", "Directory " + dir + " already exists.");
- return null;
- }
- if (!dir.mkdir()) {
- GitUIUtil.notifyError(project, "Couldn't clone", "Can't create directory " + dir + "");
- return null;
- }
- return dir;
- }
-
- private static boolean init(Project project, VirtualFile root) {
- try {
- Git.init(project, root);
- } catch (VcsException e) {
- LOG.info("init ", e);
- GitVcs vcs = GitVcs.getInstance(project);
- if (vcs == null || vcs.getExecutableValidator().isExecutableValid()) { // invalid executable will be notified in GitHandler.start()
- GitUIUtil.notifyError(project, "Couldn't clone", "Couldn't git init in " + root.getPresentableUrl() + "", true, e);
- }
- return false;
- }
- return true;
- }
-
- private static boolean addRemote(Project project, VirtualFile root, String remoteUrl) {
- final GitSimpleHandler addRemoteHandler = new GitSimpleHandler(project, root, GitCommand.REMOTE);
- addRemoteHandler.setNoSSH(true);
- addRemoteHandler.addParameters("add", "origin", remoteUrl);
- try {
- addRemoteHandler.run();
- return true;
- }
- catch (VcsException e) {
- LOG.info("addRemote ", e);
- GitUIUtil.notifyError(project, "Couldn't clone", "Couldn't add remote " + remoteUrl + "", true, e);
- return false;
- }
- }
-
- private static boolean fetch(Project project, VirtualFile root, ProgressIndicator indicator) {
- return new GitFetcher(project, indicator).fetchRootsAndNotify(Collections.singleton(root), "Couldn't clone", false);
- }
-
- private static boolean checkout(Project project, VirtualFile root) {
- GitSimpleHandler h = new GitSimpleHandler(project, root, GitCommand.CHECKOUT);
- h.setNoSSH(true);
- h.addParameters("-b", "master", "origin/master");
- try {
- h.run();
- return true;
- }
- catch (VcsException e) {
- LOG.info("checkout ", e);
- GitUIUtil.notifyError(project, "Clone not completed",
- "Couldn't checkout master branch.
All changes were fetched to " + root + ".", true, e);
- return false;
- }
- }
-
}
diff --git a/plugins/git4idea/src/git4idea/jgit/GitHttpAdapter.java b/plugins/git4idea/src/git4idea/jgit/GitHttpAdapter.java
index 1e1b2f14d95c..c1f5bfe4d8eb 100644
--- a/plugins/git4idea/src/git4idea/jgit/GitHttpAdapter.java
+++ b/plugins/git4idea/src/git4idea/jgit/GitHttpAdapter.java
@@ -26,6 +26,7 @@ import git4idea.push.GitSimplePushResult;
import git4idea.remote.GitRememberedInputs;
import git4idea.repo.GitRepository;
import git4idea.update.GitFetchResult;
+import org.eclipse.jgit.api.CloneCommand;
import org.eclipse.jgit.api.FetchCommand;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.PushCommand;
@@ -143,6 +144,34 @@ public final class GitHttpAdapter {
return makeErrorResultFromException(e);
}
}
+
+ @NotNull
+ public static GitFetchResult cloneRepository(@NotNull Project project, @NotNull final File directory, @NotNull final String url) {
+ GitFetchResult.Type resultType;
+ try {
+ final GitHttpCredentialsProvider provider = new GitHttpCredentialsProvider(project, url);
+ GeneralResult result = callWithAuthRetry(new MyRunnable() {
+ @Override
+ public void run() throws InvalidRemoteException {
+ CloneCommand cloneCommand = Git.cloneRepository();
+ cloneCommand.setDirectory(directory);
+ cloneCommand.setURI(url);
+ cloneCommand.setCredentialsProvider(provider);
+ cloneCommand.call();
+ }
+ }, provider);
+ resultType = convertToFetchResultType(result);
+ }
+ catch (InvalidRemoteException e) {
+ LOG.info("Exception while cloning " + url + " to " + directory, e);
+ return GitFetchResult.error(e);
+ }
+ catch (IOException e) {
+ LOG.info("Exception while cloning " + url + " to " + directory, e);
+ return GitFetchResult.error(e);
+ }
+ return new GitFetchResult(resultType);
+ }
@NotNull
private static GitSimplePushResult convertToPushResultType(GeneralResult result) {
diff --git a/plugins/git4idea/src/git4idea/push/GitSimplePushResult.java b/plugins/git4idea/src/git4idea/push/GitSimplePushResult.java
index 79a3c333be06..d00cf9d3efce 100644
--- a/plugins/git4idea/src/git4idea/push/GitSimplePushResult.java
+++ b/plugins/git4idea/src/git4idea/push/GitSimplePushResult.java
@@ -65,7 +65,7 @@ public final class GitSimplePushResult {
@NotNull
public static GitSimplePushResult error(@NotNull String errorOutput) {
- return new GitSimplePushResult(Type.REJECT, errorOutput, Collections.emptyList());
+ return new GitSimplePushResult(Type.ERROR, errorOutput, Collections.emptyList());
}
@NotNull
diff --git a/plugins/git4idea/src/git4idea/remote/GitRememberedInputs.java b/plugins/git4idea/src/git4idea/remote/GitRememberedInputs.java
index ecb62c385694..3a2a44d515b3 100644
--- a/plugins/git4idea/src/git4idea/remote/GitRememberedInputs.java
+++ b/plugins/git4idea/src/git4idea/remote/GitRememberedInputs.java
@@ -65,6 +65,15 @@ public class GitRememberedInputs implements PersistentStateComponent"));
}
} else {
- errorMessages.add(error.getMessage().replace("\n", "
"));
+ errorMessages.add(error.toString().replace("\n", "
"));
}
}
}
diff --git a/plugins/git4idea/src/git4idea/update/GitFetcher.java b/plugins/git4idea/src/git4idea/update/GitFetcher.java
index d657ba2a63e3..c14e189456f7 100644
--- a/plugins/git4idea/src/git4idea/update/GitFetcher.java
+++ b/plugins/git4idea/src/git4idea/update/GitFetcher.java
@@ -19,7 +19,6 @@ import com.intellij.notification.NotificationType;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.vfs.VirtualFile;
import git4idea.GitVcs;
import git4idea.commands.*;
@@ -60,13 +59,8 @@ public class GitFetcher {
*/
public GitFetchResult fetch(@NotNull VirtualFile root) {
GitRepository repository = myRepositoryManager.getRepositoryForRoot(root);
- boolean disposeRepository = false;
+ assert repository != null : "Repository can't be null for " + root + "\n" + myRepositoryManager;
- if (repository == null) { // we are cloning => no repository is registered => making a fake repository
- repository = GitRepository.getTempRepository(root, myProject);
- disposeRepository = true;
- }
-
GitFetchResult result = GitFetchResult.success();
for (GitRemote remote : repository.getRemotes()) {
String url = remote.getFirstUrl();
@@ -88,9 +82,6 @@ public class GitFetcher {
}
}
- if (disposeRepository) {
- Disposer.dispose(repository);
- }
return result;
}
@@ -126,11 +117,13 @@ public class GitFetcher {
return myErrors;
}
- public void displayFetchResult(@NotNull GitFetchResult result, @Nullable String errorNotificationTitle) {
+ public static void displayFetchResult(@NotNull Project project,
+ @NotNull GitFetchResult result,
+ @Nullable String errorNotificationTitle, @NotNull Collection extends Exception> errors) {
if (result.isSuccess()) {
- GitVcs.NOTIFICATION_GROUP_ID.createNotification("Fetched successfully", NotificationType.WARNING).notify(myProject);
+ GitVcs.NOTIFICATION_GROUP_ID.createNotification("Fetched successfully", NotificationType.WARNING).notify(project);
} else if (result.isCancelled()) {
- GitVcs.NOTIFICATION_GROUP_ID.createNotification("Fetch cancelled by user", NotificationType.WARNING).notify(myProject);
+ GitVcs.NOTIFICATION_GROUP_ID.createNotification("Fetch cancelled by user", NotificationType.WARNING).notify(project);
} else if (result.isNotAuthorized()) {
String title;
String description;
@@ -141,11 +134,11 @@ public class GitFetcher {
title = "Fetch failed";
description = "Couldn't authorize";
}
- GitUIUtil.notifyMessage(myProject, title, description, NotificationType.ERROR, true, null);
+ GitUIUtil.notifyMessage(project, title, description, NotificationType.ERROR, true, null);
} else {
- GitVcs instance = GitVcs.getInstance(myProject);
+ GitVcs instance = GitVcs.getInstance(project);
if (instance != null && instance.getExecutableValidator().isExecutableValid()) {
- GitUIUtil.notifyMessage(myProject, "Fetch failed", null, NotificationType.ERROR, true, getErrors());
+ GitUIUtil.notifyMessage(project, "Fetch failed", null, NotificationType.ERROR, true, errors);
}
}
}
@@ -164,7 +157,7 @@ public class GitFetcher {
for (VirtualFile root : roots) {
GitFetchResult result = fetch(root);
if (!result.isSuccess()) {
- displayFetchResult(result, errorNotificationTitle);
+ displayFetchResult(myProject, result, errorNotificationTitle, getErrors());
return false;
}
}
diff --git a/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/CreateNSDeclarationIntentionFix.java b/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/CreateNSDeclarationIntentionFix.java
index 4ef31b9582c3..d28e7d27b8e6 100644
--- a/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/CreateNSDeclarationIntentionFix.java
+++ b/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/CreateNSDeclarationIntentionFix.java
@@ -90,7 +90,7 @@ public class CreateNSDeclarationIntentionFix implements HintAction, LocalQuickFi
public CreateNSDeclarationIntentionFix(final PsiElement element,
final String namespacePrefix,
- final XmlToken token,
+ @Nullable final XmlToken token,
XmlFile containingFile) {
myNamespacePrefix = namespacePrefix;
myElement = element;
@@ -151,10 +151,12 @@ public class CreateNSDeclarationIntentionFix implements HintAction, LocalQuickFi
return;
} else {
prefix = ExtendedTagInsertHandler.suggestPrefix(xmlFile, namespace);
- if (StringUtil.isNotEmpty(prefix)) {
- ExtendedTagInsertHandler.qualifyWithPrefix(prefix, myElement);
- PsiDocumentManager.getInstance(project).doPostponedOperationsAndUnblockDocument(editor.getDocument());
+ if (StringUtil.isEmpty(prefix)) {
+ HintManager.getInstance().showInformationHint(editor, "Namespace not found");
+ return;
}
+ ExtendedTagInsertHandler.qualifyWithPrefix(prefix, myElement);
+ PsiDocumentManager.getInstance(project).doPostponedOperationsAndUnblockDocument(editor.getDocument());
}
}
final int offset = editor.getCaretModel().getOffset();
diff --git a/xml/impl/src/com/intellij/psi/XmlElementFactoryImpl.java b/xml/impl/src/com/intellij/psi/XmlElementFactoryImpl.java
index d640ebab40e3..0c524e199067 100644
--- a/xml/impl/src/com/intellij/psi/XmlElementFactoryImpl.java
+++ b/xml/impl/src/com/intellij/psi/XmlElementFactoryImpl.java
@@ -56,7 +56,7 @@ public class XmlElementFactoryImpl extends XmlElementFactory {
}
@NotNull
- public XmlAttribute createXmlAttribute(@NotNull String name, String value) throws IncorrectOperationException {
+ public XmlAttribute createXmlAttribute(@NotNull String name, @NotNull String value) throws IncorrectOperationException {
final char quoteChar;
if (!value.contains("\"")) {
quoteChar = '"';
diff --git a/xml/openapi/src/com/intellij/psi/XmlElementFactory.java b/xml/openapi/src/com/intellij/psi/XmlElementFactory.java
index 2e5d7c0c01ea..d94b87dbffad 100644
--- a/xml/openapi/src/com/intellij/psi/XmlElementFactory.java
+++ b/xml/openapi/src/com/intellij/psi/XmlElementFactory.java
@@ -86,5 +86,5 @@ public abstract class XmlElementFactory {
* @throws IncorrectOperationException if either name or value are not valid.
*/
@NotNull
- public abstract XmlAttribute createXmlAttribute(@NotNull @NonNls String name, String value) throws IncorrectOperationException;
+ public abstract XmlAttribute createXmlAttribute(@NotNull @NonNls String name, @NotNull String value) throws IncorrectOperationException;
}