This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 166591
Collapse All | Expand All

(-)a/bugtracking.bridge/src/org/netbeans/modules/bugtracking/vcs/Bundle.properties (+1 lines)
Lines 73-78 Link Here
73
HookPanel.repositoryLabel.text=Issue Trac&ker:
73
HookPanel.repositoryLabel.text=Issue Trac&ker:
74
HookPanel.changeRevisionFormatButton.text=(Change format...)
74
HookPanel.changeRevisionFormatButton.text=(Change format...)
75
HookPanel.changeIssueFormatButton.text=(Change format...)
75
HookPanel.changeIssueFormatButton.text=(Change format...)
76
HookPanel.loadingRepositories=Loading repositories...
76
FormatPanel.aboveRadio.text=&Above the Message
77
FormatPanel.aboveRadio.text=&Above the Message
77
FormatPanel.beloveRadio.text=&Below the Message
78
FormatPanel.beloveRadio.text=&Below the Message
78
HookPanel.jButton2.AccessibleContext.accessibleDescription=N/A
79
HookPanel.jButton2.AccessibleContext.accessibleDescription=N/A
(-)a/bugtracking.bridge/src/org/netbeans/modules/bugtracking/vcs/HgHookImpl.java (-11 / +5 lines)
Lines 233-253 Link Here
233
233
234
    @Override
234
    @Override
235
    public JPanel createComponent(HgHookContext context) {
235
    public JPanel createComponent(HgHookContext context) {
236
        Repository[] repos = BugtrackingUtil.getKnownRepositories();
236
        File referenceFile;
237
        if(context.getFiles().length == 0) {
237
        if(context.getFiles().length == 0) {
238
            referenceFile = null;
238
            LOG.warning("creating hg hook component for zero files");           // NOI18N
239
            LOG.warning("creating hg hook component for zero files");           // NOI18N
239
            Repository repoToSelect
240
                    = BugtrackingOwnerSupport.getInstance()
241
                      .getRepository(BugtrackingOwnerSupport.ContextType.ALL_PROJECTS);
242
            panel = new HookPanel(repos, repoToSelect);
243
        } else {
240
        } else {
244
            File file = context.getFiles()[0];
241
            referenceFile = context.getFiles()[0];
245
            Repository repoToSelect = BugtrackingOwnerSupport.getInstance().getRepository(file, false);
246
            if(repoToSelect == null) {
247
                LOG.log(Level.FINE, " could not find issue tracker for " + file);  // NOI18N
248
            }
249
            panel = new HookPanel(repos, repoToSelect);
250
        }
242
        }
243
        panel = new HookPanel();
244
        RepositorySelector.setup(panel, referenceFile);
251
        panel.changeRevisionFormatButton.addActionListener(new ActionListener() {
245
        panel.changeRevisionFormatButton.addActionListener(new ActionListener() {
252
            public void actionPerformed(ActionEvent e) {
246
            public void actionPerformed(ActionEvent e) {
253
                onShowRevisionFormat();
247
                onShowRevisionFormat();
(-)a/bugtracking.bridge/src/org/netbeans/modules/bugtracking/vcs/HookPanel.java (-19 / +134 lines)
Lines 48-72 Link Here
48
import java.awt.BorderLayout;
48
import java.awt.BorderLayout;
49
import java.awt.Component;
49
import java.awt.Component;
50
import java.awt.Dimension;
50
import java.awt.Dimension;
51
import java.awt.EventQueue;
52
import java.awt.Font;
51
import java.awt.event.ItemEvent;
53
import java.awt.event.ItemEvent;
52
import java.awt.event.ItemListener;
54
import java.awt.event.ItemListener;
53
import java.beans.PropertyChangeEvent;
55
import java.beans.PropertyChangeEvent;
54
import java.beans.PropertyChangeListener;
56
import java.beans.PropertyChangeListener;
57
import java.util.logging.Logger;
55
import javax.swing.DefaultComboBoxModel;
58
import javax.swing.DefaultComboBoxModel;
56
import javax.swing.DefaultListCellRenderer;
59
import javax.swing.DefaultListCellRenderer;
57
import javax.swing.JButton;
60
import javax.swing.JButton;
61
import javax.swing.JLabel;
58
import javax.swing.JList;
62
import javax.swing.JList;
63
import javax.swing.event.PopupMenuEvent;
64
import javax.swing.event.PopupMenuListener;
59
import org.netbeans.modules.bugtracking.ui.search.QuickSearchComboBar;
65
import org.netbeans.modules.bugtracking.ui.search.QuickSearchComboBar;
60
import org.netbeans.modules.bugtracking.spi.Issue;
66
import org.netbeans.modules.bugtracking.spi.Issue;
61
import org.netbeans.modules.bugtracking.spi.Repository;
67
import org.netbeans.modules.bugtracking.spi.Repository;
62
import org.netbeans.modules.bugtracking.util.BugtrackingUtil;
68
import org.netbeans.modules.bugtracking.util.BugtrackingUtil;
63
import org.netbeans.modules.versioning.util.VerticallyNonResizingPanel;
69
import org.netbeans.modules.versioning.util.VerticallyNonResizingPanel;
70
import org.openide.util.NbBundle;
71
import static java.util.logging.Level.FINER;
64
72
65
/**
73
/**
66
 *
74
 *
67
 * @author Tomas Stupka
75
 * @author Tomas Stupka
76
 * @author Marian Petras
68
 */
77
 */
69
public class HookPanel extends VerticallyNonResizingPanel implements ItemListener, PropertyChangeListener {
78
public class HookPanel extends VerticallyNonResizingPanel implements ItemListener, PropertyChangeListener {
79
80
    private static Logger LOG = Logger.getLogger("org.netbeans.modules.bugtracking.vcshooks.HookPanel");  // NOI18N
81
82
    private static final String LOADING_REPOSITORIES = "loading";       //NOI18N
83
70
    private QuickSearchComboBar qs;
84
    private QuickSearchComboBar qs;
71
    private Repository selectedRepository;
85
    private Repository selectedRepository;
72
86
Lines 98-135 Link Here
98
    }
112
    }
99
    private UpdateFiledsState updateFiledsState = null;
113
    private UpdateFiledsState updateFiledsState = null;
100
    
114
    
101
    public HookPanel(Repository[] repos, Repository toSelect) {
115
    public HookPanel() {
102
        initComponents();
116
        initComponents();
103
117
104
        qs = new QuickSearchComboBar(this);
118
        qs = new QuickSearchComboBar(this);
105
        issuePanel.add(qs, BorderLayout.NORTH);
119
        issuePanel.add(qs, BorderLayout.NORTH);
106
        issueLabel.setLabelFor(qs.getCommand());
120
        issueLabel.setLabelFor(qs.getCommand());
107
        
121
108
        repositoryComboBox.setModel(new DefaultComboBoxModel(repos != null ? repos : new Repository[0]));
122
        repositoryComboBox.setModel(new DefaultComboBoxModel(new Object[] {LOADING_REPOSITORIES}));
109
        repositoryComboBox.setRenderer(new DefaultListCellRenderer() {
123
        repositoryComboBox.setRenderer(new DefaultListCellRenderer() {
124
            private final String loadingReposText = NbBundle.getMessage(
125
                                    HookPanel.class,
126
                                    "HookPanel.loadingRepositories");   //NOI18N
110
            @Override
127
            @Override
111
            public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
128
            public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
112
                if(value != null) {
129
                String text;
113
                    Repository r = (Repository) value;
130
                if (value == null) {
114
                    value = r.getDisplayName();
131
                    text = null;
132
                } else if (value == LOADING_REPOSITORIES) {
133
                    text = loadingReposText;
134
                } else {
135
                    text = ((Repository) value).getDisplayName();
115
                }
136
                }
116
                return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
137
                Component result = super.getListCellRendererComponent(list,
138
                                                                      text,
139
                                                                      index,
140
                                                                      isSelected,
141
                                                                      cellHasFocus);
142
                if ((value == LOADING_REPOSITORIES) && (result instanceof JLabel)) {
143
                    JLabel label = (JLabel) result;
144
                    Font font = label.getFont();
145
                    label.setFont(new Font(font.getName(),
146
                                           font.getStyle() | Font.ITALIC,
147
                                           font.getSize()));
148
                }
149
                return result;
117
            }
150
            }
118
        });
151
        });
119
152
120
        repositoryComboBox.addItemListener(this);
153
        repositoryComboBox.addItemListener(this);
121
        if(toSelect != null) {
154
        enableFields();        
122
            repositoryComboBox.setSelectedItem(toSelect);
155
    }
123
            qs.setRepository(toSelect);
156
157
    void setRepositories(Repository[] repos) {
158
        Repository[] comboData;
159
        if (repos == null) {
160
            comboData = new Repository[1];
161
            comboData[0] = null;
124
        } else {
162
        } else {
125
            if(repositoryComboBox.getItemCount() > 0) {
163
            comboData = new Repository[repos.length + 1];
126
                Repository repo = (Repository) repositoryComboBox.getItemAt(0);
164
            comboData[0] = null;
127
                repositoryComboBox.setSelectedItem(repo);
165
            if (repos.length != 0) {
128
                qs.setRepository(repo);
166
                System.arraycopy(repos, 0, comboData, 1, repos.length);
129
            }
167
            }
130
        }
168
        }
131
        enableFields();        
169
        repositoryComboBox.setModel(new DefaultComboBoxModel(comboData));
132
        
170
    }
171
172
    /**
173
     * Selects the given repository in the combo-box if no repository has been
174
     * selected yet by the user.
175
     * If the user had already selected some repository before this method
176
     * was called, this method does nothing. If this method is called at
177
     * the moment the popup of the combo-box is opened, the operation of
178
     * pre-selecting the repository is deferred until the popup is closed. If
179
     * the popup had been displayed at the moment this method was called
180
     * and the user selects some repository during the period since the
181
     * call of this method until the deferred selection takes place, the
182
     * deferred selection operation is cancelled.
183
     * 
184
     * @param  repoToPreselect  repository to preselect
185
     */
186
    void preselectRepository(final Repository repoToPreselect) {
187
        assert EventQueue.isDispatchThread();
188
189
        if (repoToPreselect == null) {
190
            LOG.finer("preselectRepository(null)");                     //NOI18N
191
            return;
192
        }
193
194
        if (LOG.isLoggable(FINER)) {
195
            LOG.finer("preselectRepository(" + repoToPreselect.getDisplayName() + ')'); //NOI18N
196
        }
197
198
        if (isRepositorySelected()) {
199
            LOG.finest(" - cancelled - already selected by the user");  //NOI18N
200
            return;
201
        }
202
203
        if (repositoryComboBox.isPopupVisible()) {
204
            LOG.finest(" - the popup is visible - deferred");           //NOI18N
205
            repositoryComboBox.addPopupMenuListener(new PopupMenuListener() {
206
                public void popupMenuWillBecomeVisible(PopupMenuEvent e) { }
207
                public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
208
                    LOG.finer("popupMenuWillBecomeInvisible()");        //NOI18N
209
                    repositoryComboBox.removePopupMenuListener(this);
210
                }
211
                public void popupMenuCanceled(PopupMenuEvent e) {
212
                    LOG.finer("popupMenuCanceled()");                   //NOI18N
213
                    repositoryComboBox.removePopupMenuListener(this);
214
                    LOG.finest(" - processing deferred selection");     //NOI18N
215
                    preselectRepositoryUnconditionally(repoToPreselect);
216
                }
217
            });
218
        } else {
219
            preselectRepositoryUnconditionally(repoToPreselect);
220
        }
221
    }
222
223
    private void preselectRepositoryUnconditionally(Repository repoToPreselect) {
224
        assert !isRepositorySelected();
225
226
        if (LOG.isLoggable(FINER)) {
227
            LOG.finer("preselectRepositoryUnconditionally(" + repoToPreselect.getDisplayName() + ')'); //NOI18N
228
        }
229
230
        repositoryComboBox.setSelectedItem(repoToPreselect);
231
    }
232
233
    /** 
234
     * Determines whether some bug-tracking repository is selected in the
235
     * Issue Tracker combo-box.
236
     * 
237
     * @return  {@code true} if some repository is selected,
238
     *          {@code false} otherwise
239
     */
240
    private boolean isRepositorySelected() {
241
        Object selectedItem = repositoryComboBox.getSelectedItem();
242
        return (selectedItem != null) && (selectedItem != LOADING_REPOSITORIES);
133
    }
243
    }
134
244
135
    Issue getIssue() {
245
    Issue getIssue() {
Lines 141-148 Link Here
141
    }
251
    }
142
252
143
    private void enableFields() {
253
    private void enableFields() {
144
        boolean repoSelected = repositoryComboBox.getSelectedItem() != null;
254
        boolean repoSelected = isRepositorySelected();
145
        boolean enableUpdateFields = getIssue() != null && repoSelected;
255
        boolean enableUpdateFields = repoSelected && (getIssue() != null);
146
256
147
        if(updateFiledsState == null) {
257
        if(updateFiledsState == null) {
148
            updateFiledsState = new UpdateFiledsState();
258
            updateFiledsState = new UpdateFiledsState();
Lines 398-406 Link Here
398
    // End of variables declaration//GEN-END:variables
508
    // End of variables declaration//GEN-END:variables
399
509
400
    public void itemStateChanged(ItemEvent e) {
510
    public void itemStateChanged(ItemEvent e) {
511
        if (LOG.isLoggable(FINER)) {
512
            LOG.finer("itemStateChanged() - selected item: " + e.getItem()); //NOI18N
513
        }
401
        enableFields();
514
        enableFields();
402
        if(e.getStateChange() == ItemEvent.SELECTED) {
515
        if(e.getStateChange() == ItemEvent.SELECTED) {
403
            Repository repo = (Repository) e.getItem();
516
            Object item = e.getItem();
517
            Repository repo = (item != LOADING_REPOSITORIES) ? (Repository) item
518
                                                             : null;
404
            selectedRepository = repo;
519
            selectedRepository = repo;
405
            if(repo != null) {
520
            if(repo != null) {
406
                qs.setRepository(repo);
521
                qs.setRepository(repo);
(-)a5b3457a1d7a (+230 lines)
Added Link Here
1
/*
2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3
 *
4
 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
5
 *
6
 * The contents of this file are subject to the terms of either the GNU
7
 * General Public License Version 2 only ("GPL") or the Common
8
 * Development and Distribution License("CDDL") (collectively, the
9
 * "License"). You may not use this file except in compliance with the
10
 * License. You can obtain a copy of the License at
11
 * http://www.netbeans.org/cddl-gplv2.html
12
 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
13
 * specific language governing permissions and limitations under the
14
 * License.  When distributing the software, include this License Header
15
 * Notice in each file and include the License file at
16
 * nbbuild/licenses/CDDL-GPL-2-CP.  Sun designates this
17
 * particular file as subject to the "Classpath" exception as provided
18
 * by Sun in the GPL Version 2 section of the License file that
19
 * accompanied this code. If applicable, add the following below the
20
 * License Header, with the fields enclosed by brackets [] replaced by
21
 * your own identifying information:
22
 * "Portions Copyrighted [year] [name of copyright owner]"
23
 *
24
 * If you wish your version of this file to be governed by only the CDDL
25
 * or only the GPL Version 2, indicate your decision by adding
26
 * "[Contributor] elects to include this software in this distribution
27
 * under the [CDDL or GPL Version 2] license." If you do not indicate a
28
 * single choice of license, a recipient has the option to distribute
29
 * your version of this file under either the CDDL, the GPL Version 2 or
30
 * to extend the choice of license to its licensees as provided above.
31
 * However, if you add GPL Version 2 code and therefore, elected the GPL
32
 * Version 2 license, then the option applies only if the new code is
33
 * made subject to such option by the copyright holder.
34
 *
35
 * Contributor(s):
36
 *
37
 * Portions Copyrighted 2009 Sun Microsystems, Inc.
38
 */
39
40
package org.netbeans.modules.bugtracking.vcs;
41
42
import java.awt.EventQueue;
43
import java.awt.event.HierarchyEvent;
44
import java.awt.event.HierarchyListener;
45
import java.io.File;
46
import java.util.logging.Logger;
47
import org.netbeans.modules.bugtracking.spi.Repository;
48
import org.netbeans.modules.bugtracking.util.BugtrackingOwnerSupport;
49
import org.netbeans.modules.bugtracking.util.BugtrackingUtil;
50
import org.openide.util.Exceptions;
51
import org.openide.util.RequestProcessor;
52
import static java.util.logging.Level.FINEST;
53
54
/**
55
 * Loads the list of repositories and determines the default one off the AWT
56
 * thread. Once the results are ready, updates the UI (the combo-box).
57
 * It is activated by method {@code hierarchyChanged} when the hook panel
58
 * is displayed. At this moment, a routine for finding the known repositories
59
 * and for determination the default repository is started in a separated
60
 * thread. As soon as the list of known repositories is ready, the repositories
61
 * combo-box is updated. When the default repository is determined, it is
62
 * pre-selected in the combo-box, unless the user had already selected some
63
 * repository.
64
 *
65
 * @author  Marian Petras
66
 */
67
final class RepositorySelector implements HierarchyListener, Runnable {
68
69
    private static final Logger LOG
70
            = Logger.getLogger(RepositorySelector.class.getName());
71
72
    private final HookPanel hookPanel;
73
    private final File refFile;
74
    private boolean tooLate;
75
    private boolean repositoriesDisplayed = false;
76
    private boolean defaultRepoSelected = false;
77
    private volatile Repository[] repositories;
78
    private volatile boolean defaultRepoComputed;
79
    private volatile Repository defaultRepo;
80
81
    static void setup(HookPanel hookPanel, File referenceFile) {
82
        hookPanel.addHierarchyListener(
83
                new RepositorySelector(hookPanel, referenceFile));
84
    }
85
86
    private RepositorySelector(HookPanel hookPanel, File refFile) {
87
        super();
88
        this.hookPanel = hookPanel;
89
        this.refFile = refFile;
90
    }
91
92
    public void hierarchyChanged(HierarchyEvent e) {
93
        if ((e.getChangeFlags() & HierarchyEvent.DISPLAYABILITY_CHANGED) != 0) {
94
            assert e.getChanged() == hookPanel;
95
            if (hookPanel.isDisplayable()) {
96
                hookPanelDisplayed();
97
            } else {
98
                hookPanelClosed();
99
            }
100
        }
101
    }
102
103
    private void hookPanelDisplayed() {
104
        LOG.finer("hookPanelDisplayed()");                              //NOI18N
105
        RequestProcessor.getDefault().post(this);
106
    }
107
108
    private void hookPanelClosed() {
109
        /*
110
         * The panel had been closed sooner than the default repository has been
111
         * determined.
112
         */
113
        tooLate = true;
114
        hookPanel.removeHierarchyListener(this);
115
    }
116
117
    public void run() {
118
        if (RequestProcessor.getDefault().isRequestProcessorThread()) {
119
120
            loadRepositories();
121
            EventQueue.invokeLater(this);
122
123
            try {
124
                findDefaultRepository();
125
            } finally {
126
                defaultRepoComputed = true;
127
            }
128
            EventQueue.invokeLater(this);
129
130
        } else {
131
            assert EventQueue.isDispatchThread();
132
            if (defaultRepoSelected) {
133
                /*
134
                 * The default repository selection was performed during the
135
                 * previous invocation of this method from AWT thread
136
                 * (in one shot with displaying the list of available
137
                 * repositories).
138
                 */
139
                LOG.finest("run() called from AWT - nothing to do - all work already done"); //NOI18N
140
                return;
141
            }
142
143
            if (LOG.isLoggable(FINEST)) {
144
                LOG.finest(!repositoriesDisplayed
145
                           ? "run() called from AWT - going to display the list of repositories" //NOI18N
146
                           : "run() called from AWT - going to select the repository"); //NOI18N
147
            }
148
149
            if (tooLate) {
150
                LOG.finest(" - too late - the HookPanel has been already closed"); //NOI18N
151
                return;
152
            }
153
154
            hookPanel.removeHierarchyListener(this);
155
156
            boolean repositoriesJustDisplayed = false;
157
            if (!repositoriesDisplayed) {
158
                hookPanel.setRepositories(repositories);
159
                repositoriesJustDisplayed = true;
160
                repositoriesDisplayed = true;
161
            }
162
            if (defaultRepoComputed) {
163
                if (repositoriesJustDisplayed) {
164
                    LOG.finest("                      - going also to select the default repository (if any)"); //NOI18N
165
                }
166
                try {
167
                    if (defaultRepo != null) {
168
                        hookPanel.preselectRepository(defaultRepo);
169
                    } else {
170
                        LOG.finest(" - default repository not determined - abort"); //NOI18N
171
                    }
172
                } finally {
173
                    defaultRepoSelected = true;
174
                }
175
            }
176
        }
177
    }
178
179
    private void loadRepositories() {
180
        assert RequestProcessor.getDefault().isRequestProcessorThread();
181
        LOG.finer("loadRepositories()");                                //NOI18N
182
183
        long startTimeMillis = System.currentTimeMillis();
184
185
        repositories = BugtrackingUtil.getKnownRepositories();
186
187
        long endTimeMillis = System.currentTimeMillis();
188
        if (LOG.isLoggable(FINEST)) {
189
            LOG.finest("BugtrackingUtil.getKnownRepositories() took "   //NOI18N
190
                       + (endTimeMillis - startTimeMillis) + " ms.");   //NOI18N
191
        }
192
    }
193
194
    private void findDefaultRepository() {
195
        assert RequestProcessor.getDefault().isRequestProcessorThread();
196
        LOG.finer("findDefaultRepository()");                           //NOI18N
197
198
        long startTimeMillis, endTimeMillis;
199
        Repository result;
200
201
        startTimeMillis = System.currentTimeMillis();
202
203
        if (refFile != null) {
204
            result = BugtrackingOwnerSupport.getInstance()
205
                     .getRepository(refFile, false);
206
            if ((result == null) && LOG.isLoggable(FINEST)) {
207
                LOG.finest(" could not find issue tracker for " + refFile); //NOI18N
208
            }
209
        } else {
210
            result = BugtrackingOwnerSupport.getInstance()
211
                    .getRepository(BugtrackingOwnerSupport.ContextType.ALL_PROJECTS);
212
        }
213
214
        endTimeMillis = System.currentTimeMillis();
215
216
        if (LOG.isLoggable(FINEST)) {
217
            LOG.finest("BugtrackingOwnerSupport.getRepository(...) took " //NOI18N
218
                       + (endTimeMillis - startTimeMillis) + " ms.");   //NOI18N
219
        }
220
221
        if (result != null) {
222
            if (LOG.isLoggable(FINEST)) {
223
                LOG.finest(" - default repository: " + result.getDisplayName()); //NOI18N
224
            }
225
            defaultRepo = result;
226
        } else {
227
            LOG.finest(" - default repository: <null>");                //NOI18N
228
        }
229
    }
230
}
(-)a/bugtracking.bridge/src/org/netbeans/modules/bugtracking/vcs/SvnHookImpl.java (-11 / +5 lines)
Lines 199-219 Link Here
199
199
200
    @Override
200
    @Override
201
    public JPanel createComponent(SvnHookContext context) {
201
    public JPanel createComponent(SvnHookContext context) {
202
        Repository[] repos = BugtrackingUtil.getKnownRepositories();
202
        File referenceFile;
203
        if(context.getFiles().length == 0) {
203
        if(context.getFiles().length == 0) {
204
            referenceFile = null;
204
            LOG.warning("creating svn hook component for zero files");          // NOI18N
205
            LOG.warning("creating svn hook component for zero files");          // NOI18N
205
            Repository repoToSelect
206
                    = BugtrackingOwnerSupport.getInstance()
207
                      .getRepository(BugtrackingOwnerSupport.ContextType.ALL_PROJECTS);
208
            panel = new HookPanel(repos, repoToSelect);
209
        } else {
206
        } else {
210
            File file = context.getFiles()[0];
207
            referenceFile = context.getFiles()[0];
211
            Repository repoToSelect = BugtrackingOwnerSupport.getInstance().getRepository(file, false);
212
            if(repoToSelect == null) {
213
                LOG.log(Level.FINE, " could not find issue tracker for " + file);  // NOI18N
214
            }
215
            panel = new HookPanel(repos, repoToSelect);
216
        }
208
        }
209
        panel = new HookPanel();
210
        RepositorySelector.setup(panel, referenceFile);
217
        panel.commitRadioButton.setVisible(false);
211
        panel.commitRadioButton.setVisible(false);
218
        panel.pushRadioButton.setVisible(false);
212
        panel.pushRadioButton.setVisible(false);
219
        panel.changeRevisionFormatButton.addActionListener(new ActionListener() {
213
        panel.changeRevisionFormatButton.addActionListener(new ActionListener() {

Return to bug 166591