10d24de9dSSimon Glass# Copyright (c) 2011 The Chromium OS Authors. 20d24de9dSSimon Glass# 30d24de9dSSimon Glass# See file CREDITS for list of people who contributed to this 40d24de9dSSimon Glass# project. 50d24de9dSSimon Glass# 60d24de9dSSimon Glass# This program is free software; you can redistribute it and/or 70d24de9dSSimon Glass# modify it under the terms of the GNU General Public License as 80d24de9dSSimon Glass# published by the Free Software Foundation; either version 2 of 90d24de9dSSimon Glass# the License, or (at your option) any later version. 100d24de9dSSimon Glass# 110d24de9dSSimon Glass# This program is distributed in the hope that it will be useful, 120d24de9dSSimon Glass# but WITHOUT ANY WARRANTY; without even the implied warranty of 130d24de9dSSimon Glass# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 140d24de9dSSimon Glass# GNU General Public License for more details. 150d24de9dSSimon Glass# 160d24de9dSSimon Glass# You should have received a copy of the GNU General Public License 170d24de9dSSimon Glass# along with this program; if not, write to the Free Software 180d24de9dSSimon Glass# Foundation, Inc., 59 Temple Place, Suite 330, Boston, 190d24de9dSSimon Glass# MA 02111-1307 USA 200d24de9dSSimon Glass# 210d24de9dSSimon Glass 220d24de9dSSimon Glassimport ConfigParser 230d24de9dSSimon Glassimport os 240d24de9dSSimon Glassimport re 250d24de9dSSimon Glass 260d24de9dSSimon Glassimport command 27*87d65558SVikram Narayananimport gitutil 280d24de9dSSimon Glass 290d24de9dSSimon Glassdef ReadGitAliases(fname): 300d24de9dSSimon Glass """Read a git alias file. This is in the form used by git: 310d24de9dSSimon Glass 320d24de9dSSimon Glass alias uboot u-boot@lists.denx.de 330d24de9dSSimon Glass alias wd Wolfgang Denk <wd@denx.de> 340d24de9dSSimon Glass 350d24de9dSSimon Glass Args: 360d24de9dSSimon Glass fname: Filename to read 370d24de9dSSimon Glass """ 380d24de9dSSimon Glass try: 390d24de9dSSimon Glass fd = open(fname, 'r') 400d24de9dSSimon Glass except IOError: 410d24de9dSSimon Glass print "Warning: Cannot find alias file '%s'" % fname 420d24de9dSSimon Glass return 430d24de9dSSimon Glass 440d24de9dSSimon Glass re_line = re.compile('alias\s+(\S+)\s+(.*)') 450d24de9dSSimon Glass for line in fd.readlines(): 460d24de9dSSimon Glass line = line.strip() 470d24de9dSSimon Glass if not line or line[0] == '#': 480d24de9dSSimon Glass continue 490d24de9dSSimon Glass 500d24de9dSSimon Glass m = re_line.match(line) 510d24de9dSSimon Glass if not m: 520d24de9dSSimon Glass print "Warning: Alias file line '%s' not understood" % line 530d24de9dSSimon Glass continue 540d24de9dSSimon Glass 550d24de9dSSimon Glass list = alias.get(m.group(1), []) 560d24de9dSSimon Glass for item in m.group(2).split(','): 570d24de9dSSimon Glass item = item.strip() 580d24de9dSSimon Glass if item: 590d24de9dSSimon Glass list.append(item) 600d24de9dSSimon Glass alias[m.group(1)] = list 610d24de9dSSimon Glass 620d24de9dSSimon Glass fd.close() 630d24de9dSSimon Glass 64*87d65558SVikram Narayanandef CreatePatmanConfigFile(config_fname): 65*87d65558SVikram Narayanan """Creates a config file under $(HOME)/.patman if it can't find one. 66*87d65558SVikram Narayanan 67*87d65558SVikram Narayanan Args: 68*87d65558SVikram Narayanan config_fname: Default config filename i.e., $(HOME)/.patman 69*87d65558SVikram Narayanan 70*87d65558SVikram Narayanan Returns: 71*87d65558SVikram Narayanan None 72*87d65558SVikram Narayanan """ 73*87d65558SVikram Narayanan name = gitutil.GetDefaultUserName() 74*87d65558SVikram Narayanan if name == None: 75*87d65558SVikram Narayanan name = raw_input("Enter name: ") 76*87d65558SVikram Narayanan 77*87d65558SVikram Narayanan email = gitutil.GetDefaultUserEmail() 78*87d65558SVikram Narayanan 79*87d65558SVikram Narayanan if email == None: 80*87d65558SVikram Narayanan email = raw_input("Enter email: ") 81*87d65558SVikram Narayanan 82*87d65558SVikram Narayanan try: 83*87d65558SVikram Narayanan f = open(config_fname, 'w') 84*87d65558SVikram Narayanan except IOError: 85*87d65558SVikram Narayanan print "Couldn't create patman config file\n" 86*87d65558SVikram Narayanan raise 87*87d65558SVikram Narayanan 88*87d65558SVikram Narayanan print >>f, "[alias]\nme: %s <%s>" % (name, email) 89*87d65558SVikram Narayanan f.close(); 90*87d65558SVikram Narayanan 910d24de9dSSimon Glassdef Setup(config_fname=''): 920d24de9dSSimon Glass """Set up the settings module by reading config files. 930d24de9dSSimon Glass 940d24de9dSSimon Glass Args: 950d24de9dSSimon Glass config_fname: Config filename to read ('' for default) 960d24de9dSSimon Glass """ 970d24de9dSSimon Glass settings = ConfigParser.SafeConfigParser() 980d24de9dSSimon Glass if config_fname == '': 992b36c75dSVikram Narayanan config_fname = '%s/.patman' % os.getenv('HOME') 100*87d65558SVikram Narayanan 101*87d65558SVikram Narayanan if not os.path.exists(config_fname): 102*87d65558SVikram Narayanan print "No config file found ~/.patman\nCreating one...\n" 103*87d65558SVikram Narayanan CreatePatmanConfigFile(config_fname) 104*87d65558SVikram Narayanan 1050d24de9dSSimon Glass settings.read(config_fname) 1060d24de9dSSimon Glass 1070d24de9dSSimon Glass for name, value in settings.items('alias'): 1080d24de9dSSimon Glass alias[name] = value.split(',') 1090d24de9dSSimon Glass 1100d24de9dSSimon Glass 1110d24de9dSSimon Glass# These are the aliases we understand, indexed by alias. Each member is a list. 1120d24de9dSSimon Glassalias = {} 113