blob: 5208f7df6ab9198e3b770a1e9801a93b3afa6bb5 [file] [log] [blame]
Simon Glass0d24de92012-01-14 15:12:45 +00001# Copyright (c) 2011 The Chromium OS Authors.
2#
3# See file CREDITS for list of people who contributed to this
4# project.
5#
6# This program is free software; you can redistribute it and/or
7# modify it under the terms of the GNU General Public License as
8# published by the Free Software Foundation; either version 2 of
9# the License, or (at your option) any later version.
10#
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY; without even the implied warranty of
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14# GNU General Public License for more details.
15#
16# You should have received a copy of the GNU General Public License
17# along with this program; if not, write to the Free Software
18# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
19# MA 02111-1307 USA
20#
21
22import ConfigParser
23import os
24import re
25
26import command
Vikram Narayanan87d65552012-05-23 09:01:06 +000027import gitutil
Simon Glass0d24de92012-01-14 15:12:45 +000028
29def ReadGitAliases(fname):
30 """Read a git alias file. This is in the form used by git:
31
32 alias uboot u-boot@lists.denx.de
33 alias wd Wolfgang Denk <wd@denx.de>
34
35 Args:
36 fname: Filename to read
37 """
38 try:
39 fd = open(fname, 'r')
40 except IOError:
41 print "Warning: Cannot find alias file '%s'" % fname
42 return
43
44 re_line = re.compile('alias\s+(\S+)\s+(.*)')
45 for line in fd.readlines():
46 line = line.strip()
47 if not line or line[0] == '#':
48 continue
49
50 m = re_line.match(line)
51 if not m:
52 print "Warning: Alias file line '%s' not understood" % line
53 continue
54
55 list = alias.get(m.group(1), [])
56 for item in m.group(2).split(','):
57 item = item.strip()
58 if item:
59 list.append(item)
60 alias[m.group(1)] = list
61
62 fd.close()
63
Vikram Narayanan87d65552012-05-23 09:01:06 +000064def CreatePatmanConfigFile(config_fname):
65 """Creates a config file under $(HOME)/.patman if it can't find one.
66
67 Args:
68 config_fname: Default config filename i.e., $(HOME)/.patman
69
70 Returns:
71 None
72 """
73 name = gitutil.GetDefaultUserName()
74 if name == None:
75 name = raw_input("Enter name: ")
76
77 email = gitutil.GetDefaultUserEmail()
78
79 if email == None:
80 email = raw_input("Enter email: ")
81
82 try:
83 f = open(config_fname, 'w')
84 except IOError:
85 print "Couldn't create patman config file\n"
86 raise
87
88 print >>f, "[alias]\nme: %s <%s>" % (name, email)
89 f.close();
90
Doug Anderson8568bae2012-12-03 14:43:17 +000091def _UpdateDefaults(parser, config):
92 """Update the given OptionParser defaults based on config.
93
94 We'll walk through all of the settings from the parser
95 For each setting we'll look for a default in the option parser.
96 If it's found we'll update the option parser default.
97
98 The idea here is that the .patman file should be able to update
99 defaults but that command line flags should still have the final
100 say.
101
102 Args:
103 parser: An instance of an OptionParser whose defaults will be
104 updated.
105 config: An instance of SafeConfigParser that we will query
106 for settings.
107 """
108 defaults = parser.get_default_values()
109 for name, val in config.items('settings'):
110 if hasattr(defaults, name):
111 default_val = getattr(defaults, name)
112 if isinstance(default_val, bool):
113 val = config.getboolean('settings', name)
114 elif isinstance(default_val, int):
115 val = config.getint('settings', name)
116 parser.set_default(name, val)
117 else:
118 print "WARNING: Unknown setting %s" % name
119
120def Setup(parser, config_fname=''):
Simon Glass0d24de92012-01-14 15:12:45 +0000121 """Set up the settings module by reading config files.
122
123 Args:
Doug Anderson8568bae2012-12-03 14:43:17 +0000124 parser: The parser to update
Simon Glass0d24de92012-01-14 15:12:45 +0000125 config_fname: Config filename to read ('' for default)
126 """
Doug Anderson8568bae2012-12-03 14:43:17 +0000127 config = ConfigParser.SafeConfigParser()
Simon Glass0d24de92012-01-14 15:12:45 +0000128 if config_fname == '':
Vikram Narayanan2b36c752012-05-23 08:58:58 +0000129 config_fname = '%s/.patman' % os.getenv('HOME')
Vikram Narayanan87d65552012-05-23 09:01:06 +0000130
131 if not os.path.exists(config_fname):
132 print "No config file found ~/.patman\nCreating one...\n"
133 CreatePatmanConfigFile(config_fname)
134
Doug Anderson8568bae2012-12-03 14:43:17 +0000135 config.read(config_fname)
Simon Glass0d24de92012-01-14 15:12:45 +0000136
Doug Anderson8568bae2012-12-03 14:43:17 +0000137 for name, value in config.items('alias'):
Simon Glass0d24de92012-01-14 15:12:45 +0000138 alias[name] = value.split(',')
139
Doug Anderson8568bae2012-12-03 14:43:17 +0000140 _UpdateDefaults(parser, config)
Simon Glass0d24de92012-01-14 15:12:45 +0000141
142# These are the aliases we understand, indexed by alias. Each member is a list.
143alias = {}