Kiln » TortoiseHg » TortoiseHg
Clone URL:  
Pushed to one repository · View In Graph Contained in 0.8, 0.8.1, and 0.8.2

merge with Adrian

Changeset 62a8dbcb6a1b

Parents 241a952e484c

Parents fa89cfed5ec8

by Steve Borho

Changes to 3 files · Browse files at 62a8dbcb6a1b Showing diff from parent 241a952e484c fa89cfed5ec8 Diff from another changeset...

Change 1 of 7 Show Entire File hggtk/​commit.py Stacked
 
129
130
131
 
132
133
134
 
322
323
324
325
326
 
 
 
 
327
328
329
330
331
332
333
 
334
335
336
 
381
382
383
384
 
385
386
387
388
 
 
389
390
391
392
393
394
 
403
404
405
406
 
 
 
 
407
408
409
 
494
495
496
497
498
499
500
501
502
503
 
 
504
505
506
507
508
 
663
664
665
666
667
668
669
670
671
 
672
673
674
 
681
682
683
 
 
684
685
686
 
129
130
131
132
133
134
135
 
323
324
325
 
 
326
327
328
329
330
 
 
 
 
 
 
331
332
333
334
 
379
380
381
 
382
383
 
 
 
384
385
386
 
 
387
388
389
 
398
399
400
 
401
402
403
404
405
406
407
 
492
493
494
 
495
496
497
498
499
500
501
502
503
 
504
505
506
 
661
662
663
 
 
 
 
664
665
666
667
668
669
 
676
677
678
679
680
681
682
683
@@ -129,6 +129,7 @@
  if entry[FM_STATUS] in 'MAR':   entry[FM_CHECKED] = True   self._update_check_count() + self.opts['check'] = False       def save_settings(self): @@ -322,15 +323,12 @@
      def _check_merge(self): - # disable the checkboxes on the filelist if repo in merging state - merged = len(self.repo.changectx(None).parents()) > 1 + self.get_toolbutton(_('Re_vert')).set_sensitive(not self.merging) + self.get_toolbutton(_('_Add')).set_sensitive(not self.merging) + self.get_toolbutton(_('_Remove')).set_sensitive(not self.merging) + self.get_toolbutton(_('Move')).set_sensitive(not self.merging)   - self.get_toolbutton(_('Re_vert')).set_sensitive(not merged) - self.get_toolbutton(_('_Add')).set_sensitive(not merged) - self.get_toolbutton(_('_Remove')).set_sensitive(not merged) - self.get_toolbutton(_('Move')).set_sensitive(not merged) - - if merged: + if self.merging:   # select all changes if repo is merged   for entry in self.filemodel:   if entry[FM_STATUS] in 'MARD': @@ -381,14 +379,11 @@
    def _commit_clicked(self, toolbutton, data=None):   if not self._ready_message(): - return True + return   - if len(self.repo.changectx(None).parents()) > 1: - # as of Mercurial 1.0, merges must be committed without - # specifying file list. + if self.merging: + # merges must be committed without specifying file list.   self._hg_commit([]) - shlib.shell_notify(self._relevant_files('MAR')) - self.reload_status()   else:   commitable = 'MAR'   addremove_list = self._relevant_files('?!') @@ -403,7 +398,10 @@
  else:   gdialog.Prompt(_('Nothing Commited'),   _('No committable files selected'), self).run() - return True + return + self.reload_status() + shlib.update_thgstatus(self.ui, self.repo.root, wait=True) + shlib.shell_notify(self._relevant_files('MAR'))     def _commit_selected(self, files):   # 1a. get list of chunks not rejected @@ -494,15 +492,15 @@
  os.rmdir(backupdir)   except OSError:   pass - self.reload_status()       def _commit_file(self, stat, file):   if self._ready_message():   if stat not in '?!' or self._should_addremove([file]):   self._hg_commit([file]) + self.reload_status() + shlib.update_thgstatus(self.ui, self.repo.root, wait=True)   shlib.shell_notify([file]) - self.reload_status()   return True     @@ -663,12 +661,9 @@
    # refresh overlay icons and commit dialog   if dialog.return_code() == 0: - shlib.update_thgstatus(self.ui, self.repo.root, wait=True) - shlib.shell_notify([self.cwd] + files) - if self.notify_func: - self.notify_func(self.notify_args)   self.closebranch = False   self.nextbranch = None + self.opts['check'] = True # recheck MAR after commit   buf = self.text.get_buffer()   if buf.get_modified():   self._update_recent_messages(self.opts['message']) @@ -681,6 +676,8 @@
  elif self.qheader is None:   self.text.set_buffer(gtk.TextBuffer())   self._last_commit_id = self._get_tip_rev(True) + if self.notify_func: + self.notify_func(self.notify_args)     def _get_tip_rev(self, refresh=False):   if refresh:
Change 1 of 1 Show Entire File hggtk/​gdialog.py Stacked
 
67
68
69
 
 
 
 
 
70
71
72
 
67
68
69
70
71
72
73
74
75
76
77
@@ -67,6 +67,11 @@
  if default:   self.set_default_response(ord(default))   + def run(self): + response = gtklib.MessageDialog.run(self) + self.destroy() + return response +  class Confirm(SimpleMessage):   """Dialog returns gtk.RESPONSE_YES or gtk.RESPONSE_NO   """
Change 1 of 36 Show Entire File hggtk/​status.py Stacked
 
19
20
21
22
23
 
24
25
26
 
39
40
41
42
 
43
44
45
 
55
56
57
58
 
59
60
61
 
132
133
134
135
 
136
137
138
 
141
142
143
 
 
 
144
145
146
 
192
193
194
195
 
196
197
198
199
200
201
202
 
203
204
205
 
213
214
215
 
 
216
217
218
 
275
276
277
278
279
 
 
 
280
281
282
 
292
293
294
295
296
297
298
299
 
 
 
 
 
 
300
301
302
 
319
320
321
322
 
323
324
325
 
328
329
330
331
 
332
333
334
 
378
379
380
381
 
382
383
384
 
490
491
492
493
494
495
496
 
501
502
503
504
 
 
505
506
507
 
611
612
613
614
 
615
616
617
 
618
619
620
 
751
752
753
754
 
755
756
757
 
770
771
772
773
 
774
775
776
 
789
790
791
792
 
793
794
795
 
803
804
805
806
 
807
808
809
810
 
811
812
 
813
814
815
816
 
817
818
819
 
854
855
856
857
 
858
859
860
 
987
988
989
990
 
991
992
 
993
994
995
 
1014
1015
1016
1017
 
1018
1019
 
1020
1021
1022
 
1030
1031
1032
1033
 
1034
1035
1036
 
1044
1045
1046
1047
 
 
1048
1049
1050
 
1059
1060
1061
1062
 
1063
1064
1065
 
1080
1081
1082
1083
 
1084
1085
1086
1087
1088
1089
1090
1091
1092
 
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
 
1104
 
 
 
 
 
 
 
 
 
 
 
1105
1106
1107
1108
1109
1110
 
 
1111
1112
1113
 
1119
1120
1121
1122
 
1123
1124
1125
 
1132
1133
1134
1135
 
 
1136
1137
1138
 
1149
1150
1151
1152
 
1153
1154
1155
 
1173
1174
1175
1176
 
1177
1178
1179
 
1181
1182
1183
1184
 
1185
1186
1187
 
1189
1190
1191
1192
 
1193
1194
1195
 
1202
1203
1204
1205
 
1206
1207
1208
 
1273
1274
1275
1276
1277
 
 
 
1278
1279
1280
 
1284
1285
1286
1287
 
 
 
1288
1289
1290
 
1344
1345
1346
1347
 
1348
1349
 
1350
1351
 
19
20
21
 
 
22
23
24
25
 
38
39
40
 
41
42
43
44
 
54
55
56
 
57
58
59
60
 
131
132
133
 
134
135
136
137
 
140
141
142
143
144
145
146
147
148
 
194
195
196
 
197
198
199
200
201
202
203
 
204
205
206
207
 
215
216
217
218
219
220
221
222
 
279
280
281
 
 
282
283
284
285
286
287
 
297
298
299
 
 
 
 
 
300
301
302
303
304
305
306
307
308
 
325
326
327
 
328
329
330
331
 
334
335
336
 
337
338
339
340
 
384
385
386
 
387
388
389
390
 
496
497
498
 
499
500
501
 
506
507
508
 
509
510
511
512
513
 
617
618
619
 
620
621
622
 
623
624
625
626
 
757
758
759
 
760
761
762
763
 
776
777
778
 
779
780
781
782
 
795
796
797
 
798
799
800
801
 
809
810
811
 
812
813
814
815
816
817
818
 
819
820
821
822
 
823
824
825
826
 
861
862
863
 
864
865
866
867
 
994
995
996
 
997
998
 
999
1000
1001
1002
 
1021
1022
1023
 
1024
1025
 
1026
1027
1028
1029
 
1037
1038
1039
 
1040
1041
1042
1043
 
1051
1052
1053
 
1054
1055
1056
1057
1058
 
1067
1068
1069
 
1070
1071
1072
1073
 
1088
1089
1090
 
1091
1092
1093
1094
1095
1096
 
1097
1098
 
1099
1100
1101
1102
 
 
 
1103
1104
1105
1106
 
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
 
 
1124
1125
1126
1127
1128
 
1134
1135
1136
 
1137
1138
1139
1140
 
1147
1148
1149
 
1150
1151
1152
1153
1154
 
1165
1166
1167
 
1168
1169
1170
1171
 
1189
1190
1191
 
1192
1193
1194
1195
 
1197
1198
1199
 
1200
1201
1202
1203
 
1205
1206
1207
 
1208
1209
1210
1211
 
1218
1219
1220
 
1221
1222
1223
1224
 
1289
1290
1291
 
 
1292
1293
1294
1295
1296
1297
 
1301
1302
1303
 
1304
1305
1306
1307
1308
1309
 
1363
1364
1365
 
1366
1367
 
1368
1369
1370
@@ -19,8 +19,7 @@
 from thgutil.i18n import _  from thgutil import hglib, shlib, paths   -from hggtk.gdialog import GDialog, Confirm, Prompt, NativeSaveFileDialogWrapper -from hggtk import dialog, hgshelve, gtklib, rename, hgignore +from hggtk import dialog, gdialog, hgshelve, gtklib, rename, hgignore    # file model row enumerations  FM_CHECKED = 0 @@ -39,7 +38,7 @@
 DM_CHUNK_ID = 5  DM_FONT = 6   -class GStatus(GDialog): +class GStatus(gdialog.GDialog):   """GTK+ based dialog for displaying repository status     Also provides related operations like add, delete, remove, revert, refresh, @@ -55,7 +54,7 @@
  ### Following methods are meant to be overridden by subclasses ###     def init(self): - GDialog.init(self) + gdialog.GDialog.init(self)   self.mode = 'status'     def auto_check(self): @@ -132,7 +131,7 @@
  check.set_active(True)   else:   wasset = False - for opt in self.opts : + for opt in self.opts:   if opt in self._show_checks and self.opts[opt]:   wasset = True   self._show_checks[opt].set_active(True) @@ -141,6 +140,9 @@
  if item[0] in ('modified', 'added', 'removed',   'deleted', 'unknown')]:   check.set_active(True) + if self.pats: + for name, check in self._show_checks.iteritems(): + check.set_sensitive(False)       def get_title(self): @@ -192,14 +194,14 @@
      def save_settings(self): - settings = GDialog.save_settings(self) + settings = gdialog.GDialog.save_settings(self)   settings['gstatus-hpane'] = self._diffpane.get_position()   settings['gstatus-lastpos'] = self._setting_lastpos   return settings       def load_settings(self, settings): - GDialog.load_settings(self, settings) + gdialog.GDialog.load_settings(self, settings)   self._setting_pos = 270   self._setting_lastpos = 64000   try: @@ -213,6 +215,8 @@
      def get_body(self): + self.merging = len(self.repo.parents()) == 2 +   self.connect('map-event', self._displayed)     # TODO: should generate menus dynamically during right-click, currently @@ -275,8 +279,9 @@
  path_cell = gtk.CellRendererText()   stat_cell = gtk.CellRendererText()   - self.selcb = None - if len(self.repo.changectx(None).parents()) != 2: + if self.merging: + self.selcb = None + else:   # show file selection checkboxes only when applicable   col0 = gtk.TreeViewColumn('', toggle_cell)   col0.add_attribute(toggle_cell, 'active', FM_CHECKED) @@ -292,11 +297,12 @@
  col1.set_resizable(False)   self.filetree.append_column(col1)   - col = gtk.TreeViewColumn(_('ms'), stat_cell) - col.add_attribute(stat_cell, 'text', FM_MERGE_STATUS) - col.set_sort_column_id(4) - col.set_resizable(False) - self.filetree.append_column(col) + if self.merging: + col = gtk.TreeViewColumn(_('ms'), stat_cell) + col.add_attribute(stat_cell, 'text', FM_MERGE_STATUS) + col.set_sort_column_id(4) + col.set_resizable(False) + self.filetree.append_column(col)     col2 = gtk.TreeViewColumn(_('path'), path_cell)   col2.add_attribute(path_cell, 'text', FM_PATH_UTF8) @@ -319,7 +325,7 @@
  scroller.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)     self.difffont = pango.FontDescription(self.fontlist) - if len(self.repo.changectx(None).parents()) == 2: + if self.merging:   # display merge diffs in simple text view   self.clipboard = None   self.merge_diff_text = gtk.TextView() @@ -328,7 +334,7 @@
  self.merge_diff_text.modify_font(self.difffont)   self.filetree.get_selection().set_mode(gtk.SELECTION_SINGLE)   self.filetree.get_selection().connect('changed', - self._merge_tree_selection_changed, False) + self.merge_sel_changed, False)   scroller.add(self.merge_diff_text)   diff_frame.add(scroller)   else: @@ -378,7 +384,7 @@
  self.diff_tree.append_column(diffcol)   self.filetree.get_selection().set_mode(gtk.SELECTION_MULTIPLE)   self.filetree.get_selection().connect('changed', - self._tree_selection_changed, False) + self.tree_sel_changed, False)   scroller.add(self.diff_tree)   diff_frame.add(scroller)   @@ -490,7 +496,6 @@
  wgt.connect('clicked', cbclick, cb)   return cb   wgt = wgt.get_parent() - print 'Warning: checkbox action not connected'   return     @@ -501,7 +506,8 @@
  file_count = file_count + 1   if row[FM_CHECKED]:   check_count = check_count + 1 - self.counter.set_text(_('%d selected, %d total') % (check_count, file_count)) + self.counter.set_text(_('%d selected, %d total') % (check_count, + file_count))   if self.selcb:   self.selcb.set_active(file_count and file_count == check_count)   @@ -611,10 +617,10 @@
  def reload_status(self):   if not self._ready: return False   self._last_file = None - success, outtext = self._hg_call_wrapper('Status', self._do_reload_status) + res, outtext = self._hg_call_wrapper('Status', self._do_reload_status)   self.auto_check()   self._update_check_count() - return success + return res       def make_menu(self, entries): @@ -751,7 +757,7 @@
  def _hg_remove(self, files):   wfiles = [self.repo.wjoin(x) for x in files]   if self.count_revs() > 1: - Prompt(_('Nothing Removed'), + gdialog.Prompt(_('Nothing Removed'),   _('Remove is not enabled when multiple revisions are specified.'),   self).run()   return @@ -770,7 +776,7 @@
  def _hg_move(self, files):   wfiles = [self.repo.wjoin(x) for x in files]   if self.count_revs() > 1: - Prompt(_('Nothing Moved'), _('Move is not enabled when ' + gdialog.Prompt(_('Nothing Moved'), _('Move is not enabled when '   'multiple revisions are specified.'), self).run()   return   @@ -789,7 +795,7 @@
  def _hg_copy(self, files):   wfiles = [self.repo.wjoin(x) for x in files]   if self.count_revs() > 1: - Prompt(_('Nothing Copied'), _('Copy is not enabled when ' + gdialog.Prompt(_('Nothing Copied'), _('Copy is not enabled when '   'multiple revisions are specified.'), self).run()   return   @@ -803,17 +809,18 @@
  shlib.update_thgstatus(self.ui, self.repo.root, wait=True)   self.reload_status()   - def _merge_tree_selection_changed(self, selection, force): + def merge_sel_changed(self, selection, force):   ''' Update the diff text with merge diff to both parents'''   def dohgdiff():   difftext = [_('===== Diff to first parent =====\n')]   wfiles = [self.repo.wjoin(wfile)] + wctx = self.repo[None]   matcher = cmdutil.match(self.repo, wfiles, self.opts) - for s in patch.diff(self.repo, self.repo.dirstate.parents()[0], None, + for s in patch.diff(self.repo, wctx.p1().node(), None,   match=matcher, opts=patch.diffopts(self.ui, self.opts)):   difftext.extend(s.splitlines(True))   difftext.append(_('\n===== Diff to second parent =====\n')) - for s in patch.diff(self.repo, self.repo.dirstate.parents()[1], None, + for s in patch.diff(self.repo, wctx.p2().node(), None,   match=matcher, opts=patch.diffopts(self.ui, self.opts)):   difftext.extend(s.splitlines(True))   @@ -854,7 +861,7 @@
  return False     - def _tree_selection_changed(self, selection, force): + def tree_sel_changed(self, selection, force):   if self.showdiff_toggle.get_active():   sel = self.filetree.get_selection().get_selected_rows()[1]   if not sel: @@ -987,9 +994,9 @@
    if togglebutton.get_active():   if hasattr(self, 'merge_diff_text'): - self._merge_tree_selection_changed(self.filetree.get_selection(), True) + self.merge_sel_changed(self.filetree.get_selection(), True)   else: - self._tree_selection_changed(self.filetree.get_selection(), True) + self.tree_sel_changed(self.filetree.get_selection(), True)   self._diffpane.set_position(self._setting_lastpos)   else:   self._setting_lastpos = self._diffpane.get_position() @@ -1014,9 +1021,9 @@
  self.showdiff_toggle.set_active(True)   selection = self.filetree.get_selection()   if hasattr(self, 'merge_diff_text'): - self._merge_tree_selection_changed(selection, True) + self.merge_sel_changed(selection, True)   else: - self._tree_selection_changed(selection, True) + self.tree_sel_changed(selection, True)     self.showdiff_toggle.handler_unblock(self._showdiff_toggled_id)   return False @@ -1030,7 +1037,7 @@
  'Write selected diff hunks to a patch file'   revrange = self.opts.get('rev')[0]   filename = "%s.patch" % revrange.replace(':', '_to_') - fd = NativeSaveFileDialogWrapper(Title=_('Save patch to'), + fd = gdialog.NativeSaveFileDialogWrapper(Title=_('Save patch to'),   InitialDir=self.repo.root,   FileName=filename)   result = fd.run() @@ -1044,7 +1051,8 @@
  wfile = util.pconvert(row[FM_PATH])   fc = self._filechunks[wfile]   cids.append(fc[0]) - cids += [dmodel[r][DM_CHUNK_ID] for r in fc[1:] if not dmodel[r][DM_REJECTED]] + cids += [dmodel[r][DM_CHUNK_ID] for r in fc[1:] + if not dmodel[r][DM_REJECTED]]   try:   fp = open(result, "w")   for cid in cids: @@ -1059,7 +1067,7 @@
  if len(revert_list) > 0:   self._hg_revert(revert_list)   else: - Prompt(_('Nothing Reverted'), + gdialog.Prompt(_('Nothing Reverted'),   _('No revertable files selected'), self).run()   return True   @@ -1080,34 +1088,41 @@
  def _hg_revert(self, files):   wfiles = [self.repo.wjoin(x) for x in files]   if self.count_revs() > 1: - Prompt(_('Nothing Reverted'), + gdialog.Prompt(_('Nothing Reverted'),   _('Revert not allowed when viewing revision range.'),   self).run()   return     # Create new opts, so nothing unintented gets through. - # commands.table revert key changed after 0.9.5, in change d4ec6d61b3ee   key = '^revert' in commands.table and '^revert' or 'revert'   revertopts = self.merge_opts(commands.table[key][1], - ('include', 'exclude', 'rev')) + ('include', 'exclude', 'rev'))   def dohgrevert():   commands.revert(self.ui, self.repo, *wfiles, **revertopts)   - # TODO: Ask which revision when multiple parents (currently just - # shows abort message) - # TODO: Don't need to prompt when reverting added or removed files   if self.count_revs() == 1:   # rev options needs extra tweaking since is not an array for   # revert command   revertopts['rev'] = revertopts['rev'][0] - dlg = Confirm(_('Confirm Revert'), files, self, + dlg = gdialog.Confirm(_('Confirm Revert'), files, self,   _('Revert files to revision ') + revertopts['rev'] + '?') + elif self.merging: + resp = gdialog.CustomPrompt(_('Which parent to revert to?'), + _('Revert file(s) to local or other parent?'), + self, (_('&local'), _('&other')), _('l')).run() + if resp == ord(_('l')): + revertopts['rev'] = self.repo[None].p1().rev() + elif resp == ord(_('o')): + revertopts['rev'] = self.repo[None].p2().rev() + else: + return + dlg = None   else:   # rev options needs extra tweaking since it must be an empty   # string when unspecified for revert command   revertopts['rev'] = '' - dlg = Confirm('Confirm Revert', files, self) - if dlg.run() == gtk.RESPONSE_YES: + dlg = gdialog.Confirm('Confirm Revert', files, self) + if not dlg or dlg.run() == gtk.RESPONSE_YES:   success, outtext = self._hg_call_wrapper('Revert', dohgrevert)   if success:   shlib.update_thgstatus(self.ui, self.repo.root, wait=True) @@ -1119,7 +1134,7 @@
  if len(add_list) > 0:   self._hg_add(add_list)   else: - Prompt(_('Nothing Added'), + gdialog.Prompt(_('Nothing Added'),   _('No addable files selected'), self).run()   return True   @@ -1132,7 +1147,8 @@
  def _hg_add(self, files):   wfiles = [self.repo.wjoin(x) for x in files]   # Create new opts, so nothing unintented gets through - addopts = self.merge_opts(commands.table['^add'][1], ('include', 'exclude')) + addopts = self.merge_opts(commands.table['^add'][1], + ('include', 'exclude'))   def dohgadd():   commands.add(self.ui, self.repo, *wfiles, **addopts)   success, outtext = self._hg_call_wrapper('Add', dohgadd) @@ -1149,7 +1165,7 @@
  if len(delete_list) > 0:   self._delete_files(delete_list)   if not remove_list and not delete_list: - Prompt(_('Nothing Removed'), + gdialog.Prompt(_('Nothing Removed'),   _('No removable files selected'), self).run()   return True   @@ -1173,7 +1189,7 @@
  # verify directory   destroot = paths.find_root(destdir)   if destroot != self.repo.root: - Prompt(_('Nothing Moved'), + gdialog.Prompt(_('Nothing Moved'),   _('Cannot move outside repo!'), self).run()   return True   @@ -1181,7 +1197,7 @@
  move_list.append(hglib.fromutf(destdir))   self._hg_move(move_list)   else: - Prompt(_('Nothing Moved'), _('No movable files selected\n\n' + gdialog.Prompt(_('Nothing Moved'), _('No movable files selected\n\n'   'Note: only clean files can be moved.'), self).run()   return True   @@ -1189,7 +1205,7 @@
  self._delete_files([wfile])     def _delete_files(self, files): - dlg = Confirm(_('Confirm Delete Unrevisioned'), files, self) + dlg = gdialog.Confirm(_('Confirm Delete Unrevisioned'), files, self)   if dlg.run() == gtk.RESPONSE_YES :   errors = ''   for wfile in files: @@ -1202,7 +1218,7 @@
  errors = errors.replace('\\\\', '\\')   if len(errors) > 500:   errors = errors[:errors.find('\n',500)] + '\n...' - Prompt(_('Delete Errors'), errors, self).run() + gdialog.Prompt(_('Delete Errors'), errors, self).run()     self.reload_status()   return True @@ -1273,8 +1289,9 @@
      def _tree_button_press(self, widget, event) : - # Set the flag to ignore the next activation when the shift/control keys are - # pressed. This avoids activations with multiple rows selected. + # Set the flag to ignore the next activation when the + # shift/control keys are pressed. This avoids activations with + # multiple rows selected.   if event.type == gtk.gdk._2BUTTON_PRESS and \   (event.state & (gtk.gdk.SHIFT_MASK | gtk.gdk.CONTROL_MASK)):   self._ignore_next_act = True @@ -1284,7 +1301,9 @@
      def _tree_button_release(self, widget, event) : - if event.button == 3 and not (event.state & (gtk.gdk.SHIFT_MASK | gtk.gdk.CONTROL_MASK)): + if event.button != 3: + return False + if not (event.state & (gtk.gdk.SHIFT_MASK | gtk.gdk.CONTROL_MASK)):   self._tree_popup_menu(widget, event.button, event.time)   return False   @@ -1344,8 +1363,8 @@
  rev = opts.get('rev', [])   cmdoptions = {   'all':False, 'clean':showclean, 'ignored':False, 'modified':True, - 'added':True, 'removed':True, 'deleted':True, 'unknown':True, 'rev': rev, + 'added':True, 'removed':True, 'deleted':True, 'unknown':True,   'exclude':[], 'include':[], 'debug':True, 'verbose':True, 'git':False, - 'check':True + 'rev':rev, 'check':True   }   return GStatus(ui, None, None, pats, cmdoptions)