diff --git a/platform/icons/src/actions/browser-externalJavaDoc.png b/platform/icons/src/actions/browser-externalJavaDoc.png index a781f191dc33..d7e4ee6fbc99 100644 Binary files a/platform/icons/src/actions/browser-externalJavaDoc.png and b/platform/icons/src/actions/browser-externalJavaDoc.png differ diff --git a/platform/icons/src/actions/compile.png b/platform/icons/src/actions/compile.png index f96d2206d863..2adafae126fa 100644 Binary files a/platform/icons/src/actions/compile.png and b/platform/icons/src/actions/compile.png differ diff --git a/platform/icons/src/actions/execute.png b/platform/icons/src/actions/execute.png index b20fde77792e..c43e904d42b4 100644 Binary files a/platform/icons/src/actions/execute.png and b/platform/icons/src/actions/execute.png differ diff --git a/platform/icons/src/actions/install.png b/platform/icons/src/actions/install.png index 1f951e2287bb..69733cf920c8 100644 Binary files a/platform/icons/src/actions/install.png and b/platform/icons/src/actions/install.png differ diff --git a/platform/icons/src/actions/previousOccurence.png b/platform/icons/src/actions/previousOccurence.png index c1d53c5bdf7a..d7e4ee6fbc99 100644 Binary files a/platform/icons/src/actions/previousOccurence.png and b/platform/icons/src/actions/previousOccurence.png differ diff --git a/platform/icons/src/actions/quickList.png b/platform/icons/src/actions/quickList.png index 319c1b29738b..190017c7bf6a 100644 Binary files a/platform/icons/src/actions/quickList.png and b/platform/icons/src/actions/quickList.png differ diff --git a/platform/icons/src/actions/refresh.png b/platform/icons/src/actions/refresh.png index e7455f2aa654..66a23da6f741 100644 Binary files a/platform/icons/src/actions/refresh.png and b/platform/icons/src/actions/refresh.png differ diff --git a/platform/icons/src/actions/resume.png b/platform/icons/src/actions/resume.png index d6fd07be4601..049bb8c759fc 100644 Binary files a/platform/icons/src/actions/resume.png and b/platform/icons/src/actions/resume.png differ diff --git a/platform/icons/src/actions/showChangesOnly.png b/platform/icons/src/actions/showChangesOnly.png index afe338a93f66..62a395a8d25d 100644 Binary files a/platform/icons/src/actions/showChangesOnly.png and b/platform/icons/src/actions/showChangesOnly.png differ diff --git a/platform/icons/src/actions/showHiddens.png b/platform/icons/src/actions/showHiddens.png index 315825d86ab8..4d8c667ea5e8 100644 Binary files a/platform/icons/src/actions/showHiddens.png and b/platform/icons/src/actions/showHiddens.png differ diff --git a/platform/icons/src/actions/startDebugger.png b/platform/icons/src/actions/startDebugger.png index 3a1c7df2d1d3..454be01a987b 100644 Binary files a/platform/icons/src/actions/startDebugger.png and b/platform/icons/src/actions/startDebugger.png differ diff --git a/platform/icons/src/debugger/threadStates/running.png b/platform/icons/src/debugger/threadStates/running.png index d6fd07be4601..049bb8c759fc 100644 Binary files a/platform/icons/src/debugger/threadStates/running.png and b/platform/icons/src/debugger/threadStates/running.png differ diff --git a/platform/icons/src/fileTypes/any_type.png b/platform/icons/src/fileTypes/any_type.png index efd5f7c1ed08..f7f19f95379e 100644 Binary files a/platform/icons/src/fileTypes/any_type.png and b/platform/icons/src/fileTypes/any_type.png differ diff --git a/platform/icons/src/fileTypes/archive.png b/platform/icons/src/fileTypes/archive.png index aad1b7b89f9e..17072c7adb78 100644 Binary files a/platform/icons/src/fileTypes/archive.png and b/platform/icons/src/fileTypes/archive.png differ diff --git a/platform/icons/src/fileTypes/aspectj.png b/platform/icons/src/fileTypes/aspectj.png index 94b7fc1b8413..b15bcc7efda8 100644 Binary files a/platform/icons/src/fileTypes/aspectj.png and b/platform/icons/src/fileTypes/aspectj.png differ diff --git a/platform/icons/src/fileTypes/css.png b/platform/icons/src/fileTypes/css.png index 7c4ff929f502..6f018c768828 100644 Binary files a/platform/icons/src/fileTypes/css.png and b/platform/icons/src/fileTypes/css.png differ diff --git a/platform/icons/src/fileTypes/custom.png b/platform/icons/src/fileTypes/custom.png index 56da927f0d99..3253676b3d2a 100644 Binary files a/platform/icons/src/fileTypes/custom.png and b/platform/icons/src/fileTypes/custom.png differ diff --git a/platform/icons/src/fileTypes/dtd.png b/platform/icons/src/fileTypes/dtd.png index b461aa3328a7..bbc3a418a822 100644 Binary files a/platform/icons/src/fileTypes/dtd.png and b/platform/icons/src/fileTypes/dtd.png differ diff --git a/platform/icons/src/fileTypes/facelets.png b/platform/icons/src/fileTypes/facelets.png index 86db77ea4d5b..57210753fdde 100644 Binary files a/platform/icons/src/fileTypes/facelets.png and b/platform/icons/src/fileTypes/facelets.png differ diff --git a/platform/icons/src/fileTypes/facesConfig.png b/platform/icons/src/fileTypes/facesConfig.png index aca3e0a16589..cd8ad8cae8ac 100644 Binary files a/platform/icons/src/fileTypes/facesConfig.png and b/platform/icons/src/fileTypes/facesConfig.png differ diff --git a/platform/icons/src/fileTypes/htaccess.png b/platform/icons/src/fileTypes/htaccess.png index 79f55d050b43..72888ca10ef9 100644 Binary files a/platform/icons/src/fileTypes/htaccess.png and b/platform/icons/src/fileTypes/htaccess.png differ diff --git a/platform/icons/src/fileTypes/html.png b/platform/icons/src/fileTypes/html.png index 90a385cc602e..61ed4a696ed1 100644 Binary files a/platform/icons/src/fileTypes/html.png and b/platform/icons/src/fileTypes/html.png differ diff --git a/platform/icons/src/fileTypes/idl.png b/platform/icons/src/fileTypes/idl.png index cdc24d9de678..94d8dad103fb 100644 Binary files a/platform/icons/src/fileTypes/idl.png and b/platform/icons/src/fileTypes/idl.png differ diff --git a/platform/icons/src/fileTypes/java.png b/platform/icons/src/fileTypes/java.png index 1dd9dcf451a7..f459ad462734 100644 Binary files a/platform/icons/src/fileTypes/java.png and b/platform/icons/src/fileTypes/java.png differ diff --git a/platform/icons/src/fileTypes/javaClass.png b/platform/icons/src/fileTypes/javaClass.png index 951c9f51108a..72df1a007ccc 100644 Binary files a/platform/icons/src/fileTypes/javaClass.png and b/platform/icons/src/fileTypes/javaClass.png differ diff --git a/platform/icons/src/fileTypes/javaOutsideSource.png b/platform/icons/src/fileTypes/javaOutsideSource.png index 46e3a8a0cacf..41be87bb379b 100644 Binary files a/platform/icons/src/fileTypes/javaOutsideSource.png and b/platform/icons/src/fileTypes/javaOutsideSource.png differ diff --git a/platform/icons/src/fileTypes/jsp.png b/platform/icons/src/fileTypes/jsp.png index 0929e77bc963..bd30d1b918b8 100644 Binary files a/platform/icons/src/fileTypes/jsp.png and b/platform/icons/src/fileTypes/jsp.png differ diff --git a/platform/icons/src/fileTypes/jspx.png b/platform/icons/src/fileTypes/jspx.png index a783af0c5cf3..50ec850804a8 100644 Binary files a/platform/icons/src/fileTypes/jspx.png and b/platform/icons/src/fileTypes/jspx.png differ diff --git a/platform/icons/src/fileTypes/properties.png b/platform/icons/src/fileTypes/properties.png index ba6329a95ab7..7a4870f6ac1f 100644 Binary files a/platform/icons/src/fileTypes/properties.png and b/platform/icons/src/fileTypes/properties.png differ diff --git a/platform/icons/src/fileTypes/text.png b/platform/icons/src/fileTypes/text.png index cc1b2ff30a89..b05f701d9f70 100644 Binary files a/platform/icons/src/fileTypes/text.png and b/platform/icons/src/fileTypes/text.png differ diff --git a/platform/icons/src/fileTypes/uiForm.png b/platform/icons/src/fileTypes/uiForm.png index d26a033a5d9a..d368703908ce 100644 Binary files a/platform/icons/src/fileTypes/uiForm.png and b/platform/icons/src/fileTypes/uiForm.png differ diff --git a/platform/icons/src/fileTypes/unknown.png b/platform/icons/src/fileTypes/unknown.png index 6528e701a56c..e771dde05b9d 100644 Binary files a/platform/icons/src/fileTypes/unknown.png and b/platform/icons/src/fileTypes/unknown.png differ diff --git a/platform/icons/src/fileTypes/wsdlFile.png b/platform/icons/src/fileTypes/wsdlFile.png index 99d798e487d9..9e4faa958b65 100644 Binary files a/platform/icons/src/fileTypes/wsdlFile.png and b/platform/icons/src/fileTypes/wsdlFile.png differ diff --git a/platform/icons/src/fileTypes/xhtml.png b/platform/icons/src/fileTypes/xhtml.png index ea4cb6421652..3faa96fe579d 100644 Binary files a/platform/icons/src/fileTypes/xhtml.png and b/platform/icons/src/fileTypes/xhtml.png differ diff --git a/platform/icons/src/fileTypes/xml.png b/platform/icons/src/fileTypes/xml.png index ca85e5c9ef5f..07ad96832aca 100644 Binary files a/platform/icons/src/fileTypes/xml.png and b/platform/icons/src/fileTypes/xml.png differ diff --git a/platform/icons/src/fileTypes/xsdFile.png b/platform/icons/src/fileTypes/xsdFile.png index 3ebe69957494..026a263869ea 100644 Binary files a/platform/icons/src/fileTypes/xsdFile.png and b/platform/icons/src/fileTypes/xsdFile.png differ diff --git a/platform/icons/src/nodes/artifact.png b/platform/icons/src/nodes/artifact.png index fa5538c54320..ec9d240c7864 100644 Binary files a/platform/icons/src/nodes/artifact.png and b/platform/icons/src/nodes/artifact.png differ diff --git a/platform/icons/src/nodes/plugin.png b/platform/icons/src/nodes/plugin.png index b717dd5a205b..c675b09ed6d4 100644 Binary files a/platform/icons/src/nodes/plugin.png and b/platform/icons/src/nodes/plugin.png differ diff --git a/platform/icons/src/runConfigurations/testSkipped.png b/platform/icons/src/runConfigurations/testSkipped.png index c1bfdf33760b..d7e4ee6fbc99 100644 Binary files a/platform/icons/src/runConfigurations/testSkipped.png and b/platform/icons/src/runConfigurations/testSkipped.png differ 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 cdf701dec2f7..e0b6099a396e 100644 --- a/platform/lang-impl/src/com/intellij/application/options/TabbedLanguageCodeStylePanel.java +++ b/platform/lang-impl/src/com/intellij/application/options/TabbedLanguageCodeStylePanel.java @@ -543,7 +543,7 @@ public abstract class TabbedLanguageCodeStylePanel extends CodeStyleAbstractPane //======================================================================================================================================== - private class MyIndentOptionsWrapper extends CodeStyleAbstractPanel { + protected class MyIndentOptionsWrapper extends CodeStyleAbstractPanel { private final IndentOptionsEditor myEditor; private final LanguageCodeStyleSettingsProvider myProvider; diff --git a/platform/platform-api/src/com/intellij/ui/components/JBOptionButton.java b/platform/platform-api/src/com/intellij/ui/components/JBOptionButton.java index c7be91833ef4..68c4bd9fdcca 100644 --- a/platform/platform-api/src/com/intellij/ui/components/JBOptionButton.java +++ b/platform/platform-api/src/com/intellij/ui/components/JBOptionButton.java @@ -248,7 +248,7 @@ public class JBOptionButton extends JButton implements MouseMotionListener { }; if (under && myOptions.length > 0) { - final JMenuItem mainAction = new JMenuItem(getAction()); + final JMenuItem mainAction = createMenuItem(getAction()); configureItem(getMenuInfo(getAction()), mainAction); result.add(mainAction); result.addSeparator(); @@ -257,7 +257,7 @@ public class JBOptionButton extends JButton implements MouseMotionListener { for (Action each : myOptions) { if (getAction() == each) continue; final OptionInfo info = getMenuInfo(each); - final JMenuItem eachItem = new JMenuItem(each); + final JMenuItem eachItem = createMenuItem(each); configureItem(info, eachItem); result.add(eachItem); @@ -265,7 +265,7 @@ public class JBOptionButton extends JButton implements MouseMotionListener { if (!under && myOptions.length > 0) { result.addSeparator(); - final JMenuItem mainAction = new JMenuItem(getAction()); + final JMenuItem mainAction = createMenuItem(getAction()); configureItem(getMenuInfo(getAction()), mainAction); result.add(mainAction); } @@ -273,6 +273,16 @@ public class JBOptionButton extends JButton implements MouseMotionListener { return result; } + private JMenuItem createMenuItem(final Action action) { + return new JMenuItem(action) { + @Override + public void paint(Graphics g) { + GraphicsUtil.setupAntialiasing(g); + super.paint(g); + } + }; + } + private void configureItem(OptionInfo info, JMenuItem eachItem) { eachItem.setText(info.myPlainText); if (info.myMnemonic >= 0) { diff --git a/platform/platform-impl/src/com/intellij/ui/HideableTitledPanel.java b/platform/platform-impl/src/com/intellij/ui/HideableTitledPanel.java index 0fb7d2b851c2..02ae2bc75d0f 100644 --- a/platform/platform-impl/src/com/intellij/ui/HideableTitledPanel.java +++ b/platform/platform-impl/src/com/intellij/ui/HideableTitledPanel.java @@ -18,17 +18,15 @@ public class HideableTitledPanel extends JPanel { private TitledSeparator myTitledSeparator; private boolean myOn; - private final JComponent myContent; + private JComponent myContent; private Dimension myPreviousContentSize; - public HideableTitledPanel(String title, JComponent content, boolean on) { + public HideableTitledPanel(String title) { super(new BorderLayout()); - myContent = content; - add(myContent, BorderLayout.CENTER); myTitledSeparator = new TitledSeparator(title, null); add(myTitledSeparator, BorderLayout.NORTH); - myTitledSeparator.getLabel().setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - myTitledSeparator.getLabel().addMouseListener(new MouseAdapter() { + myTitledSeparator.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + myTitledSeparator.addMouseListener(new MouseAdapter() { @Override public void mouseReleased(MouseEvent e) { if (myOn) { @@ -39,10 +37,19 @@ public class HideableTitledPanel extends JPanel { } } }); + } + public HideableTitledPanel(String title, JComponent content, boolean on) { + this(title); + setContentComponent(content); setOn(on); } + protected void setContentComponent(JComponent content) { + myContent = content; + add(myContent, BorderLayout.CENTER); + } + public void setOn(boolean on) { myOn = on; if (myOn) { @@ -53,6 +60,10 @@ public class HideableTitledPanel extends JPanel { } } + public boolean isExpanded() { + return myOn; + } + public void setTitle(String title) { myTitledSeparator.setText(title); } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/dbCommitted/ChangeTypeEnum.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/dbCommitted/ChangeTypeEnum.java index 315745afce7b..04b564280b1b 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/dbCommitted/ChangeTypeEnum.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/dbCommitted/ChangeTypeEnum.java @@ -41,6 +41,16 @@ public enum ChangeTypeEnum { return myCode; } + public static ChangeTypeEnum getChangeType(final long type) { + final ChangeTypeEnum[] values = values(); + for (ChangeTypeEnum value : values) { + if (value.getCode() == type) { + return value; + } + } + return null; + } + public static ChangeTypeEnum getChangeType(final Change change) { if (change.getBeforeRevision() == null) { return ADD; diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/dbCommitted/HistoryCacheManager.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/dbCommitted/HistoryCacheManager.java index 484372f3c849..91de0255fbf5 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/dbCommitted/HistoryCacheManager.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/dbCommitted/HistoryCacheManager.java @@ -83,6 +83,22 @@ public class HistoryCacheManager { return myDbUtil.readLists(vcs, location, lastRev, oldRev); } + public long getLastRevision(final AbstractVcs vcs, final RepositoryLocation location) { + return myDbUtil.getLastRevision(vcs, location2string(location)); + } + + private String location2string(RepositoryLocation location) { + return FileUtil.toSystemIndependentName(location.toPresentableString()); + } + + public long getFirstRevision(final AbstractVcs vcs, final RepositoryLocation location) { + return myDbUtil.getFirstRevision(vcs, location2string(location)); + } + + public PathState getPathState(final AbstractVcs vcs, final RepositoryLocation location, final String path) throws VcsException { + return myDbUtil.getPathState(vcs, location, path); + } + private class AppendChanges extends Task.Backgroundable { private final List myLists; private final String myRoot; @@ -134,7 +150,7 @@ public class HistoryCacheManager { myCachesHolder.iterateAllRepositoryLocations(new PairProcessor() { @Override public boolean process(RepositoryLocation location, AbstractVcs vcs) { - map.putValue(vcs.getName(), FileUtil.toSystemIndependentName(location.toPresentableString())); + map.putValue(vcs.getName(), location2string(location)); return true; } }); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/dbCommitted/PathState.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/dbCommitted/PathState.java new file mode 100644 index 000000000000..59709b67a751 --- /dev/null +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/dbCommitted/PathState.java @@ -0,0 +1,40 @@ +/* + * Copyright 2000-2012 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.openapi.vcs.changes.dbCommitted; + +/** + * Created with IntelliJ IDEA. + * User: Irina.Chernushina + * Date: 10/11/12 + * Time: 5:56 PM + */ +public class PathState { + private final long myLastRevision; + private final boolean myExistsInLastRevision; + + public PathState(long lastRevision, boolean existsInLastRevision) { + myLastRevision = lastRevision; + myExistsInLastRevision = existsInLastRevision; + } + + public long getLastRevision() { + return myLastRevision; + } + + public boolean isExistsInLastRevision() { + return myExistsInLastRevision; + } +} diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/dbCommitted/SqliteTables.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/dbCommitted/SqliteTables.java index 5c4ea54c2327..e85ad5917d03 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/dbCommitted/SqliteTables.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/dbCommitted/SqliteTables.java @@ -45,6 +45,8 @@ public interface SqliteTables { String PREPARED_INSERT_PATH = "PREPARED_INSERT_PATH"; String PREPARED_INSERT_PATH_2_REVS = "PREPARED_INSERT_PATH_2_REVS"; String PREPARED_SELECT_REVISIONS = "PREPARED_SELECT_REVISIONS"; + String PREPARED_SELECT_PATH_DATA = "PREPARED_SELECT_PATH_DATA"; + String PREPARED_PATHS_2_REVS = "PREPARED_PATHS_2_REVS"; abstract class BaseTable { public final String ID; diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/dbCommitted/VcsSqliteLayer.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/dbCommitted/VcsSqliteLayer.java index cc40cc650cc9..cc9cb77f3294 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/dbCommitted/VcsSqliteLayer.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/dbCommitted/VcsSqliteLayer.java @@ -12,6 +12,12 @@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. + * TODO quotations! + * TODO quotations! + * TODO quotations! + * TODO quotations! + * TODO quotations! + * TODO quotations! */ package com.intellij.openapi.vcs.changes.dbCommitted; @@ -256,13 +262,21 @@ public class VcsSqliteLayer { long maxRev = -1; long minRev = Long.MAX_VALUE; + final Long firstRevision = myKnownRepositoryLocations.getFirstRevision(locationId); + final Long lastRevision = myKnownRepositoryLocations.getLastRevision(locationId); final List> split = new CollectionSplitter(20).split(lists); final Map knowPaths = new HashMap(); for (List changeLists : split) { final Set names = new HashSet(); final Set paths = new HashSet(); - for (CommittedChangeList list : changeLists) { + for (Iterator iterator = changeLists.iterator(); iterator.hasNext(); ) { + final CommittedChangeList list = iterator.next(); + if (lastRevision != null && list.getNumber() <= lastRevision && list.getNumber() >= firstRevision) { + iterator.remove(); + continue; + } + maxRev = Math.max(maxRev, list.getNumber()); minRev = Math.min(minRev, list.getNumber()); @@ -281,11 +295,9 @@ public class VcsSqliteLayer { checkAndAddPaths(paths, knowPaths, locationId); insertChangeListsIfNotExists(vcs, knownAuthors, changeLists, locationId, knowPaths); - final Long firstRevision = myKnownRepositoryLocations.getFirstRevision(locationId); if (firstRevision == null || minRev < firstRevision) { myKnownRepositoryLocations.setFirstRevision(locationId, minRev); } - final Long lastRevision = myKnownRepositoryLocations.getLastRevision(locationId); if (lastRevision == null || maxRev > lastRevision) { myKnownRepositoryLocations.setLastRevision(locationId, maxRev); } @@ -310,11 +322,8 @@ public class VcsSqliteLayer { final CachingCommittedChangesProvider provider = (CachingCommittedChangesProvider)vcs.getCommittedChangesProvider(); try { statement.setLong(1, locationId); - final Long lastRevision = myKnownRepositoryLocations.getLastRevision(locationId); - final Long firstRevision = myKnownRepositoryLocations.getFirstRevision(locationId); for (CommittedChangeList list : lists) { - if (lastRevision != null && list.getNumber() <= lastRevision && list.getNumber() >= firstRevision) continue; statement.setLong(2, authors.get(list.getCommitterName())); statement.setLong(3, list.getCommitDate().getTime()); statement.setLong(4, list.getNumber()); @@ -370,6 +379,10 @@ public class VcsSqliteLayer { insert.setLong(4, beforeId); insert.setLong(3, type.getCode()); SqliteUtil.insert(insert); + } else if (change.getAfterRevision() == null) { + insert.setLong(1, paths.get(FileUtil.toSystemIndependentName(change.getBeforeRevision().getFile().getPath()))); + insert.setLong(3, type.getCode()); + SqliteUtil.insert(insert); } else { // only after insert.setLong(1, paths.get(FileUtil.toSystemIndependentName(change.getAfterRevision().getFile().getPath()))); @@ -560,4 +573,70 @@ public class VcsSqliteLayer { } return result; } + + public PathState getPathState(final AbstractVcs vcs, final RepositoryLocation location, final String path) throws VcsException { + final String normalizedPath = FileUtil.toSystemIndependentName(path); + final String normalizedLocation = FileUtil.toSystemIndependentName(location.toPresentableString()); + if (! myKnownRepositoryLocations.exists(vcs.getName(), normalizedLocation)) return null; + + final PreparedStatement maxStatement = myConnection.getOrCreatePreparedStatement(SqliteTables.PREPARED_SELECT_PATH_DATA, + new ThrowableConvertor() { + @Override + public PreparedStatement convert(Connection connection) throws SQLException { + return connection.prepareStatement("SELECT MAX(R." + SqliteTables.REVISION.NUMBER_INT + ") MAX, MAX(P."+ SqliteTables.PATHS.ID + + ") PATH_ID FROM " + SqliteTables.PATHS_2_REVS.TABLE_NAME + " PR INNER JOIN " + + SqliteTables.REVISION.TABLE_NAME + " R, " + SqliteTables.PATHS.TABLE_NAME + " P ON PR." + SqliteTables.PATHS_2_REVS.REVISION_FK + "=R." + + SqliteTables.REVISION.ID + " AND PR." + SqliteTables.PATHS_2_REVS.PATH_FK + "=P." + SqliteTables.PATHS.ID + + " WHERE P." + SqliteTables.PATHS.PATH + "=? AND R." + SqliteTables.REVISION.ROOT_FK + "=?"); + } + }); + + try { + maxStatement.setString(1, normalizedPath); + final long locationId = myKnownRepositoryLocations.getLocationId(vcs.getName(), normalizedLocation); + maxStatement.setLong(2, locationId); + final long pathId[] = new long[1]; + final long maxRev[] = new long[1]; + maxRev[0] = -1; + final ResultSet set = maxStatement.executeQuery(); + SqliteUtil.readSelectResults(set, new ThrowableRunnable() { + @Override + public void run() throws SQLException { + maxRev[0] = set.getLong("MAX"); + pathId[0] = set.getLong("PATH_ID"); + } + }); + + if (maxRev[0] == -1) return null; + + final PreparedStatement lastChangeType = myConnection.getOrCreatePreparedStatement(SqliteTables.PREPARED_PATHS_2_REVS, + new ThrowableConvertor() { + @Override + public PreparedStatement convert(Connection connection) throws SQLException { + return connection.prepareStatement("SELECT PR." + SqliteTables.PATHS_2_REVS.TYPE + " FROM " + SqliteTables.PATHS_2_REVS.TABLE_NAME + + " PR INNER JOIN " + SqliteTables.REVISION.TABLE_NAME + " R ON PR." + SqliteTables.PATHS_2_REVS.REVISION_FK + "=R." + + SqliteTables.REVISION.ID + " WHERE R." + SqliteTables.REVISION.NUMBER_INT + "=? AND PR." + SqliteTables.PATHS_2_REVS.PATH_FK + + "=?"); + } + }); + lastChangeType.setLong(1, maxRev[0]); + lastChangeType.setLong(2, pathId[0]); + final ResultSet typeSet = lastChangeType.executeQuery(); + final long[] type = new long[1]; + type[0] = -100; + SqliteUtil.readSelectResults(typeSet, new ThrowableRunnable() { + @Override + public void run() throws SQLException { + type[0] = typeSet.getLong(1); + } + }); + if (type[0] == -100) return null; + final ChangeTypeEnum changeType = ChangeTypeEnum.getChangeType(type[0]); + if (changeType == null) return null; + return new PathState(maxRev[0], ! ChangeTypeEnum.DELETE.equals(changeType)); + } + catch (SQLException e) { + throw new VcsException(e); + } + } }