[Yum-devel] [PATCH 1/2] add globdir: syntax to all ListOption() and UrlListOption() items in config.py
Seth Vidal
skvidal at fedoraproject.org
Mon Apr 26 13:54:16 UTC 2010
this allows the user to specify globdir:/path/somewhere.d/*.conf and the
contents of all the files in that dir will be used to populate the config
option as a list.
---
yum/config.py | 26 +++++++++++++++++++++-----
yum/misc.py | 25 ++++++++++++++++++++++++-
2 files changed, 45 insertions(+), 6 deletions(-)
diff --git a/yum/config.py b/yum/config.py
index 3e91735..5ff13a6 100644
--- a/yum/config.py
+++ b/yum/config.py
@@ -40,7 +40,7 @@ if not _use_iniparse:
import rpmUtils.transaction
import Errors
import types
-from misc import get_uuid
+from misc import get_uuid, read_in_items_from_dot_dir
# Alter/patch these to change the default checking...
__pkgs_gpgcheck_default__ = False
@@ -161,7 +161,8 @@ class ListOption(Option):
super(ListOption, self).__init__(default)
def parse(self, s):
- """Converts a string from the config file to a workable list
+ """Converts a string from the config file to a workable list, parses
+ globdir: paths as foo.d-style dirs
Commas and spaces are used as separators for the list
"""
@@ -169,7 +170,15 @@ class ListOption(Option):
# to sub the \n with a space and then read the lines
s = s.replace('\n', ' ')
s = s.replace(',', ' ')
- return s.split()
+ results = []
+ for item in s.split():
+ if item.startswith('globdir:'):
+ globdir = item.replace('globdir:', '')
+ results.extend(read_in_items_from_dot_dir(globdir))
+ continue
+ results.append(item)
+
+ return results
def tostring(self, value):
return '\n '.join(value)
@@ -228,8 +237,15 @@ class UrlListOption(ListOption):
s = s.replace('\n', ' ')
s = s.replace(',', ' ')
items = [ item.replace(' ', '%20') for item in shlex.split(s) ]
- s = ' '.join(items)
- for url in super(UrlListOption, self).parse(s):
+ tmp = []
+ for item in items:
+ if item.startswith('globdir:'):
+ globdir = item.replace('globdir:', '')
+ tmp.extend(read_in_items_from_dot_dir(globdir))
+ continue
+ tmp.append(item)
+
+ for url in super(UrlListOption, self).parse(' '.join(tmp)):
out.append(self._urloption.parse(url))
return out
diff --git a/yum/misc.py b/yum/misc.py
index faccf5f..ebce8e1 100644
--- a/yum/misc.py
+++ b/yum/misc.py
@@ -1005,4 +1005,27 @@ def decompress(filename):
return out
-
+def read_in_items_from_dot_dir(thisglob, line_as_list=True):
+ """takes a glob of a dir (like /etc/foo.d/*.foo)
+ returns a list of all the lines in all the files matching
+ that glob, ignores comments and blank lines,
+ optional paramater 'line_as_list tells whether to
+ treat each line as a space or comma-separated list, defaults to True"""
+ results = []
+ for fname in glob.glob(thisglob):
+ for line in open(fname):
+ if re.match('\s*(#|$)', line):
+ continue
+ line = line.rstrip() # no more trailing \n's
+ line = line.lstrip() # be nice
+ if not line:
+ continue
+ if line_as_list:
+ line = line.replace('\n', ' ')
+ line = line.replace(',', ' ')
+ results.extend(line.split())
+ continue
+ results.append(line)
+ return results
+
+
--
1.7.0.1
More information about the Yum-devel
mailing list