From 656ccc792ac634338e92a6ff620292311029f4d5 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Thu, 3 Aug 2006 02:27:47 +0000 Subject: Use a recursive function to simplify the walking of the profile paths. The number of parent profiles is constrained to 1 but could easily be extended to allow multiple inheritence. svn path=/main/trunk/; revision=4091 --- pym/portage.py | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) (limited to 'pym') diff --git a/pym/portage.py b/pym/portage.py index 7aef151e0..feb431dab 100644 --- a/pym/portage.py +++ b/pym/portage.py @@ -886,23 +886,26 @@ class config: if self.profile_path is None: self.profiles = [] else: - self.profiles = [os.path.realpath(self.profile_path)] - mypath = self.profiles[0] - while os.path.exists(os.path.join(mypath, "parent")): - parents_file = os.path.join(mypath, "parent") - parents = grabfile(parents_file) - if len(parents) != 1: - raise portage_exception.ParseError( - "Expected 1 parent and got %i: '%s'" % \ - (len(parents), parents_file)) - mypath = normalize_path(os.path.join( - mypath, parents[0])) - if os.path.exists(mypath): - self.profiles.insert(0, mypath) - else: - raise portage_exception.ParseError( - "Specified parent not found: '%s'" % parents_file) - + self.profiles = [] + def addProfile(currentPath): + parentsFile = os.path.join(currentPath, "parent") + if os.path.exists(parentsFile): + parents = grabfile(parentsFile) + if len(parents) != 1: + raise portage_exception.ParseError( + "Expected 1 parent and got %i: '%s'" % \ + (len(parents), parents_file)) + for parentPath in parents: + parentPath = normalize_path(os.path.join( + currentPath, parentPath)) + if os.path.exists(parentPath): + addProfile(parentPath) + else: + raise portage_exception.ParseError( + "Parent '%s' not found: '%s'" % \ + (parentPath, parentsFile)) + self.profiles.append(currentPath) + addProfile(os.path.realpath(self.profile_path)) if os.environ.has_key("PORTAGE_CALLER") and os.environ["PORTAGE_CALLER"] == "repoman": pass else: -- cgit v1.2.3-1-g7c22