by
Changes to 8 files · Browse files at 944173cd38df Showing diff from parent 8a6772ddbf11 73165e662498 Diff from another changeset...
@@ -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'))
|
@@ -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):
|
@@ -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()
|
@@ -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 '):
|
|
|
@@ -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,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,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,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
|
Loading...