Revision history for App-Env

1.01      2022-07-06 18:59:44-04:00 America/New_York


    * 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


    * 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


      rather than the expected


    * 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


    * 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

            * 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


    * new method, 'which', searches environment's path for executable


    * public repository is now on GitLab

0.34      2018-04-02 11:03:48-04:00 America/New_York


    * compilation of App::Env would fail if Capture::Tiny was
      previously loaded

    * uncaching via CacheID was broken


    * switch to Dist::Zilla

0.33  2016-07-13T12:16:55-0400


    * improper method call check in import()


    * 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


    * avoid warnings from appexec when environment variables have
      no defined value

0.31  2016-07-06T17:26:56-0400


    * 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


    * 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


    * 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


    * missing semicolon in Makefile.PL caused incomplete META.* files
      to be written.

0.27  2015-05-20T17:22:12-0400


    * use cpanfile to manage dependencies
    * move all author tests to xt

0.26  2012-03-29T15:47:34-0400


    * added App::Env::Null module for "null" (i.e. current)

0.25  2012-01-13T12:43:22-0400


    * qexec always acted as if it were being called in a scalar

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

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

    * 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

    * 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