Kiln » TortoiseHg » TortoiseHg
Clone URL:  
Pushed to one repository · View In Graph Contained in 0.3rc1, 0.3, and 0.4rc1

cmenu: add 'Annotate File' menu

Changeset fa59112eb06a

Parent c047c9169e70

by TK Soh

Changes to 3 files · Browse files at fa59112eb06a Showing diff from parent c047c9169e70 Diff from another changeset...

Change 1 of 1 Show Changes Only hgproc.py Stacked
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
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
128
129
130
131
132
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
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
128
129
130
131
132
 #  # front-end for TortoiseHg dialogs  #  # Copyright (C) 2007 TK Soh <teekaysoh@gmail.com>  #    import os  import sys  from mercurial import ui  from tortoise.thgutil import find_path, get_prog_root, shellquote    # always use hg exe installed with TortoiseHg  thgdir = get_prog_root()  try:   os.environ['PATH'] = os.path.pathsep.join([thgdir, os.environ['PATH']])  except KeyError:   os.environ['PATH'] = thgdir    if not sys.stdin.isatty():   try:   import win32traceutil     # FIXME: quick workaround traceback caused by missing "closed"   # attribute in win32trace.   from mercurial import ui   def write_err(self, *args):   for a in args:   sys.stderr.write(str(a))   ui.ui.write_err = write_err   except ImportError:   pass   except pywintypes.error:   pass    # Map hgproc commands to dialog modules in hggtk/  from hggtk import commit, status, addremove, tagadd, tags, history, merge  from hggtk import diff, revisions, update, serve, clone, synch, hgcmd, about  from hggtk import recovery, thgconfig, datamine  _dialogs = { 'commit' : commit, 'status' : status, 'revert' : status,   'add' : addremove, 'remove' : addremove, 'tag' : tagadd,   'tags' : tags, 'log' : history, 'history': history,   'diff' : diff, 'merge' : merge, 'tip' : revisions,   'parents': revisions, 'heads' : revisions, 'update' : update,   'clone' : clone, 'serve' : serve, 'synch' : synch,   'about' : about, 'config' : thgconfig, 'recovery': recovery, - 'grep' : datamine} + 'datamine': datamine }    def get_list_from_file(filename):   fd = open(filename, "r")   lines = [ x.replace("\n", "") for x in fd.readlines() ]   fd.close()   return lines    def get_option(args):   import getopt   long_opt_list = ('command=', 'exepath=', 'listfile=', 'root=', 'cwd=',   'deletelistfile', 'nogui')   opts, args = getopt.getopt(args, "c:e:l:dR:", long_opt_list)   # Set default options   options = {}   options['hgcmd'] = 'help'   options['cwd'] = os.getcwd()   options['files'] = []   options['gui'] = True   listfile = None   delfile = False     for o, a in opts:   if o in ("-c", "--command"):   options['hgcmd'] = a   elif o in ("-l", "--listfile"):   listfile = a   elif o in ("-d", "--deletelistfile"):   delfile = True   elif o in ("--nogui"):   options['gui'] = False   elif o in ("-R", "--root"):   options['root'] = a   elif o in ("--cwd"):   options['cwd'] = a     if listfile:   options['files'] = get_list_from_file(listfile)   if delfile:   os.unlink(listfile)     return (options, args)    def parse(args):   option, args = get_option(args)     cmdline = ['hg', option['hgcmd']]   if 'root' in option:   cmdline.append('--repository')   cmdline.append(option['root'])   cmdline.extend(args)   cmdline.extend(option['files'])   option['cmdline'] = cmdline     # Failsafe choice for merge tool   if os.environ.get('HGMERGE', None):   pass   elif ui.ui().config('ui', 'merge', None):   pass   else:   path = find_path('simplemerge') or 'simplemerge'   os.environ['HGMERGE'] = '%s -L my -L other' % shellquote(path)   print "override HGMERGE =", os.environ['HGMERGE']     global _dialogs   dialog = _dialogs.get(option['hgcmd'], hgcmd)   dialog.run(**option)      def run_trapped(args):   try:   dlg = parse(sys.argv[1:])   except:   import traceback   from hggtk.dialog import error_dialog   tr = traceback.format_exc()   print tr   error_dialog("Error executing hgproc", tr)    if __name__=='__main__':   #dlg = parse(['-c', 'help', '--', '-v'])   #dlg = parse(['-c', 'log', '--root', 'c:\hg\h1', '--', '-l1'])   #dlg = parse(['-c', 'status', '--root', 'c:\hg\h1', ])   #dlg = parse(['-c', 'add', '--root', 'c:\hg\h1', '--listfile', 'c:\\hg\\h1\\f1', '--notify'])   #dlg = parse(['-c', 'rollback', '--root', 'c:\\hg\\h1'])   print "hgproc sys.argv =", sys.argv   dlg = run_trapped(sys.argv[1:])
Added image
 
312
313
314
 
 
 
315
316
317
 
577
578
579
580
 
 
 
 
 
 
 
581
582
583
 
312
313
314
315
316
317
318
319
320
 
580
581
582
 
583
584
585
586
587
588
589
590
591
592
@@ -312,6 +312,9 @@
  result.append(TortoiseMenu(_("Undo Changes"),   _("Revert selected files"),   self._revert, icon="menurevert.ico")) + result.append(TortoiseMenu(_("Annotate File"), + _("show changeset information per file line"), + self._annotate, icon="menublame.ico"))     result.append(TortoiseMenuSep())   result.append(TortoiseMenu(_("Checkout Revision"), @@ -577,7 +580,13 @@
  self._run_dialog('update', noargs=True)     def _grep(self, parent_window): - self._run_dialog('grep') + # open datamine dialog with no file brings up a search tab + self._run_dialog('datamine', noargs=True) + + def _annotate(self, parent_window): + # open datamine dialog with files brings up the annotate + # tabs for each file + self._run_dialog('datamine')     def _run_dialog(self, hgcmd, noargs=False, verbose=True, modal=False):   if self._folder: