Commit | Line | Data |
---|---|---|
41a6d859 CM |
1 | """Handles the Stacked GIT configuration files |
2 | """ | |
3 | ||
4 | __copyright__ = """ | |
5 | Copyright (C) 2005, Catalin Marinas <catalin.marinas@gmail.com> | |
6 | ||
7 | This program is free software; you can redistribute it and/or modify | |
8 | it under the terms of the GNU General Public License version 2 as | |
9 | published by the Free Software Foundation. | |
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, MA 02111-1307 USA | |
19 | """ | |
20 | ||
21 | import os, ConfigParser | |
22 | ||
170f576b | 23 | from stgit import basedir |
41a6d859 | 24 | |
41a6d859 CM |
25 | |
26 | config = ConfigParser.RawConfigParser() | |
27 | ||
eee7283e CM |
28 | def config_setup(): |
29 | global config | |
30 | ||
31 | # Set the defaults | |
32 | config.add_section('stgit') | |
33 | config.set('stgit', 'autoresolved', 'no') | |
34 | config.set('stgit', 'smtpserver', 'localhost:25') | |
35 | config.set('stgit', 'smtpdelay', '5') | |
36 | config.set('stgit', 'pullcmd', 'git-pull') | |
37 | config.set('stgit', 'merger', | |
38 | 'diff3 -L current -L ancestor -L patched -m -E ' \ | |
39 | '"%(branch1)s" "%(ancestor)s" "%(branch2)s" > "%(output)s"') | |
40 | config.set('stgit', 'keeporig', 'yes') | |
41 | config.set('stgit', 'keepoptimized', 'no') | |
42 | config.set('stgit', 'extensions', '.ancestor .current .patched') | |
43 | ||
44 | # Read the configuration files (if any) and override the default settings | |
45 | config.read('/etc/stgitrc') | |
46 | config.read(os.path.expanduser('~/.stgitrc')) | |
47 | config.read(os.path.join(basedir.get(), 'stgitrc')) | |
48 | ||
49 | # Set the PAGER environment to the config value (if any) | |
50 | if config.has_option('stgit', 'pager'): | |
51 | os.environ['PAGER'] = config.get('stgit', 'pager') | |
52 | ||
53 | # [gitmergeonefile] section is deprecated. In case it exists copy the | |
54 | # options/values to the [stgit] one | |
55 | if config.has_section('gitmergeonefile'): | |
56 | for option, value in config.items('gitmergeonefile'): | |
57 | config.set('stgit', option, value) | |
58 | ||
59 | ||
60 | class ConfigOption: | |
61 | """Delayed cached reading of a configuration option. | |
62 | """ | |
63 | def __init__(self, section, option): | |
64 | self.__section = section | |
65 | self.__option = option | |
66 | self.__value = None | |
67 | ||
68 | def __str__(self): | |
69 | if not self.__value: | |
70 | self.__value = config.get(self.__section, self.__option) | |
71 | return self.__value | |
d7fade4b CM |
72 | |
73 | ||
74 | # cached extensions | |
75 | __extensions = None | |
76 | ||
77 | def file_extensions(): | |
78 | """Returns a dictionary with the conflict file extensions | |
79 | """ | |
80 | global __extensions | |
81 | ||
82 | if not __extensions: | |
83 | cfg_ext = config.get('stgit', 'extensions').split() | |
84 | if len(cfg_ext) != 3: | |
85 | raise CmdException, '"extensions" configuration error' | |
86 | ||
87 | __extensions = { 'ancestor': cfg_ext[0], | |
88 | 'current': cfg_ext[1], | |
89 | 'patched': cfg_ext[2] } | |
90 | ||
91 | return __extensions |