public inbox for gentoo-portage-dev@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Jesus Rivero (Neurogeek)" <neurogeek@gentoo.org>
To: gentoo-portage-dev@lists.gentoo.org
Subject: [gentoo-portage-dev] [PATCH] [REV] Added support for variable expansion in source command. wrt bug #490896
Date: Sun, 12 Jan 2014 18:57:43 -0500	[thread overview]
Message-ID: <CAD3zpD=J0pNkAZ4ozXvFQAu1qYzJtQDe+-frX-kgD1Zjskh7LQ@mail.gmail.com> (raw)


[-- Attachment #1.1: Type: text/plain, Size: 432 bytes --]

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi all,

In the previous patch, I didn't notice an error in the unittest I wrote for
the feature.
Attached is the correct patch, please disregard the previous one.

Cheers,

Jesus Rivero
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.16 (GNU/Linux)

iEYEARECAAYFAlLS7oQACgkQdIssYB9vBoP5wgCgh0kIe28oKg5XECPkjoe36QaH
oY8An0iUVqvPi5cftWbpbrHO2nSsUcqz
=wZnl
-----END PGP SIGNATURE-----

[-- Attachment #1.2: Type: text/html, Size: 671 bytes --]

[-- Attachment #2: 0002-Added-support-for-variable-expansion-in-source-command.patch --]
[-- Type: application/octet-stream, Size: 4120 bytes --]

From 15e7c70ae8e0e7920f0b012c29f96fe42a4a6231 Mon Sep 17 00:00:00 2001
From: Jesus Rivero <neurogeek@gentoo.org>
Date: Sun, 12 Jan 2014 14:32:45 -0500
Subject: [CHANGE] Added support for variable expansion in source command
 argument in make.conf

Signed-off-by: Jesus Rivero <neurogeek@gentoo.org>
---
 cnf/make.conf.example.source_test        |  7 +++++++
 cnf/make.conf.example.source_test_after  |  8 ++++++++
 pym/portage/tests/util/test_getconfig.py | 18 ++++++++++++++++++
 pym/portage/util/__init__.py             |  7 ++++++-
 4 files changed, 39 insertions(+), 1 deletion(-)
 create mode 100644 cnf/make.conf.example.source_test
 create mode 100644 cnf/make.conf.example.source_test_after

diff --git a/cnf/make.conf.example.source_test b/cnf/make.conf.example.source_test
new file mode 100644
index 0000000..abacd35
--- /dev/null
+++ b/cnf/make.conf.example.source_test
@@ -0,0 +1,7 @@
+# Copyright 1999-2014 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# Contains local system settings for Portage system
+
+# Test make.conf for variable expansion in 
+# source tokens.
+source "$PORTAGE_BASE_PATH/make.conf.example.source_test_after"
diff --git a/cnf/make.conf.example.source_test_after b/cnf/make.conf.example.source_test_after
new file mode 100644
index 0000000..bc45ef3
--- /dev/null
+++ b/cnf/make.conf.example.source_test_after
@@ -0,0 +1,8 @@
+# Copyright 1999-2014 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# Contains local system settings for Portage system
+
+# Test make.conf for variable expansion in 
+# source tokens.
+# We should see this variable in getconfig result
+PASSES_SOURCING_TEST="True"
diff --git a/pym/portage/tests/util/test_getconfig.py b/pym/portage/tests/util/test_getconfig.py
index c7ab360..586a18e 100644
--- a/pym/portage/tests/util/test_getconfig.py
+++ b/pym/portage/tests/util/test_getconfig.py
@@ -8,6 +8,7 @@ from portage import _unicode_encode
 from portage.const import PORTAGE_BASE_PATH
 from portage.tests import TestCase
 from portage.util import getconfig
+from portage.exception import ParseError
 
 class GetConfigTestCase(TestCase):
 	"""
@@ -31,6 +32,23 @@ class GetConfigTestCase(TestCase):
 		for k, v in self._cases.items():
 			self.assertEqual(d[k], v)
 
+	def testGetConfigSourceLex(self):
+	 	base = os.path.join(PORTAGE_BASE_PATH, "cnf")
+		make_conf_file = os.path.join(base, 
+			'make.conf.example.source_test')
+
+		d = getconfig(make_conf_file, 
+			allow_sourcing=True, expand={"PORTAGE_BASE_PATH" : base})
+
+		# PASSES_SOURCING_TEST should exist in getconfig result
+		self.assertEqual("True", d['PASSES_SOURCING_TEST']) 
+
+		# With allow_sourcing : True and empty expand map, this should
+		# Throw a FileNotFound exception 
+		self.assertRaisesMsg("An empty expand map should throw an exception", 
+			ParseError, getconfig, *(make_conf_file,), 
+			**{'allow_sourcing' : True, 'expand' : {}})
+
 	def testGetConfigProfileEnv(self):
 		# Test the mode which is used to parse /etc/env.d and /etc/profile.env.
 
diff --git a/pym/portage/util/__init__.py b/pym/portage/util/__init__.py
index 24553da..0799487 100644
--- a/pym/portage/util/__init__.py
+++ b/pym/portage/util/__init__.py
@@ -593,8 +593,13 @@ class _getconfig_shlex(shlex.shlex):
 		shlex.shlex.__init__(self, **kwargs)
 		self.__portage_tolerant = portage_tolerant
 
+	def allow_sourcing(self, var_expand_map):
+		self.source = portage._native_string("source")
+		self.var_expand_map = var_expand_map
+
 	def sourcehook(self, newfile):
 		try:
+			newfile = varexpand(newfile, self.var_expand_map)
 			return shlex.shlex.sourcehook(self, newfile)
 		except EnvironmentError as e:
 			if e.errno == PermissionDenied.errno:
@@ -694,7 +699,7 @@ def getconfig(mycfg, tolerant=False, allow_sourcing=False, expand=True,
 			string.ascii_letters + "~!@#$%*_\:;?,./-+{}")
 		lex.quotes = portage._native_string("\"'")
 		if allow_sourcing:
-			lex.source = portage._native_string("source")
+			lex.allow_sourcing(expand_map)
 
 		while True:
 			key = _unicode_decode(lex.get_token())
-- 
1.8.3.2


             reply	other threads:[~2014-01-12 23:57 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-01-12 23:57 Jesus Rivero (Neurogeek) [this message]
2014-01-13  6:14 ` [gentoo-portage-dev] [PATCH] [REV] Added support for variable expansion in source command. wrt bug #490896 Pavel Kazakov
2014-01-13 23:28 ` Mike Frysinger
2014-01-13 23:52 ` Mike Frysinger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAD3zpD=J0pNkAZ4ozXvFQAu1qYzJtQDe+-frX-kgD1Zjskh7LQ@mail.gmail.com' \
    --to=neurogeek@gentoo.org \
    --cc=gentoo-portage-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox