Mercurial > hg > config
comparison python/hgrc.py @ 484:50379f607e03
python/hgrc.py
| author | Jeff Hammel <jhammel@mozilla.com> |
|---|---|
| date | Sat, 10 Aug 2013 21:05:21 -0700 |
| parents | 4bd2932d21d4 |
| children | e192c235d5d6 |
comparison
equal
deleted
inserted
replaced
| 483:4bd2932d21d4 | 484:50379f607e03 |
|---|---|
| 10 import optparse | 10 import optparse |
| 11 import os | 11 import os |
| 12 import subprocess | 12 import subprocess |
| 13 import sys | 13 import sys |
| 14 import urlparse | 14 import urlparse |
| 15 from collections import OrderedDict | |
| 15 from ConfigParser import RawConfigParser as ConfigParser | 16 from ConfigParser import RawConfigParser as ConfigParser |
| 17 | |
| 18 ### global methods | |
| 16 | 19 |
| 17 class section(object): | 20 class section(object): |
| 18 def __init__(self, section_name, *section_names): | 21 def __init__(self, section_name, *section_names): |
| 19 self.sections = [section_name] | 22 self.sections = [section_name] |
| 20 self.sections.extend(section_names) | 23 self.sections.extend(section_names) |
| 76 parser.add_option('--ssh', dest='default_push_ssh', | 79 parser.add_option('--ssh', dest='default_push_ssh', |
| 77 action='store_true', default=False, | 80 action='store_true', default=False, |
| 78 help="use `default` entries for `default-push`") | 81 help="use `default` entries for `default-push`") |
| 79 parser.add_option('--push', '--default-push', dest='default_push', | 82 parser.add_option('--push', '--default-push', dest='default_push', |
| 80 help="set [paths] default-push location") | 83 help="set [paths] default-push location") |
| 81 parser.add_option('--default', dest='default', | 84 parser.add_option('-d', '--default', dest='default', |
| 82 help="set [paths] default entry") | 85 help="set [paths] default entry") |
| 83 parser.add_option('-p', '--print', dest='print_ini', | 86 parser.add_option('-p', '--print', dest='print_ini', |
| 84 action='store_true', default=False, | 87 action='store_true', default=False, |
| 85 help="print .ini contents") | 88 help="print .ini contents") |
| 86 options, args = parser.parse_args(args) | 89 options, args = parser.parse_args(args) |
| 96 # if not specified, set a default action | 99 # if not specified, set a default action |
| 97 default_action = 'default_push_ssh' | 100 default_action = 'default_push_ssh' |
| 98 available_actions = ('default', | 101 available_actions = ('default', |
| 99 'default_push', | 102 'default_push', |
| 100 'default_push_ssh', | 103 'default_push_ssh', |
| 104 'print_ini', | |
| 101 'list_hgrc', | 105 'list_hgrc', |
| 102 ) | 106 ) |
| 103 actions = [(name, getattr(options, name)) | 107 actions = [(name, getattr(options, name)) |
| 104 for name in available_actions | 108 for name in available_actions |
| 105 if getattr(options, name)] | 109 if getattr(options, name)]) |
| 106 if not actions: | 110 if not actions: |
| 107 actions = [('default_push_ssh', True)] | 111 actions = [('default_push_ssh', True)] |
| 112 actions = OrderedDict(actions) | |
| 108 | 113 |
| 109 # find all hgrc files | 114 # find all hgrc files |
| 110 hgrc = [] | 115 hgrc = [] |
| 111 missing = [] | 116 missing = [] |
| 112 not_hg = [] | 117 not_hg = [] |
| 152 if isinstance(path, basestring): | 157 if isinstance(path, basestring): |
| 153 if os.path.exists(path): | 158 if os.path.exists(path): |
| 154 config[path].read(path) | 159 config[path].read(path) |
| 155 | 160 |
| 156 # print the chosen hgrc paths | 161 # print the chosen hgrc paths |
| 157 if options.list_hgrc: | 162 if 'list_hgrc' in actions: |
| 158 print '\n'.join(hgrc) | 163 print '\n'.join(hgrc) |
| 159 | 164 |
| 160 # remove from actions list | 165 # remove from actions list |
| 161 # TODO -> OrderedDict | 166 actions.pop('list_hgrc', None) |
| 162 # actions.pop('list_hgrc', None) | |
| 163 actions.pop() | |
| 164 | 167 |
| 165 # map of actions -> functions; | 168 # map of actions -> functions; |
| 166 # XXX this is pretty improv; to be improved | 169 # XXX this is pretty improv; to be improved |
| 167 action_map = {'default_push_ssh': set_default_push_to_ssh, | 170 action_map = {'default_push_ssh': set_default_push_to_ssh, |
| 168 'default_push': set_default_push | 171 'default_push': set_default_push, |
| 172 'default': set_default | |
| 169 } | 173 } |
| 174 | |
| 175 # cache for later (XXX) | |
| 176 print_ini = actions.pop('print_ini', None) | |
| 170 | 177 |
| 171 # alter .hgrc files | 178 # alter .hgrc files |
| 172 for action_name, parameter in actions: | 179 for action_name, parameter in actions: |
| 173 | 180 |
| 174 # XXX crappy | 181 # XXX crappy |
| 184 method(ini, parameter) | 191 method(ini, parameter) |
| 185 else: | 192 else: |
| 186 method(ini) | 193 method(ini) |
| 187 | 194 |
| 188 # print .hgrc files, if specified | 195 # print .hgrc files, if specified |
| 189 for path, ini in config.items(): | 196 if print_ini: |
| 190 print '+++ %s' % (path) | 197 for path, ini in config.items(): |
| 191 ini.write(sys.stdout) | 198 print '+++ %s' % (path) |
| 192 print | 199 ini.write(sys.stdout) |
| 200 print | |
| 193 | 201 |
| 194 if __name__ == '__main__': | 202 if __name__ == '__main__': |
| 195 main() | 203 main() |
