ADDED call-with-environment-variables/call-with-environment-variables-core.scm
Index: call-with-environment-variables/call-with-environment-variables-core.scm
==================================================================
--- /dev/null
+++ call-with-environment-variables/call-with-environment-variables-core.scm
@@ -0,0 +1,25 @@
+(define (call-with-environment-variables variables thunk)
+ @("Sets up environment variable via dynamic-wind which are taken down after thunk."
+ (variables "An alist of the form {{'((\"var\" . \"value\") ...)}}")
+ (thunk "The thunk to execute with a modified environment"))
+ (let ((pre-existing-variables
+ (map (lambda (var-value)
+ (let ((var (car var-value)))
+ (cons var (get-environment-variable var))))
+ variables)))
+ (dynamic-wind
+ (lambda () (void))
+ (lambda ()
+ (use posix)
+ (for-each (lambda (var-value)
+ (setenv (car var-value) (cdr var-value)))
+ variables)
+ (thunk))
+ (lambda ()
+ (for-each (lambda (var-value)
+ (let ((var (car var-value))
+ (value (cdr var-value)))
+ (if value
+ (setenv var value)
+ (unsetenv var))))
+ pre-existing-variables)))))
ADDED call-with-environment-variables/call-with-environment-variables.meta
Index: call-with-environment-variables/call-with-environment-variables.meta
==================================================================
--- /dev/null
+++ call-with-environment-variables/call-with-environment-variables.meta
@@ -0,0 +1,11 @@
+((synopsis "Set up and take down environment vars")
+ (author "Peter Danenberg")
+ (email "pcd@roxygen.org")
+ (user "klutometis")
+ (repo "https://github.com/klutometis/call-with-environment-variables")
+ (category os)
+ (license "BSD")
+ (depends (hahn "0.9.3")
+ setup-helper)
+ (test-depends test)
+ (foreign-depends))
ADDED call-with-environment-variables/call-with-environment-variables.release-info
Index: call-with-environment-variables/call-with-environment-variables.release-info
==================================================================
--- /dev/null
+++ call-with-environment-variables/call-with-environment-variables.release-info
@@ -0,0 +1,10 @@
+(repo git "git://github.com/klutometis/{egg-name}.git")
+(uri targz "https://github.com/klutometis/{egg-name}/tarball/{egg-release}")
+(release "0.1")
+(release "0.1.1")
+(release "0.1.2")
+(release "0.1.3")
+(release "0.1.4")
+(release "0.1.5")
+(release "0.1.6")
+(release "0.1.7")
ADDED call-with-environment-variables/call-with-environment-variables.scm
Index: call-with-environment-variables/call-with-environment-variables.scm
==================================================================
--- /dev/null
+++ call-with-environment-variables/call-with-environment-variables.scm
@@ -0,0 +1,7 @@
+(module
+ call-with-environment-variables
+ (call-with-environment-variables)
+
+ (import scheme chicken)
+
+ (include "call-with-environment-variables-core.scm"))
ADDED call-with-environment-variables/call-with-environment-variables.setup
Index: call-with-environment-variables/call-with-environment-variables.setup
==================================================================
--- /dev/null
+++ call-with-environment-variables/call-with-environment-variables.setup
@@ -0,0 +1,10 @@
+(use hahn setup-helper-mod)
+
+(verify-extension-name "call-with-environment-variables")
+
+(setup-shared-extension-module
+ 'call-with-environment-variables
+ (extension-version "0.1.6")
+ compile-options: '(-X hahn))
+
+(run-hahn -o call-with-environment-variables.wiki call-with-environment-variables-core.scm)
ADDED call-with-environment-variables/call-with-environment-variables.wiki
Index: call-with-environment-variables/call-with-environment-variables.wiki
==================================================================
--- /dev/null
+++ call-with-environment-variables/call-with-environment-variables.wiki
@@ -0,0 +1,54 @@
+== call-with-environment-variables
+
+Set up and take down environment vars
+[[toc:]]
+=== {{call-with-environment-variables}}
+(call-with-environment-variables variables thunk) → unspecified
+Sets up environment variable via dynamic-wind which are taken down after thunk.
+; {{variables}} : An alist of the form {{'(("var" . "value") ...)}}
+; {{thunk}} : The thunk to execute with a modified environment
+(define (call-with-environment-variables variables thunk)
+ (let ((pre-existing-variables
+ (map (lambda (var-value)
+ (let ((var (car var-value)))
+ (cons var (get-environment-variable var))))
+ variables)))
+ (dynamic-wind
+ (lambda () (void))
+ (lambda ()
+ (use posix)
+ (for-each
+ (lambda (var-value) (setenv (car var-value) (cdr var-value)))
+ variables)
+ (thunk))
+ (lambda ()
+ (for-each
+ (lambda (var-value)
+ (let ((var (car var-value)) (value (cdr var-value)))
+ (if value (setenv var value) (unsetenv var))))
+ pre-existing-variables)))))
+
+=== About this egg
+
+==== Author
+
+[[/users/klutometis|Peter Danenberg]]
+==== Repository
+[[https://github.com/klutometis/call-with-environment-variables]]
+==== License
+BSD
+==== Dependencies
+* [[(hahn 0.9.3)]]
+* [[setup-helper]]
+
+==== Versions
+; [[https://github.com/klutometis/call-with-environment-variables/releases/tag/0.1|0.1]] : Initial release
+; [[https://github.com/klutometis/call-with-environment-variables/releases/tag/0.1.1|0.1.1]] : Add the actual code.
+; [[https://github.com/klutometis/call-with-environment-variables/releases/tag/0.1.2|0.1.2]] : Fix versions.
+; [[https://github.com/klutometis/call-with-environment-variables/releases/tag/0.1.3|0.1.3]] : Update docs.
+; [[https://github.com/klutometis/call-with-environment-variables/releases/tag/0.1.4|0.1.4]] : With a note about cock-utils
+; [[https://github.com/klutometis/call-with-environment-variables/releases/tag/0.1.5|0.1.5]] : Docs
+; [[https://github.com/klutometis/call-with-environment-variables/releases/tag/0.1.6|0.1.6]] : Use hahn.
+==== Colophon
+
+Documented by [[/egg/hahn|hahn]].