annotate python/hgrc.py @ 912:5d9c08d2a090 default tip

nvm
author Jeff Hammel <k0scist@gmail.com>
date Wed, 01 May 2024 14:39:53 -0700
parents 30006a5583fa
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
890
6da7d26e257b python3
Jeff Hammel <k0scist@gmail.com>
parents: 832
diff changeset
1 #!/usr/bin/env python
348
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
2
350
52e718567731 minor improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 348
diff changeset
3 """
52e718567731 minor improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 348
diff changeset
4 Script for modifying hgrc files.
348
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
5
433
6797477f6a8f adding conky
Jeff Hammel <jhammel@mozilla.com>
parents: 353
diff changeset
6 If no arguments specified, the repository given by `hg root` is used.
505
ab405b339112 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 490
diff changeset
7
568
bb6e21338c5c hgrc notes
Jeff Hammel <k0scist@gmail.com>
parents: 506
diff changeset
8 If http(s):// arguments are given, create hgrc file from such a thing
350
52e718567731 minor improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 348
diff changeset
9 """
433
6797477f6a8f adding conky
Jeff Hammel <jhammel@mozilla.com>
parents: 353
diff changeset
10
568
bb6e21338c5c hgrc notes
Jeff Hammel <k0scist@gmail.com>
parents: 506
diff changeset
11 ## TODO:
bb6e21338c5c hgrc notes
Jeff Hammel <k0scist@gmail.com>
parents: 506
diff changeset
12 # - functionality to populate [web]-> description in hgrc file from
bb6e21338c5c hgrc notes
Jeff Hammel <k0scist@gmail.com>
parents: 506
diff changeset
13 # setup.py, e.g.
bb6e21338c5c hgrc notes
Jeff Hammel <k0scist@gmail.com>
parents: 506
diff changeset
14 # http://stackoverflow.com/questions/1541778/mercurial-how-do-i-populate-repository-descriptions-for-hgwebdir-cgi
bb6e21338c5c hgrc notes
Jeff Hammel <k0scist@gmail.com>
parents: 506
diff changeset
15 # Could also loop over a directory; e.g.
bb6e21338c5c hgrc notes
Jeff Hammel <k0scist@gmail.com>
parents: 506
diff changeset
16 # `hgrc --setup-web . # loop over all .hg repos in this directory`
bb6e21338c5c hgrc notes
Jeff Hammel <k0scist@gmail.com>
parents: 506
diff changeset
17
351
971e7deca495 got --print working, maybe
Jeff Hammel <jhammel@mozilla.com>
parents: 350
diff changeset
18 # imports
348
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
19 import optparse
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
20 import os
433
6797477f6a8f adding conky
Jeff Hammel <jhammel@mozilla.com>
parents: 353
diff changeset
21 import subprocess
348
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
22 import sys
484
50379f607e03 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 483
diff changeset
23 from collections import OrderedDict
831
d1c147c73f34 bytes vs string
Jeff Hammel <k0scist@gmail.com>
parents: 830
diff changeset
24
348
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
25
828
Jeff Hammel <k0scist@gmail.com>
parents: 827
diff changeset
26 try:
Jeff Hammel <k0scist@gmail.com>
parents: 827
diff changeset
27 # python 2
Jeff Hammel <k0scist@gmail.com>
parents: 827
diff changeset
28 import urlparse
829
Jeff Hammel <k0scist@gmail.com>
parents: 828
diff changeset
29 from ConfigParser import RawConfigParser as ConfigParser
831
d1c147c73f34 bytes vs string
Jeff Hammel <k0scist@gmail.com>
parents: 830
diff changeset
30 from StringIO import StringIO
828
Jeff Hammel <k0scist@gmail.com>
parents: 827
diff changeset
31 except ImportError:
829
Jeff Hammel <k0scist@gmail.com>
parents: 828
diff changeset
32 # python 3
828
Jeff Hammel <k0scist@gmail.com>
parents: 827
diff changeset
33 import urllib.parse as urlparse
829
Jeff Hammel <k0scist@gmail.com>
parents: 828
diff changeset
34 from configparser import RawConfigParser as ConfigParser
831
d1c147c73f34 bytes vs string
Jeff Hammel <k0scist@gmail.com>
parents: 830
diff changeset
35 from io import StringIO
828
Jeff Hammel <k0scist@gmail.com>
parents: 827
diff changeset
36
484
50379f607e03 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 483
diff changeset
37 ### global methods
50379f607e03 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 483
diff changeset
38
506
Jeff Hammel <jhammel@mozilla.com>
parents: 505
diff changeset
39 def isHTTP(path):
Jeff Hammel <jhammel@mozilla.com>
parents: 505
diff changeset
40 """is path an {http,https}:// URL?"""
Jeff Hammel <jhammel@mozilla.com>
parents: 505
diff changeset
41 return urlparse.urlsplit(path)[0] in ('http', 'https')
Jeff Hammel <jhammel@mozilla.com>
parents: 505
diff changeset
42
904
30006a5583fa fix hgrc.py for python3
Jeff Hammel <k0scist@gmail.com>
parents: 890
diff changeset
43
480
529fd4e1087e python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 479
diff changeset
44 class section(object):
482
6c0aac8799da python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 481
diff changeset
45 def __init__(self, section_name, *section_names):
480
529fd4e1087e python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 479
diff changeset
46 self.sections = [section_name]
529fd4e1087e python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 479
diff changeset
47 self.sections.extend(section_names)
486
c9aab7092af1 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 485
diff changeset
48 def __call__(self, function):
482
6c0aac8799da python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 481
diff changeset
49 def wrapped(parser, *args, **kwargs):
6c0aac8799da python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 481
diff changeset
50 for section in self.sections:
6c0aac8799da python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 481
diff changeset
51 if section not in parser.sections():
6c0aac8799da python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 481
diff changeset
52 parser.add_section(section)
486
c9aab7092af1 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 485
diff changeset
53 function(parser, *args, **kwargs)
482
6c0aac8799da python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 481
diff changeset
54 return wrapped
480
529fd4e1087e python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 479
diff changeset
55
506
Jeff Hammel <jhammel@mozilla.com>
parents: 505
diff changeset
56
480
529fd4e1087e python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 479
diff changeset
57 @section('paths')
479
0a9e1e0d077c python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 478
diff changeset
58 def set_default(parser, default):
0a9e1e0d077c python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 478
diff changeset
59 """set [paths]:default"""
488
5f288c70acb6 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 487
diff changeset
60 parser.set('paths', 'default', default)
487
178419da6e0b python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 486
diff changeset
61
904
30006a5583fa fix hgrc.py for python3
Jeff Hammel <k0scist@gmail.com>
parents: 890
diff changeset
62
482
6c0aac8799da python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 481
diff changeset
63 @section('paths')
467
980584d34134 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 466
diff changeset
64 def set_default_push(parser, default_push):
980584d34134 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 466
diff changeset
65 """
478
df60292c29b2 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 477
diff changeset
66 set [paths]:default-push to `default_push`
467
980584d34134 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 466
diff changeset
67 """
478
df60292c29b2 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 477
diff changeset
68 parser.set('paths', 'default-push', default_push)
df60292c29b2 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 477
diff changeset
69
904
30006a5583fa fix hgrc.py for python3
Jeff Hammel <k0scist@gmail.com>
parents: 890
diff changeset
70
468
4853551536d6 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 467
diff changeset
71 def set_default_push_to_ssh(parser):
4853551536d6 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 467
diff changeset
72 """
478
df60292c29b2 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 477
diff changeset
73 set `[paths]:default-push` to that given by `[paths]:default` but
474
3326aea03a3b python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 473
diff changeset
74 turn the protocol to 'ssh'
477
6274107e477e python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 476
diff changeset
75 If `[paths]:default` is not there, do nothing.
6274107e477e python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 476
diff changeset
76 Returns True if written, otherwise False
468
4853551536d6 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 467
diff changeset
77 """
467
980584d34134 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 466
diff changeset
78
477
6274107e477e python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 476
diff changeset
79 # get [paths]:default value
6274107e477e python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 476
diff changeset
80 if 'paths' not in parser.sections():
6274107e477e python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 476
diff changeset
81 return False
6274107e477e python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 476
diff changeset
82 if not parser.has_option('paths', 'default'):
6274107e477e python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 476
diff changeset
83 return False
6274107e477e python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 476
diff changeset
84 default = parser.get('paths', 'default')
475
efd50220556e python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 474
diff changeset
85
477
6274107e477e python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 476
diff changeset
86 # parse URL
6274107e477e python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 476
diff changeset
87 scheme, netloc, path, query, anchor = urlparse.urlsplit(default)
6274107e477e python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 476
diff changeset
88 ssh_url = urlparse.urlunsplit(('ssh', netloc, path, query, anchor))
6274107e477e python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 476
diff changeset
89
478
df60292c29b2 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 477
diff changeset
90 # set
df60292c29b2 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 477
diff changeset
91 set_default_push(parser, ssh_url)
df60292c29b2 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 477
diff changeset
92 return True # XXX could instead be url to set to or old value
df60292c29b2 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 477
diff changeset
93
473
da087c5724d4 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 472
diff changeset
94
348
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
95 def main(args=sys.argv[1:]):
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
96
433
6797477f6a8f adding conky
Jeff Hammel <jhammel@mozilla.com>
parents: 353
diff changeset
97 # parse command line arguments
348
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
98 usage = '%prog [options] repository <repository> <...>'
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
99 parser = optparse.OptionParser(usage=usage, description=__doc__)
433
6797477f6a8f adding conky
Jeff Hammel <jhammel@mozilla.com>
parents: 353
diff changeset
100 parser.add_option('-l', '--list', dest='list_hgrc',
350
52e718567731 minor improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 348
diff changeset
101 action='store_true', default=False,
433
6797477f6a8f adding conky
Jeff Hammel <jhammel@mozilla.com>
parents: 353
diff changeset
102 help="list full path to hgrc files")
348
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
103 parser.add_option('--ssh', dest='default_push_ssh',
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
104 action='store_true', default=False,
350
52e718567731 minor improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 348
diff changeset
105 help="use `default` entries for `default-push`")
353
ee8ab3de9c7f f-ing print
Jeff Hammel <jhammel@mozilla.com>
parents: 352
diff changeset
106 parser.add_option('--push', '--default-push', dest='default_push',
ee8ab3de9c7f f-ing print
Jeff Hammel <jhammel@mozilla.com>
parents: 352
diff changeset
107 help="set [paths] default-push location")
484
50379f607e03 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 483
diff changeset
108 parser.add_option('-d', '--default', dest='default',
479
0a9e1e0d077c python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 478
diff changeset
109 help="set [paths] default entry")
478
df60292c29b2 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 477
diff changeset
110 parser.add_option('-p', '--print', dest='print_ini',
df60292c29b2 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 477
diff changeset
111 action='store_true', default=False,
df60292c29b2 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 477
diff changeset
112 help="print .ini contents")
489
9b95f12fef36 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 488
diff changeset
113 parser.add_option('--dry-run', dest='dry_run',
9b95f12fef36 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 488
diff changeset
114 action='store_true', default=False,
9b95f12fef36 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 488
diff changeset
115 help="don't write to disk")
437
2588ca4ae849 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 435
diff changeset
116 options, args = parser.parse_args(args)
433
6797477f6a8f adding conky
Jeff Hammel <jhammel@mozilla.com>
parents: 353
diff changeset
117
467
980584d34134 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 466
diff changeset
118 # sanitization
980584d34134 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 466
diff changeset
119 if options.default_push and options.default_push_ssh:
980584d34134 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 466
diff changeset
120 parser.error("Cannot set --push and --ssh")
980584d34134 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 466
diff changeset
121
433
6797477f6a8f adding conky
Jeff Hammel <jhammel@mozilla.com>
parents: 353
diff changeset
122 # if not specified, use repo from `hg root`
348
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
123 if not args:
831
d1c147c73f34 bytes vs string
Jeff Hammel <k0scist@gmail.com>
parents: 830
diff changeset
124 args = [subprocess.check_output(['hg', 'root']).strip().decode('utf-8')]
433
6797477f6a8f adding conky
Jeff Hammel <jhammel@mozilla.com>
parents: 353
diff changeset
125
6797477f6a8f adding conky
Jeff Hammel <jhammel@mozilla.com>
parents: 353
diff changeset
126 # if not specified, set a default action
6797477f6a8f adding conky
Jeff Hammel <jhammel@mozilla.com>
parents: 353
diff changeset
127 default_action = 'default_push_ssh'
481
65e38d33acae python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 480
diff changeset
128 available_actions = ('default',
65e38d33acae python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 480
diff changeset
129 'default_push',
65e38d33acae python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 480
diff changeset
130 'default_push_ssh',
484
50379f607e03 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 483
diff changeset
131 'print_ini',
481
65e38d33acae python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 480
diff changeset
132 'list_hgrc',
465
ae2db9e613f1 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 437
diff changeset
133 )
481
65e38d33acae python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 480
diff changeset
134 actions = [(name, getattr(options, name))
65e38d33acae python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 480
diff changeset
135 for name in available_actions
485
e192c235d5d6 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 484
diff changeset
136 if getattr(options, name)]
465
ae2db9e613f1 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 437
diff changeset
137 if not actions:
490
67404c3a4d75 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 489
diff changeset
138 # add a default action for our convenience
481
65e38d33acae python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 480
diff changeset
139 actions = [('default_push_ssh', True)]
484
50379f607e03 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 483
diff changeset
140 actions = OrderedDict(actions)
490
67404c3a4d75 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 489
diff changeset
141 if not actions:
67404c3a4d75 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 489
diff changeset
142 parser.error("Please specify an action")
348
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
143
506
Jeff Hammel <jhammel@mozilla.com>
parents: 505
diff changeset
144 # find all hgrc files and URLs
348
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
145 hgrc = []
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
146 missing = []
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
147 not_hg = []
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
148 not_a_directory = []
506
Jeff Hammel <jhammel@mozilla.com>
parents: 505
diff changeset
149 urls = []
350
52e718567731 minor improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 348
diff changeset
150 errors = {'Missing path': missing,
52e718567731 minor improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 348
diff changeset
151 'Not a mercurial directory': not_hg,
52e718567731 minor improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 348
diff changeset
152 'Not a directory': not_a_directory,
52e718567731 minor improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 348
diff changeset
153 }
348
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
154 for path in args:
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
155 if not os.path.exists(path):
506
Jeff Hammel <jhammel@mozilla.com>
parents: 505
diff changeset
156 if isHTTP(path):
Jeff Hammel <jhammel@mozilla.com>
parents: 505
diff changeset
157 hgrc.append(path)
Jeff Hammel <jhammel@mozilla.com>
parents: 505
diff changeset
158 urls.append(path)
Jeff Hammel <jhammel@mozilla.com>
parents: 505
diff changeset
159 continue
348
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
160 missing.append(path)
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
161 path = os.path.abspath(os.path.normpath(path))
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
162 if os.path.isdir(path):
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
163 basename = os.path.basename(path)
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
164 subhgdir = os.path.join(path, '.hg') # hypothetical .hg subdirectory
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
165 if basename == '.hg':
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
166 hgrcpath = os.path.join(path, 'hgrc')
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
167 elif os.path.exists(subhgdir):
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
168 if not os.path.isdir(subhgdir):
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
169 not_a_directory.append(subhgdir)
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
170 continue
437
2588ca4ae849 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 435
diff changeset
171 hgrcpath = os.path.join(subhgdir, 'hgrc')
348
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
172 else:
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
173 not_hg.append(path)
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
174 continue
437
2588ca4ae849 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 435
diff changeset
175 hgrc.append(hgrcpath)
350
52e718567731 minor improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 348
diff changeset
176 else:
52e718567731 minor improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 348
diff changeset
177 assert os.path.isfile(path), "%s is not a file, exiting" % path
437
2588ca4ae849 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 435
diff changeset
178 hgrc.append(path)
348
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
179
353
ee8ab3de9c7f f-ing print
Jeff Hammel <jhammel@mozilla.com>
parents: 352
diff changeset
180 # raise errors if encountered
904
30006a5583fa fix hgrc.py for python3
Jeff Hammel <k0scist@gmail.com>
parents: 890
diff changeset
181 _errors = list(filter(None, errors.values()))
30006a5583fa fix hgrc.py for python3
Jeff Hammel <k0scist@gmail.com>
parents: 890
diff changeset
182 if _errors:
30006a5583fa fix hgrc.py for python3
Jeff Hammel <k0scist@gmail.com>
parents: 890
diff changeset
183 print('errors encountered: {}'.format(_errors))
353
ee8ab3de9c7f f-ing print
Jeff Hammel <jhammel@mozilla.com>
parents: 352
diff changeset
184 for key, value in errors.items():
ee8ab3de9c7f f-ing print
Jeff Hammel <jhammel@mozilla.com>
parents: 352
diff changeset
185 if value:
904
30006a5583fa fix hgrc.py for python3
Jeff Hammel <k0scist@gmail.com>
parents: 890
diff changeset
186 print('%s: %s' % (key, ', '.join(value)))
353
ee8ab3de9c7f f-ing print
Jeff Hammel <jhammel@mozilla.com>
parents: 352
diff changeset
187 parser.exit(1)
ee8ab3de9c7f f-ing print
Jeff Hammel <jhammel@mozilla.com>
parents: 352
diff changeset
188
352
eeff298cc922 more crap
Jeff Hammel <jhammel@mozilla.com>
parents: 351
diff changeset
189 # construct ConfigParser objects and
eeff298cc922 more crap
Jeff Hammel <jhammel@mozilla.com>
parents: 351
diff changeset
190 # ensure that all the files are parseable
eeff298cc922 more crap
Jeff Hammel <jhammel@mozilla.com>
parents: 351
diff changeset
191 config = {}
eeff298cc922 more crap
Jeff Hammel <jhammel@mozilla.com>
parents: 351
diff changeset
192 for path in hgrc:
353
ee8ab3de9c7f f-ing print
Jeff Hammel <jhammel@mozilla.com>
parents: 352
diff changeset
193 config[path] = ConfigParser()
904
30006a5583fa fix hgrc.py for python3
Jeff Hammel <k0scist@gmail.com>
parents: 890
diff changeset
194 if isinstance(path, str):
353
ee8ab3de9c7f f-ing print
Jeff Hammel <jhammel@mozilla.com>
parents: 352
diff changeset
195 if os.path.exists(path):
ee8ab3de9c7f f-ing print
Jeff Hammel <jhammel@mozilla.com>
parents: 352
diff changeset
196 config[path].read(path)
506
Jeff Hammel <jhammel@mozilla.com>
parents: 505
diff changeset
197 elif path in urls:
Jeff Hammel <jhammel@mozilla.com>
parents: 505
diff changeset
198 if 'default' not in actions:
Jeff Hammel <jhammel@mozilla.com>
parents: 505
diff changeset
199 set_default(config[path], path)
353
ee8ab3de9c7f f-ing print
Jeff Hammel <jhammel@mozilla.com>
parents: 352
diff changeset
200
433
6797477f6a8f adding conky
Jeff Hammel <jhammel@mozilla.com>
parents: 353
diff changeset
201 # print the chosen hgrc paths
484
50379f607e03 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 483
diff changeset
202 if 'list_hgrc' in actions:
827
a5a339b7fd82 python 3.5
Jeff Hammel <k0scist@gmail.com>
parents: 568
diff changeset
203 print ('\n'.join(hgrc))
433
6797477f6a8f adding conky
Jeff Hammel <jhammel@mozilla.com>
parents: 353
diff changeset
204
482
6c0aac8799da python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 481
diff changeset
205 # remove from actions list
484
50379f607e03 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 483
diff changeset
206 actions.pop('list_hgrc', None)
481
65e38d33acae python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 480
diff changeset
207
470
949ca4b2f2d1 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 469
diff changeset
208 # map of actions -> functions;
949ca4b2f2d1 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 469
diff changeset
209 # XXX this is pretty improv; to be improved
471
dc179368b7d0 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 470
diff changeset
210 action_map = {'default_push_ssh': set_default_push_to_ssh,
484
50379f607e03 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 483
diff changeset
211 'default_push': set_default_push,
50379f607e03 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 483
diff changeset
212 'default': set_default
471
dc179368b7d0 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 470
diff changeset
213 }
470
949ca4b2f2d1 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 469
diff changeset
214
484
50379f607e03 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 483
diff changeset
215 # cache for later (XXX)
506
Jeff Hammel <jhammel@mozilla.com>
parents: 505
diff changeset
216 print_ini = actions.pop('print_ini', bool(urls))
484
50379f607e03 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 483
diff changeset
217
465
ae2db9e613f1 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 437
diff changeset
218 # alter .hgrc files
486
c9aab7092af1 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 485
diff changeset
219 for action_name, parameter in actions.items():
468
4853551536d6 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 467
diff changeset
220
471
dc179368b7d0 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 470
diff changeset
221 # XXX crappy
473
da087c5724d4 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 472
diff changeset
222 method = action_map[action_name]
476
9d81ec713f1b python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 475
diff changeset
223 if action_name == 'default_push_ssh':
9d81ec713f1b python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 475
diff changeset
224 parameter = None
471
dc179368b7d0 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 470
diff changeset
225
dc179368b7d0 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 470
diff changeset
226 # apply to all files
470
949ca4b2f2d1 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 469
diff changeset
227 for path, ini in config.items():
481
65e38d33acae python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 480
diff changeset
228
65e38d33acae python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 480
diff changeset
229 # call method with parser
486
c9aab7092af1 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 485
diff changeset
230 if parameter is None:
c9aab7092af1 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 485
diff changeset
231 method(ini)
c9aab7092af1 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 485
diff changeset
232 else:
473
da087c5724d4 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 472
diff changeset
233 method(ini, parameter)
da087c5724d4 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 472
diff changeset
234
478
df60292c29b2 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 477
diff changeset
235 # print .hgrc files, if specified
484
50379f607e03 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 483
diff changeset
236 if print_ini:
489
9b95f12fef36 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 488
diff changeset
237 values = []
484
50379f607e03 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 483
diff changeset
238 for path, ini in config.items():
489
9b95f12fef36 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 488
diff changeset
239 _buffer = StringIO()
9b95f12fef36 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 488
diff changeset
240 ini.write(_buffer)
506
Jeff Hammel <jhammel@mozilla.com>
parents: 505
diff changeset
241 value = _buffer.getvalue().strip()
Jeff Hammel <jhammel@mozilla.com>
parents: 505
diff changeset
242 if len(config) == 1:
Jeff Hammel <jhammel@mozilla.com>
parents: 505
diff changeset
243 values = [value]
Jeff Hammel <jhammel@mozilla.com>
parents: 505
diff changeset
244 else:
Jeff Hammel <jhammel@mozilla.com>
parents: 505
diff changeset
245 values.append('+++ %s\n%s' % (path, value))
827
a5a339b7fd82 python 3.5
Jeff Hammel <k0scist@gmail.com>
parents: 568
diff changeset
246 print ('\n'.join(values))
489
9b95f12fef36 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 488
diff changeset
247
9b95f12fef36 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 488
diff changeset
248 # write .ini files
9b95f12fef36 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 488
diff changeset
249 for path, ini in config.items():
506
Jeff Hammel <jhammel@mozilla.com>
parents: 505
diff changeset
250 if path in urls:
Jeff Hammel <jhammel@mozilla.com>
parents: 505
diff changeset
251 continue
827
a5a339b7fd82 python 3.5
Jeff Hammel <k0scist@gmail.com>
parents: 568
diff changeset
252 with open(path, 'w') as f:
489
9b95f12fef36 python/hgrc.py
Jeff Hammel <jhammel@mozilla.com>
parents: 488
diff changeset
253 ini.write(f)
348
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
254
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
255 if __name__ == '__main__':
6004e00b602d new hg file; TODO: incorporate!
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
256 main()