# HG changeset patch # User jrice@netbeans.org # Date 1205270589 0 # Node ID bc8a9b0fbb1efff2090d6bd8337f727f01334ca4 # Parent 02b87c8acf9ece48b6652a2be4708f46dc3136b2 #129799: Fetching Revisions for Export is slow on large repos - reduce number fetched and added options to get more diff -r 02b87c8acf9e -r bc8a9b0fbb1e mercurial/src/org/netbeans/modules/mercurial/Bundle.properties --- a/mercurial/src/org/netbeans/modules/mercurial/Bundle.properties Tue Mar 11 15:50:58 2008 +0000 +++ b/mercurial/src/org/netbeans/modules/mercurial/Bundle.properties Tue Mar 11 21:23:09 2008 +0000 @@ -148,3 +148,7 @@ MSG_NOT_USING_VERSION_MSG = INFO: User h MSG_NOT_USING_VERSION_MSG = INFO: User has elected not to use version {0} of Mercurial.\n\nNo Mercurial commands can be executed. LBL_Queued = {0} (Queued) +MSG_Fetch_20_Revisions = Fetch up to 20 Revisions... +MSG_Fetch_50_Revisions = Fetch up to 50 Revisions... +MSG_Fetch_All_Revisions = Fetch All Revisions... +MSG_Fetching_Revisions = Fetching Revisions... diff -r 02b87c8acf9e -r bc8a9b0fbb1e mercurial/src/org/netbeans/modules/mercurial/Mercurial.java --- a/mercurial/src/org/netbeans/modules/mercurial/Mercurial.java Tue Mar 11 15:50:58 2008 +0000 +++ b/mercurial/src/org/netbeans/modules/mercurial/Mercurial.java Tue Mar 11 21:23:09 2008 +0000 @@ -66,6 +66,10 @@ import org.openide.DialogDisplayer; * @author Maros Sandor */ public class Mercurial { + public static final int HG_FETCH_20_REVISIONS = 20; + public static final int HG_FETCH_50_REVISIONS = 50; + public static final int HG_FETCH_ALL_REVISIONS = -1; + public static final String MERCURIAL_OUTPUT_TAB_TITLE = org.openide.util.NbBundle.getMessage(Mercurial.class, "CTL_Mercurial_DisplayName"); // NOI18N public static final String CHANGESET_STR = "changeset:"; // NOI18N diff -r 02b87c8acf9e -r bc8a9b0fbb1e mercurial/src/org/netbeans/modules/mercurial/ui/diff/ExportDiffPanel.java --- a/mercurial/src/org/netbeans/modules/mercurial/ui/diff/ExportDiffPanel.java Tue Mar 11 15:50:58 2008 +0000 +++ b/mercurial/src/org/netbeans/modules/mercurial/ui/diff/ExportDiffPanel.java Tue Mar 11 21:23:09 2008 +0000 @@ -59,6 +59,7 @@ import org.netbeans.modules.versioning.u import org.netbeans.modules.versioning.util.AccessibleJFileChooser; import org.netbeans.modules.mercurial.util.HgCommand; import org.netbeans.modules.mercurial.HgModuleConfig; +import org.netbeans.modules.mercurial.HgProgressSupport; import org.netbeans.modules.mercurial.Mercurial; import org.netbeans.modules.mercurial.OutputLogger; import org.netbeans.modules.mercurial.ui.log.HgLogMessage; @@ -78,9 +79,10 @@ public class ExportDiffPanel extends jav private Thread refreshViewThread; private static final RequestProcessor rp = new RequestProcessor("MercurialExportDiff", 1); // NOI18N private RepositoryRevision repoRev; - private static final int HG_REVISION_TARGET_LIMIT = 100; private File fileToDiff; private HgLogMessage[] messages; + private int fetchRevisionLimit = 7; + private int HG_MAX_COMBO_SIZE = fetchRevisionLimit + 3; /** Creates new form ExportDiffPanel */ public ExportDiffPanel(File repo, RepositoryRevision repoRev, File fileToDiff) { @@ -89,6 +91,7 @@ public class ExportDiffPanel extends jav repository = repo; refreshViewTask = rp.create(new RefreshViewTask()); initComponents(); + revisionsComboBox.setMaximumRowCount(HG_MAX_COMBO_SIZE); if(fileToDiff != null){ org.openide.awt.Mnemonics.setLocalizedText(revisionsLabel, NbBundle.getMessage(ExportDiffPanel.class, "ExportDiffPanel.revisionsLabel.text.forFileDiff")); // NOI18N @@ -206,14 +209,43 @@ public class ExportDiffPanel extends jav }// //GEN-END:initComponents private void revisionsComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_revisionsComboBoxActionPerformed - int index = revisionsComboBox.getSelectedIndex(); + if(getMore((String) revisionsComboBox.getSelectedItem())) return; + if(messages != null && index >= 0 && index < messages.length ){ changesetPanel1.setInfo(messages[index]); } }//GEN-LAST:event_revisionsComboBoxActionPerformed + private boolean getMore(String revStr) { + boolean bGetMore = false; + int limit = -1; + if (revStr != null && revStr.equals(NbBundle.getMessage(Mercurial.class, "MSG_Fetch_20_Revisions"))) { + bGetMore = true; + limit = Mercurial.HG_FETCH_20_REVISIONS; + } else if (revStr != null && revStr.equals(NbBundle.getMessage(Mercurial.class, "MSG_Fetch_50_Revisions"))) { + bGetMore = true; + limit = Mercurial.HG_FETCH_50_REVISIONS; + } else if (revStr != null && revStr.equals(NbBundle.getMessage(Mercurial.class, "MSG_Fetch_All_Revisions"))) { + bGetMore = true; + limit = Mercurial.HG_FETCH_ALL_REVISIONS; + } + if (bGetMore) { + fetchRevisionLimit = limit; + RequestProcessor rp = Mercurial.getInstance().getRequestProcessor(repository); + HgProgressSupport hgProgressSupport = new HgProgressSupport() { + public void perform() { + changesetPanel1.clearInfo(); + refreshRevisions(); + } + }; + hgProgressSupport.start(rp, repository.getAbsolutePath(), + org.openide.util.NbBundle.getMessage(Mercurial.class, "MSG_Fetching_Revisions")); // NOI18N + } + return bGetMore; + } + /** * Must NOT be run from AWT. */ @@ -279,7 +311,7 @@ private void revisionsComboBoxActionPerf private void refreshRevisions() { OutputLogger logger = OutputLogger.getLogger(Mercurial.MERCURIAL_OUTPUT_TAB_TITLE); - messages = HgCommand.getLogMessages(repository.getAbsolutePath(), HG_REVISION_TARGET_LIMIT, logger); + messages = HgCommand.getLogMessagesNoFileInfo(repository.getAbsolutePath(), fetchRevisionLimit, logger); Set targetRevsSet = new LinkedHashSet(); int size; @@ -293,6 +325,11 @@ private void revisionsComboBoxActionPerf targetRevsSet.add(messages[i].getRevision() + " (" + messages[i].getCSetShortID() + ")"); // NOI18N i++; } + } + if(targetRevsSet.size() > 0){ + targetRevsSet.add(NbBundle.getMessage(Mercurial.class, "MSG_Fetch_20_Revisions")); + targetRevsSet.add(NbBundle.getMessage(Mercurial.class, "MSG_Fetch_50_Revisions")); + targetRevsSet.add(NbBundle.getMessage(Mercurial.class, "MSG_Fetch_All_Revisions")); } ComboBoxModel targetsModel = new DefaultComboBoxModel(new Vector(targetRevsSet)); revisionsComboBox.setModel(targetsModel); diff -r 02b87c8acf9e -r bc8a9b0fbb1e mercurial/src/org/netbeans/modules/mercurial/ui/repository/ChangesetPanel.java --- a/mercurial/src/org/netbeans/modules/mercurial/ui/repository/ChangesetPanel.java Tue Mar 11 15:50:58 2008 +0000 +++ b/mercurial/src/org/netbeans/modules/mercurial/ui/repository/ChangesetPanel.java Tue Mar 11 21:23:09 2008 +0000 @@ -25,6 +25,12 @@ public class ChangesetPanel extends java this.setAuthor(info.getAuthor()); this.setDate(info.getDate().toString()); } + } + + public void clearInfo(){ + this.setDescription(""); + this.setAuthor(""); + this.setDate(""); } public void setDescription(String desc){ diff -r 02b87c8acf9e -r bc8a9b0fbb1e mercurial/src/org/netbeans/modules/mercurial/util/HgCommand.java --- a/mercurial/src/org/netbeans/modules/mercurial/util/HgCommand.java Tue Mar 11 15:50:58 2008 +0000 +++ b/mercurial/src/org/netbeans/modules/mercurial/util/HgCommand.java Tue Mar 11 21:23:09 2008 +0000 @@ -139,10 +139,13 @@ public class HgCommand { private static final String HG_LOG_TEMPLATE_LONG_CMD = "--template={rev}\\n{desc}\\n{date|hgdate}\\n{node|short}\\n"; // NOI18N private static final String HG_LOG_NO_MERGES_CMD = "-M"; - private static final String HG_LOG_DEBUG_CMD = "--debug"; + private static final String HG_LOG_DEBUG_CMD = "--debug"; private static final String HG_LOG_TEMPLATE_HISTORY_CMD = "--template=rev:{rev}\\nauth:{author}\\ndesc:{desc}\\ndate:{date|hgdate}\\nid:{node|short}\\n" + // NOI18N "file_mods:{files}\\nfile_adds:{file_adds}\\nfile_dels:{file_dels}\\nfile_copies:\\nendCS:\\n"; // NOI18N + private static final String HG_LOG_TEMPLATE_HISTORY_NO_FILEINFO_CMD = + "--template=rev:{rev}\\nauth:{author}\\ndesc:{desc}\\ndate:{date|hgdate}\\nid:{node|short}\\n" + // NOI18N + "\\nendCS:\\n"; // NOI18N private static final String HG_LOG_REVISION_OUT = "rev:"; // NOI18N private static final String HG_LOG_AUTHOR_OUT = "auth:"; // NOI18N private static final String HG_LOG_DESCRIPTION_OUT = "desc:"; // NOI18N @@ -880,24 +883,28 @@ public class HgCommand { final Set files, String fromRevision, String toRevision, boolean bShowMerges, OutputLogger logger) { return getLogMessages(rootUrl, files, fromRevision, toRevision, - bShowMerges, -1, logger); + bShowMerges, true, -1, logger); + } + + public static HgLogMessage[] getLogMessagesNoFileInfo(final String rootUrl, int limit, OutputLogger logger) { + return getLogMessages(rootUrl, null, null, null, true, false, limit, logger); } public static HgLogMessage[] getLogMessages(final String rootUrl, int limit, OutputLogger logger) { - return getLogMessages(rootUrl, null, null, null, true, limit, logger); + return getLogMessages(rootUrl, null, null, null, true, true, limit, logger); } public static HgLogMessage[] getLogMessages(final String rootUrl, final Set files, int limit, OutputLogger logger) { - return getLogMessages(rootUrl, files, null, null, true, limit, logger); + return getLogMessages(rootUrl, files, null, null, true, true, limit, logger); } public static HgLogMessage[] getLogMessages(final String rootUrl, final Set files, OutputLogger logger) { - return getLogMessages(rootUrl, files, null, null, true, -1, logger); + return getLogMessages(rootUrl, files, null, null, true, true, -1, logger); } public static HgLogMessage[] getLogMessages(final String rootUrl, final Set files, String fromRevision, String toRevision, - boolean bShowMerges, int limit, OutputLogger logger) { + boolean bShowMerges, boolean bGetFileInfo, int limit, OutputLogger logger) { final List messages = new ArrayList(0); final File root = new File(rootUrl); @@ -910,7 +917,7 @@ public class HgCommand { List list = new LinkedList(); list = HgCommand.doLogForHistory(root, files != null ? new ArrayList(files) : null, - fromRevision, toRevision, headRev, bShowMerges, limit, logger); + fromRevision, toRevision, headRev, bShowMerges, bGetFileInfo, limit, logger); processLogMessages(list, messages); } catch (HgException ex) { @@ -1151,7 +1158,7 @@ public class HgCommand { * @throws org.netbeans.modules.mercurial.HgException */ public static List doLogForHistory(File repository, List files, - String from, String to, String headRev, boolean bShowMerges, int limit, OutputLogger logger) throws HgException { + String from, String to, String headRev, boolean bShowMerges, boolean bGetFileInfo, int limit, OutputLogger logger) throws HgException { if (repository == null ) return null; if (files != null && files.isEmpty()) return null; @@ -1192,8 +1199,12 @@ public class HgCommand { if(dateStr == null && revStr != null){ command.add(HG_FLAG_REV_CMD); command.add(revStr); - } - command.add(HG_LOG_TEMPLATE_HISTORY_CMD); + } + if(bGetFileInfo){ + command.add(HG_LOG_TEMPLATE_HISTORY_CMD); + }else{ + command.add(HG_LOG_TEMPLATE_HISTORY_NO_FILEINFO_CMD); + } if( files != null){ for (File f : files) {