From 84eebad7b714f3dea491a25507409c2507ba75b8 Mon Sep 17 00:00:00 2001 From: Thomas Leonard Date: Wed, 6 Jul 2011 10:16:05 +0100 Subject: [PATCH] Added Instead of adding the launcher's directory to $PATH, like , this stores the full path of the launcher in the named environment variable. --- tests/runnable/RunExec.xml | 1 + tests/runnable/go.sh | 3 ++- tests/testrun.py | 3 ++- zeroinstall/injector/model.py | 14 ++++++++++---- zeroinstall/injector/run.py | 8 ++++++-- 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/tests/runnable/RunExec.xml b/tests/runnable/RunExec.xml index 29654b8..fdd6339 100644 --- a/tests/runnable/RunExec.xml +++ b/tests/runnable/RunExec.xml @@ -7,6 +7,7 @@ + diff --git a/tests/runnable/go.sh b/tests/runnable/go.sh index cd0b0b1..9baf3f2 100755 --- a/tests/runnable/go.sh +++ b/tests/runnable/go.sh @@ -1,2 +1,3 @@ #!/bin/sh -exec 0testprog "$@" +"$PROG" var "$@" +exec 0testprog path "$@" diff --git a/tests/testrun.py b/tests/testrun.py index c28c966..27a000c 100755 --- a/tests/testrun.py +++ b/tests/testrun.py @@ -88,7 +88,8 @@ class TestRun(BaseTest): def testExecutable(self): child = subprocess.Popen([local_0launch, '--', runexec, 'user-arg-run'], stdout = subprocess.PIPE) stdout, _ = child.communicate() - assert 'Runner: script=A test script: args=command-arg -- user-arg-run' in stdout, stdout + assert 'Runner: script=A test script: args=command-arg -- var user-arg-run' in stdout, stdout + assert 'Runner: script=A test script: args=command-arg -- path user-arg-run' in stdout, stdout if __name__ == '__main__': unittest.main() diff --git a/zeroinstall/injector/model.py b/zeroinstall/injector/model.py index c52aad9..0252e5a 100644 --- a/zeroinstall/injector/model.py +++ b/zeroinstall/injector/model.py @@ -21,7 +21,7 @@ from zeroinstall.injector.namespaces import XMLNS_IFACE from zeroinstall.injector import qdom # Element names for bindings in feed files -binding_names = frozenset(['environment', 'overlay', 'executable-in-path']) +binding_names = frozenset(['environment', 'overlay', 'executable-in-path', 'executable-in-var']) network_offline = 'off-line' network_minimal = 'minimal' @@ -136,7 +136,9 @@ def process_binding(e): raise InvalidInterface(_("Binding contains both 'insert' and 'value'")) return binding elif e.name == 'executable-in-path': - return ExecutableBinding(e) + return ExecutableBinding(e, in_path = True) + elif e.name == 'executable-in-var': + return ExecutableBinding(e, in_path = False) elif e.name == 'overlay': return OverlayBinding(e.getAttribute('src'), e.getAttribute('mount-point')) else: @@ -315,11 +317,15 @@ class EnvironmentBinding(Binding): return env_elem class ExecutableBinding(Binding): - """Make the chosen command available in $PATH.""" + """Make the chosen command available in $PATH. + @ivar in_path: True to add the named command to $PATH, False to store in named variable + @type in_path: bool + """ __slots__ = ['qdom'] - def __init__(self, qdom): + def __init__(self, qdom, in_path): self.qdom = qdom + self.in_path = in_path def __str__(self): return str(self.qdom) diff --git a/zeroinstall/injector/run.py b/zeroinstall/injector/run.py index d727b2c..4e7e83f 100644 --- a/zeroinstall/injector/run.py +++ b/zeroinstall/injector/run.py @@ -237,8 +237,12 @@ class Setup(object): # Symlink ~/.cache/0install.net/injector/executables/$name/$name to runenv.py os.symlink('../../runenv.py', exec_path) - path = os.environ["PATH"] = exec_dir + os.pathsep + os.environ["PATH"] - info("PATH=%s", path) + if binding.in_path: + path = os.environ["PATH"] = exec_dir + os.pathsep + os.environ["PATH"] + info("PATH=%s", path) + else: + os.environ[name] = exec_path + info("%s=%s", name, exec_path) import json args = self.build_command(dep.interface, dep.command) -- 2.11.4.GIT