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 crew

Changeset 944173cd38df

Parents 8a6772ddbf11

Parents 73165e662498

by Simon Heimberg

Changes to 8 files · Browse files at 944173cd38df Showing diff from parent 8a6772ddbf11 73165e662498 Diff from another changeset...

Change 1 of 2 Show Entire File hggtk/​commit.py Stacked
 
111
112
113
 
114
115
116
 
248
249
250
251
252
253
 
 
 
254
255
256
 
111
112
113
114
115
116
117
 
249
250
251
 
 
 
252
253
254
255
256
257
@@ -111,6 +111,7 @@
  response = Confirm('Discard Message', [], self,   'Discard current commit message?').run()   if response != gtk.RESPONSE_YES: + combobox.set_active(-1)   return   buf.set_text(model[index][1])   @@ -248,9 +249,9 @@
    # pre-fill commit message   self.text.get_buffer().set_text('merge') - else: - self.selectlabel.set_text( - _('toggle change hunks to leave them out of commit')) + #else: + # self.selectlabel.set_text( + # _('toggle change hunks to leave them out of commit'))      
Change 1 of 1 Show Entire File hggtk/​gdialog.py Stacked
 
65
66
67
 
 
 
 
 
 
 
68
69
70
 
65
66
67
68
69
70
71
72
73
74
75
76
77
@@ -65,6 +65,13 @@
  message += ' ...\n'   break   self.format_secondary_text(toutf(message)) + accel_group = gtk.AccelGroup() + self.add_accel_group(accel_group) + buttons = self.get_children()[0].get_children()[1].get_children() + buttons[1].add_accelerator("clicked", accel_group, ord("y"), + 0, gtk.ACCEL_VISIBLE) + buttons[0].add_accelerator("clicked", accel_group, ord("n"), + 0, gtk.ACCEL_VISIBLE)      class GDialog(gtk.Window):
Change 1 of 1 Show Entire File hggtk/​hgignore.py Stacked
 
149
150
151
152
 
 
153
154
155
 
149
150
151
 
152
153
154
155
156
@@ -149,7 +149,8 @@
  try: repo = hg.repository(ui.ui(), path=self.root)   except: gtk.main_quit()   matcher = match.always(repo.root, repo.root) - changes = repo.dirstate.status(matcher, unknown=True) + changes = repo.dirstate.status(matcher, ignored=False, clean=False, + unknown=True)   (lookup, modified, added, removed,   deleted, unknown, ignored, clean) = changes   self.unkmodel.clear()
Change 1 of 1 Show Entire File hggtk/​hgshelve.py Stacked
 
96
97
98
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
99
100
101
 
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
@@ -96,6 +96,32 @@
  if h.startswith('index '):   return True   + def selpretty(self, selected): + str = '' + for h in self.header: + if h.startswith('index '): + str += _('this modifies a binary file (all or nothing)\n') + break + if self.pretty_re.match(h): + str += h + if self.binary(): + str += _('this is a binary file\n') + break + if h.startswith('---'): + hunks = len(self.hunks) + shunks, lines, slines = 0, 0, 0 + for i, h in enumerate(self.hunks): + lines += h.added + h.removed + if selected(i): + shunks += 1 + slines += h.added + h.removed + str += _('total: %d hunks (%d changed lines); ' + 'selected: %d hunks (%d changed lines)') % (hunks, + lines, shunks, slines) + break + str += h + return str +   def pretty(self, fp):   for h in self.header:   if h.startswith('index '):
Change 1 of 12 Show Entire File hggtk/​status.py Stacked
 
169
170
171
172
 
 
 
 
 
173
174
175
 
270
271
272
273
274
 
275
276
277
 
371
372
373
374
375
376
377
378
379
380
381
 
 
 
 
 
 
 
 
382
383
384
 
501
502
503
 
 
 
 
 
 
504
505
506
 
531
532
533
534
535
536
537
538
539
 
617
618
619
 
 
 
 
620
621
622
623
624
 
625
626
 
627
628
629
 
631
632
633
 
 
 
 
 
 
 
 
 
 
 
634
635
636
 
797
798
799
800
 
801
802
803
 
842
843
844
845
 
846
847
848
849
850
 
851
852
853
 
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
 
873
874
875
 
919
920
921
922
923
924
925
926
927
 
 
928
929
930
 
931
932
933
934
 
 
 
 
935
936
937
 
993
994
995
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
996
997
998
 
169
170
171
 
172
173
174
175
176
177
178
179
 
274
275
276
 
 
277
278
279
280
 
374
375
376
 
 
 
 
 
 
 
 
377
378
379
380
381
382
383
384
385
386
387
 
504
505
506
507
508
509
510
511
512
513
514
515
 
540
541
542
 
 
 
543
544
545
 
623
624
625
626
627
628
629
630
 
 
 
 
631
632
 
633
634
635
636
 
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
 
815
816
817
 
818
819
820
821
 
860
861
862
 
863
864
865
866
867
 
868
869
870
871
 
874
875
876
 
877
878
879
 
 
 
 
 
 
 
 
 
 
880
881
882
883
 
927
928
929
 
 
 
 
 
 
930
931
932
933
 
934
935
936
937
938
939
940
941
942
943
944
945
 
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
@@ -169,7 +169,11 @@
  self._refresh_clicked, tip='refresh'),   gtk.SeparatorToolItem()]   - if self.count_revs() < 2: + if self.count_revs() == 2: + tbuttons += [ + self.make_toolbutton(gtk.STOCK_SAVE_AS, 'Save As', + self._save_clicked, tip='Save selected changes')] + else:   tbuttons += [   self.make_toolbutton(gtk.STOCK_MEDIA_REWIND, 'Re_vert',   self._revert_clicked, tip='revert'), @@ -270,8 +274,7 @@
  stat_cell = gtk.CellRendererText()     self.selcb = None - ismerge = len(self.repo.changectx(None).parents()) == 2 - if self.count_revs() < 2 and not ismerge: + if len(self.repo.changectx(None).parents()) != 2:   # show file selection checkboxes only when applicable   col0 = gtk.TreeViewColumn('', toggle_cell)   col0.add_attribute(toggle_cell, 'active', FM_CHECKED) @@ -371,14 +374,14 @@
  self._tree_selection_changed, False)   scroller.add(self.diff_tree)   - vbox = gtk.VBox() - self.selectlabel = gtk.Label() - hbox = gtk.HBox() - hbox.pack_start(self.selectlabel, False, False, 2) - vbox.pack_start(hbox, False, False, 2) - vbox.pack_start(scroller, True, True, 2) - - diff_frame.add(vbox) + #vbox = gtk.VBox() + #self.selectlabel = gtk.Label() + #hbox = gtk.HBox() + #hbox.pack_start(self.selectlabel, False, False, 2) + #vbox.pack_start(hbox, False, False, 2) + #vbox.pack_start(scroller, True, True, 2) + #diff_frame.add(vbox) + diff_frame.add(scroller)     if self.diffbottom:   self._diffpane = gtk.VPaned() @@ -501,6 +504,12 @@
  self._diffpane_moved(self._diffpane)   return False   + def auto_check(self): + if self.opts.get('rev'): + for entry in self.filemodel: + entry[FM_CHECKED] = True + self._update_check_count() +   ### End of overrides ###     def _do_reload_status(self): @@ -531,9 +540,6 @@
  (modified, added, removed, deleted, unknown, ignored, clean) = status   self.modified = modified   - if not self.opts.get('rev') and deleted and unknown: - print "Suggest to detect copies or renames" -   changetypes = (('modified', 'M', modified),   ('added', 'A', added),   ('removed', 'R', removed), @@ -617,13 +623,14 @@
  '''Update chunk toggle state to match file toggle state'''   wfile = util.pconvert(entry[FM_PATH])   if wfile not in self._filechunks: return + selected = entry[FM_CHECKED] + for n in self._filechunks[wfile][1:]: + self.diff_model[n][DM_REJECTED] = not selected + self._update_diff_hunk(self.diff_model[n])   entry[FM_PARTIAL_SELECTED] = False - self._update_partial(self.diff_model, wfile, False) - for n in self._filechunks[wfile][1:]: - self.diff_model[n][DM_REJECTED] = not entry[FM_CHECKED] - self._update_diff_model_row(self.diff_model[n]) + self._update_diff_header(self.diff_model, wfile, selected)   - def _update_diff_model_row(self, row): + def _update_diff_hunk(self, row):   if row[DM_REJECTED]:   row[DM_FONT] = self.rejfont   row[DM_DISPLAYED] = row[DM_TEXT] @@ -631,6 +638,17 @@
  row[DM_FONT] = self.difffont   row[DM_DISPLAYED] = row[DM_MARKUP]   + def _update_diff_header(self, dmodel, wfile, selected): + hc = self._filechunks[wfile][0] + row = dmodel[hc] + displayed = row[DM_DISPLAYED] + sel = lambda x: not dmodel[hc+x+1][DM_REJECTED] + newtext = self._shelve_chunks[row[DM_CHUNK_ID]].selpretty(sel) + row[DM_DISPLAYED] = newtext + if selected: + row[DM_FONT] = self.headerfont + else: + row[DM_FONT] = self.rejfont     def _show_toggle(self, check, toggletype):   self.opts[toggletype] = check.get_active() @@ -797,7 +815,7 @@
  line = diffexpand(line)   buf.insert(bufiter, line)   - self.merge_diff_text.set_buffer(buffer) + self.merge_diff_text.set_buffer(buf)     if self.showdiff_toggle.get_active():   sel = self.filetree.get_selection().get_selected_rows()[1] @@ -842,12 +860,12 @@
  if row[DM_IS_HEADER]:   for n in fchunks:   dmodel[n][DM_REJECTED] = fr[FM_CHECKED] - self._update_diff_model_row(dmodel[n]) + self._update_diff_hunk(dmodel[n])   newvalue = not fr[FM_CHECKED]   partial = False   else:   row[DM_REJECTED] = not row[DM_REJECTED] - self._update_diff_model_row(row) + self._update_diff_hunk(row)   rej = [ n for n in fchunks if dmodel[n][DM_REJECTED] ]   nonrej = [ n for n in fchunks if not dmodel[n][DM_REJECTED] ]   newvalue = nonrej and True or False @@ -856,20 +874,10 @@
  # Update file's check status   if fr[FM_PARTIAL_SELECTED] != partial:   fr[FM_PARTIAL_SELECTED] = partial - self._update_partial(dmodel, wfile, partial)   if fr[FM_CHECKED] != newvalue:   fr[FM_CHECKED] = newvalue   self._update_check_count() - - def _update_partial(self, dmodel, wfile, partial): - hc = self._filechunks[wfile][0] - row = dmodel[hc] - displayed = row[DM_DISPLAYED] - tag = ' ** Partial **' - if partial and not displayed.endswith(tag): - row[DM_DISPLAYED] = displayed + tag - elif not partial and displayed.endswith(tag): - row[DM_DISPLAYED] = displayed[0:-len(tag)] + self._update_diff_header(dmodel, wfile, newvalue)     def _show_diff_hunks(self, files):   ''' Update the diff text ''' @@ -919,19 +927,19 @@
  self._filechunks = {}   skip = False   for n, chunk in enumerate(self._shelve_chunks): - fp = cStringIO.StringIO() - chunk.pretty(fp) - markedup = markup(fp) - text = unmarkup(fp) - isheader = isinstance(chunk, hgshelve.header) - if isheader: + if isinstance(chunk, hgshelve.header): + text = chunk.selpretty(lambda x: True)   for f in chunk.files():   self._filechunks[f] = [len(self.diff_model)] - row = [False, markedup, text, markedup, + row = [False, text, text, text,   True, n, self.headerfont]   self.diff_model.append(row)   skip = chunk.special()   elif not skip: + fp = cStringIO.StringIO() + chunk.pretty(fp) + markedup = markup(fp) + text = unmarkup(fp)   f = chunk.filename()   self._filechunks[f].append(len(self.diff_model))   row = [False, markedup, text, markedup, @@ -993,6 +1001,33 @@
  self.reload_status()   return True   + def _save_clicked(self, toolbutton, data=None): + '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", + InitialDir=self.repo.root, + FileName=filename) + result = fd.run() + if not result: + return + + cids = [] + dmodel = self.diff_model + for row in self.filemodel: + if row[FM_CHECKED]: + 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]] + try: + fp = open(result, "w") + for cid in cids: + self._shelve_chunks[cid].write(fp) + except OSError: + pass + finally: + fp.close()     def _revert_clicked(self, toolbutton, data=None):   revert_list = self._relevant_files('MAR!')
 
85
86
87
88
89
 
 
90
91
92
 
211
212
213
214
 
215
216
217
 
85
86
87
 
 
88
89
90
91
92
 
211
212
213
 
214
215
216
217
@@ -85,8 +85,8 @@
  self._vpaned.set_position(self._setting_vpos)   self._activate_shelve_buttons(True)   - self.selectlabel.set_text( - _('toggle change hunks to leave them in your working directory')) + #self.selectlabel.set_text( + # _('toggle change hunks to leave them in your working directory'))   return self._vpaned     @@ -211,7 +211,7 @@
  cmdoptions = {   'user':'', 'date':'',   'modified':True, 'added':True, 'removed':True, 'deleted':True, - 'unknown':True, 'ignored':False, + 'unknown':False, 'ignored':False,   'exclude':[], 'include':[],   'check': True, 'git':False, 'logfile':'', 'addremove':False,   }
 
349
350
351
352
353
 
354
355
356
 
349
350
351
 
 
352
353
354
355
@@ -349,8 +349,7 @@
  open_dialog('rename', cmdopts, cwd=cwd, filelist=[src])     def _guess_rename(self, parent_window): - root = self._folder - open_dialog('rename --detect', None, root) + self._run_dialog('rename --detect')     def _status(self, parent_window):   self._run_dialog('status')
 
166
167
168
169
170
 
 
171
172
173
 
175
176
177
178
179
 
 
180
181
182
 
191
192
193
194
 
195
196
197
 
166
167
168
 
 
169
170
171
172
173
 
175
176
177
 
 
178
179
180
181
182
 
191
192
193
 
194
195
196
197
@@ -166,8 +166,8 @@
    for f in files:   if f.endswith('.hgignore'): - menu.append(TortoiseMenu(_("Modify ignore filter"), - _("Modify repository ignore filter"), + menu.append(TortoiseMenu(_("Edit Ignore Filter"), + _("Edit repository ignore filter"),   self.handlers._hgignore, icon="general.ico")) # needs ico   break   @@ -175,8 +175,8 @@
  _("Repository status"),   self.handlers._status, icon="menushowchanged.ico"))   - menu.append(TortoiseMenu(_("(Un)Shelve Changes"), - _("Shelve repository changes"), + menu.append(TortoiseMenu(_("Shelve Changes"), + _("Shelve or unshelve repository changes"),   self.handlers._shelve, icon="general.ico")) # needs ico     # Visual Diff (any extdiff command) @@ -191,7 +191,7 @@
  _("Detect renames and copies"),   self.handlers._guess_rename, icon="general.ico")) # needs ico   elif len(files) == 1: - menu.append(TortoiseMenu(_("Rename file"), + menu.append(TortoiseMenu(_("Rename File"),   _("Rename file or directory"),   self.handlers._rename, icon="general.ico")) # needs ico