Revision history for App-Env 1.05 2025-08-14 13:11:28-04:00 America/New_York [ENHANCEMENT] * capture method: * return exit value command * redirect streams to filehandles or files 1.04 2024-01-19 12:56:35-05:00 America/New_York [BUG FIX] * correct handling of case where environment module was not found. a return of undef was expected, but instead a boolean was returned. 1.03 2024-01-18 12:22:09-05:00 America/New_York [BUG FIX] * By default the str() method and string overloading no longer include environment variables with illegal names. Use the new AllowIllegalVariableNames option to true. 1.02 2022-10-15 12:44:10-04:00 America/New_York [BUGFIX] * previous conversion from die to croak wasn't complete 1.01 2022-07-06 18:59:44-04:00 America/New_York [BUGFIX] * The Site parameter to import() or new() can ignore (rather than replace) the default Site specification if it is set to undef or ''; this was not properly documented or implemented. 1.00 2022-07-06 18:08:33-04:00 America/New_York [API BREAKAGE] * Documentation of how the APP_ENV_SITE environment variable interacted with the Site parameter was incomplete and incorrect. * The Site parameter was used to *add* to the list of modules to try, not to replace what was specified via $ENV{APP_ENV_SITE}. So, if $ENV{APP_ENV_SITE} = 'Site1'; and Site => 'Site2', then loading the MyApp environment would scan for the first of App::Env::Site1::MyApp; App::Env::Site2::MyApp; App::Env::MyApp; rather than the expected App::Env::Site2::MyApp; App::Env::MyApp; * App::Env::Site was loaded when App::Env is loaded if $ENV{APP_ENV_SITE} was not set, but the resultant $ENV{APP_ENV_SITE} was not cached. This resulted in action-at-a-distance weirdness. Assume that the App::Env::Site package exists and sets $ENV{APP_ENV_SITE} = 'Site1'; Then this code causes hard to debug bugs: { local %ENV = %ENV; require App::Env; # This will load App::Env::Site and thus load App::Env::Site1::MyApp1 App::Env::import( 'MyApp1' ); } # This will NOT load App::Env::Site, as it has already been loaded, # but the environment no longer contains $ENV{APP_ENV_SITE}, this # this will load App::Env::MyApp2, not App::Env::Site1::MyApp2 App::Env::import( 'MyApp2' ); This is just too fragile. Now when App::Env is loaded, it caches the final version of $ENV{APP_ENV_SITE}. Code which needs to change the site in mid-program, can use the Site parameter. 0.36 2022-07-05 16:38:55-04:00 America/New_York [ENHANCEMENT] * appexec: * new option, --define, which specifies extra environment variables to be addto to the application environment. * new option, --delete, which specifies environment variables to be deleted from the application environment. * --dumpenv: * new format, 'auto', which outputs the environment as commands for the current shell * now uses Shell::Config::Generate to generate commands to set environment variables for shells * new format, 'values', which outputs only environment variable values * new format, 'json', which outputs in JSON * new format, 'delta-json', which outputs in JSON the differences between the current and application environments * new format, 'delta-args', which outputs via appexec -D and -X options the differences between the current and application environments * new option, --dumpvar, which specifies which environment variables to dump 0.35 2020-05-04 11:14:40-04:00 America/New_York [ENHANCMENT] * new method, 'which', searches environment's path for executable [BUILD] * public repository is now on GitLab 0.34 2018-04-02 11:03:48-04:00 America/New_York [BUG FIX] * compilation of App::Env would fail if Capture::Tiny was previously loaded * uncaching via CacheID was broken [BUILD] * switch to Dist::Zilla 0.33 2016-07-13T12:16:55-0400 [BUG FIX] * improper method call check in import() [ENHANCEMENT] * appexec * new --clear option to clear the current environment prior to loading a new environment * multiple environments may be loaded 0.32 2016-07-07T12:50:00-0400 [BUG FIX] * avoid warnings from appexec when environment variables have no defined value 0.31 2016-07-06T17:26:56-0400 [BUG FIX] * bash shell export support in version 0.30 wasn't complete; it didn't produce output which could be eval'ed. 0.30 2016-07-06T17:11:43-0400 [BUG FIX] * bash exports shell functions via special environment variables with nominally illegal names. when dumping the environment for bash, appexec will translate those variables into function definitions instead of simply passing along the bogus variable names, which causes bash to barf. 0.29 2016-03-16T13:37:06-0400 [BUG FIX] * exceptions caught by App::Env were stringified when rethrown, breaking calling code which might expect an exception object. 0.28 2015-05-21T10:55:07-0400 [BUILD] * missing semicolon in Makefile.PL caused incomplete META.* files to be written. 0.27 2015-05-20T17:22:12-0400 [BUILD] * use cpanfile to manage dependencies * move all author tests to xt 0.26 2012-03-29T15:47:34-0400 [ENHANCEMENT] * added App::Env::Null module for "null" (i.e. current) environment 0.25 2012-01-13T12:43:22-0400 [BUG FIX] * qexec always acted as if it were being called in a scalar context. 0.24 2010-06-07T17:14:37-0400 * the SysFatal option will now be passed on to cloned environments created with the Temp option. 0.23 2010-06-07T16:44:26-0400 * capture() is no longer just an alias for qexec; it can now return both stderr and stdout. 0.22 2010-06-03T12:44:43-0400 * if CacheID is the string 'AppID', the cache id does not take into account the contents of the AppOpts hash. * new feature from v. 0.20 2015-05-20T16:52:10-0400 AppOpts hash) now actually works. 0.21 2010-06-02T10:28:42-0400 * no longer uses Object::ID to work around problems with Hash::FieldHash and older perls. 0.20 2010-05-28T12:11:51-0400 * cached environments now keyed off of AppOpts hash * (hopefully) improve Windows compatibility 0.15 2008-10-27T14:10:29-0400 * invert logic of shell magic characters; escape those not known to good. 0.14 2008-07-11T21:17:02-0400 * escape more shell magic characters 0.13 2008-07-11T15:59:30-0400 * append semi-colons to appenv's dumpenv output so that shell eval's will actually work 0.12 2008-07-11T13:31:09-0400 * appenv's dumpenv has more output formats. its value is now required. previously it was optional, which led to its grabbing the environment name if --env wasn't used. bad form. 0.11 2008-06-16T12:27:20-0400 * new setenv() method allows changing an environment. 0.10 2008-06-15T23:26:29-0400 * new SysFatal option which will cause system/qexec/capture object methods to throw an exception on error. Uses IPC::System::Simple in this case. * Default option values may now be changed. 0.09 2008-03-22T22:44:32-0400 * lowercase aliasing failed if Site was not set. 0.08 2008-03-22T22:03:47-0400 * application module search is no longer sensitive to the case of the application name 0.07 2008-03-22T13:19:29-0400 * application environments may now have aliases, which can preset options * site search was not done exactly according to specs * improved method for searching for environment modules to distinguish between non-existant modules and compilation errors * env() (and now str() as well) can specify variables to include in a more flexible fashion. the returned value is more flexible (more context dependent) and excruciatingly documented. * more restrictive str() generation of TERMCAP to make it easier to exclude variables without needing to specify TERMCAP 0.06 2008-02-03T14:11:39-0400 * fix for multi-app environments * application environments must now be based upon the current environment * cached application environments are not used in multi-app environments, nor will individual environments be cached in the course of creating a multi-app environment 0.05 2008-01-17T15:15:38-0400 * improve(?) documentation * add appexec program 0.04 2007-08-17T17:02:34-0400 * clean up passing of AppOpts to app env module's envs() func 0.03 2007-08-17T12:26:32-0400 * remove dependency on Module::Load::Conditional 0.02 2007-08-16T17:10:27-0400 * work around lack of weak references in older perls 0.01 2007-07-26T17:39:40-0400 * original version; created by h2xs 1.23 2015-05-20T16:52:10-0400 -A -X -n App::Env