<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://vistapedia.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bhaskar</id>
	<title>VistApedia - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://vistapedia.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bhaskar"/>
	<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php/Special:Contributions/Bhaskar"/>
	<updated>2026-04-04T04:54:44Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://vistapedia.com/index.php?title=Basic_GTM_Journaling&amp;diff=12075</id>
		<title>Basic GTM Journaling</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Basic_GTM_Journaling&amp;diff=12075"/>
		<updated>2011-04-16T12:23:02Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are the most basic instructions to turn on and use journaling.  I suggest you do this for any database files that are not throw-away.&lt;br /&gt;
&lt;br /&gt;
-- Turn on before image journaling:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$gtm_dist/mupip set -journal=&amp;quot;enable,on,before&amp;quot; -file mumps.dat&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- Recover a database file using the journal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$gtm_dist/mupip journal -recover -backward mumps.mjl&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- Create a new journal file (the old journal file has a name of the form mumps.mjl_yyyydddhhmmss where ddd is the day of the year, e.g., today, June 24, 2009, is day 175):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$gtm_dist/mupip set -journal=&amp;quot;on,before&amp;quot; -file mumps.dat&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This assumes that the database file is mumps.dat and the journal file is mumps.mjl.  GT.M doesn&#039;t restrict the name, and databases can be multiple regions.  But these three commands are the most basic.  Please use them so that you don&#039;t need a rundown to recover your database after a system crash.&lt;br /&gt;
&lt;br /&gt;
-- Backup database (creates a new journal file; substitute backup directory for /tmp/ in the following):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$gtm_dist/mupip backup &amp;quot;*&amp;quot; /tmp/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should periodically review journal file usage and archive/delete previous generation journal files.&lt;br /&gt;
&lt;br /&gt;
If you need anything more sophisticated, please go through the self-paced exercises in the [http://sourceforge.net/projects/fis-gtm/files/GT.M%20Acculturation%20Workshop/ GT.M Acculturation Workshop].&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Migrating_a_VistA/GT.M_installation_from_one_platform_to_another&amp;diff=11403</id>
		<title>Migrating a VistA/GT.M installation from one platform to another</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Migrating_a_VistA/GT.M_installation_from_one_platform_to_another&amp;diff=11403"/>
		<updated>2007-07-30T19:29:16Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are instructions for copying a GT.M SemiVivA installation from one platform to another.  For this discussion, the platforms are assumed to be of different endian-ness, e.g., x86 GNU/Linux and Sun SPARC Solaris).&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Existing SemiVivA scripts use the bash shell, and assume that it is located at /bin/bash.  Modify the location if bash is located elsewhere.  Edit the scripts as needed to use other shells.&lt;br /&gt;
# The GT.M version in these examples is V5.2-001.&lt;br /&gt;
# The steps to change the endian-ness of database files, and to create new global directories is not needed if the source and target platforms have the same endian-ness.&lt;br /&gt;
# The VistA environments to be copied must be identified, along with the hierarchical structure (see [[Software Development (WG1) Version Control (T3)]]).  In this example, the structure is assumed to be:&lt;br /&gt;
#* /usr/local/WorldVistAEHRvTEST20070616&lt;br /&gt;
#** /var/WorldVistAEHR&lt;br /&gt;
#** /home/vista/myWorldVistAEHR&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
* Obtain and install GT.M for the new platform in a sub-directory of /usr/local, e.g., in /usr/local/gtm_V5.2-001.&lt;br /&gt;
&lt;br /&gt;
* Copy the identified directories, including subdirectories from the originating machine to the target machine.  Object files (.o) should not be copied, and if they are, they should be deleted e.g., for the top level directory of each working environment (as root for the top level :&lt;br /&gt;
         cd &amp;lt;directory&amp;gt;&lt;br /&gt;
         find . -type d -name o -exec chmod u+w {} \;&lt;br /&gt;
         find . -name \*.o -exec rm -f {} \;&lt;br /&gt;
* Change the endian-ness of the database (see [http://www.fidelityinfoservices.com/user_documentation/targets/GTM_Database_Endian_Conversion.html Technical Bulletin: GT.M Database Endian Conversion - UNIX] for more information) in the top level release environment, from which other environments are derived (in this example, /usr/local/WorldVistAEHRvTEST20070616).  As root:&lt;br /&gt;
         cd /usr/local/WorldVistAEHRvTEST20070616/gtm_V5.2-001&lt;br /&gt;
         chmod u+w g&lt;br /&gt;
         cd g&lt;br /&gt;
         gzip -d mumps.dat.gz&lt;br /&gt;
         source /usr/local/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         mupip endiancvt mumps.dat&lt;br /&gt;
         gzip mumps.dat&lt;br /&gt;
         cd ..&lt;br /&gt;
         chmod a-w g&lt;br /&gt;
* Change the endian-ness of the database in each working environment (/var/WorldVistAEHR and /home/vista/myWorldVistAEHR in this example).  As the normal user for each working environment:&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /var/WorldVistAEHR/gtm_V5.2-001/g&lt;br /&gt;
         mupip endiacvt mumps.dat&lt;br /&gt;
:and&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /home/vista/myWorldVistAEHR/gtm_V5.2-001/g&lt;br /&gt;
         mupip endiacvt mumps.dat&lt;br /&gt;
* Replace the global directory in the top level release environment.  As root:&lt;br /&gt;
         source /usr/local/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /usr/local/WorldVistAEHRvTEST20070616/gtm_V5.2-001&lt;br /&gt;
         chmod u+w g&lt;br /&gt;
         cd g&lt;br /&gt;
         rm mumps.gld&lt;br /&gt;
         mumps -run ^GDE&lt;br /&gt;
         change -segment DEFAULT -block=4096 -alloc=75000 -ext=2000 -glob=2048 -file=$vista_home/$gtmver/g/mumps.dat&lt;br /&gt;
         change -region DEFAULT -rec=4080 -key=255 -std&lt;br /&gt;
         exit&lt;br /&gt;
         cd ..&lt;br /&gt;
         chmod -R a-w g&lt;br /&gt;
* Copy this global directory file to each working environment.  As the normal user for each environment:&lt;br /&gt;
         rm -f /var/WorldVistAEHR/gtm_V5.2-001/g/mumps.gld&lt;br /&gt;
         cp /usr/local/WorldVistAEHRvTEST20070616/gtm_V5.2-001/g/mumps.gld /var/WorldVistAEHR/gtm_V5.2-001/g/&lt;br /&gt;
:and&lt;br /&gt;
         rm -f /home/vista/myWorldVistAEHR/gtm_V5.2-001/g/mumps.gld&lt;br /&gt;
         cp /usr/local/WorldVistAEHRvTEST20070616/gtm_V5.2-001/g/mumps.gld /home/vista/myWorldVistAEHR/gtm_V5.2-001/g/&lt;br /&gt;
* Recompile the object files in the top level release environment (ignore compilation errors; remember that some directories may not be empty  this script takes care of the general case where there may be files in the different source directories).  As root:&lt;br /&gt;
         source /usr/local/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /usr/local/WorldVistAEHRvTEST20070616/gtm_V5.2-001&lt;br /&gt;
         chmod u+w o&lt;br /&gt;
         cd o&lt;br /&gt;
         find ../../r -type f -name \*.m -print -exec mumps {} \;&lt;br /&gt;
         find ../../p -type f -name \*.m -print -exec mumps {} \;&lt;br /&gt;
         find ../r -type f -name \*.m -print -exec mumps {} \;&lt;br /&gt;
         find ../p -type f -name \*.m -print -exec mumps {} \;&lt;br /&gt;
         cd ..&lt;br /&gt;
         chmod -R a-w o&lt;br /&gt;
         cd add-ons&lt;br /&gt;
         chmod u+w o&lt;br /&gt;
         cd o&lt;br /&gt;
         mumps ../../../add-ons/*/{r,p}/*.m&lt;br /&gt;
         mumps ../*/{r,p}/*.m&lt;br /&gt;
         cd ..&lt;br /&gt;
         chmod -R a-w o&lt;br /&gt;
* Object files in the working environments will be automatically recompiled as needed.  In the event you wish to recompile them, e.g., to not see compilation errors when using VistA, do the following as the normal user in each environment (ignore compilation errors and complaints about files not found):&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /var/WorldVistAEHR/gtm_V5.2-001/o&lt;br /&gt;
         mumps ../../{r,p}/*.m&lt;br /&gt;
         mumps ../{r,p}/*.m&lt;br /&gt;
         cd ../add-ons/o&lt;br /&gt;
         mumps ../../../add-ons/{r,p}/*.m&lt;br /&gt;
         mumps ../*/{r,p}/*.m&lt;br /&gt;
:and&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /home/vista/myWorldVistAEHR/gtm_V5.2-001/o&lt;br /&gt;
         mumps ../../{r,p}/*.m&lt;br /&gt;
         mumps ../{r,p}/*.m&lt;br /&gt;
         cd ../add-ons/o&lt;br /&gt;
         mumps ../../../add-ons/{r,p}/*.m&lt;br /&gt;
         mumps ../*/{r,p}/*.m&lt;br /&gt;
* Create new journal files in each working environment.  As the normal user for each environment:&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /var/WorldVistAEHR/gtm_V5.2-001/g&lt;br /&gt;
         mupip set -journal=&amp;quot;enable,on,before&amp;quot; -file mumps.dat&lt;br /&gt;
         rm mumps.mjl_*&lt;br /&gt;
:and&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /home/vista//myWorldVistAEHR/gtm_V5.2-001/g&lt;br /&gt;
         mupip set -journal=&amp;quot;enable,on,before&amp;quot; -file mumps.dat&lt;br /&gt;
         rm mumps.mjl_*&lt;br /&gt;
* Verify each environment.  As the normal user for each environment:&lt;br /&gt;
         /var/WorldVistAEHR/gtm_V5.2-001/run&lt;br /&gt;
:and&lt;br /&gt;
         /home/myvista/myWorldVistAEHR/gtm_V5.2-001/run&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Migrating_a_VistA/GT.M_installation_from_one_platform_to_another&amp;diff=5066</id>
		<title>Migrating a VistA/GT.M installation from one platform to another</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Migrating_a_VistA/GT.M_installation_from_one_platform_to_another&amp;diff=5066"/>
		<updated>2007-07-26T20:43:54Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are instructions for copying a GT.M SemiVivA installation from one platform to another.  For this discussion, the platforms are assumed to be of different endian-ness, e.g., x86 GNU/Linux and Sun SPARC Solaris).&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Existing SemiVivA scripts use the bash shell, and assume that it is located at /bin/bash.  Modify the location if bash is located elsewhere.  Edit the scripts as needed to use other shells.&lt;br /&gt;
# It is assumed that the GT.M version is the same, V5.2-001.  In practice, they need not be the same, but must use the same database format.  If the versions are different, rename the V5.2-001 subdirectory of each VistA environment, and change the gtm symbolic link to point to the actual GT.M installation directory.&lt;br /&gt;
# The VistA environments to be copied must be identified, along with the hierarchical structure (see [[Software Development (WG1) Version Control (T3)]]).  In this example, the structure is assumed to be:&lt;br /&gt;
#* /usr/local/WorldVistAEHRvTEST20070616&lt;br /&gt;
#** /var/WorldVistAEHR&lt;br /&gt;
#** /home/vista/myWorldVistAEHR&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
* Obtain and install GT.M for the new platform in a sub-directory of /usr/local, e.g., in /usr/local/gtm_V5.2-001.&lt;br /&gt;
&lt;br /&gt;
* Copy the identified directories, including subdirectories from the originating machine to the target machine.  Object files (.o) should not be copied, and if they are, they should be deleted e.g., for the top level directory of each working environment (as root for the top level :&lt;br /&gt;
         cd &amp;lt;directory&amp;gt;&lt;br /&gt;
         find . -type d -name o -exec chmod u+w {} \;&lt;br /&gt;
         find . -name \*.o -exec rm -f {} \;&lt;br /&gt;
* Change the endian-ness of the database (see [http://www.fidelityinfoservices.com/user_documentation/targets/GTM_Database_Endian_Conversion.html Technical Bulletin: GT.M Database Endian Conversion - UNIX] for more information) in the top level release environment, from which other environments are derived (in this example, /usr/local/WorldVistAEHRvTEST20070616).  As root:&lt;br /&gt;
         cd /usr/local/WorldVistAEHRvTEST20070616/gtm_V5.2-001&lt;br /&gt;
         chmod u+w g&lt;br /&gt;
         cd g&lt;br /&gt;
         gzip -d mumps.dat.gz&lt;br /&gt;
         source /usr/local/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         mupip endiancvt mumps.dat&lt;br /&gt;
         gzip mumps.dat&lt;br /&gt;
         cd ..&lt;br /&gt;
         chmod a-w g&lt;br /&gt;
* Change the endian-ness of the database in each working environment (/var/WorldVistAEHR and /home/vista/myWorldVistAEHR in this example).  As the normal user for each working environment:&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /var/WorldVistAEHR/gtm_V5.2-001/g&lt;br /&gt;
         mupip endiacvt mumps.dat&lt;br /&gt;
:and&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /home/vista/myWorldVistAEHR/gtm_V5.2-001/g&lt;br /&gt;
         mupip endiacvt mumps.dat&lt;br /&gt;
* Recompile the object files in the top level release environment (ignore compilation errors; remember that some directories may not be empty  this script takes care of the general case where there may be files in the different source directories).  As root:&lt;br /&gt;
         source /usr/local/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /usr/local/WorldVistAEHRvTEST20070616/gtm_V5.2-001&lt;br /&gt;
         chmod u+w o&lt;br /&gt;
         cd o&lt;br /&gt;
         find ../../r -type f -name \*.m -print -exec mumps {} \;&lt;br /&gt;
         find ../../p -type f -name \*.m -print -exec mumps {} \;&lt;br /&gt;
         find ../r -type f -name \*.m -print -exec mumps {} \;&lt;br /&gt;
         find ../p -type f -name \*.m -print -exec mumps {} \;&lt;br /&gt;
         cd ..&lt;br /&gt;
         chmod a-w o&lt;br /&gt;
         cd add-ons&lt;br /&gt;
         chmod u+w o&lt;br /&gt;
         mumps ../../../add-ons/*/{r,p}/*.m&lt;br /&gt;
         mumps ../*/{r,p}/*.m&lt;br /&gt;
         cd ..&lt;br /&gt;
         chmod a-w o&lt;br /&gt;
* Object files in the working environments will be automatically recompiled as needed.  In the event you wish to recompile them, e.g., to not see compilation errors when using VistA, do the following as the normal user in each environment (ignore compilation errors and complaints about files not found):&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /var/WorldVistAEHR/gtm_V5.2-001/o&lt;br /&gt;
         mumps ../../{r,p}/*.m&lt;br /&gt;
         mumps ../{r,p}/*.m&lt;br /&gt;
         cd ../add-ons/o&lt;br /&gt;
         mumps ../../../add-ons/{r,p}/*.m&lt;br /&gt;
         mumps ../*/{r,p}/*.m&lt;br /&gt;
:and&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /home/vista/myWorldVistAEHR/gtm_V5.2-001/o&lt;br /&gt;
         mumps ../../{r,p}/*.m&lt;br /&gt;
         mumps ../{r,p}/*.m&lt;br /&gt;
         cd ../add-ons/o&lt;br /&gt;
         mumps ../../../add-ons/{r,p}/*.m&lt;br /&gt;
         mumps ../*/{r,p}/*.m&lt;br /&gt;
* Create new journal files in each working environment.  As the normal user for each environment:&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /var/WorldVistAEHR/gtm_V5.2-001/g&lt;br /&gt;
         mupip set -journal=&amp;quot;enable,on,before&amp;quot; -file mumps.dat&lt;br /&gt;
:and&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /home/vista//myWorldVistAEHR/gtm_V5.2-001/g&lt;br /&gt;
         mupip set -journal=&amp;quot;enable,on,before&amp;quot; -file mumps.dat&lt;br /&gt;
* Verify each environment.  As the normal user for each environment:&lt;br /&gt;
         /var/WorldVistAEHR/gtm_V5.2-001/run&lt;br /&gt;
:and&lt;br /&gt;
         /home/myvista/myWorldVistAEHR/gtm_V5.2-001/run&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Migrating_a_VistA/GT.M_installation_from_one_platform_to_another&amp;diff=5065</id>
		<title>Migrating a VistA/GT.M installation from one platform to another</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Migrating_a_VistA/GT.M_installation_from_one_platform_to_another&amp;diff=5065"/>
		<updated>2007-07-26T17:48:48Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are instructions for copying a GT.M SemiVivA installation from one platform to another.  For this discussion, the platforms are assumed to be of different endian-ness, e.g., x86 GNU/Linux and Sun SPARC Solaris).&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Existing SemiVivA scripts use the bash shell, and assume that it is located at /bin/bash.  Modify the location if bash is located elsewhere.  Edit the scripts as needed to use other shells.&lt;br /&gt;
# It is assumed that the GT.M version is the same, V5.2-001.  In practice, they need not be the same, but must use the same database format.  If the versions are different, rename the V5.2-001 subdirectory of each VistA environment, and change the gtm symbolic link to point to the actual GT.M installation directory.&lt;br /&gt;
# The VistA environments to be copied must be identified, along with the hierarchical structure (see [[Software Development (WG1) Version Control (T3)]]).  In this example, the structure is assumed to be:&lt;br /&gt;
#* /usr/local/WorldVistAEHRvTEST20070616&lt;br /&gt;
#** /var/WorldVistAEHR&lt;br /&gt;
#** /home/vista/myWorldVistAEHR&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
* Obtain and install GT.M for the new platform in a sub-directory of /usr/local, e.g., in /usr/local/gtm_V5.2-001.&lt;br /&gt;
&lt;br /&gt;
* Copy the identified directories, including subdirectories from the originating machine to the target machine.  Object files (.o) should not be copied, and if they are, they should be deleted e.g., for the top level directory of each working environment (as root for the top level :&lt;br /&gt;
         cd &amp;lt;directory&amp;gt;&lt;br /&gt;
         find . -type d -name o -exec chmod -v {} \;&lt;br /&gt;
         find . -name \*.o -exec rm -rv {} \;&lt;br /&gt;
* Change the endian-ness of the database (see [http://www.fidelityinfoservices.com/user_documentation/targets/GTM_Database_Endian_Conversion.html Technical Bulletin: GT.M Database Endian Conversion - UNIX] for more information) in the top level release environment, from which other environments are derived (in this example, /usr/local/WorldVistAEHRvTEST20070616).  As root:&lt;br /&gt;
         cd /usr/local/WorldVistAEHRvTEST20070616/gtm_V5.2-001&lt;br /&gt;
         chmod u+w g&lt;br /&gt;
         cd g&lt;br /&gt;
         gzip -d mumps.dat.gz&lt;br /&gt;
         source /usr/local/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         mupip endiancvt mumps.dat&lt;br /&gt;
         gzip mumps.dat&lt;br /&gt;
         cd ..&lt;br /&gt;
         chmod a-w g&lt;br /&gt;
* Change the endian-ness of the database in each working environment (/var/WorldVistAEHR and /home/vista/myWorldVistAEHR in this example).  As the normal user for each working environment:&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /var/WorldVistAEHR/gtm_V5.2-001/g&lt;br /&gt;
         mupip endiacvt mumps.dat&lt;br /&gt;
:and&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /home/vista/myWorldVistAEHR/gtm_V5.2-001/g&lt;br /&gt;
         mupip endiacvt mumps.dat&lt;br /&gt;
* Recompile the object files in the top level release environment (ignore compilation errors; remember that some directories may not be empty  this script takes care of the general case where there may be files in the different source directories).  As root:&lt;br /&gt;
         source /usr/local/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /usr/local/WorldVistAEHRvTEST20070616/gtm_V5.2-001&lt;br /&gt;
         chmod u+w o&lt;br /&gt;
         cd o&lt;br /&gt;
         find ../../r -type f -name \*.m -print -exec mumps {} \;&lt;br /&gt;
         find ../../p -type f -name \*.m -print -exec mumps {} \;&lt;br /&gt;
         find ../r -type f -name \*.m -print -exec mumps {} \;&lt;br /&gt;
         find ../p -type f -name \*.m -print -exec mumps {} \;&lt;br /&gt;
         cd ..&lt;br /&gt;
         chmod a-w o&lt;br /&gt;
         cd add-ons&lt;br /&gt;
         chmod u+w o&lt;br /&gt;
         mumps ../../../add-ons/*/{r,p}/*.m&lt;br /&gt;
         mumps ../*/{r,p}/*.m&lt;br /&gt;
         cd ..&lt;br /&gt;
         chmod a-w o&lt;br /&gt;
* Object files in the working environments will be automatically recompiled as needed.  In the event you wish to recompile them, e.g., to not see compilation errors when using VistA, do the following as the normal user in each environment (ignore compilation errors and complaints about files not found):&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /var/WorldVistAEHR/gtm_V5.2-001/o&lt;br /&gt;
         mumps ../../{r,p}/*.m&lt;br /&gt;
         mumps ../{r,p}/*.m&lt;br /&gt;
         cd ../add-ons/o&lt;br /&gt;
         mumps ../../../add-ons/{r,p}/*.m&lt;br /&gt;
         mumps ../*/{r,p}/*.m&lt;br /&gt;
:and&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /home/vista/myWorldVistAEHR/gtm_V5.2-001/o&lt;br /&gt;
         mumps ../../{r,p}/*.m&lt;br /&gt;
         mumps ../{r,p}/*.m&lt;br /&gt;
         cd ../add-ons/o&lt;br /&gt;
         mumps ../../../add-ons/{r,p}/*.m&lt;br /&gt;
         mumps ../*/{r,p}/*.m&lt;br /&gt;
* Create new journal files in each working environment.  As the normal user for each environment:&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /var/WorldVistAEHR/gtm_V5.2-001/g&lt;br /&gt;
         mupip set -journal=&amp;quot;enable,on,before&amp;quot; -file mumps.dat&lt;br /&gt;
:and&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /home/vista//myWorldVistAEHR/gtm_V5.2-001/g&lt;br /&gt;
         mupip set -journal=&amp;quot;enable,on,before&amp;quot; -file mumps.dat&lt;br /&gt;
* Verify each environment.  As the normal user for each environment:&lt;br /&gt;
         /var/WorldVistAEHR/gtm_V5.2-001/run&lt;br /&gt;
:and&lt;br /&gt;
         /home/myvista/myWorldVistAEHR/gtm_V5.2-001/run&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Migrating_a_VistA/GT.M_installation_from_one_platform_to_another&amp;diff=5064</id>
		<title>Migrating a VistA/GT.M installation from one platform to another</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Migrating_a_VistA/GT.M_installation_from_one_platform_to_another&amp;diff=5064"/>
		<updated>2007-07-26T17:45:55Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are instructions for copying a GT.M SemiVivA installation from one platform to another.  For this discussion, the platforms are assumed to be of different endian-ness, e.g., x86 GNU/Linux and Sun SPARC Solaris).&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Existing SemiVivA scripts use the bash shell, and assume that it is located at /bin/bash.  Modify the location if bash is located elsewhere.  Edit the scripts as needed to use other shells.&lt;br /&gt;
# [http://xinetd.org xinetd] is assumed to control th&lt;br /&gt;
# It is assumed that the GT.M versions use the same database format.&lt;br /&gt;
# The VistA environments to be copied must be identified, along with the hierarchical structure (see [[Software Development (WG1) Version Control (T3)]]), e.g.&lt;br /&gt;
#* /usr/local/WorldVistAEHRvTEST20070616&lt;br /&gt;
#** /var/WorldVistAEHR&lt;br /&gt;
#** /home/vista/myWorldVistAEHR&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
* Obtain and install GT.M for the new platform in a sub-directory of /usr/local, e.g., in /usr/local/gtm_V5.2-001.&lt;br /&gt;
&lt;br /&gt;
* Copy the identified directories, including subdirectories from the originating machine to the target machine.  Object files (.o) should not be copied, and if they are, they should be deleted e.g., for the top level directory of each working environment (as root for the top level :&lt;br /&gt;
         cd &amp;lt;directory&amp;gt;&lt;br /&gt;
         find . -type d -name o -exec chmod -v {} \;&lt;br /&gt;
         find . -name \*.o -exec rm -rv {} \;&lt;br /&gt;
* Change the endian-ness of the database (see [http://www.fidelityinfoservices.com/user_documentation/targets/GTM_Database_Endian_Conversion.html Technical Bulletin: GT.M Database Endian Conversion - UNIX] for more information) in the top level release environment, from which other environments are derived (in this example, /usr/local/WorldVistAEHRvTEST20070616).  As root:&lt;br /&gt;
         cd /usr/local/WorldVistAEHRvTEST20070616/gtm_V5.2-001&lt;br /&gt;
         chmod u+w g&lt;br /&gt;
         cd g&lt;br /&gt;
         gzip -d mumps.dat.gz&lt;br /&gt;
         source /usr/local/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         mupip endiancvt mumps.dat&lt;br /&gt;
         gzip mumps.dat&lt;br /&gt;
         cd ..&lt;br /&gt;
         chmod a-w g&lt;br /&gt;
* Change the endian-ness of the database in each working environment (/var/WorldVistAEHR and /home/vista/myWorldVistAEHR in this example).  As the normal user for each working environment:&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /var/WorldVistAEHR/gtm_V5.2-001/g&lt;br /&gt;
         mupip endiacvt mumps.dat&lt;br /&gt;
:and&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /home/vista/myWorldVistAEHR/gtm_V5.2-001/g&lt;br /&gt;
         mupip endiacvt mumps.dat&lt;br /&gt;
* Recompile the object files in the top level release environment (ignore compilation errors; remember that some directories may not be empty  this script takes care of the general case where there may be files in the different source directories).  As root:&lt;br /&gt;
         source /usr/local/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /usr/local/WorldVistAEHRvTEST20070616/gtm_V5.2-001&lt;br /&gt;
         chmod u+w o&lt;br /&gt;
         cd o&lt;br /&gt;
         find ../../r -type f -name \*.m -print -exec mumps {} \;&lt;br /&gt;
         find ../../p -type f -name \*.m -print -exec mumps {} \;&lt;br /&gt;
         find ../r -type f -name \*.m -print -exec mumps {} \;&lt;br /&gt;
         find ../p -type f -name \*.m -print -exec mumps {} \;&lt;br /&gt;
         cd ..&lt;br /&gt;
         chmod a-w o&lt;br /&gt;
         cd add-ons&lt;br /&gt;
         chmod u+w o&lt;br /&gt;
         mumps ../../../add-ons/*/{r,p}/*.m&lt;br /&gt;
         mumps ../*/{r,p}/*.m&lt;br /&gt;
         cd ..&lt;br /&gt;
         chmod a-w o&lt;br /&gt;
* Object files in the working environments will be automatically recompiled as needed.  In the event you wish to recompile them, e.g., to not see compilation errors when using VistA, do the following as the normal user in each environment (ignore compilation errors and complaints about files not found):&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /var/WorldVistAEHR/gtm_V5.2-001/o&lt;br /&gt;
         mumps ../../{r,p}/*.m&lt;br /&gt;
         mumps ../{r,p}/*.m&lt;br /&gt;
         cd ../add-ons/o&lt;br /&gt;
         mumps ../../../add-ons/{r,p}/*.m&lt;br /&gt;
         mumps ../*/{r,p}/*.m&lt;br /&gt;
:and&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /home/vista/myWorldVistAEHR/gtm_V5.2-001/o&lt;br /&gt;
         mumps ../../{r,p}/*.m&lt;br /&gt;
         mumps ../{r,p}/*.m&lt;br /&gt;
         cd ../add-ons/o&lt;br /&gt;
         mumps ../../../add-ons/{r,p}/*.m&lt;br /&gt;
         mumps ../*/{r,p}/*.m&lt;br /&gt;
* Create new journal files in each working environment.  As the normal user for each environment:&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /var/WorldVistAEHR/gtm_V5.2-001/g&lt;br /&gt;
         mupip set -journal=&amp;quot;enable,on,before&amp;quot; -file mumps.dat&lt;br /&gt;
:and&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /home/vista//myWorldVistAEHR/gtm_V5.2-001/g&lt;br /&gt;
         mupip set -journal=&amp;quot;enable,on,before&amp;quot; -file mumps.dat&lt;br /&gt;
* Verify each environment.  As the normal user for each environment:&lt;br /&gt;
         /var/WorldVistAEHR/gtm_V5.2-001/run&lt;br /&gt;
:and&lt;br /&gt;
         /home/myvista/myWorldVistAEHR/gtm_V5.2-001/run&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Migrating_a_VistA/GT.M_installation_from_one_platform_to_another&amp;diff=5063</id>
		<title>Migrating a VistA/GT.M installation from one platform to another</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Migrating_a_VistA/GT.M_installation_from_one_platform_to_another&amp;diff=5063"/>
		<updated>2007-07-26T15:50:39Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are instructions for copying a GT.M SemiVivA installation from one platform to another.  For this discussion, the platforms are assumed to be of different endian-ness, e.g., x86 GNU/Linux and Sun SPARC Solaris).&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Existing SemiVivA scripts use the bash shell, and assume that it is located at /bin/bash.  Modify the location if bash is located elsewhere.  Edit the scripts as needed to use other shells.&lt;br /&gt;
# [http://xinetd.org xinetd] is assumed to control th&lt;br /&gt;
# It is assumed that the GT.M versions use the same database format.&lt;br /&gt;
# The VistA environments to be copied must be identified, along with the hierarchical structure (see [[Software Development (WG1) Version Control (T3)]]), e.g.&lt;br /&gt;
#* /usr/local/WorldVistAEHRvTEST20070616&lt;br /&gt;
#** /var/WorldVistAEHR&lt;br /&gt;
#** /home/vista/myWorldVistAEHR&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
* Obtain and install GT.M for the new platform in a sub-directory of /usr/local, e.g., in /usr/local/gtm_V5.2-001.&lt;br /&gt;
&lt;br /&gt;
* Copy the identified directories, including subdirectories from the originating machine to the target machine.  Object files (.o) should not be copied, and if they are, they should be deleted e.g., for the top level directory of each working environment (as root for the top level :&lt;br /&gt;
         cd &amp;lt;directory&amp;gt;&lt;br /&gt;
         find . -type d -name o -exec chmod -v {} \;&lt;br /&gt;
         find . -name \*.o -exec rm -rv {} \;&lt;br /&gt;
* Change the endian-ness of the database (see [http://www.fidelityinfoservices.com/user_documentation/targets/GTM_Database_Endian_Conversion.html Technical Bulletin: GT.M Database Endian Conversion - UNIX] for more information) in the top level release environment, from which other environments are derived (in this example, /usr/local/WorldVistAEHRvTEST20070616).  As root:&lt;br /&gt;
         cd /usr/local/WorldVistAEHRvTEST20070616/gtm_V5.2-001&lt;br /&gt;
         chmod u+w g&lt;br /&gt;
         cd g&lt;br /&gt;
         gzip -d mumps.dat.gz&lt;br /&gt;
         source /usr/local/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         mupip endiancvt mumps.dat&lt;br /&gt;
         gzip mumps.dat&lt;br /&gt;
         cd ..&lt;br /&gt;
         chmod a-w g&lt;br /&gt;
* Change the endian-ness of the database in each working environment (/var/WorldVistAEHR and /home/vista/myWorldVistAEHR in this example).  As the normal user for each working environment:&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /var/WorldVistAEHR/gtm_V5.2-001/g&lt;br /&gt;
         mupip endiacvt mumps.dat&lt;br /&gt;
:and&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /home/vista/myWorldVistAEHR/gtm_V5.2-001/g&lt;br /&gt;
         mupip endiacvt mumps.dat&lt;br /&gt;
* Recompile the object files in the top level release environment (ignore compilation errors; remember that some directories may not be empty  this script takes care of the general case where there may be files in the different source directories).  As root:&lt;br /&gt;
         source /usr/local/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /usr/local/WorldVistAEHRvTEST20070616/gtm_V5.2-001&lt;br /&gt;
         chmod u+w o&lt;br /&gt;
         cd o&lt;br /&gt;
         find ../../r -type f -name \*.m -print -exec mumps {} \;&lt;br /&gt;
         find ../../p -type f -name \*.m -print -exec mumps {} \;&lt;br /&gt;
         find ../r -type f -name \*.m -print -exec mumps {} \;&lt;br /&gt;
         find ../p -type f -name \*.m -print -exec mumps {} \;&lt;br /&gt;
         cd ..&lt;br /&gt;
         chmod a-w o&lt;br /&gt;
         cd add-ons&lt;br /&gt;
         chmod u+w o&lt;br /&gt;
         mumps ../../../add-ons/*/{r,p}/*.m&lt;br /&gt;
         mumps ../*/{r,p}/*.m&lt;br /&gt;
         cd ..&lt;br /&gt;
         chmod a-w o&lt;br /&gt;
* Object files in the working environments will be automatically recompiled as needed.  In the event you wish to recompile them, e.g., to not see compilation errors when using VistA, do the following as the normal user in each environment (ignore compilation errors and complaints about files not found):&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /var/WorldVistAEHR/gtm_V5.2-001/o&lt;br /&gt;
         mumps ../../{r,p}/*.m&lt;br /&gt;
         mumps ../{r,p}/*.m&lt;br /&gt;
         cd ../add-ons/o&lt;br /&gt;
         mumps ../../../add-ons/{r,p}/*.m&lt;br /&gt;
         mumps ../*/{r,p}/*.m&lt;br /&gt;
:and&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /home/vista/myWorldVistAEHR/gtm_V5.2-001/o&lt;br /&gt;
         mumps ../../{r,p}/*.m&lt;br /&gt;
         mumps ../{r,p}/*.m&lt;br /&gt;
         cd ../add-ons/o&lt;br /&gt;
         mumps ../../../add-ons/{r,p}/*.m&lt;br /&gt;
         mumps ../*/{r,p}/*.m&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Migrating_a_VistA/GT.M_installation_from_one_platform_to_another&amp;diff=5062</id>
		<title>Migrating a VistA/GT.M installation from one platform to another</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Migrating_a_VistA/GT.M_installation_from_one_platform_to_another&amp;diff=5062"/>
		<updated>2007-07-26T15:23:08Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are instructions for copying a GT.M SemiVivA installation from one platform to another.  For this discussion, the platforms are assumed to be of different endian-ness, e.g., x86 GNU/Linux and Sun SPARC Solaris).&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Existing SemiVivA scripts use the bash shell, and assume that it is located at /bin/bash.  Modify the location if bash is located elsewhere.  Edit the scripts as needed to use other shells.&lt;br /&gt;
# [http://xinetd.org xinetd] is assumed to control th&lt;br /&gt;
# It is assumed that the GT.M versions use the same database format.&lt;br /&gt;
# The VistA environments to be copied must be identified, along with the hierarchical structure (see [[Software Development (WG1) Version Control (T3)]]), e.g.&lt;br /&gt;
#* /usr/local/WorldVistAEHRvTEST20070616&lt;br /&gt;
#** /var/WorldVistAEHR&lt;br /&gt;
#** /home/vista/myWorldVistAEHR&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
# Obtain and install GT.M for the new platform in a sub-directory of /usr/local, e.g., in /usr/local/gtm_V5.2-001.&lt;br /&gt;
# Copy the identified directories, including subdirectories from the originating machine to the target machine.  Object files (.o) should not be copied, and if they are, they should be deleted e.g., for the top level directory of each working environment (as root for the top level :&lt;br /&gt;
         cd &amp;lt;directory&amp;gt;&lt;br /&gt;
         find . -type d -name o -exec chmod -v {} \;&lt;br /&gt;
         find . -name \*.o -exec rm -rv {} \;&lt;br /&gt;
# Change the endian-ness of the database (see [http://www.fidelityinfoservices.com/user_documentation/targets/GTM_Database_Endian_Conversion.html Technical Bulletin: GT.M Database Endian Conversion - UNIX] for more information) in the top level release environment, from which other environments are derived (in this example, /usr/local/WorldVistAEHRvTEST20070616).  As root:&lt;br /&gt;
         cd /usr/local/WorldVistAEHRvTEST20070616/gtm_V5.2-001&lt;br /&gt;
         chmod u+w g&lt;br /&gt;
         cd g&lt;br /&gt;
         gzip -d mumps.dat.gz&lt;br /&gt;
         source /usr/local/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         mupip endiancvt mumps.dat&lt;br /&gt;
         gzip mumps.dat&lt;br /&gt;
         cd ..&lt;br /&gt;
         chmod a-w g&lt;br /&gt;
# Change the endian-ness of the database in each working environment (/var/WorldVistAEHR and /home/vista/myWorldVistAEHR in this example).  As the normal user for each working environment:&lt;br /&gt;
         cd /var/WorldVistAEHR/gtm_V5.2-001/g&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         mupip endiacvt mumps.dat&lt;br /&gt;
and&lt;br /&gt;
         cd /home/vista/myWorldVistAEHR/gtm_V5.2-001/g&lt;br /&gt;
         source /usr/local/gtm/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         mupip endiacvt mumps.dat&lt;br /&gt;
# Recompile the object files in the top level release environment (ignore compilation errors; remember that some directories may not be empty  this script takes care of the general case where there may be files in the different source directories).  As root:&lt;br /&gt;
         source /usr/local/gtm_V5.2-001/gtmprofile&lt;br /&gt;
         cd /usr/local/WorldVistAEHRvTEST20070616/gtm_V5.2-001&lt;br /&gt;
         chmod u+w o&lt;br /&gt;
         cd o&lt;br /&gt;
         find ../../r -name \*.m -print -exec mumps {} \;&lt;br /&gt;
         find ../../p -name \*.m -print -exec mumps {} \;&lt;br /&gt;
         find ../r -name \*.m -print -exec mumps {} \;&lt;br /&gt;
         find ../p -name \*.m -print -exec mumps {} \;&lt;br /&gt;
         cd ..&lt;br /&gt;
         chmod a-w o&lt;br /&gt;
         cd add-ons&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Migrating_a_VistA/GT.M_installation_from_one_platform_to_another&amp;diff=5061</id>
		<title>Migrating a VistA/GT.M installation from one platform to another</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Migrating_a_VistA/GT.M_installation_from_one_platform_to_another&amp;diff=5061"/>
		<updated>2007-07-26T14:32:02Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are instructions for copying a GT.M SemiVivA installation from one platform to another.  For this discussion, the platforms are assumed to be of different endian-ness, e.g., x86 GNU/Linux and Sun SPARC Solaris).&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Existing SemiVivA scripts use the bash shell, and assume that it is located at /bin/bash.  Modify the location if bash is located elsewhere.  Edit the scripts as needed to use other shells.&lt;br /&gt;
# [http://xinetd.org xinetd] is assumed to control th&lt;br /&gt;
# It is assumed that the GT.M versions use the same database format.&lt;br /&gt;
# The VistA environments to be copied must be identified, along with the hierarchical structure (see [[Link title]]), e.g.&lt;br /&gt;
#* /usr/local/FOIAVistA20061230&lt;br /&gt;
#** /var/FOIAVistAprod&lt;br /&gt;
#* /usr/local/WorldVistAEHRvTEST20070616&lt;br /&gt;
#** /home/vista/myWorldVistAEHR&lt;br /&gt;
#*** /home/bhaskar/WorldVistAEHRdev&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
# Obtain and install GT.M for the new platform in a sub-directory of /usr/local, e.g., in /usr/local/gtm_V5.2-001.&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Migrating_a_VistA/GT.M_installation_from_one_platform_to_another&amp;diff=5060</id>
		<title>Migrating a VistA/GT.M installation from one platform to another</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Migrating_a_VistA/GT.M_installation_from_one_platform_to_another&amp;diff=5060"/>
		<updated>2007-07-26T14:30:34Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are instructions for copying a GT.M SemiVivA installation from one platform to another.  For this discussion, the platforms are assumed to be of different endian-ness, e.g., x86 GNU/Linux and Sun SPARC Solaris).&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Existing SemiVivA scripts use the bash shell, and assume that it is located at /bin/bash.  Modify the location if bash is located elsewhere.  Edit the scripts as needed to use other shells.&lt;br /&gt;
# [http://xinetd.org xinetd] is assumed to control th&lt;br /&gt;
# It is assumed that the GT.M versions use the same database format.&lt;br /&gt;
# The VistA environments to be copied must be identified, along with the hierarchical structure, e.g.&lt;br /&gt;
#* /usr/local/FOIAVistA20061230&lt;br /&gt;
#** /var/FOIAVistAprod&lt;br /&gt;
#* /usr/local/WorldVistAEHRvTEST20070616&lt;br /&gt;
#** /home/vista/myWorldVistAEHR&lt;br /&gt;
#*** /home/bhaskar/WorldVistAEHRdev&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
# Obtain and install GT.M for the new platform in a sub-directory of /usr/local, e.g., in /usr/local/gtm_V5.2-001.&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Main_Page&amp;diff=5122</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Main_Page&amp;diff=5122"/>
		<updated>2007-07-26T14:00:59Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: /* Installation Guides */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki covers questions regarding the VistA software, the various components of that software, and configuration and installation of the same. It incorporates information from many people. We have been repeatedly vandalized by people trying to advance their google page rank, hence this is now a closed community wiki.&lt;br /&gt;
&lt;br /&gt;
 To get access, contact David Whitten ( whitten at worldvista.org ) through an e-mail,&lt;br /&gt;
 or phone 713 870 3834 to get an account.&lt;br /&gt;
 Please send a contact telephone number with your e-mail, and/or&lt;br /&gt;
 have an e-mail address ready when you call. (I need both.)&lt;br /&gt;
 Please decide on your preferred User name.&lt;br /&gt;
 We have provided a [[User Status|page]] for new users and their current status.&lt;br /&gt;
 Thank you.  &lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Configuration is the process of changing details about a VistA package. &lt;br /&gt;
These details are fine level controls over the behaviour of the package.&lt;br /&gt;
&lt;br /&gt;
=== Overview of VistA ===&lt;br /&gt;
* [[Basic Questions]]&lt;br /&gt;
* [[Frequently Asked Questions]]&lt;br /&gt;
* [[VistA System Components]]&lt;br /&gt;
* [[Documentation Overview]]&lt;br /&gt;
** [[Glossary of Terms]] ([[Glossary Template]])&lt;br /&gt;
* [[Programming Languages Overview]]&lt;br /&gt;
** [[MUMPS Overview]]&lt;br /&gt;
** [[Delphi Overview]]&lt;br /&gt;
** [[Java Overview]]&lt;br /&gt;
** [[SQL Overview]]&lt;br /&gt;
** [[XML Overview]]&lt;br /&gt;
* [[Programming VistA Issues]]&lt;br /&gt;
* [[FileMan Overview]] (with details also)&lt;br /&gt;
* [[Kernel Overview]]&lt;br /&gt;
* [[Operating Systems Overview]]&lt;br /&gt;
* [[VistA Packages Overview]]&lt;br /&gt;
** [[CPRS Overview]]&lt;br /&gt;
* [[M2Web Overview]]&lt;br /&gt;
&lt;br /&gt;
=== Projects Information ===&lt;br /&gt;
* Information is available at the [[Projects_List]] page&lt;br /&gt;
&lt;br /&gt;
=== Installation Guides ===&lt;br /&gt;
* [[Installation Overview]]&lt;br /&gt;
* [[Installation How To VistA GT.M Linux]]&lt;br /&gt;
* [[Installation How To VistA GT.M Ubuntu Linux | Installation How To VistA GT.M Ubuntu Linux including VistALink (Java)]]&lt;br /&gt;
* [[Migrating a VistA/GT.M installation from one platform to another]]&lt;br /&gt;
* [[Installation How To VistA/Cache]]&lt;br /&gt;
* [[Introducing VistA VivA 0.1]]&lt;br /&gt;
* [[Hardware Issues]]&lt;br /&gt;
* [[CPRS Installation]]&lt;br /&gt;
* [[VistALink]]&lt;br /&gt;
&lt;br /&gt;
=== Installation of Demos ===&lt;br /&gt;
* [[Installation How To VistA/GT.M coLinux]]&lt;br /&gt;
* [[Using the VistA Appliance]]&lt;br /&gt;
&lt;br /&gt;
=== Installation of Programmer Tools ===&lt;br /&gt;
* [[Victory Programmer Environment (VPE) Installation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration of Packages ===&lt;br /&gt;
* [[Configuration Overview]]&lt;br /&gt;
* [[Register a Patient]]&lt;br /&gt;
* [[HL7 Multi-Listener]]&lt;br /&gt;
&lt;br /&gt;
=== Collaboration Tools ===&lt;br /&gt;
* [[OpenForum]]&lt;br /&gt;
* Message Board (read only): http://www.mail-archive.com/hardhats-members@lists.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
* [[CHC Corner]] for &#039;&#039;&#039;   Community Health Centers   &#039;&#039;&#039; discussion/wish list/collaboration/etc.&lt;br /&gt;
&lt;br /&gt;
* [[From Hardhats Listserve:]]&lt;br /&gt;
&lt;br /&gt;
=== Volunteer Opportunities with WorldVistA ===&lt;br /&gt;
* [[Volunteer Coordinator]]&lt;br /&gt;
* [[Planning for VistA Advances]]&lt;br /&gt;
* [[Advocating VistA]]&lt;br /&gt;
* [[Documenting VistA]]&lt;br /&gt;
* [[Organization and Planning For VistA Community Meeting]]&lt;br /&gt;
* [[Recording Results Of A VistA Community Meeting]]&lt;br /&gt;
* [[Categorizing Needs For New VistA Packages]]&lt;br /&gt;
* [[Developing New VistA Packages]]&lt;br /&gt;
* [[Administration Of OpenForum]]&lt;br /&gt;
* [[VistA Community Weekly Conference Call]]&lt;br /&gt;
&lt;br /&gt;
=== Working Groups ===&lt;br /&gt;
*[[Software Development (WG1)]]&lt;br /&gt;
*[[Education and Training (WG2)]]&lt;br /&gt;
*[[Finance (WG3)]]&lt;br /&gt;
*[[Membership and Community (WG4)]]&lt;br /&gt;
*[[International (WG5)]]&lt;br /&gt;
&lt;br /&gt;
=== [[Community Meeting]] ===&lt;br /&gt;
* [[VistA Community Meeting Q1 2007]]&lt;br /&gt;
* [[VistA Community Meeting Q2 2007]]&lt;br /&gt;
* [[VistA Community Meeting Q1 2006]]&lt;br /&gt;
* [[VistA Community Meeting Q2 2006]]&lt;br /&gt;
* [[VCM Boston 2005]]&lt;br /&gt;
&lt;br /&gt;
=== [[Weekly Conference Calls]] ===&lt;br /&gt;
&lt;br /&gt;
=== Details about this page ===&lt;br /&gt;
To limit vandalism, this page has been write-protected. If you need to make modifications to this page,&lt;br /&gt;
contact DavidWhitten, who will help you make changes. Thank you for your support.&lt;br /&gt;
=== Details of this website&#039;s software ===&lt;br /&gt;
&lt;br /&gt;
This Wiki is based on the mediawiki software. [[Unique Features of Forum Wiki]]&lt;br /&gt;
&lt;br /&gt;
Please see [http://meta.wikipedia.org/wiki/MediaWiki_i18n documentation on customizing the interface]&lt;br /&gt;
and the [http://meta.wikipedia.org/wiki/MediaWiki_User%27s_Guide User&#039;s Guide] for usage and configuration help.&lt;br /&gt;
&lt;br /&gt;
Editing help see http://meta.wikimedia.org/wiki/Help:Editing#Sections.2C_paragraphs.2C_lists_and_lines&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Installation_Overview&amp;diff=4706</id>
		<title>Installation Overview</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Installation_Overview&amp;diff=4706"/>
		<updated>2006-01-26T17:01:31Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: /* Getting the software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The documentation for VistA and OpenVistA can be classified in several groups:&lt;br /&gt;
== Getting the software ==&lt;br /&gt;
  This is the VA ftp site for VistA:  ftp://ftp.va.gov/VistA/   --ftp here requires IE not FireFox.&lt;br /&gt;
  The &amp;lt;tt&amp;gt;gftp&amp;lt;/tt&amp;gt; client on Linux also works.&lt;br /&gt;
&lt;br /&gt;
  This link is specifically for software: ftp://ftp.va.gov/VistA/Software/&lt;br /&gt;
&lt;br /&gt;
  For the open source free software stack for VistA: http://sourceforge.net/projects/worldvista&lt;br /&gt;
&lt;br /&gt;
== Installation Documentation created by WorldVistA and volunteers in the VistA Community. ==&lt;br /&gt;
&lt;br /&gt;
=== Getting up and running with the VistA open source free software ([http://en.wikipedia.org/wiki/Free_and_Open_Source_Software FOSS]) stack ===&lt;br /&gt;
&lt;br /&gt;
The complete FOSS stack for VistA consists of VistA on [http://www.sanchez-gtm.com GT.M] on [http://www.wikipedia.org/wiki/Linux GNU/Linux] on industry standard x86 server hardware.  Although it is certainly possible to install this stack by downloading VistA, and installing it on GT.M on x86 GNU/Linux, it is much easier to start with a pre-configured software stack.  There are (at least) two flavors of VistA, and two types of packages of VistA on GT.M.&lt;br /&gt;
&lt;br /&gt;
VistA flavors:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;FOIA VistA&#039;&#039;&#039; is VistA as periodically released by the [http://www.va.gov US Department of Veterans Affairs] under the [http://www.usdoj.gov/oip/foia_updates/Vol_XVII_4/page2.htm Freedom of Information Act (FOIA).]  This is sometimes referrd to as the &amp;quot;gold standard&amp;quot;.  Prior versions of this software at the [http://sourceforge.net/projects/worldvista WorldVistA project page at Source Forge] are labelled OpenVistA FOIA Gold.  FOIA VistA releases are numbered by the date on which they are released under FOIA, e.g., 20051021 for Oct 21, 2005.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Leonardo da VistA&#039;&#039;&#039; is FOIA VistA as enhanced by the VistA community.  &#039;&#039;&#039;Leonardo da VistA is used here as strictly an interim, temporary, just-until-the-new-name-is-announced name.&#039;&#039;&#039;  This software was previously known to the community first as &amp;quot;Hui OpenVistA&amp;quot;, and then as just &amp;quot;OpenVistA&amp;quot;.  The subsequent grant by the US Patent and Trademark Office of a registered trademark of that name to a corporation has triggered a search for a replacement name, and Leonardo da VistA is used here until the new name is announced.  Prior releases of this software at the [http://sourceforge.net/projects/worldvista WorldVistA project page at Source Forge] are labelled OpenVistA.  Leonardo da VistA releases have numbers such as 0.4.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;OpenVistA VA Demo&#039;&#039;&#039; is a one-of release of a configuration of VistA intended to demonstrate the CPRS GUI, but not to be otherwise useful, and not part of a family of releases.&lt;br /&gt;
&lt;br /&gt;
In the future, it is hoped that there will be other flavors, e.g., VistA Office EHR.&lt;br /&gt;
&lt;br /&gt;
Types of packages:&lt;br /&gt;
&lt;br /&gt;
*A &#039;&#039;&#039;SemiVivA&#039;&#039;&#039; package consists of VistA and GT.M bundled together and ready to be installed on an x86 GNU/Linux server.&lt;br /&gt;
&lt;br /&gt;
*A &#039;&#039;&#039;VivA&#039;&#039;&#039; or &#039;&#039;&#039;VivitA&#039;&#039;&#039;package is a [http://en.wikipedia.org/wiki/Linux_live_cd live CD (or DVD)] that can be booted on any x86 architecture server to run the entire VistA FOSS stack.  VivitA releases are created by mastering [http://damnsmalllinux.org DSL] and the VivA releases are created by remastering either [http://knopper.net/knoppix/index-en.html Knoppix] or [http://morphix.org Morphix].&lt;br /&gt;
&lt;br /&gt;
SemiVivA packages expect to find [http://xdialog.dyns.net Xdialog] on the computer.  To use a SemiVivA package, download it to a temporary directory (e.g., as &amp;lt;tt&amp;gt;/tmp/LeonardoDaVistASemiVivA0.4.tgz&amp;lt;/tt&amp;gt;).  Then, &#039;&#039;&#039;as root&#039;&#039;&#039; execute:&lt;br /&gt;
&lt;br /&gt;
  cd /usr/local&lt;br /&gt;
  tar zxvf /tmp/LeonardoDaVistASemiVivA0.4.tgz&lt;br /&gt;
&lt;br /&gt;
This will install VistA and GT.M.  To use it, an environment with an initial copy of the database must be created with the command:&lt;br /&gt;
&lt;br /&gt;
  /usr/local/LeonardoDaVistA/vista --install &#039;&#039;directory&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the above, substitute the actual VistA release name (e.g., OpenVistA, FOIAVistA) for LeonardoDaVistA.  &#039;&#039;directory&#039;&#039; is the full path name of a directory (without a trailing slash) where the environment with the initial copy of the database is to be created, e.g., &amp;lt;tt&amp;gt;/home/vista/myVistA&amp;lt;/tt&amp;gt;.  To subsequently run VistA, VivitAs again have an option from the mouse on the background.  For VivAs, use:&lt;br /&gt;
&lt;br /&gt;
  /usr/local/LeonardoDaVistA/vista --run &#039;&#039;directory&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To use a VivA or VivitA package, read/write storage is required for the database.  The current distributions can use a Linux file system (e.g., ext3, reiserfs) or a FAT file system (Windows 95/98/ME) but not an NTFS file system (Windows NT/2000/XP/2003).  The live CD/DVDs have tools needed to partition a hard drive and create a new file system.  The easiest way to proceed is to simply plug a 512MB or bigger USB flash or thumb drive (or a USB hard drive) into the USB port (USB 2.0 preferred) of an x86 server, and boot the CD/DVD.  The instructions below are for USB drives, but apply equally well - with appropriate names for the read/write storage - for IDE and SCSI drives.&lt;br /&gt;
&lt;br /&gt;
*After booting the operating system, you will need to mount the read/write storage.  For Knoppix based VivA releases, right click on the icon for the drive and mount the drive.  This mounts it read-only.  Right click again, choose Actions and change the mode to read/write.  Note the name of the drive; it will probably be something like &amp;lt;tt&amp;gt;/mnt/uba1&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;/mnt/sda1&amp;lt;/tt&amp;gt;.  For DSL based VivitA releases, there is a small window in the lower right of the screen with a mounting applet.  Immediately after boot up, it will say &#039;&#039;floppy&#039;&#039;.  Click on the arrow icons within the applet to choose &#039;&#039;sda1&#039;&#039; or other read/write storage, and then click on the icon in the applet to mount the drive.  For (older) Morphix based releases, execute:&lt;br /&gt;
&lt;br /&gt;
  sudo insmod usb-storage&lt;br /&gt;
  mount /mnt/sda1&lt;br /&gt;
&lt;br /&gt;
*You will need to create an environment with an initial copy of the database.  VivitAs have an option from the &amp;quot;start menu&amp;quot; from clicking the right mouse button on the background.  On VivA releases, start a shell, and execute (as before, use the actual name of your VistA):&lt;br /&gt;
&lt;br /&gt;
  /usr/local/LeonardoDaVistA/vista --install &#039;&#039;directory&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*To subsequently run VistA, VivitAs again have an option from the mouse on the background.  For VivAs, use:&lt;br /&gt;
&lt;br /&gt;
  /usr/local/LeonardoDaVistA/vista --run &#039;&#039;directory&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When the GT.M prompt (&amp;lt;tt&amp;gt;GTM&amp;gt;&amp;lt;/tt&amp;gt;) appears, you have a VistA environment that is ready to start configuring.&lt;br /&gt;
&lt;br /&gt;
== Installation Documentation from sofware and hardware vendors of VistA and OpenVistA. ==&lt;br /&gt;
&lt;br /&gt;
== Installation Documentation from the [[VistA Documentation Library]] (VDL) ==&lt;br /&gt;
&lt;br /&gt;
=== Clinical ===&lt;br /&gt;
&amp;lt;TABLE summary=&amp;quot;This table is for formatting purposes only.&amp;quot; class = &amp;quot;toc&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Admission Discharge Transfer (ADT)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Electronic Wait List]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Medicine]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Prescription Practices (PPP)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Ambulatory Care Reporting]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Functional Independence Measurement (FIM)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Mental Health]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Primary Care Management Module (PCMM)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Beneficiary Travel]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Group Notes]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Nursing]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Prosthestics]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Care Management]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Home Based Primary Care (HBPC)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Oncology]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Quality Audiology Speech Anal &amp;amp; Rpting (QUASAR)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Clinical Case Registries]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Immunology Case Registry (ICR)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Patient Care Encounter (PCE)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Radiology / Nuclear Medicine]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Clinical Procedures]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Incomplete Records Tracking (IRT)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy  Automatic Replenish / Ward Stock (AR/WS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of RAI/MDS]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Computerized Patient Record System (CPRS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Intake and Output]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Bar Code Medication Administration (BCMA)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Remote Order Entry System (ROES)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Adverse Reaction Tracking (ART)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory Anatomic Pathology]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Benefits Management (PBM)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Scheduling]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Authorization Subscription Utility (ASU)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory Blood Bank]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Consolidated Mail Outpatient Pharmacy]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Social Work]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Clinical Reminders]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory Blood Bank Workarounds]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Controlled Substances]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Spinal Cord Dysfunction]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Consult/Request Tracking]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory Electronic Data Interchange (LEDI)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Data Management (PDM)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Surgery]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Health Summary]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory Emerging Pathogens Initiative]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Drug Accountability]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of VISTA Imaging System]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Problem List]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory National Laboratory Tests/ LOINC Request Form]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Electronic Claims Management Engine (ECME)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Visual Impairment Service Team (VIST)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Text Integration Utility (TIU)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory Universal Interface]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Inpatient Medications]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Vitals / Measurements]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Dentistry]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy National Drug File (NDF)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Women&#039;s Health]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Dietetics]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Lexicon Utility]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Outpatient Pharmacy]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
=== Infrastructure ===&lt;br /&gt;
&amp;lt;TABLE summary=&amp;quot;This table is for formatting purposes only.&amp;quot; class = &amp;quot;toc&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Capacity Management Tools]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Kernel Delphi Components (KDC)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Minimal Patient Dataset (MPD)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of SlotMaster (Kernel ZSLOT)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Duplicate Record Merge- Patient Merge]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Kernel Installation and Distribution System (KIDS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Name Standardization]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of SQL Interface (SQLI)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Electronic Error and Enhancement Reporting (E3R)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Kernel Toolkit]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of National Online Information Sharing (NOIS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Standard Files and Tables]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of FileMan]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Kernel Unwinder]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of National Patch Module]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Statistical Analysis of Global Growth (SAGG)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of FileMan Delphi Components (FMDC)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of List Manager]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Network Health Exchange (NHE)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Survey Generator]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of HL7 (VistA Messaging)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of M-to-M Broker]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Patient Data Exchange (PDX)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of VistA Data Extraction Framework (VDEF)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Institution File Redesign (IFR)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of MailMan]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Remote Procedure Call (RPC) Broker]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of XML Parser (VistA)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Kernel]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Master Patient Index (MPI)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Resource Usage Monitor]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
=== Financial-Administrative ===&lt;br /&gt;
&amp;lt;TABLE summary=&amp;quot;This table is for formatting purposes only.&amp;quot; class = &amp;quot;toc&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Accounts Receivable (AR)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Engineering (AEMS / MERS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of IFCAP]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Patient Representative]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Auto Safety Incdnt Surv Trak Sys (ASISTS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Enrollment Application System]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Incident Reporting]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Personnel and Accounting Integrated Data (PAID)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Automated Information Collection System (AICS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Equipment / Turn-In Request]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Income Verification Match (IVM)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Police and Security]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Automated Medical Information Exchange (AMIE)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Event Capture]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Integrated Billing (IB)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Quality Management Integration Module]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Clinical Monitoring System]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Fee Basis]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Integrated Patient Funds]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Record Tracking]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Compensation &amp;amp; Pension Records Interchange (CAPRI)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Generic Code Sheet (GCS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Library]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Release of Information (ROI) Manager]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Current Procedural Terminology (CPT)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Health Eligibility Center (HEC)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Missing Patient Register]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Veterans Identification Card (VIC/PICS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Decision Support System (DSS) Extracts]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Hospital Inquiry (HINQ)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Occurrence Screen]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Voluntary Service System (VSS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Diagnostic Related Group (DRG) Grouper]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of ICD-9-CM]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;/TABLE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=2294</id>
		<title>Software Development (WG1) Version Control (T3)</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=2294"/>
		<updated>2005-11-22T20:04:30Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: /* VistA Development Directories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a VistA Development Environment ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
This is a description of how VistA development environments should be configured.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Monospaced text&amp;lt;/tt&amp;gt; designates program names, directory names, command line parameters, etc., that are intended to be typed in at a Linux shell or a GT.M prompt, e.g. &amp;lt;tt&amp;gt;/bin/bash&amp;lt;/tt&amp;gt;.  &#039;&#039;Italic text&#039;&#039; is a descriptor of something whose actual value must be determined when the command is typed, e.g., &#039;&#039;gtmver&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Theory ===&lt;br /&gt;
&lt;br /&gt;
A release is a collection of routines and global variables.  The canonical packaging of a release, which is suitable for importation into any standard M distribution, is a collection of M source code routines and a database extract in ZWRite format.  When installed on a system, to run with an M implementation, a release may have pre-compiled object files, database files, shell scripts, global directories, etc.&lt;br /&gt;
&lt;br /&gt;
Below is a diagram of the “roll-up” by which a VistA release (“Release A”) gets converted into another VistA release (“Release B”) by a development team.  A and B could be from different families, e.g., Release A could be a FOIA release and Release B could be a Leonardo da VistA release.&lt;br /&gt;
&lt;br /&gt;
[[Image:051112-1WorldVistADevelopmentEnvironment_html_26096dee.gif|&lt;br /&gt;
&amp;quot;Roll up&amp;quot; model of VistA releases]]&lt;br /&gt;
&lt;br /&gt;
Once Release A is installed, it remains frozen and unchanged except for any essential patches that may become available independent of the development process for creating Release B and without which the release lacks some required functionality.  This means, for example, that KIDS patches should be applied in an integration environment rather than a release environment.&lt;br /&gt;
&lt;br /&gt;
At any given time, there can be multiple development projects underway based on Release A.  In other words, there may well be a Release C that is also based on Release A, but which has its own integration and development areas.&lt;br /&gt;
&lt;br /&gt;
To start the development process, an integration directory is created and initialized with a copy of the global variables from Release A, as well as shell scripts, global directories, etc.  The integration directory may well have a different name from Release A and Release B.  For example, Release A may be FOIAVistA_20051021, Release B may become LeonardoDaVistA_0.4 (at the time that the integration area is created, the name and version of Release B may not even be decided yet), and the integration and development areas may be named Greenbelt_200510.  There is no need to copy routines, since the GT.M search path will be set up to look for routines in the integration area before looking in Release A; hence only routines that are different between Release A and the new release need to be duplicated.&lt;br /&gt;
&lt;br /&gt;
Actual development does not take place in the integration area.  Development occurs in development areas, typically in the directories of individual developers; however, there may be a shared development area if two developers are collaborating on making changes to the very same module (i.e., their code changes overlap).  A development area is set up by creating a directory structure, shell scripts, etc.  Note that development areas can be hierarchical so that development subtasks 1a and 1b can be developed separately and integrated into development task 1, prior to integration into the integration area, etc.&lt;br /&gt;
&lt;br /&gt;
During this development process, developers develop code in individual sand boxes (development areas), but normally share the database (global variables) in the integration area – there may typically be no need to create a separate database.  However, if some global variable changes are tied to code changes being made in a development area, a copy of those global variables can be placed in a separate database file in that development area, and a global directory for that development area can map those global variables to the database in that development area, with all other global variables mapped to the database in the integration area.&lt;br /&gt;
&lt;br /&gt;
When a developer has code that is ready for integration, the new versions of the modified routines are promoted to the integration area.  Any global variables tied to the code being promoted that are in a database in the development area must be merged, reconciled or otherwise integrated with the global variables in the database in the integration area and the global directory in the development area modified accordingly.  Note that there needs to be a process, e.g., involving code reviews, by which a development task is considered complete enough to be promoted.  These, and other quality gates, are not discussed herein.&lt;br /&gt;
&lt;br /&gt;
Creating a release is minimally the process of creating the directory structure for Release B, copying the routines from Release A, overlying the routines with those from the integration area, and copying the global variables from the integration area.&lt;br /&gt;
&lt;br /&gt;
Normally, Release A, the integration area and development areas would all use the same GT.M version.  However, this is not a requirement.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;It is strongly recommended that database files in integration and development environments be journaled, and backed up regularly.  It is also strongly recommended that a version control system such as CVS or subversion be used for integration areas.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Practice ===&lt;br /&gt;
&lt;br /&gt;
==== Shell ====&lt;br /&gt;
&lt;br /&gt;
The standard shell for VistA community scripting is bash (installed as &amp;lt;tt&amp;gt;/bin/bash&amp;lt;/tt&amp;gt; on Debian GNU/Linux systems).&lt;br /&gt;
&lt;br /&gt;
==== GT.M Release Directories ====&lt;br /&gt;
&lt;br /&gt;
Each release of GT.M is installed its own subdirectory of &amp;lt;tt&amp;gt;/opt&amp;lt;/tt&amp;gt; (preferred) or &amp;lt;tt&amp;gt;/usr/local&amp;lt;/tt&amp;gt; (acceptable).  Each directory name starts with &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; followed by a release number separated from the release name by an underscore (&amp;lt;tt&amp;gt;_&amp;lt;/tt&amp;gt;).  Thus, for example, GT.M V5.0-000C would be installed in &amp;lt;tt&amp;gt;/opt/gtm_V5.0-000C&amp;lt;/tt&amp;gt;.  &amp;lt;tt&amp;gt;/opt/gtm&amp;lt;/tt&amp;gt; is a relative symbolic link to the latest version, set up with a command sequence such as:&lt;br /&gt;
&lt;br /&gt;
  cd /opt&lt;br /&gt;
  rm -f gtm&lt;br /&gt;
  ln -s gtm_V5.0-000C gtm&lt;br /&gt;
&lt;br /&gt;
When installing GT.M, the file gtmprofile should be edited so that the line:&lt;br /&gt;
&lt;br /&gt;
  EDITOR=&amp;quot;/bin/vi&amp;quot;; export EDITOR&lt;br /&gt;
&lt;br /&gt;
is modified to read:&lt;br /&gt;
&lt;br /&gt;
  export EDITOR=${EDITOR:=/bin/vi}&lt;br /&gt;
&lt;br /&gt;
==== VistA Release Directories ====&lt;br /&gt;
&lt;br /&gt;
Each release is installed in its own sub-directory of a standard system location, such as &amp;lt;tt&amp;gt;/opt&amp;lt;/tt&amp;gt; (preferred) or &amp;lt;tt&amp;gt;/usr/local&amp;lt;/tt&amp;gt; (acceptable).  Each directory has a release family name followed by a release / version number suffix separated from the release name by an underscore.  Directories for releases without version numbers, such as FOIA releases, have a date suffix of the form &#039;&#039;yyyymmdd&#039;&#039; (and where appropriate just &#039;&#039;yyyymm&#039;&#039;).  For example, an August 25, 2005 FOIA release might be in &amp;lt;tt&amp;gt;/opt/FOIAVistA20050825&amp;lt;/tt&amp;gt;, an October 21, 2005 release in &amp;lt;tt&amp;gt;/opt/FOIAVistA20051021&amp;lt;/tt&amp;gt;, an OpenVistA 0.3 release in &amp;lt;tt&amp;gt;/opt/OpenVistA0.3&amp;lt;/tt&amp;gt; and a Leonardo da VistA 0.45 release in &amp;lt;tt&amp;gt;/opt/LeonardoDaVistA0.45&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The normal protection on all directories and files in a release directory should be read-only.  To install files in the &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; subdirectory, it should be made read-write, the source file(s) for the patch copied in, the object file(s) generated, and the directory and its contents again made read-only.&lt;br /&gt;
&lt;br /&gt;
For each release family, the release directory contains subdirectories &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt;, symbolic link &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt;, a script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt;, scripts &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;cprs_direct&amp;lt;/tt&amp;gt; that are not executable in a release directory, but which are used when copied to integration directories and made executable.  A file &amp;lt;tt&amp;gt;env&amp;lt;/tt&amp;gt; is used to set up the execution environment.&lt;br /&gt;
&lt;br /&gt;
Other files and shell scripts may be created for various maintenance purposes (and ideally would be documented here).&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt; contains a global directory file &amp;lt;tt&amp;gt;mumps.gld&amp;lt;/tt&amp;gt; and a compressed database file &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.  The global directory maps all global variables to a single database file &amp;lt;tt&amp;gt;$vista_home/g/mumps.dat&amp;lt;/tt&amp;gt; (i.e., the environment variable &amp;lt;tt&amp;gt;$vista_home&amp;lt;/tt&amp;gt; is used at run-time to point a GT.M process to the location of the database file, so that different processes can actually use the same global directory to refer to entirely different database files).&lt;br /&gt;
&lt;br /&gt;
*Subdirectories &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; correspond to directories for files containing routine object code and routine source code respectively.  Each file in &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; ends in &amp;lt;tt&amp;gt;.m&amp;lt;/tt&amp;gt; and has a corresponding file in &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt; with a newer time stamp and which ends in &amp;lt;tt&amp;gt;.o&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; contains source and object code for patches to a release (generated outside the scope of the work for creating Release B) and which are deemed to be essential for the proper functioning of the release.&lt;br /&gt;
&lt;br /&gt;
*The symbolic link &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; points to the GT.M directory used for this VistA directory.&lt;br /&gt;
&lt;br /&gt;
*The file &amp;lt;tt&amp;gt;env&amp;lt;/tt&amp;gt; sets up the GT.M environment:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# env - file to be sourced to create VistA environment&lt;br /&gt;
#&lt;br /&gt;
# This temporary version of the commands to set up the VistA&lt;br /&gt;
# environment assumes that the parent and child use the same&lt;br /&gt;
# version of GT.M.&lt;br /&gt;
&lt;br /&gt;
if [[ -d parent ]] ; then&lt;br /&gt;
  pushd parent 1&amp;gt;/dev/null&lt;br /&gt;
  source ./env&lt;br /&gt;
  popd 1&amp;gt;/dev/null&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [[ -n $routines ]] ; then&lt;br /&gt;
  export routines=&amp;quot;$PWD/p $PWD/o($PWD/r) $routines&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  export routines=&amp;quot;$PWD/p $PWD/o($PWD/r)&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
if [[ -f $PWD/g/mumps.dat ]] ; then export vista_home=$PWD ; fi&lt;br /&gt;
&lt;br /&gt;
source gtm/gtmprofile&lt;br /&gt;
export gtmgbldir=$PWD/g/mumps.gld&lt;br /&gt;
export gtmroutines=&amp;quot;$routines $gtm_dist&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*The script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt; creates a new integration directory to be used in creating a new release from this release.  Normally, the initial database file of the integration directory is created by uncompressing &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.  Here is the script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# install - create new VistA environment as child of current environment&lt;br /&gt;
#&lt;br /&gt;
# This temporary version of the install script assumes that both&lt;br /&gt;
# have the same GT.M version.  Also, there is no error handling yet,&lt;br /&gt;
# and no provision yet for a separate database on the child.&lt;br /&gt;
#&lt;br /&gt;
# Set up standard environment to run VistA&lt;br /&gt;
&lt;br /&gt;
# Set up the environment for VistA&lt;br /&gt;
pushd `dirname $0` 1&amp;gt;/dev/null&lt;br /&gt;
export parent=$PWD&lt;br /&gt;
source ./env&lt;br /&gt;
popd 1&amp;gt;/dev/null&lt;br /&gt;
echo &amp;quot;Parent is&amp;quot; $parent&lt;br /&gt;
&lt;br /&gt;
# Create the directory structure for the child&lt;br /&gt;
mkdir -p $1/{g,o,r,p,tmp}&lt;br /&gt;
&lt;br /&gt;
# Link the child to the parent&lt;br /&gt;
ln -s $parent $1/parent&lt;br /&gt;
&lt;br /&gt;
# Give the child the same GT.M version as the parent&lt;br /&gt;
ln -s $parent/gtm $1/gtm&lt;br /&gt;
&lt;br /&gt;
# Copy other files in this directory&lt;br /&gt;
find $parent/ -maxdepth 1 -type f \! -name \*~ -exec cp {} $1/ \;&lt;br /&gt;
&lt;br /&gt;
# Make run &amp;amp; cprs_direct executable because it may not be executable for the parent&lt;br /&gt;
chmod u+x $1/run $1/cprs_direct&lt;br /&gt;
find $1 -maxdepth 1 \( -name run -o -name cprs_direct \) -perm -4 -exec chmod o+x {} \;&lt;br /&gt;
find $1 -maxdepth 1 \( -name run -o -name cprs_direct \) -perm -40 -exec chmod g+x {} \;&lt;br /&gt;
&lt;br /&gt;
# Give the child a global directory, for now the same as the parent&lt;br /&gt;
cp $parent/g/mumps.gld $1/g/mumps.gld&lt;br /&gt;
&lt;br /&gt;
# Give the child a database&lt;br /&gt;
if [[ -e $parent/g/mumps.dat.gz ]] ; then&lt;br /&gt;
  echo &amp;quot;Unzipping from parent to create initial database&amp;quot;&lt;br /&gt;
  gzip -d &amp;lt;$parent/g/mumps.dat.gz &amp;gt;$1/g/mumps.dat&lt;br /&gt;
  $gtm_dist/mupip set -journal=&amp;quot;enable,on,before&amp;quot; -file $1/g/mumps.dat&lt;br /&gt;
  chmod o+r,o-w,g+w $1/g/mumps.{dat,mjl}&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;Using parent database in this environment&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Make files except database files, journal files &amp;amp; directories read-only&lt;br /&gt;
find $1 -type f \! -name \*.dat \! -name \*mjl -exec chmod a-w {} \;&lt;br /&gt;
find $1 -type d -exec chmod 775 {} \;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Default permission for development environment is for all to read and group to write - please fix if needed&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a future enhancement, option &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039;, will specify that the integration directory is to be configured to run a different version of GT.M (as specified by the directory &#039;&#039;gtmver&#039;&#039;) from the one used by the release.  If &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; is used, the default assumption will be that the database will need to be extracted with the version of GT.M used by Release A, and loaded into a new database created with the version of GT.M to be used in the integration directory.  When &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; is used, a an additional optional option &amp;lt;tt&amp;gt;--nonewdb&amp;lt;/tt&amp;gt; will be available to specify that the releases of GT.M have compatible database formats, and that database from Release A can be used unchanged in the integration directory.  Note that the use of &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; will almost certainly result in a command that takes a long time, because the database may need to be extracted and reloaded, and the routines recompiled.&lt;br /&gt;
&lt;br /&gt;
Here is a listing of a top level release directory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bhaskar@Makaira:~$ ls -l /opt/FOIAVistA20051021&lt;br /&gt;
total 912&lt;br /&gt;
dr-xr-sr-x  2 root staff   4096 Sep 15 13:19 CPRS_Gui&lt;br /&gt;
-r-xr-xr-x  1 root staff    216 Nov 22 09:21 cprs_direct&lt;br /&gt;
-r--r--r--  1 root staff    583 Nov 22 09:21 env&lt;br /&gt;
dr-xr-xr-x  2 root staff   4096 Oct 27 14:00 g&lt;br /&gt;
lrwxrwxrwx  1 root staff     18 Nov 22 09:26 gtm -&amp;gt; /opt/gtm_V5.0-000C&lt;br /&gt;
-r-xr-xr-x  1 root staff   1832 Nov 22 10:44 install&lt;br /&gt;
dr-xr-xr-x  2 root staff 446464 Nov 22 07:10 o&lt;br /&gt;
dr-xr-sr-x  2 root staff   4096 Nov 22 09:22 p&lt;br /&gt;
dr-xr-xr-x  2 root staff 446464 Oct 27 13:38 r&lt;br /&gt;
-r--r--r--  1 root staff    252 Nov 22 09:21 run&lt;br /&gt;
-r-xr-xr-x  1 root staff   3633 Oct 30 06:42 vista&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== VistA Integration Directories ====&lt;br /&gt;
&lt;br /&gt;
Here is an example of creating an integration environment from a release environment:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vista@Makaira:~$ /opt/FOIAVistA20051021/install LeonardoDaVistA0.1&lt;br /&gt;
Parent is /opt/FOIAVistA20051021&lt;br /&gt;
Unzipping from parent to create initial database&lt;br /&gt;
%GTM-I-JNLCREATE, Journal file /home/vista/LeonardoDaVistA0.1/g/mumps.mjl created for database file /home/vista/LeonardoDaVistA0.1/g/mumps.dat with BEFORE_IMAGES&lt;br /&gt;
%GTM-I-JNLSTATE, Journaling state for database file /home/vista/LeonardoDaVistA0.1/g/mumps.dat is now ON&lt;br /&gt;
Default permission for development environment is for all to read and group to write - please fix if needed&lt;br /&gt;
vista@Makaira:~$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A VistA integration directory is similar to a VistA release directory, with the following differences.&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt; contains a database file, &amp;lt;tt&amp;gt;mumps.dat&amp;lt;/tt&amp;gt;, rather than a compressed database file, &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*The symbolic link &amp;lt;tt&amp;gt;parent&amp;lt;/tt&amp;gt; points to the release directory from which this integration directory was created.  A release directory does not have a symbolic link called parent. (The recommended way for a script to determine whether a directory is a release directory or an integration / development directory is to test for the existence of &amp;lt;tt&amp;gt;parent&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
*A script &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; which invokes and runs VistA in that integration environment.  Note that a VistA release may physically include a &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; script, but it will not work because it is not possible to directly run VistA from a release directory.  Here is the &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# run - run this instance of VistA&lt;br /&gt;
&lt;br /&gt;
# Set up the environment for VistA&lt;br /&gt;
pushd `dirname $0` 1&amp;gt;/dev/null&lt;br /&gt;
export parent=$PWD/parent&lt;br /&gt;
source ./env&lt;br /&gt;
popd 1&amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
if [[ -n $1 ]] ; then&lt;br /&gt;
  $gtm_dist/mumps -run $1&lt;br /&gt;
else&lt;br /&gt;
  $gtm_dist/mumps -dir&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*The &amp;lt;tt&amp;gt;cprs_direct&amp;lt;/tt&amp;gt; script handles connection requests from CPRS GUI client processes that come in via &amp;lt;tt&amp;gt;inetd&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;xinetd&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# cprs_direct - start a process to serve the CPRS Gui client&lt;br /&gt;
&lt;br /&gt;
# Set up the environment for VistA&lt;br /&gt;
export HOME=/home/`whoami`&lt;br /&gt;
cd `dirname $0`&lt;br /&gt;
export parent=$PWD/parent&lt;br /&gt;
source ./env&lt;br /&gt;
&lt;br /&gt;
# Run the server for the CPRS GUI client&lt;br /&gt;
cd tmp&lt;br /&gt;
$gtm_dist/mumps -run GTMLNX^XWBTCPM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*When the &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt; script is executed, it will create a development directory.&lt;br /&gt;
&lt;br /&gt;
*Except for database files, journal files, and directories, the normal protection on all directories and files in an integration directory should be read-only.  When promoting code to the integration directory from a development directory, or to install externally generated patches in the &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; subdirectory, needed directories should be made read-write, sources copied in, object file(s) generated, and directories again made read-only.&lt;br /&gt;
&lt;br /&gt;
Below is a listing of the directory of an integration environment created from the release in the example above.  Notice &amp;lt;tt&amp;gt;parent&amp;lt;/tt&amp;gt; link pointing to the directory of the parent environment.  (In this case, the &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; link points to the &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; link in the parent, rather than &amp;lt;tt&amp;gt;/opt/gtm_V5.0-000C&amp;lt;/tt&amp;gt;.  It doesn&#039;t matter either way.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bhaskar@Makaira:~$ ls -l /home/vista/LeonardoDaVistA0.1&lt;br /&gt;
total 48&lt;br /&gt;
-r-xr-xr-x  1 vista vista  216 Nov 22 09:28 cprs_direct&lt;br /&gt;
-r--r--r--  1 vista vista  583 Nov 22 09:28 env&lt;br /&gt;
drwxrwxr-x  2 vista vista 4096 Nov 22 10:11 g&lt;br /&gt;
lrwxrwxrwx  1 vista vista   26 Nov 22 09:28 gtm -&amp;gt; /opt/FOIAVistA20051021/gtm&lt;br /&gt;
-r-xr-xr-x  1 vista vista 1832 Nov 22 10:44 install&lt;br /&gt;
drwxrwxr-x  2 vista vista 8192 Nov 22 09:33 o&lt;br /&gt;
drwxrwxr-x  2 vista vista 4096 Nov 22 09:28 p&lt;br /&gt;
lrwxrwxrwx  1 vista vista   22 Nov 22 09:28 parent -&amp;gt; /opt/FOIAVistA20051021&lt;br /&gt;
drwxrwxr-x  2 vista vista 8192 Nov 22 09:32 r&lt;br /&gt;
-r-xr-xr-x  1 vista vista  252 Nov 22 09:28 run&lt;br /&gt;
drwxrwxr-x  2 vista vista 4096 Nov 22 09:28 tmp&lt;br /&gt;
-r-xr-xr-x  1 vista vista 3633 Nov 22 09:28 vista&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== VistA Development Directories ====&lt;br /&gt;
&lt;br /&gt;
A development directory is like an integration directory, except that it does not normally have its own database file or global directory.  Here is an example of creating a development environment from the integration environment:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bhaskar@Makaira:~$ ~vista/LeonardoDaVistA0.1/install LeonardoDaVistA0.1&lt;br /&gt;
Parent is /home/vista/LeonardoDaVistA0.1&lt;br /&gt;
Using parent database in this environment&lt;br /&gt;
Default permission for development environment is for all to read and group to write - please fix if needed&lt;br /&gt;
bhaskar@Makaira:~$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that there is hardly anything in the directory of a development environment:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bhaskar@Makaira:~$ ls -lR LeonardoDaVistA0.1/&lt;br /&gt;
LeonardoDaVistA0.1/:&lt;br /&gt;
total 40&lt;br /&gt;
-r-xr-xr-x  1 bhaskar vista  216 Nov 22 14:09 cprs_direct&lt;br /&gt;
-r--r--r--  1 bhaskar vista  583 Nov 22 14:09 env&lt;br /&gt;
drwxrwxr-x  2 bhaskar vista 4096 Nov 22 14:09 g&lt;br /&gt;
lrwxrwxrwx  1 bhaskar vista   34 Nov 22 14:09 gtm -&amp;gt; /home/vista/LeonardoDaVistA0.1/gtm&lt;br /&gt;
-r-xr-xr-x  1 bhaskar vista 1832 Nov 22 14:09 install&lt;br /&gt;
drwxrwxr-x  2 bhaskar vista 4096 Nov 22 14:09 o&lt;br /&gt;
drwxrwxr-x  2 bhaskar vista 4096 Nov 22 14:09 p&lt;br /&gt;
lrwxrwxrwx  1 bhaskar vista   30 Nov 22 14:09 parent -&amp;gt; /home/vista/LeonardoDaVistA0.1&lt;br /&gt;
drwxrwxr-x  2 bhaskar vista 4096 Nov 22 14:09 r&lt;br /&gt;
-r-xr-xr-x  1 bhaskar vista  252 Nov 22 14:09 run&lt;br /&gt;
drwxrwxr-x  2 bhaskar vista 4096 Nov 22 14:09 tmp&lt;br /&gt;
-r-xr-xr-x  1 bhaskar vista 3633 Nov 22 14:09 vista&lt;br /&gt;
&lt;br /&gt;
LeonardoDaVistA0.1/g:&lt;br /&gt;
total 4&lt;br /&gt;
-r--r--r--  1 bhaskar vista 1024 Nov 22 14:09 mumps.gld&lt;br /&gt;
&lt;br /&gt;
LeonardoDaVistA0.1/o:&lt;br /&gt;
total 0&lt;br /&gt;
&lt;br /&gt;
LeonardoDaVistA0.1/p:&lt;br /&gt;
total 0&lt;br /&gt;
&lt;br /&gt;
LeonardoDaVistA0.1/r:&lt;br /&gt;
total 0&lt;br /&gt;
&lt;br /&gt;
LeonardoDaVistA0.1/tmp:&lt;br /&gt;
total 0&lt;br /&gt;
bhaskar@Makaira:~$ du -sh LeonardoDaVistA0.1/&lt;br /&gt;
48K     LeonardoDaVistA0.1/&lt;br /&gt;
bhaskar@Makaira:~$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ability to create a development environment that can be isolated from the integration environment with an overhead of 48K bytes makes it easy to create many development environments as sand boxes to simplify the development process.&lt;br /&gt;
&lt;br /&gt;
As discussed earlier, it may be entirely appropriate for a development directory to have database files when there is a need to isolate certain globals.&lt;br /&gt;
&lt;br /&gt;
Indeed, since development directories are hierarchical – a development directory is an integration directory for development directories below it, and itself contributes to an integration directory above it, an integration directory is really nothing more than a development directory that does not itself contribute to an integration directory above it, but instead is used to create a release.&lt;br /&gt;
&lt;br /&gt;
Note that although a GT.M database file can be opened by only one GT.M version at a time, it is quite easy to create a directory structure where Release A, the integration area, and each development area use different versions of GT.M.  In the most common case, where the integration and development areas use a different version of GT.M from Release A, the only additional configuration requirement is to create a directory in the integration area for object files generated from the source files in Release A with the version of GT.M used for integration and development of Release B&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1733</id>
		<title>Software Development (WG1) Version Control (T3)</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1733"/>
		<updated>2005-11-22T19:56:23Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: /* VistA Integration Directories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a VistA Development Environment ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
This is a description of how VistA development environments should be configured.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Monospaced text&amp;lt;/tt&amp;gt; designates program names, directory names, command line parameters, etc., that are intended to be typed in at a Linux shell or a GT.M prompt, e.g. &amp;lt;tt&amp;gt;/bin/bash&amp;lt;/tt&amp;gt;.  &#039;&#039;Italic text&#039;&#039; is a descriptor of something whose actual value must be determined when the command is typed, e.g., &#039;&#039;gtmver&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Theory ===&lt;br /&gt;
&lt;br /&gt;
A release is a collection of routines and global variables.  The canonical packaging of a release, which is suitable for importation into any standard M distribution, is a collection of M source code routines and a database extract in ZWRite format.  When installed on a system, to run with an M implementation, a release may have pre-compiled object files, database files, shell scripts, global directories, etc.&lt;br /&gt;
&lt;br /&gt;
Below is a diagram of the “roll-up” by which a VistA release (“Release A”) gets converted into another VistA release (“Release B”) by a development team.  A and B could be from different families, e.g., Release A could be a FOIA release and Release B could be a Leonardo da VistA release.&lt;br /&gt;
&lt;br /&gt;
[[Image:051112-1WorldVistADevelopmentEnvironment_html_26096dee.gif|&lt;br /&gt;
&amp;quot;Roll up&amp;quot; model of VistA releases]]&lt;br /&gt;
&lt;br /&gt;
Once Release A is installed, it remains frozen and unchanged except for any essential patches that may become available independent of the development process for creating Release B and without which the release lacks some required functionality.  This means, for example, that KIDS patches should be applied in an integration environment rather than a release environment.&lt;br /&gt;
&lt;br /&gt;
At any given time, there can be multiple development projects underway based on Release A.  In other words, there may well be a Release C that is also based on Release A, but which has its own integration and development areas.&lt;br /&gt;
&lt;br /&gt;
To start the development process, an integration directory is created and initialized with a copy of the global variables from Release A, as well as shell scripts, global directories, etc.  The integration directory may well have a different name from Release A and Release B.  For example, Release A may be FOIAVistA_20051021, Release B may become LeonardoDaVistA_0.4 (at the time that the integration area is created, the name and version of Release B may not even be decided yet), and the integration and development areas may be named Greenbelt_200510.  There is no need to copy routines, since the GT.M search path will be set up to look for routines in the integration area before looking in Release A; hence only routines that are different between Release A and the new release need to be duplicated.&lt;br /&gt;
&lt;br /&gt;
Actual development does not take place in the integration area.  Development occurs in development areas, typically in the directories of individual developers; however, there may be a shared development area if two developers are collaborating on making changes to the very same module (i.e., their code changes overlap).  A development area is set up by creating a directory structure, shell scripts, etc.  Note that development areas can be hierarchical so that development subtasks 1a and 1b can be developed separately and integrated into development task 1, prior to integration into the integration area, etc.&lt;br /&gt;
&lt;br /&gt;
During this development process, developers develop code in individual sand boxes (development areas), but normally share the database (global variables) in the integration area – there may typically be no need to create a separate database.  However, if some global variable changes are tied to code changes being made in a development area, a copy of those global variables can be placed in a separate database file in that development area, and a global directory for that development area can map those global variables to the database in that development area, with all other global variables mapped to the database in the integration area.&lt;br /&gt;
&lt;br /&gt;
When a developer has code that is ready for integration, the new versions of the modified routines are promoted to the integration area.  Any global variables tied to the code being promoted that are in a database in the development area must be merged, reconciled or otherwise integrated with the global variables in the database in the integration area and the global directory in the development area modified accordingly.  Note that there needs to be a process, e.g., involving code reviews, by which a development task is considered complete enough to be promoted.  These, and other quality gates, are not discussed herein.&lt;br /&gt;
&lt;br /&gt;
Creating a release is minimally the process of creating the directory structure for Release B, copying the routines from Release A, overlying the routines with those from the integration area, and copying the global variables from the integration area.&lt;br /&gt;
&lt;br /&gt;
Normally, Release A, the integration area and development areas would all use the same GT.M version.  However, this is not a requirement.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;It is strongly recommended that database files in integration and development environments be journaled, and backed up regularly.  It is also strongly recommended that a version control system such as CVS or subversion be used for integration areas.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Practice ===&lt;br /&gt;
&lt;br /&gt;
==== Shell ====&lt;br /&gt;
&lt;br /&gt;
The standard shell for VistA community scripting is bash (installed as &amp;lt;tt&amp;gt;/bin/bash&amp;lt;/tt&amp;gt; on Debian GNU/Linux systems).&lt;br /&gt;
&lt;br /&gt;
==== GT.M Release Directories ====&lt;br /&gt;
&lt;br /&gt;
Each release of GT.M is installed its own subdirectory of &amp;lt;tt&amp;gt;/opt&amp;lt;/tt&amp;gt; (preferred) or &amp;lt;tt&amp;gt;/usr/local&amp;lt;/tt&amp;gt; (acceptable).  Each directory name starts with &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; followed by a release number separated from the release name by an underscore (&amp;lt;tt&amp;gt;_&amp;lt;/tt&amp;gt;).  Thus, for example, GT.M V5.0-000C would be installed in &amp;lt;tt&amp;gt;/opt/gtm_V5.0-000C&amp;lt;/tt&amp;gt;.  &amp;lt;tt&amp;gt;/opt/gtm&amp;lt;/tt&amp;gt; is a relative symbolic link to the latest version, set up with a command sequence such as:&lt;br /&gt;
&lt;br /&gt;
  cd /opt&lt;br /&gt;
  rm -f gtm&lt;br /&gt;
  ln -s gtm_V5.0-000C gtm&lt;br /&gt;
&lt;br /&gt;
When installing GT.M, the file gtmprofile should be edited so that the line:&lt;br /&gt;
&lt;br /&gt;
  EDITOR=&amp;quot;/bin/vi&amp;quot;; export EDITOR&lt;br /&gt;
&lt;br /&gt;
is modified to read:&lt;br /&gt;
&lt;br /&gt;
  export EDITOR=${EDITOR:=/bin/vi}&lt;br /&gt;
&lt;br /&gt;
==== VistA Release Directories ====&lt;br /&gt;
&lt;br /&gt;
Each release is installed in its own sub-directory of a standard system location, such as &amp;lt;tt&amp;gt;/opt&amp;lt;/tt&amp;gt; (preferred) or &amp;lt;tt&amp;gt;/usr/local&amp;lt;/tt&amp;gt; (acceptable).  Each directory has a release family name followed by a release / version number suffix separated from the release name by an underscore.  Directories for releases without version numbers, such as FOIA releases, have a date suffix of the form &#039;&#039;yyyymmdd&#039;&#039; (and where appropriate just &#039;&#039;yyyymm&#039;&#039;).  For example, an August 25, 2005 FOIA release might be in &amp;lt;tt&amp;gt;/opt/FOIAVistA20050825&amp;lt;/tt&amp;gt;, an October 21, 2005 release in &amp;lt;tt&amp;gt;/opt/FOIAVistA20051021&amp;lt;/tt&amp;gt;, an OpenVistA 0.3 release in &amp;lt;tt&amp;gt;/opt/OpenVistA0.3&amp;lt;/tt&amp;gt; and a Leonardo da VistA 0.45 release in &amp;lt;tt&amp;gt;/opt/LeonardoDaVistA0.45&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The normal protection on all directories and files in a release directory should be read-only.  To install files in the &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; subdirectory, it should be made read-write, the source file(s) for the patch copied in, the object file(s) generated, and the directory and its contents again made read-only.&lt;br /&gt;
&lt;br /&gt;
For each release family, the release directory contains subdirectories &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt;, symbolic link &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt;, a script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt;, scripts &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;cprs_direct&amp;lt;/tt&amp;gt; that are not executable in a release directory, but which are used when copied to integration directories and made executable.  A file &amp;lt;tt&amp;gt;env&amp;lt;/tt&amp;gt; is used to set up the execution environment.&lt;br /&gt;
&lt;br /&gt;
Other files and shell scripts may be created for various maintenance purposes (and ideally would be documented here).&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt; contains a global directory file &amp;lt;tt&amp;gt;mumps.gld&amp;lt;/tt&amp;gt; and a compressed database file &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.  The global directory maps all global variables to a single database file &amp;lt;tt&amp;gt;$vista_home/g/mumps.dat&amp;lt;/tt&amp;gt; (i.e., the environment variable &amp;lt;tt&amp;gt;$vista_home&amp;lt;/tt&amp;gt; is used at run-time to point a GT.M process to the location of the database file, so that different processes can actually use the same global directory to refer to entirely different database files).&lt;br /&gt;
&lt;br /&gt;
*Subdirectories &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; correspond to directories for files containing routine object code and routine source code respectively.  Each file in &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; ends in &amp;lt;tt&amp;gt;.m&amp;lt;/tt&amp;gt; and has a corresponding file in &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt; with a newer time stamp and which ends in &amp;lt;tt&amp;gt;.o&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; contains source and object code for patches to a release (generated outside the scope of the work for creating Release B) and which are deemed to be essential for the proper functioning of the release.&lt;br /&gt;
&lt;br /&gt;
*The symbolic link &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; points to the GT.M directory used for this VistA directory.&lt;br /&gt;
&lt;br /&gt;
*The file &amp;lt;tt&amp;gt;env&amp;lt;/tt&amp;gt; sets up the GT.M environment:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# env - file to be sourced to create VistA environment&lt;br /&gt;
#&lt;br /&gt;
# This temporary version of the commands to set up the VistA&lt;br /&gt;
# environment assumes that the parent and child use the same&lt;br /&gt;
# version of GT.M.&lt;br /&gt;
&lt;br /&gt;
if [[ -d parent ]] ; then&lt;br /&gt;
  pushd parent 1&amp;gt;/dev/null&lt;br /&gt;
  source ./env&lt;br /&gt;
  popd 1&amp;gt;/dev/null&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [[ -n $routines ]] ; then&lt;br /&gt;
  export routines=&amp;quot;$PWD/p $PWD/o($PWD/r) $routines&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  export routines=&amp;quot;$PWD/p $PWD/o($PWD/r)&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
if [[ -f $PWD/g/mumps.dat ]] ; then export vista_home=$PWD ; fi&lt;br /&gt;
&lt;br /&gt;
source gtm/gtmprofile&lt;br /&gt;
export gtmgbldir=$PWD/g/mumps.gld&lt;br /&gt;
export gtmroutines=&amp;quot;$routines $gtm_dist&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*The script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt; creates a new integration directory to be used in creating a new release from this release.  Normally, the initial database file of the integration directory is created by uncompressing &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.  Here is the script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# install - create new VistA environment as child of current environment&lt;br /&gt;
#&lt;br /&gt;
# This temporary version of the install script assumes that both&lt;br /&gt;
# have the same GT.M version.  Also, there is no error handling yet,&lt;br /&gt;
# and no provision yet for a separate database on the child.&lt;br /&gt;
#&lt;br /&gt;
# Set up standard environment to run VistA&lt;br /&gt;
&lt;br /&gt;
# Set up the environment for VistA&lt;br /&gt;
pushd `dirname $0` 1&amp;gt;/dev/null&lt;br /&gt;
export parent=$PWD&lt;br /&gt;
source ./env&lt;br /&gt;
popd 1&amp;gt;/dev/null&lt;br /&gt;
echo &amp;quot;Parent is&amp;quot; $parent&lt;br /&gt;
&lt;br /&gt;
# Create the directory structure for the child&lt;br /&gt;
mkdir -p $1/{g,o,r,p,tmp}&lt;br /&gt;
&lt;br /&gt;
# Link the child to the parent&lt;br /&gt;
ln -s $parent $1/parent&lt;br /&gt;
&lt;br /&gt;
# Give the child the same GT.M version as the parent&lt;br /&gt;
ln -s $parent/gtm $1/gtm&lt;br /&gt;
&lt;br /&gt;
# Copy other files in this directory&lt;br /&gt;
find $parent/ -maxdepth 1 -type f \! -name \*~ -exec cp {} $1/ \;&lt;br /&gt;
&lt;br /&gt;
# Make run &amp;amp; cprs_direct executable because it may not be executable for the parent&lt;br /&gt;
chmod u+x $1/run $1/cprs_direct&lt;br /&gt;
find $1 -maxdepth 1 \( -name run -o -name cprs_direct \) -perm -4 -exec chmod o+x {} \;&lt;br /&gt;
find $1 -maxdepth 1 \( -name run -o -name cprs_direct \) -perm -40 -exec chmod g+x {} \;&lt;br /&gt;
&lt;br /&gt;
# Give the child a global directory, for now the same as the parent&lt;br /&gt;
cp $parent/g/mumps.gld $1/g/mumps.gld&lt;br /&gt;
&lt;br /&gt;
# Give the child a database&lt;br /&gt;
if [[ -e $parent/g/mumps.dat.gz ]] ; then&lt;br /&gt;
  echo &amp;quot;Unzipping from parent to create initial database&amp;quot;&lt;br /&gt;
  gzip -d &amp;lt;$parent/g/mumps.dat.gz &amp;gt;$1/g/mumps.dat&lt;br /&gt;
  $gtm_dist/mupip set -journal=&amp;quot;enable,on,before&amp;quot; -file $1/g/mumps.dat&lt;br /&gt;
  chmod o+r,o-w,g+w $1/g/mumps.{dat,mjl}&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;Using parent database in this environment&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Make files except database files, journal files &amp;amp; directories read-only&lt;br /&gt;
find $1 -type f \! -name \*.dat \! -name \*mjl -exec chmod a-w {} \;&lt;br /&gt;
find $1 -type d -exec chmod 775 {} \;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Default permission for development environment is for all to read and group to write - please fix if needed&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a future enhancement, option &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039;, will specify that the integration directory is to be configured to run a different version of GT.M (as specified by the directory &#039;&#039;gtmver&#039;&#039;) from the one used by the release.  If &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; is used, the default assumption will be that the database will need to be extracted with the version of GT.M used by Release A, and loaded into a new database created with the version of GT.M to be used in the integration directory.  When &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; is used, a an additional optional option &amp;lt;tt&amp;gt;--nonewdb&amp;lt;/tt&amp;gt; will be available to specify that the releases of GT.M have compatible database formats, and that database from Release A can be used unchanged in the integration directory.  Note that the use of &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; will almost certainly result in a command that takes a long time, because the database may need to be extracted and reloaded, and the routines recompiled.&lt;br /&gt;
&lt;br /&gt;
Here is a listing of a top level release directory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bhaskar@Makaira:~$ ls -l /opt/FOIAVistA20051021&lt;br /&gt;
total 912&lt;br /&gt;
dr-xr-sr-x  2 root staff   4096 Sep 15 13:19 CPRS_Gui&lt;br /&gt;
-r-xr-xr-x  1 root staff    216 Nov 22 09:21 cprs_direct&lt;br /&gt;
-r--r--r--  1 root staff    583 Nov 22 09:21 env&lt;br /&gt;
dr-xr-xr-x  2 root staff   4096 Oct 27 14:00 g&lt;br /&gt;
lrwxrwxrwx  1 root staff     18 Nov 22 09:26 gtm -&amp;gt; /opt/gtm_V5.0-000C&lt;br /&gt;
-r-xr-xr-x  1 root staff   1832 Nov 22 10:44 install&lt;br /&gt;
dr-xr-xr-x  2 root staff 446464 Nov 22 07:10 o&lt;br /&gt;
dr-xr-sr-x  2 root staff   4096 Nov 22 09:22 p&lt;br /&gt;
dr-xr-xr-x  2 root staff 446464 Oct 27 13:38 r&lt;br /&gt;
-r--r--r--  1 root staff    252 Nov 22 09:21 run&lt;br /&gt;
-r-xr-xr-x  1 root staff   3633 Oct 30 06:42 vista&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== VistA Integration Directories ====&lt;br /&gt;
&lt;br /&gt;
Here is an example of creating an integration environment from a release environment:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vista@Makaira:~$ /opt/FOIAVistA20051021/install LeonardoDaVistA0.1&lt;br /&gt;
Parent is /opt/FOIAVistA20051021&lt;br /&gt;
Unzipping from parent to create initial database&lt;br /&gt;
%GTM-I-JNLCREATE, Journal file /home/vista/LeonardoDaVistA0.1/g/mumps.mjl created for database file /home/vista/LeonardoDaVistA0.1/g/mumps.dat with BEFORE_IMAGES&lt;br /&gt;
%GTM-I-JNLSTATE, Journaling state for database file /home/vista/LeonardoDaVistA0.1/g/mumps.dat is now ON&lt;br /&gt;
Default permission for development environment is for all to read and group to write - please fix if needed&lt;br /&gt;
vista@Makaira:~$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A VistA integration directory is similar to a VistA release directory, with the following differences.&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt; contains a database file, &amp;lt;tt&amp;gt;mumps.dat&amp;lt;/tt&amp;gt;, rather than a compressed database file, &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*The symbolic link &amp;lt;tt&amp;gt;parent&amp;lt;/tt&amp;gt; points to the release directory from which this integration directory was created.  A release directory does not have a symbolic link called parent. (The recommended way for a script to determine whether a directory is a release directory or an integration / development directory is to test for the existence of &amp;lt;tt&amp;gt;parent&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
*A script &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; which invokes and runs VistA in that integration environment.  Note that a VistA release may physically include a &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; script, but it will not work because it is not possible to directly run VistA from a release directory.  Here is the &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# run - run this instance of VistA&lt;br /&gt;
&lt;br /&gt;
# Set up the environment for VistA&lt;br /&gt;
pushd `dirname $0` 1&amp;gt;/dev/null&lt;br /&gt;
export parent=$PWD/parent&lt;br /&gt;
source ./env&lt;br /&gt;
popd 1&amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
if [[ -n $1 ]] ; then&lt;br /&gt;
  $gtm_dist/mumps -run $1&lt;br /&gt;
else&lt;br /&gt;
  $gtm_dist/mumps -dir&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*The &amp;lt;tt&amp;gt;cprs_direct&amp;lt;/tt&amp;gt; script handles connection requests from CPRS GUI client processes that come in via &amp;lt;tt&amp;gt;inetd&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;xinetd&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# cprs_direct - start a process to serve the CPRS Gui client&lt;br /&gt;
&lt;br /&gt;
# Set up the environment for VistA&lt;br /&gt;
export HOME=/home/`whoami`&lt;br /&gt;
cd `dirname $0`&lt;br /&gt;
export parent=$PWD/parent&lt;br /&gt;
source ./env&lt;br /&gt;
&lt;br /&gt;
# Run the server for the CPRS GUI client&lt;br /&gt;
cd tmp&lt;br /&gt;
$gtm_dist/mumps -run GTMLNX^XWBTCPM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*When the &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt; script is executed, it will create a development directory.&lt;br /&gt;
&lt;br /&gt;
*Except for database files, journal files, and directories, the normal protection on all directories and files in an integration directory should be read-only.  When promoting code to the integration directory from a development directory, or to install externally generated patches in the &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; subdirectory, needed directories should be made read-write, sources copied in, object file(s) generated, and directories again made read-only.&lt;br /&gt;
&lt;br /&gt;
Below is a listing of the directory of an integration environment created from the release in the example above.  Notice &amp;lt;tt&amp;gt;parent&amp;lt;/tt&amp;gt; link pointing to the directory of the parent environment.  (In this case, the &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; link points to the &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; link in the parent, rather than &amp;lt;tt&amp;gt;/opt/gtm_V5.0-000C&amp;lt;/tt&amp;gt;.  It doesn&#039;t matter either way.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bhaskar@Makaira:~$ ls -l /home/vista/LeonardoDaVistA0.1&lt;br /&gt;
total 48&lt;br /&gt;
-r-xr-xr-x  1 vista vista  216 Nov 22 09:28 cprs_direct&lt;br /&gt;
-r--r--r--  1 vista vista  583 Nov 22 09:28 env&lt;br /&gt;
drwxrwxr-x  2 vista vista 4096 Nov 22 10:11 g&lt;br /&gt;
lrwxrwxrwx  1 vista vista   26 Nov 22 09:28 gtm -&amp;gt; /opt/FOIAVistA20051021/gtm&lt;br /&gt;
-r-xr-xr-x  1 vista vista 1832 Nov 22 10:44 install&lt;br /&gt;
drwxrwxr-x  2 vista vista 8192 Nov 22 09:33 o&lt;br /&gt;
drwxrwxr-x  2 vista vista 4096 Nov 22 09:28 p&lt;br /&gt;
lrwxrwxrwx  1 vista vista   22 Nov 22 09:28 parent -&amp;gt; /opt/FOIAVistA20051021&lt;br /&gt;
drwxrwxr-x  2 vista vista 8192 Nov 22 09:32 r&lt;br /&gt;
-r-xr-xr-x  1 vista vista  252 Nov 22 09:28 run&lt;br /&gt;
drwxrwxr-x  2 vista vista 4096 Nov 22 09:28 tmp&lt;br /&gt;
-r-xr-xr-x  1 vista vista 3633 Nov 22 09:28 vista&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== VistA Development Directories ====&lt;br /&gt;
&lt;br /&gt;
A development directory is like an integration directory, except that it does not normally have its own database file or global directory.  However, as discussed above, it may be entirely appropriate for a development directory to have database files and global directories.&lt;br /&gt;
&lt;br /&gt;
Indeed, since development directories are hierarchical – a development directory is an integration directory for development directories below it, and itself contributes to an integration directory above it, an integration directory is really nothing more than a development directory that does not itself contribute to an integration directory above it, but instead is used to create a release.&lt;br /&gt;
&lt;br /&gt;
Note that although a GT.M database file can be opened by only one GT.M version at a time, it is quite easy to create a directory structure where Release A, the integration area, and each development area use different versions of GT.M.  In the most common case, where the integration and development areas use a different version of GT.M from Release A, the only additional configuration requirement is to create a directory in the integration area for object files generated from the source files in Release A with the version of GT.M used for integration and development of Release B&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1732</id>
		<title>Software Development (WG1) Version Control (T3)</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1732"/>
		<updated>2005-11-22T19:50:25Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: /* VistA Integration Directories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a VistA Development Environment ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
This is a description of how VistA development environments should be configured.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Monospaced text&amp;lt;/tt&amp;gt; designates program names, directory names, command line parameters, etc., that are intended to be typed in at a Linux shell or a GT.M prompt, e.g. &amp;lt;tt&amp;gt;/bin/bash&amp;lt;/tt&amp;gt;.  &#039;&#039;Italic text&#039;&#039; is a descriptor of something whose actual value must be determined when the command is typed, e.g., &#039;&#039;gtmver&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Theory ===&lt;br /&gt;
&lt;br /&gt;
A release is a collection of routines and global variables.  The canonical packaging of a release, which is suitable for importation into any standard M distribution, is a collection of M source code routines and a database extract in ZWRite format.  When installed on a system, to run with an M implementation, a release may have pre-compiled object files, database files, shell scripts, global directories, etc.&lt;br /&gt;
&lt;br /&gt;
Below is a diagram of the “roll-up” by which a VistA release (“Release A”) gets converted into another VistA release (“Release B”) by a development team.  A and B could be from different families, e.g., Release A could be a FOIA release and Release B could be a Leonardo da VistA release.&lt;br /&gt;
&lt;br /&gt;
[[Image:051112-1WorldVistADevelopmentEnvironment_html_26096dee.gif|&lt;br /&gt;
&amp;quot;Roll up&amp;quot; model of VistA releases]]&lt;br /&gt;
&lt;br /&gt;
Once Release A is installed, it remains frozen and unchanged except for any essential patches that may become available independent of the development process for creating Release B and without which the release lacks some required functionality.  This means, for example, that KIDS patches should be applied in an integration environment rather than a release environment.&lt;br /&gt;
&lt;br /&gt;
At any given time, there can be multiple development projects underway based on Release A.  In other words, there may well be a Release C that is also based on Release A, but which has its own integration and development areas.&lt;br /&gt;
&lt;br /&gt;
To start the development process, an integration directory is created and initialized with a copy of the global variables from Release A, as well as shell scripts, global directories, etc.  The integration directory may well have a different name from Release A and Release B.  For example, Release A may be FOIAVistA_20051021, Release B may become LeonardoDaVistA_0.4 (at the time that the integration area is created, the name and version of Release B may not even be decided yet), and the integration and development areas may be named Greenbelt_200510.  There is no need to copy routines, since the GT.M search path will be set up to look for routines in the integration area before looking in Release A; hence only routines that are different between Release A and the new release need to be duplicated.&lt;br /&gt;
&lt;br /&gt;
Actual development does not take place in the integration area.  Development occurs in development areas, typically in the directories of individual developers; however, there may be a shared development area if two developers are collaborating on making changes to the very same module (i.e., their code changes overlap).  A development area is set up by creating a directory structure, shell scripts, etc.  Note that development areas can be hierarchical so that development subtasks 1a and 1b can be developed separately and integrated into development task 1, prior to integration into the integration area, etc.&lt;br /&gt;
&lt;br /&gt;
During this development process, developers develop code in individual sand boxes (development areas), but normally share the database (global variables) in the integration area – there may typically be no need to create a separate database.  However, if some global variable changes are tied to code changes being made in a development area, a copy of those global variables can be placed in a separate database file in that development area, and a global directory for that development area can map those global variables to the database in that development area, with all other global variables mapped to the database in the integration area.&lt;br /&gt;
&lt;br /&gt;
When a developer has code that is ready for integration, the new versions of the modified routines are promoted to the integration area.  Any global variables tied to the code being promoted that are in a database in the development area must be merged, reconciled or otherwise integrated with the global variables in the database in the integration area and the global directory in the development area modified accordingly.  Note that there needs to be a process, e.g., involving code reviews, by which a development task is considered complete enough to be promoted.  These, and other quality gates, are not discussed herein.&lt;br /&gt;
&lt;br /&gt;
Creating a release is minimally the process of creating the directory structure for Release B, copying the routines from Release A, overlying the routines with those from the integration area, and copying the global variables from the integration area.&lt;br /&gt;
&lt;br /&gt;
Normally, Release A, the integration area and development areas would all use the same GT.M version.  However, this is not a requirement.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;It is strongly recommended that database files in integration and development environments be journaled, and backed up regularly.  It is also strongly recommended that a version control system such as CVS or subversion be used for integration areas.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Practice ===&lt;br /&gt;
&lt;br /&gt;
==== Shell ====&lt;br /&gt;
&lt;br /&gt;
The standard shell for VistA community scripting is bash (installed as &amp;lt;tt&amp;gt;/bin/bash&amp;lt;/tt&amp;gt; on Debian GNU/Linux systems).&lt;br /&gt;
&lt;br /&gt;
==== GT.M Release Directories ====&lt;br /&gt;
&lt;br /&gt;
Each release of GT.M is installed its own subdirectory of &amp;lt;tt&amp;gt;/opt&amp;lt;/tt&amp;gt; (preferred) or &amp;lt;tt&amp;gt;/usr/local&amp;lt;/tt&amp;gt; (acceptable).  Each directory name starts with &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; followed by a release number separated from the release name by an underscore (&amp;lt;tt&amp;gt;_&amp;lt;/tt&amp;gt;).  Thus, for example, GT.M V5.0-000C would be installed in &amp;lt;tt&amp;gt;/opt/gtm_V5.0-000C&amp;lt;/tt&amp;gt;.  &amp;lt;tt&amp;gt;/opt/gtm&amp;lt;/tt&amp;gt; is a relative symbolic link to the latest version, set up with a command sequence such as:&lt;br /&gt;
&lt;br /&gt;
  cd /opt&lt;br /&gt;
  rm -f gtm&lt;br /&gt;
  ln -s gtm_V5.0-000C gtm&lt;br /&gt;
&lt;br /&gt;
When installing GT.M, the file gtmprofile should be edited so that the line:&lt;br /&gt;
&lt;br /&gt;
  EDITOR=&amp;quot;/bin/vi&amp;quot;; export EDITOR&lt;br /&gt;
&lt;br /&gt;
is modified to read:&lt;br /&gt;
&lt;br /&gt;
  export EDITOR=${EDITOR:=/bin/vi}&lt;br /&gt;
&lt;br /&gt;
==== VistA Release Directories ====&lt;br /&gt;
&lt;br /&gt;
Each release is installed in its own sub-directory of a standard system location, such as &amp;lt;tt&amp;gt;/opt&amp;lt;/tt&amp;gt; (preferred) or &amp;lt;tt&amp;gt;/usr/local&amp;lt;/tt&amp;gt; (acceptable).  Each directory has a release family name followed by a release / version number suffix separated from the release name by an underscore.  Directories for releases without version numbers, such as FOIA releases, have a date suffix of the form &#039;&#039;yyyymmdd&#039;&#039; (and where appropriate just &#039;&#039;yyyymm&#039;&#039;).  For example, an August 25, 2005 FOIA release might be in &amp;lt;tt&amp;gt;/opt/FOIAVistA20050825&amp;lt;/tt&amp;gt;, an October 21, 2005 release in &amp;lt;tt&amp;gt;/opt/FOIAVistA20051021&amp;lt;/tt&amp;gt;, an OpenVistA 0.3 release in &amp;lt;tt&amp;gt;/opt/OpenVistA0.3&amp;lt;/tt&amp;gt; and a Leonardo da VistA 0.45 release in &amp;lt;tt&amp;gt;/opt/LeonardoDaVistA0.45&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The normal protection on all directories and files in a release directory should be read-only.  To install files in the &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; subdirectory, it should be made read-write, the source file(s) for the patch copied in, the object file(s) generated, and the directory and its contents again made read-only.&lt;br /&gt;
&lt;br /&gt;
For each release family, the release directory contains subdirectories &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt;, symbolic link &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt;, a script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt;, scripts &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;cprs_direct&amp;lt;/tt&amp;gt; that are not executable in a release directory, but which are used when copied to integration directories and made executable.  A file &amp;lt;tt&amp;gt;env&amp;lt;/tt&amp;gt; is used to set up the execution environment.&lt;br /&gt;
&lt;br /&gt;
Other files and shell scripts may be created for various maintenance purposes (and ideally would be documented here).&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt; contains a global directory file &amp;lt;tt&amp;gt;mumps.gld&amp;lt;/tt&amp;gt; and a compressed database file &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.  The global directory maps all global variables to a single database file &amp;lt;tt&amp;gt;$vista_home/g/mumps.dat&amp;lt;/tt&amp;gt; (i.e., the environment variable &amp;lt;tt&amp;gt;$vista_home&amp;lt;/tt&amp;gt; is used at run-time to point a GT.M process to the location of the database file, so that different processes can actually use the same global directory to refer to entirely different database files).&lt;br /&gt;
&lt;br /&gt;
*Subdirectories &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; correspond to directories for files containing routine object code and routine source code respectively.  Each file in &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; ends in &amp;lt;tt&amp;gt;.m&amp;lt;/tt&amp;gt; and has a corresponding file in &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt; with a newer time stamp and which ends in &amp;lt;tt&amp;gt;.o&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; contains source and object code for patches to a release (generated outside the scope of the work for creating Release B) and which are deemed to be essential for the proper functioning of the release.&lt;br /&gt;
&lt;br /&gt;
*The symbolic link &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; points to the GT.M directory used for this VistA directory.&lt;br /&gt;
&lt;br /&gt;
*The file &amp;lt;tt&amp;gt;env&amp;lt;/tt&amp;gt; sets up the GT.M environment:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# env - file to be sourced to create VistA environment&lt;br /&gt;
#&lt;br /&gt;
# This temporary version of the commands to set up the VistA&lt;br /&gt;
# environment assumes that the parent and child use the same&lt;br /&gt;
# version of GT.M.&lt;br /&gt;
&lt;br /&gt;
if [[ -d parent ]] ; then&lt;br /&gt;
  pushd parent 1&amp;gt;/dev/null&lt;br /&gt;
  source ./env&lt;br /&gt;
  popd 1&amp;gt;/dev/null&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [[ -n $routines ]] ; then&lt;br /&gt;
  export routines=&amp;quot;$PWD/p $PWD/o($PWD/r) $routines&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  export routines=&amp;quot;$PWD/p $PWD/o($PWD/r)&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
if [[ -f $PWD/g/mumps.dat ]] ; then export vista_home=$PWD ; fi&lt;br /&gt;
&lt;br /&gt;
source gtm/gtmprofile&lt;br /&gt;
export gtmgbldir=$PWD/g/mumps.gld&lt;br /&gt;
export gtmroutines=&amp;quot;$routines $gtm_dist&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*The script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt; creates a new integration directory to be used in creating a new release from this release.  Normally, the initial database file of the integration directory is created by uncompressing &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.  Here is the script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# install - create new VistA environment as child of current environment&lt;br /&gt;
#&lt;br /&gt;
# This temporary version of the install script assumes that both&lt;br /&gt;
# have the same GT.M version.  Also, there is no error handling yet,&lt;br /&gt;
# and no provision yet for a separate database on the child.&lt;br /&gt;
#&lt;br /&gt;
# Set up standard environment to run VistA&lt;br /&gt;
&lt;br /&gt;
# Set up the environment for VistA&lt;br /&gt;
pushd `dirname $0` 1&amp;gt;/dev/null&lt;br /&gt;
export parent=$PWD&lt;br /&gt;
source ./env&lt;br /&gt;
popd 1&amp;gt;/dev/null&lt;br /&gt;
echo &amp;quot;Parent is&amp;quot; $parent&lt;br /&gt;
&lt;br /&gt;
# Create the directory structure for the child&lt;br /&gt;
mkdir -p $1/{g,o,r,p,tmp}&lt;br /&gt;
&lt;br /&gt;
# Link the child to the parent&lt;br /&gt;
ln -s $parent $1/parent&lt;br /&gt;
&lt;br /&gt;
# Give the child the same GT.M version as the parent&lt;br /&gt;
ln -s $parent/gtm $1/gtm&lt;br /&gt;
&lt;br /&gt;
# Copy other files in this directory&lt;br /&gt;
find $parent/ -maxdepth 1 -type f \! -name \*~ -exec cp {} $1/ \;&lt;br /&gt;
&lt;br /&gt;
# Make run &amp;amp; cprs_direct executable because it may not be executable for the parent&lt;br /&gt;
chmod u+x $1/run $1/cprs_direct&lt;br /&gt;
find $1 -maxdepth 1 \( -name run -o -name cprs_direct \) -perm -4 -exec chmod o+x {} \;&lt;br /&gt;
find $1 -maxdepth 1 \( -name run -o -name cprs_direct \) -perm -40 -exec chmod g+x {} \;&lt;br /&gt;
&lt;br /&gt;
# Give the child a global directory, for now the same as the parent&lt;br /&gt;
cp $parent/g/mumps.gld $1/g/mumps.gld&lt;br /&gt;
&lt;br /&gt;
# Give the child a database&lt;br /&gt;
if [[ -e $parent/g/mumps.dat.gz ]] ; then&lt;br /&gt;
  echo &amp;quot;Unzipping from parent to create initial database&amp;quot;&lt;br /&gt;
  gzip -d &amp;lt;$parent/g/mumps.dat.gz &amp;gt;$1/g/mumps.dat&lt;br /&gt;
  $gtm_dist/mupip set -journal=&amp;quot;enable,on,before&amp;quot; -file $1/g/mumps.dat&lt;br /&gt;
  chmod o+r,o-w,g+w $1/g/mumps.{dat,mjl}&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;Using parent database in this environment&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Make files except database files, journal files &amp;amp; directories read-only&lt;br /&gt;
find $1 -type f \! -name \*.dat \! -name \*mjl -exec chmod a-w {} \;&lt;br /&gt;
find $1 -type d -exec chmod 775 {} \;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Default permission for development environment is for all to read and group to write - please fix if needed&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a future enhancement, option &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039;, will specify that the integration directory is to be configured to run a different version of GT.M (as specified by the directory &#039;&#039;gtmver&#039;&#039;) from the one used by the release.  If &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; is used, the default assumption will be that the database will need to be extracted with the version of GT.M used by Release A, and loaded into a new database created with the version of GT.M to be used in the integration directory.  When &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; is used, a an additional optional option &amp;lt;tt&amp;gt;--nonewdb&amp;lt;/tt&amp;gt; will be available to specify that the releases of GT.M have compatible database formats, and that database from Release A can be used unchanged in the integration directory.  Note that the use of &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; will almost certainly result in a command that takes a long time, because the database may need to be extracted and reloaded, and the routines recompiled.&lt;br /&gt;
&lt;br /&gt;
Here is a listing of a top level release directory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bhaskar@Makaira:~$ ls -l /opt/FOIAVistA20051021&lt;br /&gt;
total 912&lt;br /&gt;
dr-xr-sr-x  2 root staff   4096 Sep 15 13:19 CPRS_Gui&lt;br /&gt;
-r-xr-xr-x  1 root staff    216 Nov 22 09:21 cprs_direct&lt;br /&gt;
-r--r--r--  1 root staff    583 Nov 22 09:21 env&lt;br /&gt;
dr-xr-xr-x  2 root staff   4096 Oct 27 14:00 g&lt;br /&gt;
lrwxrwxrwx  1 root staff     18 Nov 22 09:26 gtm -&amp;gt; /opt/gtm_V5.0-000C&lt;br /&gt;
-r-xr-xr-x  1 root staff   1832 Nov 22 10:44 install&lt;br /&gt;
dr-xr-xr-x  2 root staff 446464 Nov 22 07:10 o&lt;br /&gt;
dr-xr-sr-x  2 root staff   4096 Nov 22 09:22 p&lt;br /&gt;
dr-xr-xr-x  2 root staff 446464 Oct 27 13:38 r&lt;br /&gt;
-r--r--r--  1 root staff    252 Nov 22 09:21 run&lt;br /&gt;
-r-xr-xr-x  1 root staff   3633 Oct 30 06:42 vista&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== VistA Integration Directories ====&lt;br /&gt;
&lt;br /&gt;
A VistA integration directory is similar to a VistA release directory, with the following differences.&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt; contains a database file, &amp;lt;tt&amp;gt;mumps.dat&amp;lt;/tt&amp;gt;, rather than a compressed database file, &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*The symbolic link &amp;lt;tt&amp;gt;parent&amp;lt;/tt&amp;gt; points to the release directory from which this integration directory was created.  A release directory does not have a symbolic link called parent. (The recommended way for a script to determine whether a directory is a release directory or an integration / development directory is to test for the existence of &amp;lt;tt&amp;gt;parent&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
*A script &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; which invokes and runs VistA in that integration environment.  Note that a VistA release may physically include a &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; script, but it will not work because it is not possible to directly run VistA from a release directory.  Here is the &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# run - run this instance of VistA&lt;br /&gt;
&lt;br /&gt;
# Set up the environment for VistA&lt;br /&gt;
pushd `dirname $0` 1&amp;gt;/dev/null&lt;br /&gt;
export parent=$PWD/parent&lt;br /&gt;
source ./env&lt;br /&gt;
popd 1&amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
if [[ -n $1 ]] ; then&lt;br /&gt;
  $gtm_dist/mumps -run $1&lt;br /&gt;
else&lt;br /&gt;
  $gtm_dist/mumps -dir&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*The &amp;lt;tt&amp;gt;cprs_direct&amp;lt;/tt&amp;gt; script handles connection requests from CPRS GUI client processes that come in via &amp;lt;tt&amp;gt;inetd&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;xinetd&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# cprs_direct - start a process to serve the CPRS Gui client&lt;br /&gt;
&lt;br /&gt;
# Set up the environment for VistA&lt;br /&gt;
export HOME=/home/`whoami`&lt;br /&gt;
cd `dirname $0`&lt;br /&gt;
export parent=$PWD/parent&lt;br /&gt;
source ./env&lt;br /&gt;
&lt;br /&gt;
# Run the server for the CPRS GUI client&lt;br /&gt;
cd tmp&lt;br /&gt;
$gtm_dist/mumps -run GTMLNX^XWBTCPM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*When the &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt; script is executed, it will create a development directory.&lt;br /&gt;
&lt;br /&gt;
*Except for database files, journal files, and directories, the normal protection on all directories and files in an integration directory should be read-only.  When promoting code to the integration directory from a development directory, or to install externally generated patches in the &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; subdirectory, needed directories should be made read-write, sources copied in, object file(s) generated, and directories again made read-only.&lt;br /&gt;
&lt;br /&gt;
Below is a listing of the directory of an integration environment created from the release in the example above.  Notice &amp;lt;tt&amp;gt;parent&amp;lt;/tt&amp;gt; link pointing to the directory of the parent environment.  (In this case, the &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; link points to the &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; link in the parent, rather than &amp;lt;tt&amp;gt;/opt/gtm_V5.0-000C&amp;lt;/tt&amp;gt;.  It doesn&#039;t matter either way.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bhaskar@Makaira:~$ ls -l /home/vista/LeonardoDaVistA0.1&lt;br /&gt;
total 48&lt;br /&gt;
-r-xr-xr-x  1 vista vista  216 Nov 22 09:28 cprs_direct&lt;br /&gt;
-r--r--r--  1 vista vista  583 Nov 22 09:28 env&lt;br /&gt;
drwxrwxr-x  2 vista vista 4096 Nov 22 10:11 g&lt;br /&gt;
lrwxrwxrwx  1 vista vista   26 Nov 22 09:28 gtm -&amp;gt; /opt/FOIAVistA20051021/gtm&lt;br /&gt;
-r-xr-xr-x  1 vista vista 1832 Nov 22 10:44 install&lt;br /&gt;
drwxrwxr-x  2 vista vista 8192 Nov 22 09:33 o&lt;br /&gt;
drwxrwxr-x  2 vista vista 4096 Nov 22 09:28 p&lt;br /&gt;
lrwxrwxrwx  1 vista vista   22 Nov 22 09:28 parent -&amp;gt; /opt/FOIAVistA20051021&lt;br /&gt;
drwxrwxr-x  2 vista vista 8192 Nov 22 09:32 r&lt;br /&gt;
-r-xr-xr-x  1 vista vista  252 Nov 22 09:28 run&lt;br /&gt;
drwxrwxr-x  2 vista vista 4096 Nov 22 09:28 tmp&lt;br /&gt;
-r-xr-xr-x  1 vista vista 3633 Nov 22 09:28 vista&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== VistA Development Directories ====&lt;br /&gt;
&lt;br /&gt;
A development directory is like an integration directory, except that it does not normally have its own database file or global directory.  However, as discussed above, it may be entirely appropriate for a development directory to have database files and global directories.&lt;br /&gt;
&lt;br /&gt;
Indeed, since development directories are hierarchical – a development directory is an integration directory for development directories below it, and itself contributes to an integration directory above it, an integration directory is really nothing more than a development directory that does not itself contribute to an integration directory above it, but instead is used to create a release.&lt;br /&gt;
&lt;br /&gt;
Note that although a GT.M database file can be opened by only one GT.M version at a time, it is quite easy to create a directory structure where Release A, the integration area, and each development area use different versions of GT.M.  In the most common case, where the integration and development areas use a different version of GT.M from Release A, the only additional configuration requirement is to create a directory in the integration area for object files generated from the source files in Release A with the version of GT.M used for integration and development of Release B&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1731</id>
		<title>Software Development (WG1) Version Control (T3)</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1731"/>
		<updated>2005-11-22T18:15:34Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: /* VistA Release Directories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a VistA Development Environment ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
This is a description of how VistA development environments should be configured.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Monospaced text&amp;lt;/tt&amp;gt; designates program names, directory names, command line parameters, etc., that are intended to be typed in at a Linux shell or a GT.M prompt, e.g. &amp;lt;tt&amp;gt;/bin/bash&amp;lt;/tt&amp;gt;.  &#039;&#039;Italic text&#039;&#039; is a descriptor of something whose actual value must be determined when the command is typed, e.g., &#039;&#039;gtmver&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Theory ===&lt;br /&gt;
&lt;br /&gt;
A release is a collection of routines and global variables.  The canonical packaging of a release, which is suitable for importation into any standard M distribution, is a collection of M source code routines and a database extract in ZWRite format.  When installed on a system, to run with an M implementation, a release may have pre-compiled object files, database files, shell scripts, global directories, etc.&lt;br /&gt;
&lt;br /&gt;
Below is a diagram of the “roll-up” by which a VistA release (“Release A”) gets converted into another VistA release (“Release B”) by a development team.  A and B could be from different families, e.g., Release A could be a FOIA release and Release B could be a Leonardo da VistA release.&lt;br /&gt;
&lt;br /&gt;
[[Image:051112-1WorldVistADevelopmentEnvironment_html_26096dee.gif|&lt;br /&gt;
&amp;quot;Roll up&amp;quot; model of VistA releases]]&lt;br /&gt;
&lt;br /&gt;
Once Release A is installed, it remains frozen and unchanged except for any essential patches that may become available independent of the development process for creating Release B and without which the release lacks some required functionality.  This means, for example, that KIDS patches should be applied in an integration environment rather than a release environment.&lt;br /&gt;
&lt;br /&gt;
At any given time, there can be multiple development projects underway based on Release A.  In other words, there may well be a Release C that is also based on Release A, but which has its own integration and development areas.&lt;br /&gt;
&lt;br /&gt;
To start the development process, an integration directory is created and initialized with a copy of the global variables from Release A, as well as shell scripts, global directories, etc.  The integration directory may well have a different name from Release A and Release B.  For example, Release A may be FOIAVistA_20051021, Release B may become LeonardoDaVistA_0.4 (at the time that the integration area is created, the name and version of Release B may not even be decided yet), and the integration and development areas may be named Greenbelt_200510.  There is no need to copy routines, since the GT.M search path will be set up to look for routines in the integration area before looking in Release A; hence only routines that are different between Release A and the new release need to be duplicated.&lt;br /&gt;
&lt;br /&gt;
Actual development does not take place in the integration area.  Development occurs in development areas, typically in the directories of individual developers; however, there may be a shared development area if two developers are collaborating on making changes to the very same module (i.e., their code changes overlap).  A development area is set up by creating a directory structure, shell scripts, etc.  Note that development areas can be hierarchical so that development subtasks 1a and 1b can be developed separately and integrated into development task 1, prior to integration into the integration area, etc.&lt;br /&gt;
&lt;br /&gt;
During this development process, developers develop code in individual sand boxes (development areas), but normally share the database (global variables) in the integration area – there may typically be no need to create a separate database.  However, if some global variable changes are tied to code changes being made in a development area, a copy of those global variables can be placed in a separate database file in that development area, and a global directory for that development area can map those global variables to the database in that development area, with all other global variables mapped to the database in the integration area.&lt;br /&gt;
&lt;br /&gt;
When a developer has code that is ready for integration, the new versions of the modified routines are promoted to the integration area.  Any global variables tied to the code being promoted that are in a database in the development area must be merged, reconciled or otherwise integrated with the global variables in the database in the integration area and the global directory in the development area modified accordingly.  Note that there needs to be a process, e.g., involving code reviews, by which a development task is considered complete enough to be promoted.  These, and other quality gates, are not discussed herein.&lt;br /&gt;
&lt;br /&gt;
Creating a release is minimally the process of creating the directory structure for Release B, copying the routines from Release A, overlying the routines with those from the integration area, and copying the global variables from the integration area.&lt;br /&gt;
&lt;br /&gt;
Normally, Release A, the integration area and development areas would all use the same GT.M version.  However, this is not a requirement.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;It is strongly recommended that database files in integration and development environments be journaled, and backed up regularly.  It is also strongly recommended that a version control system such as CVS or subversion be used for integration areas.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Practice ===&lt;br /&gt;
&lt;br /&gt;
==== Shell ====&lt;br /&gt;
&lt;br /&gt;
The standard shell for VistA community scripting is bash (installed as &amp;lt;tt&amp;gt;/bin/bash&amp;lt;/tt&amp;gt; on Debian GNU/Linux systems).&lt;br /&gt;
&lt;br /&gt;
==== GT.M Release Directories ====&lt;br /&gt;
&lt;br /&gt;
Each release of GT.M is installed its own subdirectory of &amp;lt;tt&amp;gt;/opt&amp;lt;/tt&amp;gt; (preferred) or &amp;lt;tt&amp;gt;/usr/local&amp;lt;/tt&amp;gt; (acceptable).  Each directory name starts with &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; followed by a release number separated from the release name by an underscore (&amp;lt;tt&amp;gt;_&amp;lt;/tt&amp;gt;).  Thus, for example, GT.M V5.0-000C would be installed in &amp;lt;tt&amp;gt;/opt/gtm_V5.0-000C&amp;lt;/tt&amp;gt;.  &amp;lt;tt&amp;gt;/opt/gtm&amp;lt;/tt&amp;gt; is a relative symbolic link to the latest version, set up with a command sequence such as:&lt;br /&gt;
&lt;br /&gt;
  cd /opt&lt;br /&gt;
  rm -f gtm&lt;br /&gt;
  ln -s gtm_V5.0-000C gtm&lt;br /&gt;
&lt;br /&gt;
When installing GT.M, the file gtmprofile should be edited so that the line:&lt;br /&gt;
&lt;br /&gt;
  EDITOR=&amp;quot;/bin/vi&amp;quot;; export EDITOR&lt;br /&gt;
&lt;br /&gt;
is modified to read:&lt;br /&gt;
&lt;br /&gt;
  export EDITOR=${EDITOR:=/bin/vi}&lt;br /&gt;
&lt;br /&gt;
==== VistA Release Directories ====&lt;br /&gt;
&lt;br /&gt;
Each release is installed in its own sub-directory of a standard system location, such as &amp;lt;tt&amp;gt;/opt&amp;lt;/tt&amp;gt; (preferred) or &amp;lt;tt&amp;gt;/usr/local&amp;lt;/tt&amp;gt; (acceptable).  Each directory has a release family name followed by a release / version number suffix separated from the release name by an underscore.  Directories for releases without version numbers, such as FOIA releases, have a date suffix of the form &#039;&#039;yyyymmdd&#039;&#039; (and where appropriate just &#039;&#039;yyyymm&#039;&#039;).  For example, an August 25, 2005 FOIA release might be in &amp;lt;tt&amp;gt;/opt/FOIAVistA20050825&amp;lt;/tt&amp;gt;, an October 21, 2005 release in &amp;lt;tt&amp;gt;/opt/FOIAVistA20051021&amp;lt;/tt&amp;gt;, an OpenVistA 0.3 release in &amp;lt;tt&amp;gt;/opt/OpenVistA0.3&amp;lt;/tt&amp;gt; and a Leonardo da VistA 0.45 release in &amp;lt;tt&amp;gt;/opt/LeonardoDaVistA0.45&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The normal protection on all directories and files in a release directory should be read-only.  To install files in the &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; subdirectory, it should be made read-write, the source file(s) for the patch copied in, the object file(s) generated, and the directory and its contents again made read-only.&lt;br /&gt;
&lt;br /&gt;
For each release family, the release directory contains subdirectories &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt;, symbolic link &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt;, a script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt;, scripts &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;cprs_direct&amp;lt;/tt&amp;gt; that are not executable in a release directory, but which are used when copied to integration directories and made executable.  A file &amp;lt;tt&amp;gt;env&amp;lt;/tt&amp;gt; is used to set up the execution environment.&lt;br /&gt;
&lt;br /&gt;
Other files and shell scripts may be created for various maintenance purposes (and ideally would be documented here).&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt; contains a global directory file &amp;lt;tt&amp;gt;mumps.gld&amp;lt;/tt&amp;gt; and a compressed database file &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.  The global directory maps all global variables to a single database file &amp;lt;tt&amp;gt;$vista_home/g/mumps.dat&amp;lt;/tt&amp;gt; (i.e., the environment variable &amp;lt;tt&amp;gt;$vista_home&amp;lt;/tt&amp;gt; is used at run-time to point a GT.M process to the location of the database file, so that different processes can actually use the same global directory to refer to entirely different database files).&lt;br /&gt;
&lt;br /&gt;
*Subdirectories &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; correspond to directories for files containing routine object code and routine source code respectively.  Each file in &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; ends in &amp;lt;tt&amp;gt;.m&amp;lt;/tt&amp;gt; and has a corresponding file in &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt; with a newer time stamp and which ends in &amp;lt;tt&amp;gt;.o&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; contains source and object code for patches to a release (generated outside the scope of the work for creating Release B) and which are deemed to be essential for the proper functioning of the release.&lt;br /&gt;
&lt;br /&gt;
*The symbolic link &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; points to the GT.M directory used for this VistA directory.&lt;br /&gt;
&lt;br /&gt;
*The file &amp;lt;tt&amp;gt;env&amp;lt;/tt&amp;gt; sets up the GT.M environment:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# env - file to be sourced to create VistA environment&lt;br /&gt;
#&lt;br /&gt;
# This temporary version of the commands to set up the VistA&lt;br /&gt;
# environment assumes that the parent and child use the same&lt;br /&gt;
# version of GT.M.&lt;br /&gt;
&lt;br /&gt;
if [[ -d parent ]] ; then&lt;br /&gt;
  pushd parent 1&amp;gt;/dev/null&lt;br /&gt;
  source ./env&lt;br /&gt;
  popd 1&amp;gt;/dev/null&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [[ -n $routines ]] ; then&lt;br /&gt;
  export routines=&amp;quot;$PWD/p $PWD/o($PWD/r) $routines&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  export routines=&amp;quot;$PWD/p $PWD/o($PWD/r)&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
if [[ -f $PWD/g/mumps.dat ]] ; then export vista_home=$PWD ; fi&lt;br /&gt;
&lt;br /&gt;
source gtm/gtmprofile&lt;br /&gt;
export gtmgbldir=$PWD/g/mumps.gld&lt;br /&gt;
export gtmroutines=&amp;quot;$routines $gtm_dist&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*The script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt; creates a new integration directory to be used in creating a new release from this release.  Normally, the initial database file of the integration directory is created by uncompressing &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.  Here is the script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# install - create new VistA environment as child of current environment&lt;br /&gt;
#&lt;br /&gt;
# This temporary version of the install script assumes that both&lt;br /&gt;
# have the same GT.M version.  Also, there is no error handling yet,&lt;br /&gt;
# and no provision yet for a separate database on the child.&lt;br /&gt;
#&lt;br /&gt;
# Set up standard environment to run VistA&lt;br /&gt;
&lt;br /&gt;
# Set up the environment for VistA&lt;br /&gt;
pushd `dirname $0` 1&amp;gt;/dev/null&lt;br /&gt;
export parent=$PWD&lt;br /&gt;
source ./env&lt;br /&gt;
popd 1&amp;gt;/dev/null&lt;br /&gt;
echo &amp;quot;Parent is&amp;quot; $parent&lt;br /&gt;
&lt;br /&gt;
# Create the directory structure for the child&lt;br /&gt;
mkdir -p $1/{g,o,r,p,tmp}&lt;br /&gt;
&lt;br /&gt;
# Link the child to the parent&lt;br /&gt;
ln -s $parent $1/parent&lt;br /&gt;
&lt;br /&gt;
# Give the child the same GT.M version as the parent&lt;br /&gt;
ln -s $parent/gtm $1/gtm&lt;br /&gt;
&lt;br /&gt;
# Copy other files in this directory&lt;br /&gt;
find $parent/ -maxdepth 1 -type f \! -name \*~ -exec cp {} $1/ \;&lt;br /&gt;
&lt;br /&gt;
# Make run &amp;amp; cprs_direct executable because it may not be executable for the parent&lt;br /&gt;
chmod u+x $1/run $1/cprs_direct&lt;br /&gt;
find $1 -maxdepth 1 \( -name run -o -name cprs_direct \) -perm -4 -exec chmod o+x {} \;&lt;br /&gt;
find $1 -maxdepth 1 \( -name run -o -name cprs_direct \) -perm -40 -exec chmod g+x {} \;&lt;br /&gt;
&lt;br /&gt;
# Give the child a global directory, for now the same as the parent&lt;br /&gt;
cp $parent/g/mumps.gld $1/g/mumps.gld&lt;br /&gt;
&lt;br /&gt;
# Give the child a database&lt;br /&gt;
if [[ -e $parent/g/mumps.dat.gz ]] ; then&lt;br /&gt;
  echo &amp;quot;Unzipping from parent to create initial database&amp;quot;&lt;br /&gt;
  gzip -d &amp;lt;$parent/g/mumps.dat.gz &amp;gt;$1/g/mumps.dat&lt;br /&gt;
  $gtm_dist/mupip set -journal=&amp;quot;enable,on,before&amp;quot; -file $1/g/mumps.dat&lt;br /&gt;
  chmod o+r,o-w,g+w $1/g/mumps.{dat,mjl}&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;Using parent database in this environment&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Make files except database files, journal files &amp;amp; directories read-only&lt;br /&gt;
find $1 -type f \! -name \*.dat \! -name \*mjl -exec chmod a-w {} \;&lt;br /&gt;
find $1 -type d -exec chmod 775 {} \;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Default permission for development environment is for all to read and group to write - please fix if needed&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a future enhancement, option &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039;, will specify that the integration directory is to be configured to run a different version of GT.M (as specified by the directory &#039;&#039;gtmver&#039;&#039;) from the one used by the release.  If &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; is used, the default assumption will be that the database will need to be extracted with the version of GT.M used by Release A, and loaded into a new database created with the version of GT.M to be used in the integration directory.  When &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; is used, a an additional optional option &amp;lt;tt&amp;gt;--nonewdb&amp;lt;/tt&amp;gt; will be available to specify that the releases of GT.M have compatible database formats, and that database from Release A can be used unchanged in the integration directory.  Note that the use of &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; will almost certainly result in a command that takes a long time, because the database may need to be extracted and reloaded, and the routines recompiled.&lt;br /&gt;
&lt;br /&gt;
Here is a listing of a top level release directory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bhaskar@Makaira:~$ ls -l /opt/FOIAVistA20051021&lt;br /&gt;
total 912&lt;br /&gt;
dr-xr-sr-x  2 root staff   4096 Sep 15 13:19 CPRS_Gui&lt;br /&gt;
-r-xr-xr-x  1 root staff    216 Nov 22 09:21 cprs_direct&lt;br /&gt;
-r--r--r--  1 root staff    583 Nov 22 09:21 env&lt;br /&gt;
dr-xr-xr-x  2 root staff   4096 Oct 27 14:00 g&lt;br /&gt;
lrwxrwxrwx  1 root staff     18 Nov 22 09:26 gtm -&amp;gt; /opt/gtm_V5.0-000C&lt;br /&gt;
-r-xr-xr-x  1 root staff   1832 Nov 22 10:44 install&lt;br /&gt;
dr-xr-xr-x  2 root staff 446464 Nov 22 07:10 o&lt;br /&gt;
dr-xr-sr-x  2 root staff   4096 Nov 22 09:22 p&lt;br /&gt;
dr-xr-xr-x  2 root staff 446464 Oct 27 13:38 r&lt;br /&gt;
-r--r--r--  1 root staff    252 Nov 22 09:21 run&lt;br /&gt;
-r-xr-xr-x  1 root staff   3633 Oct 30 06:42 vista&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== VistA Integration Directories ====&lt;br /&gt;
&lt;br /&gt;
A VistA integration directory is similar to a VistA release directory, with the following differences.&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt; contains a database file, &amp;lt;tt&amp;gt;mumps.dat&amp;lt;/tt&amp;gt;, rather than a compressed database file, &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*The symbolic link &amp;lt;tt&amp;gt;parent&amp;lt;/tt&amp;gt; points to the release directory from which this integration directory was created.  A release directory does not have a symbolic link called parent. (The recommended way for a script to determine whether a directory is a release directory or an integration / development directory is to test for the existence of &amp;lt;tt&amp;gt;parent&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
*A script &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; which invokes and runs VistA in that integration environment.  Note that a VistA release may physically include a &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; script, but it will not work because it is not possible to directly run VistA from a release directory.&lt;br /&gt;
&lt;br /&gt;
*When the &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt; script is executed, it will create a development directory.&lt;br /&gt;
&lt;br /&gt;
*The normal protection on all directories and files in an integration directory should be read-only.  When promoting code to the integration directory from a development directory, or to install externally generated patches in the &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; subdirectory, needed directories should be made read-write, sources copied in, object file(s) generated, and directories again made read-only.&lt;br /&gt;
&lt;br /&gt;
==== VistA Development Directories ====&lt;br /&gt;
&lt;br /&gt;
A development directory is like an integration directory, except that it does not normally have its own database file or global directory.  However, as discussed above, it may be entirely appropriate for a development directory to have database files and global directories.&lt;br /&gt;
&lt;br /&gt;
Indeed, since development directories are hierarchical – a development directory is an integration directory for development directories below it, and itself contributes to an integration directory above it, an integration directory is really nothing more than a development directory that does not itself contribute to an integration directory above it, but instead is used to create a release.&lt;br /&gt;
&lt;br /&gt;
Note that although a GT.M database file can be opened by only one GT.M version at a time, it is quite easy to create a directory structure where Release A, the integration area, and each development area use different versions of GT.M.  In the most common case, where the integration and development areas use a different version of GT.M from Release A, the only additional configuration requirement is to create a directory in the integration area for object files generated from the source files in Release A with the version of GT.M used for integration and development of Release B&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1727</id>
		<title>Software Development (WG1) Version Control (T3)</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1727"/>
		<updated>2005-11-22T17:45:50Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: /* VistA Release Directories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a VistA Development Environment ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
This is a description of how VistA development environments should be configured.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Monospaced text&amp;lt;/tt&amp;gt; designates program names, directory names, command line parameters, etc., that are intended to be typed in at a Linux shell or a GT.M prompt, e.g. &amp;lt;tt&amp;gt;/bin/bash&amp;lt;/tt&amp;gt;.  &#039;&#039;Italic text&#039;&#039; is a descriptor of something whose actual value must be determined when the command is typed, e.g., &#039;&#039;gtmver&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Theory ===&lt;br /&gt;
&lt;br /&gt;
A release is a collection of routines and global variables.  The canonical packaging of a release, which is suitable for importation into any standard M distribution, is a collection of M source code routines and a database extract in ZWRite format.  When installed on a system, to run with an M implementation, a release may have pre-compiled object files, database files, shell scripts, global directories, etc.&lt;br /&gt;
&lt;br /&gt;
Below is a diagram of the “roll-up” by which a VistA release (“Release A”) gets converted into another VistA release (“Release B”) by a development team.  A and B could be from different families, e.g., Release A could be a FOIA release and Release B could be a Leonardo da VistA release.&lt;br /&gt;
&lt;br /&gt;
[[Image:051112-1WorldVistADevelopmentEnvironment_html_26096dee.gif|&lt;br /&gt;
&amp;quot;Roll up&amp;quot; model of VistA releases]]&lt;br /&gt;
&lt;br /&gt;
Once Release A is installed, it remains frozen and unchanged except for any essential patches that may become available independent of the development process for creating Release B and without which the release lacks some required functionality.  This means, for example, that KIDS patches should be applied in an integration environment rather than a release environment.&lt;br /&gt;
&lt;br /&gt;
At any given time, there can be multiple development projects underway based on Release A.  In other words, there may well be a Release C that is also based on Release A, but which has its own integration and development areas.&lt;br /&gt;
&lt;br /&gt;
To start the development process, an integration directory is created and initialized with a copy of the global variables from Release A, as well as shell scripts, global directories, etc.  The integration directory may well have a different name from Release A and Release B.  For example, Release A may be FOIAVistA_20051021, Release B may become LeonardoDaVistA_0.4 (at the time that the integration area is created, the name and version of Release B may not even be decided yet), and the integration and development areas may be named Greenbelt_200510.  There is no need to copy routines, since the GT.M search path will be set up to look for routines in the integration area before looking in Release A; hence only routines that are different between Release A and the new release need to be duplicated.&lt;br /&gt;
&lt;br /&gt;
Actual development does not take place in the integration area.  Development occurs in development areas, typically in the directories of individual developers; however, there may be a shared development area if two developers are collaborating on making changes to the very same module (i.e., their code changes overlap).  A development area is set up by creating a directory structure, shell scripts, etc.  Note that development areas can be hierarchical so that development subtasks 1a and 1b can be developed separately and integrated into development task 1, prior to integration into the integration area, etc.&lt;br /&gt;
&lt;br /&gt;
During this development process, developers develop code in individual sand boxes (development areas), but normally share the database (global variables) in the integration area – there may typically be no need to create a separate database.  However, if some global variable changes are tied to code changes being made in a development area, a copy of those global variables can be placed in a separate database file in that development area, and a global directory for that development area can map those global variables to the database in that development area, with all other global variables mapped to the database in the integration area.&lt;br /&gt;
&lt;br /&gt;
When a developer has code that is ready for integration, the new versions of the modified routines are promoted to the integration area.  Any global variables tied to the code being promoted that are in a database in the development area must be merged, reconciled or otherwise integrated with the global variables in the database in the integration area and the global directory in the development area modified accordingly.  Note that there needs to be a process, e.g., involving code reviews, by which a development task is considered complete enough to be promoted.  These, and other quality gates, are not discussed herein.&lt;br /&gt;
&lt;br /&gt;
Creating a release is minimally the process of creating the directory structure for Release B, copying the routines from Release A, overlying the routines with those from the integration area, and copying the global variables from the integration area.&lt;br /&gt;
&lt;br /&gt;
Normally, Release A, the integration area and development areas would all use the same GT.M version.  However, this is not a requirement.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;It is strongly recommended that database files in integration and development environments be journaled, and backed up regularly.  It is also strongly recommended that a version control system such as CVS or subversion be used for integration areas.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Practice ===&lt;br /&gt;
&lt;br /&gt;
==== Shell ====&lt;br /&gt;
&lt;br /&gt;
The standard shell for VistA community scripting is bash (installed as &amp;lt;tt&amp;gt;/bin/bash&amp;lt;/tt&amp;gt; on Debian GNU/Linux systems).&lt;br /&gt;
&lt;br /&gt;
==== GT.M Release Directories ====&lt;br /&gt;
&lt;br /&gt;
Each release of GT.M is installed its own subdirectory of &amp;lt;tt&amp;gt;/opt&amp;lt;/tt&amp;gt; (preferred) or &amp;lt;tt&amp;gt;/usr/local&amp;lt;/tt&amp;gt; (acceptable).  Each directory name starts with &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; followed by a release number separated from the release name by an underscore (&amp;lt;tt&amp;gt;_&amp;lt;/tt&amp;gt;).  Thus, for example, GT.M V5.0-000C would be installed in &amp;lt;tt&amp;gt;/opt/gtm_V5.0-000C&amp;lt;/tt&amp;gt;.  &amp;lt;tt&amp;gt;/opt/gtm&amp;lt;/tt&amp;gt; is a relative symbolic link to the latest version, set up with a command sequence such as:&lt;br /&gt;
&lt;br /&gt;
  cd /opt&lt;br /&gt;
  rm -f gtm&lt;br /&gt;
  ln -s gtm_V5.0-000C gtm&lt;br /&gt;
&lt;br /&gt;
When installing GT.M, the file gtmprofile should be edited so that the line:&lt;br /&gt;
&lt;br /&gt;
  EDITOR=&amp;quot;/bin/vi&amp;quot;; export EDITOR&lt;br /&gt;
&lt;br /&gt;
is modified to read:&lt;br /&gt;
&lt;br /&gt;
  export EDITOR=${EDITOR:=/bin/vi}&lt;br /&gt;
&lt;br /&gt;
==== VistA Release Directories ====&lt;br /&gt;
&lt;br /&gt;
Each release is installed in its own sub-directory of a standard system location, such as &amp;lt;tt&amp;gt;/opt&amp;lt;/tt&amp;gt; (preferred) or &amp;lt;tt&amp;gt;/usr/local&amp;lt;/tt&amp;gt; (acceptable).  Each directory has a release family name followed by a release / version number suffix separated from the release name by an underscore.  Directories for releases without version numbers, such as FOIA releases, have a date suffix of the form &#039;&#039;yyyymmdd&#039;&#039; (and where appropriate just &#039;&#039;yyyymm&#039;&#039;).  For example, an August 25, 2005 FOIA release would be in &amp;lt;tt&amp;gt;/opt/FOIAVistA_20050825&amp;lt;/tt&amp;gt;, an October 21, 2005 release in &amp;lt;tt&amp;gt;/opt/FOIAVistA_20051021&amp;lt;/tt&amp;gt;, an OpenVistA 0.3 release in &amp;lt;tt&amp;gt;/opt/OpenVistA_0.3&amp;lt;/tt&amp;gt; and a Leonardo da VistA 0.45 release in &amp;lt;tt&amp;gt;/opt/LeonardoDaVistA_0.45&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The normal protection on all directories and files in a release directory should be read-only.  To install files in the &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; subdirectory, it should be made read-write, the source for the patch copied in, the object file(s) generated, and the directory again made read-only.&lt;br /&gt;
&lt;br /&gt;
For each release family, the release directory contains subdirectories &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt;, symbolic link &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt;, and a script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt;.  Other shell scripts may be created for various maintenance purposes (and ideally would be documented here).&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt; contains a global directory file &amp;lt;tt&amp;gt;mumps.gld&amp;lt;/tt&amp;gt; and a compressed database file &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.  The global directory maps all global variables to a single database file &amp;lt;tt&amp;gt;$vista_home/g/mumps.dat&amp;lt;/tt&amp;gt; (i.e., the environment variable &amp;lt;tt&amp;gt;$vista_home&amp;lt;/tt&amp;gt; is used at run-time to point a GT.M process to the location of the database file, so that different processes can actually use the same global directory to refer to entirely different database files).&lt;br /&gt;
&lt;br /&gt;
*Subdirectories &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; correspond to directories for files containing routine object code and routine source code respectively.  Each file in &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; ends in &amp;lt;tt&amp;gt;.m&amp;lt;/tt&amp;gt; and has a corresponding file in &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt; with a newer time stamp and which ends in &amp;lt;tt&amp;gt;.o&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; contains source and object code for patches to a release (generated outside the scope of the work for creating Release B) and which are deemed to be essential for the proper functioning of the release.&lt;br /&gt;
&lt;br /&gt;
*The symbolic link &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; points to the GT.M directory used for this VistA directory.&lt;br /&gt;
&lt;br /&gt;
*The script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt; creates a new integration directory to be used in creating a new release from this release.    Normally, the initial database file of the integration directory is created by uncompressing &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.  Option &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039;, specifies that the integration directory is to be configured to run a different version of GT.M (as specified by the directory &#039;&#039;gtmver&#039;&#039;) from the one used by the release.  If &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; is used, the default assumption is that the database will need to be extracted with the version of GT.M used by Release A, and loaded into a new database created with the version of GT.M to be used in the integration directory.  When &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; is used, a an additional optional option &amp;lt;tt&amp;gt;--nonewdb&amp;lt;/tt&amp;gt; is used to specify that the releases of GT.M have compatible database formats, and that database from Release A can be used unchanged in the integration directory.  Note that the use of &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; will almost certainly result in a command that takes a long time, because the database may need to be extracted and reloaded, and the routines recompiled.  Here is the script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
==== VistA Integration Directories ====&lt;br /&gt;
&lt;br /&gt;
A VistA integration directory is similar to a VistA release directory, with the following differences.&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt; contains a database file, &amp;lt;tt&amp;gt;mumps.dat&amp;lt;/tt&amp;gt;, rather than a compressed database file, &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*The symbolic link &amp;lt;tt&amp;gt;parent&amp;lt;/tt&amp;gt; points to the release directory from which this integration directory was created.  A release directory does not have a symbolic link called parent. (The recommended way for a script to determine whether a directory is a release directory or an integration / development directory is to test for the existence of &amp;lt;tt&amp;gt;parent&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
*A script &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; which invokes and runs VistA in that integration environment.  Note that a VistA release may physically include a &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; script, but it will not work because it is not possible to directly run VistA from a release directory.&lt;br /&gt;
&lt;br /&gt;
*When the &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt; script is executed, it will create a development directory.&lt;br /&gt;
&lt;br /&gt;
*The normal protection on all directories and files in an integration directory should be read-only.  When promoting code to the integration directory from a development directory, or to install externally generated patches in the &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; subdirectory, needed directories should be made read-write, sources copied in, object file(s) generated, and directories again made read-only.&lt;br /&gt;
&lt;br /&gt;
==== VistA Development Directories ====&lt;br /&gt;
&lt;br /&gt;
A development directory is like an integration directory, except that it does not normally have its own database file or global directory.  However, as discussed above, it may be entirely appropriate for a development directory to have database files and global directories.&lt;br /&gt;
&lt;br /&gt;
Indeed, since development directories are hierarchical – a development directory is an integration directory for development directories below it, and itself contributes to an integration directory above it, an integration directory is really nothing more than a development directory that does not itself contribute to an integration directory above it, but instead is used to create a release.&lt;br /&gt;
&lt;br /&gt;
Note that although a GT.M database file can be opened by only one GT.M version at a time, it is quite easy to create a directory structure where Release A, the integration area, and each development area use different versions of GT.M.  In the most common case, where the integration and development areas use a different version of GT.M from Release A, the only additional configuration requirement is to create a directory in the integration area for object files generated from the source files in Release A with the version of GT.M used for integration and development of Release B&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1722</id>
		<title>Software Development (WG1) Version Control (T3)</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1722"/>
		<updated>2005-11-22T04:32:27Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: /* VistA Release Directories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a VistA Development Environment ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
This is a description of how VistA development environments should be configured.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Monospaced text&amp;lt;/tt&amp;gt; designates program names, directory names, command line parameters, etc., that are intended to be typed in at a Linux shell or a GT.M prompt, e.g. &amp;lt;tt&amp;gt;/bin/bash&amp;lt;/tt&amp;gt;.  &#039;&#039;Italic text&#039;&#039; is a descriptor of something whose actual value must be determined when the command is typed, e.g., &#039;&#039;gtmver&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Theory ===&lt;br /&gt;
&lt;br /&gt;
A release is a collection of routines and global variables.  The canonical packaging of a release, which is suitable for importation into any standard M distribution, is a collection of M source code routines and a database extract in ZWRite format.  When installed on a system, to run with an M implementation, a release may have pre-compiled object files, database files, shell scripts, global directories, etc.&lt;br /&gt;
&lt;br /&gt;
Below is a diagram of the “roll-up” by which a VistA release (“Release A”) gets converted into another VistA release (“Release B”) by a development team.  A and B could be from different families, e.g., Release A could be a FOIA release and Release B could be a Leonardo da VistA release.&lt;br /&gt;
&lt;br /&gt;
[[Image:051112-1WorldVistADevelopmentEnvironment_html_26096dee.gif|&lt;br /&gt;
&amp;quot;Roll up&amp;quot; model of VistA releases]]&lt;br /&gt;
&lt;br /&gt;
Once Release A is installed, it remains frozen and unchanged except for any essential patches that may become available independent of the development process for creating Release B and without which the release lacks some required functionality.  This means, for example, that KIDS patches should be applied in an integration environment rather than a release environment.&lt;br /&gt;
&lt;br /&gt;
At any given time, there can be multiple development projects underway based on Release A.  In other words, there may well be a Release C that is also based on Release A, but which has its own integration and development areas.&lt;br /&gt;
&lt;br /&gt;
To start the development process, an integration directory is created and initialized with a copy of the global variables from Release A, as well as shell scripts, global directories, etc.  The integration directory may well have a different name from Release A and Release B.  For example, Release A may be FOIAVistA_20051021, Release B may become LeonardoDaVistA_0.4 (at the time that the integration area is created, the name and version of Release B may not even be decided yet), and the integration and development areas may be named Greenbelt_200510.  There is no need to copy routines, since the GT.M search path will be set up to look for routines in the integration area before looking in Release A; hence only routines that are different between Release A and the new release need to be duplicated.&lt;br /&gt;
&lt;br /&gt;
Actual development does not take place in the integration area.  Development occurs in development areas, typically in the directories of individual developers; however, there may be a shared development area if two developers are collaborating on making changes to the very same module (i.e., their code changes overlap).  A development area is set up by creating a directory structure, shell scripts, etc.  Note that development areas can be hierarchical so that development subtasks 1a and 1b can be developed separately and integrated into development task 1, prior to integration into the integration area, etc.&lt;br /&gt;
&lt;br /&gt;
During this development process, developers develop code in individual sand boxes (development areas), but normally share the database (global variables) in the integration area – there may typically be no need to create a separate database.  However, if some global variable changes are tied to code changes being made in a development area, a copy of those global variables can be placed in a separate database file in that development area, and a global directory for that development area can map those global variables to the database in that development area, with all other global variables mapped to the database in the integration area.&lt;br /&gt;
&lt;br /&gt;
When a developer has code that is ready for integration, the new versions of the modified routines are promoted to the integration area.  Any global variables tied to the code being promoted that are in a database in the development area must be merged, reconciled or otherwise integrated with the global variables in the database in the integration area and the global directory in the development area modified accordingly.  Note that there needs to be a process, e.g., involving code reviews, by which a development task is considered complete enough to be promoted.  These, and other quality gates, are not discussed herein.&lt;br /&gt;
&lt;br /&gt;
Creating a release is minimally the process of creating the directory structure for Release B, copying the routines from Release A, overlying the routines with those from the integration area, and copying the global variables from the integration area.&lt;br /&gt;
&lt;br /&gt;
Normally, Release A, the integration area and development areas would all use the same GT.M version.  However, this is not a requirement.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;It is strongly recommended that database files in integration and development environments be journaled, and backed up regularly.  It is also strongly recommended that a version control system such as CVS or subversion be used for integration areas.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Practice ===&lt;br /&gt;
&lt;br /&gt;
==== Shell ====&lt;br /&gt;
&lt;br /&gt;
The standard shell for VistA community scripting is bash (installed as &amp;lt;tt&amp;gt;/bin/bash&amp;lt;/tt&amp;gt; on Debian GNU/Linux systems).&lt;br /&gt;
&lt;br /&gt;
==== GT.M Release Directories ====&lt;br /&gt;
&lt;br /&gt;
Each release of GT.M is installed its own subdirectory of &amp;lt;tt&amp;gt;/opt&amp;lt;/tt&amp;gt; (preferred) or &amp;lt;tt&amp;gt;/usr/local&amp;lt;/tt&amp;gt; (acceptable).  Each directory name starts with &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; followed by a release number separated from the release name by an underscore (&amp;lt;tt&amp;gt;_&amp;lt;/tt&amp;gt;).  Thus, for example, GT.M V5.0-000C would be installed in &amp;lt;tt&amp;gt;/opt/gtm_V5.0-000C&amp;lt;/tt&amp;gt;.  &amp;lt;tt&amp;gt;/opt/gtm&amp;lt;/tt&amp;gt; is a relative symbolic link to the latest version, set up with a command sequence such as:&lt;br /&gt;
&lt;br /&gt;
  cd /opt&lt;br /&gt;
  rm -f gtm&lt;br /&gt;
  ln -s gtm_V5.0-000C gtm&lt;br /&gt;
&lt;br /&gt;
When installing GT.M, the file gtmprofile should be edited so that the line:&lt;br /&gt;
&lt;br /&gt;
  EDITOR=&amp;quot;/bin/vi&amp;quot;; export EDITOR&lt;br /&gt;
&lt;br /&gt;
is modified to read:&lt;br /&gt;
&lt;br /&gt;
  export EDITOR=${EDITOR:=/bin/vi}&lt;br /&gt;
&lt;br /&gt;
==== VistA Release Directories ====&lt;br /&gt;
&lt;br /&gt;
Each release is installed in its own sub-directory of a standard system location, such as &amp;lt;tt&amp;gt;/opt&amp;lt;/tt&amp;gt; (preferred) or &amp;lt;tt&amp;gt;/usr/local&amp;lt;/tt&amp;gt; (acceptable).  Each directory has a release family name followed by a release / version number suffix separated from the release name by an underscore.  Directories for releases without version numbers, such as FOIA releases, have a date suffix of the form &#039;&#039;yyyymmdd&#039;&#039; (and where appropriate just &#039;&#039;yyyymm&#039;&#039;).  For example, an August 25, 2005 FOIA release would be in &amp;lt;tt&amp;gt;/opt/FOIAVistA_20050825&amp;lt;/tt&amp;gt;, an October 21, 2005 release in &amp;lt;tt&amp;gt;/opt/FOIAVistA_20051021&amp;lt;/tt&amp;gt;, an OpenVistA 0.3 release in &amp;lt;tt&amp;gt;/opt/OpenVistA_0.3&amp;lt;/tt&amp;gt; and a Leonardo da VistA 0.45 release in &amp;lt;tt&amp;gt;/opt/LeonardoDaVistA_0.45&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The normal protection on all directories and files in a release directory should be read-only.  To install files in the &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; subdirectory, it should be made read-write, the source for the patch copied in, the object file(s) generated, and the directory again made read-only.&lt;br /&gt;
&lt;br /&gt;
For each release family, the release directory contains subdirectories &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt;, symbolic link &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt;, and a script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt;.  Other shell scripts may be created for various maintenance purposes (and ideally would be documented here).&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt; contains a global directory file &amp;lt;tt&amp;gt;mumps.gld&amp;lt;/tt&amp;gt; and a compressed database file &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.  The global directory maps all global variables to a single database file &amp;lt;tt&amp;gt;$vista_home/g/mumps.dat&amp;lt;/tt&amp;gt; (i.e., the environment variable &amp;lt;tt&amp;gt;$vista_home&amp;lt;/tt&amp;gt; is used at run-time to point a GT.M process to the location of the database file, so that different processes can actually use the same global directory to refer to entirely different database files).&lt;br /&gt;
&lt;br /&gt;
*Subdirectories &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; correspond to directories for files containing routine object code and routine source code respectively.  Each file in &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; ends in &amp;lt;tt&amp;gt;.m&amp;lt;/tt&amp;gt; and has a corresponding file in &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt; with a newer time stamp and which ends in &amp;lt;tt&amp;gt;.o&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; contains source and object code for patches to a release (generated outside the scope of the work for creating Release B) and which are deemed to be essential for the proper functioning of the release.&lt;br /&gt;
&lt;br /&gt;
*The symbolic link &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; points to the GT.M directory used for this VistA directory.&lt;br /&gt;
&lt;br /&gt;
*The script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt; creates a new integration directory to be used in creating a new release from this release.    Normally, the initial database file of the integration directory is created by uncompressing &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.  Option &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039;, specifies that the integration directory is to be configured to run a different version of GT.M (as specified by the directory &#039;&#039;gtmver&#039;&#039;) from the one used by the release.  If &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; is used, the default assumption is that the database will need to be extracted with the version of GT.M used by Release A, and loaded into a new database created with the version of GT.M to be used in the integration directory.  When &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; is used, a an additional optional option &amp;lt;tt&amp;gt;--nonewdb&amp;lt;/tt&amp;gt; is used to specify that the releases of GT.M have compatible database formats, and that database from Release A can be used unchanged in the integration directory.  Note that the use of &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; will almost certainly result in a command that takes a long time, because the database may need to be extracted and reloaded, and the routines recompiled.&lt;br /&gt;
&lt;br /&gt;
==== VistA Integration Directories ====&lt;br /&gt;
&lt;br /&gt;
A VistA integration directory is similar to a VistA release directory, with the following differences.&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt; contains a database file, &amp;lt;tt&amp;gt;mumps.dat&amp;lt;/tt&amp;gt;, rather than a compressed database file, &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*The symbolic link &amp;lt;tt&amp;gt;parent&amp;lt;/tt&amp;gt; points to the release directory from which this integration directory was created.  A release directory does not have a symbolic link called parent. (The recommended way for a script to determine whether a directory is a release directory or an integration / development directory is to test for the existence of &amp;lt;tt&amp;gt;parent&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
*A script &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; which invokes and runs VistA in that integration environment.  Note that a VistA release may physically include a &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; script, but it will not work because it is not possible to directly run VistA from a release directory.&lt;br /&gt;
&lt;br /&gt;
*When the &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt; script is executed, it will create a development directory.&lt;br /&gt;
&lt;br /&gt;
*The normal protection on all directories and files in an integration directory should be read-only.  When promoting code to the integration directory from a development directory, or to install externally generated patches in the &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; subdirectory, needed directories should be made read-write, sources copied in, object file(s) generated, and directories again made read-only.&lt;br /&gt;
&lt;br /&gt;
==== VistA Development Directories ====&lt;br /&gt;
&lt;br /&gt;
A development directory is like an integration directory, except that it does not normally have its own database file or global directory.  However, as discussed above, it may be entirely appropriate for a development directory to have database files and global directories.&lt;br /&gt;
&lt;br /&gt;
Indeed, since development directories are hierarchical – a development directory is an integration directory for development directories below it, and itself contributes to an integration directory above it, an integration directory is really nothing more than a development directory that does not itself contribute to an integration directory above it, but instead is used to create a release.&lt;br /&gt;
&lt;br /&gt;
Note that although a GT.M database file can be opened by only one GT.M version at a time, it is quite easy to create a directory structure where Release A, the integration area, and each development area use different versions of GT.M.  In the most common case, where the integration and development areas use a different version of GT.M from Release A, the only additional configuration requirement is to create a directory in the integration area for object files generated from the source files in Release A with the version of GT.M used for integration and development of Release B&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Installation_Overview&amp;diff=1807</id>
		<title>Installation Overview</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Installation_Overview&amp;diff=1807"/>
		<updated>2005-11-17T21:51:55Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The documentation for VistA and OpenVistA can be classified in several groups:&lt;br /&gt;
== Getting the software ==&lt;br /&gt;
  This is the VA ftp site for VistA:  ftp://ftp.va.gov/VistA/&lt;br /&gt;
&lt;br /&gt;
  This link is specifically for software: ftp://ftp.va.gov/VistA/Software/&lt;br /&gt;
&lt;br /&gt;
  For the open source free software stack for VistA: http://sourceforge.net/projects/worldvista&lt;br /&gt;
&lt;br /&gt;
== Installation Documentation created by WorldVistA and volunteers in the VistA Community. ==&lt;br /&gt;
&lt;br /&gt;
=== Getting up and running with the VistA open source free software ([http://en.wikipedia.org/wiki/Free_and_Open_Source_Software FOSS]) stack ===&lt;br /&gt;
&lt;br /&gt;
The complete FOSS stack for VistA consists of VistA on [http://www.sanchez-gtm.com GT.M] on [http://www.wikipedia.org/wiki/Linux GNU/Linux] on industry standard x86 server hardware.  Although it is certainly possible to install this stack by downloading VistA, and installing it on GT.M on x86 GNU/Linux, it is much easier to start with a pre-configured software stack.  There are (at least) two flavors of VistA, and two types of packages of VistA on GT.M.&lt;br /&gt;
&lt;br /&gt;
VistA flavors:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;FOIA VistA&#039;&#039;&#039; is VistA as periodically released by the [http://www.va.gov US Department of Veterans Affairs] under the [http://www.usdoj.gov/oip/foia_updates/Vol_XVII_4/page2.htm Freedom of Information Act (FOIA).]  This is sometimes referrd to as the &amp;quot;gold standard&amp;quot;.  Prior versions of this software at the [http://sourceforge.net/projects/worldvista WorldVistA project page at Source Forge] are labelled OpenVistA FOIA Gold.  FOIA VistA releases are numbered by the date on which they are released under FOIA, e.g., 20051021 for Oct 21, 2005.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Leonardo da VistA&#039;&#039;&#039; is FOIA VistA as enhanced by the VistA community.  &#039;&#039;&#039;Leonardo da VistA is used here as strictly an interim, temporary, just-until-the-new-name-is-announced name.&#039;&#039;&#039;  This software was previously known to the community first as &amp;quot;Hui OpenVistA&amp;quot;, and then as just &amp;quot;OpenVistA&amp;quot;.  The subsequent grant by the US Patent and Trademark Office of a registered trademark of that name to a corporation has triggered a search for a replacement name, and Leonardo da VistA is used here until the new name is announced.  Prior releases of this software at the [http://sourceforge.net/projects/worldvista WorldVistA project page at Source Forge] are labelled OpenVistA.  Leonardo da VistA releases have numbers such as 0.4.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;OpenVistA VA Demo&#039;&#039;&#039; is a one-of release of a configuration of VistA intended to demonstrate the CPRS GUI, but not to be otherwise useful, and not part of a family of releases.&lt;br /&gt;
&lt;br /&gt;
In the future, it is hoped that there will be other flavors, e.g., VistA Office EHR.&lt;br /&gt;
&lt;br /&gt;
Types of packages:&lt;br /&gt;
&lt;br /&gt;
*A &#039;&#039;&#039;SemiVivA&#039;&#039;&#039; package consists of VistA and GT.M bundled together and ready to be installed on an x86 GNU/Linux server.&lt;br /&gt;
&lt;br /&gt;
*A &#039;&#039;&#039;VivA&#039;&#039;&#039; or &#039;&#039;&#039;VivitA&#039;&#039;&#039;package is a [http://en.wikipedia.org/wiki/Linux_live_cd live CD (or DVD)] that can be booted on any x86 architecture server to run the entire VistA FOSS stack.  VivitA releases are created by mastering [http://damnsmalllinux.org DSL] and the VivA releases are created by remastering either [http://knopper.net/knoppix/index-en.html Knoppix] or [http://morphix.org Morphix].&lt;br /&gt;
&lt;br /&gt;
SemiVivA packages expect to find [http://xdialog.dyns.net Xdialog] on the computer.  To use a SemiVivA package, download it to a temporary directory (e.g., as &amp;lt;tt&amp;gt;/tmp/LeonardoDaVistASemiVivA0.4.tgz&amp;lt;/tt&amp;gt;).  Then, &#039;&#039;&#039;as root&#039;&#039;&#039; execute:&lt;br /&gt;
&lt;br /&gt;
  cd /usr/local&lt;br /&gt;
  tar zxvf /tmp/LeonardoDaVistASemiVivA0.4.tgz&lt;br /&gt;
&lt;br /&gt;
This will install VistA and GT.M.  To use it, an environment with an initial copy of the database must be created with the command:&lt;br /&gt;
&lt;br /&gt;
  /usr/local/LeonardoDaVistA/vista --install &#039;&#039;directory&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the above, substitute the actual VistA release name (e.g., OpenVistA, FOIAVistA) for LeonardoDaVistA.  &#039;&#039;directory&#039;&#039; is the full path name of a directory (without a trailing slash) where the environment with the initial copy of the database is to be created, e.g., &amp;lt;tt&amp;gt;/home/vista/myVistA&amp;lt;/tt&amp;gt;.  To subsequently run VistA, VivitAs again have an option from the mouse on the background.  For VivAs, use:&lt;br /&gt;
&lt;br /&gt;
  /usr/local/LeonardoDaVistA/vista --run &#039;&#039;directory&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To use a VivA or VivitA package, read/write storage is required for the database.  The current distributions can use a Linux file system (e.g., ext3, reiserfs) or a FAT file system (Windows 95/98/ME) but not an NTFS file system (Windows NT/2000/XP/2003).  The live CD/DVDs have tools needed to partition a hard drive and create a new file system.  The easiest way to proceed is to simply plug a 512MB or bigger USB flash or thumb drive (or a USB hard drive) into the USB port (USB 2.0 preferred) of an x86 server, and boot the CD/DVD.  The instructions below are for USB drives, but apply equally well - with appropriate names for the read/write storage - for IDE and SCSI drives.&lt;br /&gt;
&lt;br /&gt;
*After booting the operating system, you will need to mount the read/write storage.  For Knoppix based VivA releases, right click on the icon for the drive and mount the drive.  This mounts it read-only.  Right click again, choose Actions and change the mode to read/write.  Note the name of the drive; it will probably be something like &amp;lt;tt&amp;gt;/mnt/uba1&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;/mnt/sda1&amp;lt;/tt&amp;gt;.  For DSL based VivitA releases, there is a small window in the lower right of the screen with a mounting applet.  Immediately after boot up, it will say &#039;&#039;floppy&#039;&#039;.  Click on the arrow icons within the applet to choose &#039;&#039;sda1&#039;&#039; or other read/write storage, and then click on the icon in the applet to mount the drive.  For (older) Morphix based releases, execute:&lt;br /&gt;
&lt;br /&gt;
  sudo insmod usb-storage&lt;br /&gt;
  mount /mnt/sda1&lt;br /&gt;
&lt;br /&gt;
*You will need to create an environment with an initial copy of the database.  VivitAs have an option from the &amp;quot;start menu&amp;quot; from clicking the right mouse button on the background.  On VivA releases, start a shell, and execute (as before, use the actual name of your VistA):&lt;br /&gt;
&lt;br /&gt;
  /usr/local/LeonardoDaVistA/vista --install &#039;&#039;directory&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*To subsequently run VistA, VivitAs again have an option from the mouse on the background.  For VivAs, use:&lt;br /&gt;
&lt;br /&gt;
  /usr/local/LeonardoDaVistA/vista --run &#039;&#039;directory&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When the GT.M prompt (&amp;lt;tt&amp;gt;GTM&amp;gt;&amp;lt;/tt&amp;gt;) appears, you have a VistA environment that is ready to start configuring.&lt;br /&gt;
&lt;br /&gt;
== Installation Documentation from sofware and hardware vendors of VistA and OpenVistA. ==&lt;br /&gt;
&lt;br /&gt;
== Installation Documentation from the [[VistA Documentation Library]] (VDL) ==&lt;br /&gt;
&lt;br /&gt;
=== Clinical ===&lt;br /&gt;
&amp;lt;TABLE summary=&amp;quot;This table is for formatting purposes only.&amp;quot; class = &amp;quot;toc&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Admission Discharge Transfer (ADT)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Electronic Wait List]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Medicine]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Prescription Practices (PPP)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Ambulatory Care Reporting]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Functional Independence Measurement (FIM)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Mental Health]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Primary Care Management Module (PCMM)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Beneficiary Travel]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Group Notes]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Nursing]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Prosthestics]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Care Management]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Home Based Primary Care (HBPC)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Oncology]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Quality Audiology Speech Anal &amp;amp; Rpting (QUASAR)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Clinical Case Registries]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Immunology Case Registry (ICR)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Patient Care Encounter (PCE)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Radiology / Nuclear Medicine]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Clinical Procedures]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Incomplete Records Tracking (IRT)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy  Automatic Replenish / Ward Stock (AR/WS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of RAI/MDS]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Computerized Patient Record System (CPRS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Intake and Output]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Bar Code Medication Administration (BCMA)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Remote Order Entry System (ROES)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Adverse Reaction Tracking (ART)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory Anatomic Pathology]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Benefits Management (PBM)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Scheduling]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Authorization Subscription Utility (ASU)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory Blood Bank]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Consolidated Mail Outpatient Pharmacy]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Social Work]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Clinical Reminders]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory Blood Bank Workarounds]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Controlled Substances]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Spinal Cord Dysfunction]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Consult/Request Tracking]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory Electronic Data Interchange (LEDI)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Data Management (PDM)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Surgery]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Health Summary]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory Emerging Pathogens Initiative]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Drug Accountability]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of VISTA Imaging System]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Problem List]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory National Laboratory Tests/ LOINC Request Form]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Electronic Claims Management Engine (ECME)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Visual Impairment Service Team (VIST)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Text Integration Utility (TIU)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory Universal Interface]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Inpatient Medications]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Vitals / Measurements]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Dentistry]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy National Drug File (NDF)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Women&#039;s Health]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Dietetics]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Lexicon Utility]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Outpatient Pharmacy]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
=== Infrastructure ===&lt;br /&gt;
&amp;lt;TABLE summary=&amp;quot;This table is for formatting purposes only.&amp;quot; class = &amp;quot;toc&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Capacity Management Tools]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Kernel Delphi Components (KDC)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Minimal Patient Dataset (MPD)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of SlotMaster (Kernel ZSLOT)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Duplicate Record Merge- Patient Merge]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Kernel Installation and Distribution System (KIDS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Name Standardization]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of SQL Interface (SQLI)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Electronic Error and Enhancement Reporting (E3R)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Kernel Toolkit]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of National Online Information Sharing (NOIS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Standard Files and Tables]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of FileMan]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Kernel Unwinder]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of National Patch Module]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Statistical Analysis of Global Growth (SAGG)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of FileMan Delphi Components (FMDC)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of List Manager]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Network Health Exchange (NHE)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Survey Generator]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of HL7 (VistA Messaging)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of M-to-M Broker]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Patient Data Exchange (PDX)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of VistA Data Extraction Framework (VDEF)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Institution File Redesign (IFR)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of MailMan]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Remote Procedure Call (RPC) Broker]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of XML Parser (VistA)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Kernel]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Master Patient Index (MPI)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Resource Usage Monitor]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
=== Financial-Administrative ===&lt;br /&gt;
&amp;lt;TABLE summary=&amp;quot;This table is for formatting purposes only.&amp;quot; class = &amp;quot;toc&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Accounts Receivable (AR)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Engineering (AEMS / MERS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of IFCAP]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Patient Representative]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Auto Safety Incdnt Surv Trak Sys (ASISTS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Enrollment Application System]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Incident Reporting]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Personnel and Accounting Integrated Data (PAID)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Automated Information Collection System (AICS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Equipment / Turn-In Request]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Income Verification Match (IVM)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Police and Security]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Automated Medical Information Exchange (AMIE)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Event Capture]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Integrated Billing (IB)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Quality Management Integration Module]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Clinical Monitoring System]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Fee Basis]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Integrated Patient Funds]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Record Tracking]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Compensation &amp;amp; Pension Records Interchange (CAPRI)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Generic Code Sheet (GCS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Library]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Release of Information (ROI) Manager]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Current Procedural Terminology (CPT)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Health Eligibility Center (HEC)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Missing Patient Register]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Veterans Identification Card (VIC/PICS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Decision Support System (DSS) Extracts]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Hospital Inquiry (HINQ)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Occurrence Screen]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Voluntary Service System (VSS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Diagnostic Related Group (DRG) Grouper]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of ICD-9-CM]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;/TABLE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Installation_Overview&amp;diff=1675</id>
		<title>Installation Overview</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Installation_Overview&amp;diff=1675"/>
		<updated>2005-11-17T21:34:33Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: /* Installation Documentation created by WorldVistA and volunteers in the VistA Community. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The documentation for VistA and OpenVistA can be classified in several groups:&lt;br /&gt;
== Getting the software ==&lt;br /&gt;
  This is the VA ftp site for VistA:  ftp://ftp.va.gov/VistA/&lt;br /&gt;
&lt;br /&gt;
  This link is specifically for software: ftp://ftp.va.gov/VistA/Software/&lt;br /&gt;
&lt;br /&gt;
  For the open source free software stack for VistA: http://sourceforge.net/projects/worldvista&lt;br /&gt;
&lt;br /&gt;
== Installation Documentation created by WorldVistA and volunteers in the VistA Community. ==&lt;br /&gt;
&lt;br /&gt;
=== Getting up and running with the VistA open source free software ([http://en.wikipedia.org/wiki/Free_and_Open_Source_Software FOSS]) stack ===&lt;br /&gt;
&lt;br /&gt;
The complete FOSS stack for VistA consists of VistA on [http://www.sanchez-gtm.com GT.M] on [http://www.wikipedia.org/wiki/Linux GNU/Linux] on industry standard x86 server hardware.  Although it is certainly possible to install this stack by downloading VistA, and installing it on GT.M on x86 GNU/Linux, it is much easier to start with a pre-configured software stack.  There are (at least) two flavors of VistA, and two types of packages of VistA on GT.M.&lt;br /&gt;
&lt;br /&gt;
VistA flavors:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;FOIA VistA&#039;&#039;&#039; is VistA as periodically released by the [http://www.va.gov US Department of Veterans Affairs] under the [http://www.usdoj.gov/oip/foia_updates/Vol_XVII_4/page2.htm Freedom of Information Act (FOIA).]  This is sometimes referrd to as the &amp;quot;gold standard&amp;quot;.  Prior versions of this software at the [http://sourceforge.net/projects/worldvista WorldVistA project page at Source Forge] are labelled OpenVistA FOIA Gold.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Leonardo da VistA&#039;&#039;&#039; is FOIA VistA as enhanced by the VistA community.  &#039;&#039;&#039;Leonardo da VistA is used here as strictly an interim, temporary, just-until-the-new-name-is-announced name.&#039;&#039;&#039;  This software was previously known to the community first as &amp;quot;Hui OpenVistA&amp;quot;, and then as just &amp;quot;OpenVistA&amp;quot;.  The subsequent grant by the US Patent and Trademark Office of a registered trademark of that name to a corporation has triggered a search for a replacement name, and Leonardo da VistA is used here until the new name is announced.  Prior releases of this software at the [http://sourceforge.net/projects/worldvista WorldVistA project page at Source Forge] are labelled OpenVistA.&lt;br /&gt;
&lt;br /&gt;
Types of packages:&lt;br /&gt;
&lt;br /&gt;
*A &#039;&#039;&#039;SemiVivA&#039;&#039;&#039; package consists of VistA and GT.M bundled together and ready to be installed on an x86 GNU/Linux server.&lt;br /&gt;
&lt;br /&gt;
*A &#039;&#039;&#039;VivA&#039;&#039;&#039; or &#039;&#039;&#039;VivitA&#039;&#039;&#039;package is a [http://en.wikipedia.org/wiki/Linux_live_cd live CD (or DVD)] that can be booted on any x86 architecture server to run the entire VistA FOSS stack.  VivitA releases are created by mastering [http://damnsmalllinux.org DSL] and the VivA releases are created by remastering either [http://knopper.net/knoppix/index-en.html Knoppix] or [http://morphix.org Morphix].&lt;br /&gt;
&lt;br /&gt;
SemiVivA packages expect to find [http://xdialog.dyns.net Xdialog] on the computer.  To use a SemiVivA package, download it to a temporary directory (e.g., as &amp;lt;tt&amp;gt;/tmp/LeonardoDaVistASemiVivA0.4.tgz&amp;lt;/tt&amp;gt;).  Then, &#039;&#039;&#039;as root&#039;&#039;&#039; execute:&lt;br /&gt;
&lt;br /&gt;
  cd /usr/local&lt;br /&gt;
  tar zxvf /tmp/LeonardoDaVistASemiVivA0.4.tgz&lt;br /&gt;
&lt;br /&gt;
This will install VistA and GT.M.  To use it, an environment with an initial copy of the database must be created with the command:&lt;br /&gt;
&lt;br /&gt;
  /usr/local/LeonardoDaVistA/vista --install &#039;&#039;directory&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the above, substitute the actual VistA release name (e.g., OpenVistA, FOIAVistA) for LeonardoDaVistA.  &#039;&#039;directory&#039;&#039; is the full path name of a directory (without a trailing slash) where the environment with the initial copy of the database is to be created, e.g., &amp;lt;tt&amp;gt;/home/vista/myVistA&amp;lt;/tt&amp;gt;.  To subsequently run VistA, VivitAs again have an option from the mouse on the background.  For VivAs, use:&lt;br /&gt;
&lt;br /&gt;
  /usr/local/LeonardoDaVistA/vista --run &#039;&#039;directory&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To use a VivA or VivitA package, read/write storage is required for the database.  The current distributions can use a Linux file system (e.g., ext3, reiserfs) or a FAT file system (Windows 95/98/ME) but not an NTFS file system (Windows NT/2000/XP/2003).  The live CD/DVDs have tools needed to partition a hard drive and create a new file system.  The easiest way to proceed is to simply plug a 512MB or bigger USB flash or thumb drive (or a USB hard drive) into the USB port (USB 2.0 preferred) of an x86 server, and boot the CD/DVD.  The instructions below are for USB drives, but apply equally well - with appropriate names for the read/write storage - for IDE and SCSI drives.&lt;br /&gt;
&lt;br /&gt;
*After booting the operating system, you will need to mount the read/write storage.  For Knoppix based VivA releases, right click on the icon for the drive and mount the drive.  This mounts it read-only.  Right click again, choose Actions and change the mode to read/write.  Note the name of the drive; it will probably be something like &amp;lt;tt&amp;gt;/mnt/uba1&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;/mnt/sda1&amp;lt;/tt&amp;gt;.  For DSL based VivitA releases, there is a small window in the lower right of the screen with a mounting applet.  Immediately after boot up, it will say &#039;&#039;floppy&#039;&#039;.  Click on the arrow icons within the applet to choose &#039;&#039;sda1&#039;&#039; or other read/write storage, and then click on the icon in the applet to mount the drive.  For (older) Morphix based releases, execute:&lt;br /&gt;
&lt;br /&gt;
  sudo insmod usb-storage&lt;br /&gt;
  mount /mnt/sda1&lt;br /&gt;
&lt;br /&gt;
*You will need to create an environment with an initial copy of the database.  VivitAs have an option from the &amp;quot;start menu&amp;quot; from clicking the right mouse button on the background.  On VivA releases, start a shell, and execute (as before, use the actual name of your VistA):&lt;br /&gt;
&lt;br /&gt;
  /usr/local/LeonardoDaVistA/vista --install &#039;&#039;directory&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*To subsequently run VistA, VivitAs again have an option from the mouse on the background.  For VivAs, use:&lt;br /&gt;
&lt;br /&gt;
  /usr/local/LeonardoDaVistA/vista --run &#039;&#039;directory&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When the GT.M prompt (&amp;lt;tt&amp;gt;GTM&amp;gt;&amp;lt;/tt&amp;gt;) appears, you have a VistA environment that is ready to start configuring.&lt;br /&gt;
&lt;br /&gt;
== Installation Documentation from sofware and hardware vendors of VistA and OpenVistA. ==&lt;br /&gt;
&lt;br /&gt;
== Installation Documentation from the [[VistA Documentation Library]] (VDL) ==&lt;br /&gt;
&lt;br /&gt;
=== Clinical ===&lt;br /&gt;
&amp;lt;TABLE summary=&amp;quot;This table is for formatting purposes only.&amp;quot; class = &amp;quot;toc&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Admission Discharge Transfer (ADT)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Electronic Wait List]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Medicine]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Prescription Practices (PPP)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Ambulatory Care Reporting]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Functional Independence Measurement (FIM)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Mental Health]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Primary Care Management Module (PCMM)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Beneficiary Travel]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Group Notes]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Nursing]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Prosthestics]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Care Management]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Home Based Primary Care (HBPC)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Oncology]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Quality Audiology Speech Anal &amp;amp; Rpting (QUASAR)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Clinical Case Registries]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Immunology Case Registry (ICR)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Patient Care Encounter (PCE)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Radiology / Nuclear Medicine]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Clinical Procedures]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Incomplete Records Tracking (IRT)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy  Automatic Replenish / Ward Stock (AR/WS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of RAI/MDS]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Computerized Patient Record System (CPRS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Intake and Output]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Bar Code Medication Administration (BCMA)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Remote Order Entry System (ROES)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Adverse Reaction Tracking (ART)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory Anatomic Pathology]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Benefits Management (PBM)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Scheduling]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Authorization Subscription Utility (ASU)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory Blood Bank]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Consolidated Mail Outpatient Pharmacy]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Social Work]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Clinical Reminders]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory Blood Bank Workarounds]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Controlled Substances]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Spinal Cord Dysfunction]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Consult/Request Tracking]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory Electronic Data Interchange (LEDI)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Data Management (PDM)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Surgery]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Health Summary]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory Emerging Pathogens Initiative]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Drug Accountability]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of VISTA Imaging System]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Problem List]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory National Laboratory Tests/ LOINC Request Form]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Electronic Claims Management Engine (ECME)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Visual Impairment Service Team (VIST)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Text Integration Utility (TIU)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory Universal Interface]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Inpatient Medications]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Vitals / Measurements]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Dentistry]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy National Drug File (NDF)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Women&#039;s Health]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Dietetics]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Lexicon Utility]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Outpatient Pharmacy]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
=== Infrastructure ===&lt;br /&gt;
&amp;lt;TABLE summary=&amp;quot;This table is for formatting purposes only.&amp;quot; class = &amp;quot;toc&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Capacity Management Tools]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Kernel Delphi Components (KDC)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Minimal Patient Dataset (MPD)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of SlotMaster (Kernel ZSLOT)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Duplicate Record Merge- Patient Merge]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Kernel Installation and Distribution System (KIDS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Name Standardization]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of SQL Interface (SQLI)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Electronic Error and Enhancement Reporting (E3R)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Kernel Toolkit]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of National Online Information Sharing (NOIS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Standard Files and Tables]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of FileMan]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Kernel Unwinder]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of National Patch Module]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Statistical Analysis of Global Growth (SAGG)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of FileMan Delphi Components (FMDC)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of List Manager]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Network Health Exchange (NHE)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Survey Generator]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of HL7 (VistA Messaging)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of M-to-M Broker]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Patient Data Exchange (PDX)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of VistA Data Extraction Framework (VDEF)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Institution File Redesign (IFR)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of MailMan]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Remote Procedure Call (RPC) Broker]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of XML Parser (VistA)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Kernel]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Master Patient Index (MPI)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Resource Usage Monitor]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
=== Financial-Administrative ===&lt;br /&gt;
&amp;lt;TABLE summary=&amp;quot;This table is for formatting purposes only.&amp;quot; class = &amp;quot;toc&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Accounts Receivable (AR)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Engineering (AEMS / MERS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of IFCAP]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Patient Representative]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Auto Safety Incdnt Surv Trak Sys (ASISTS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Enrollment Application System]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Incident Reporting]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Personnel and Accounting Integrated Data (PAID)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Automated Information Collection System (AICS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Equipment / Turn-In Request]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Income Verification Match (IVM)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Police and Security]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Automated Medical Information Exchange (AMIE)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Event Capture]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Integrated Billing (IB)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Quality Management Integration Module]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Clinical Monitoring System]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Fee Basis]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Integrated Patient Funds]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Record Tracking]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Compensation &amp;amp; Pension Records Interchange (CAPRI)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Generic Code Sheet (GCS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Library]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Release of Information (ROI) Manager]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Current Procedural Terminology (CPT)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Health Eligibility Center (HEC)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Missing Patient Register]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Veterans Identification Card (VIC/PICS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Decision Support System (DSS) Extracts]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Hospital Inquiry (HINQ)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Occurrence Screen]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Voluntary Service System (VSS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Diagnostic Related Group (DRG) Grouper]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of ICD-9-CM]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;/TABLE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Installation_Overview&amp;diff=1674</id>
		<title>Installation Overview</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Installation_Overview&amp;diff=1674"/>
		<updated>2005-11-17T19:55:05Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: /* Getting the software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The documentation for VistA and OpenVistA can be classified in several groups:&lt;br /&gt;
== Getting the software ==&lt;br /&gt;
  This is the VA ftp site for VistA:  ftp://ftp.va.gov/VistA/&lt;br /&gt;
&lt;br /&gt;
  This link is specifically for software: ftp://ftp.va.gov/VistA/Software/&lt;br /&gt;
&lt;br /&gt;
  For the open source free software stack for VistA: http://sourceforge.net/projects/worldvista&lt;br /&gt;
&lt;br /&gt;
== Installation Documentation created by WorldVistA and volunteers in the VistA Community. ==&lt;br /&gt;
== Installation Documentation from sofware and hardware vendors of VistA and OpenVistA. ==&lt;br /&gt;
&lt;br /&gt;
== Installation Documentation from the [[VistA Documentation Library]] (VDL) ==&lt;br /&gt;
&lt;br /&gt;
=== Clinical ===&lt;br /&gt;
&amp;lt;TABLE summary=&amp;quot;This table is for formatting purposes only.&amp;quot; class = &amp;quot;toc&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Admission Discharge Transfer (ADT)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Electronic Wait List]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Medicine]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Prescription Practices (PPP)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Ambulatory Care Reporting]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Functional Independence Measurement (FIM)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Mental Health]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Primary Care Management Module (PCMM)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Beneficiary Travel]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Group Notes]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Nursing]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Prosthestics]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Care Management]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Home Based Primary Care (HBPC)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Oncology]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Quality Audiology Speech Anal &amp;amp; Rpting (QUASAR)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Clinical Case Registries]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Immunology Case Registry (ICR)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Patient Care Encounter (PCE)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Radiology / Nuclear Medicine]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Clinical Procedures]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Incomplete Records Tracking (IRT)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy  Automatic Replenish / Ward Stock (AR/WS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of RAI/MDS]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Computerized Patient Record System (CPRS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Intake and Output]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Bar Code Medication Administration (BCMA)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Remote Order Entry System (ROES)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Adverse Reaction Tracking (ART)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory Anatomic Pathology]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Benefits Management (PBM)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Scheduling]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Authorization Subscription Utility (ASU)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory Blood Bank]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Consolidated Mail Outpatient Pharmacy]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Social Work]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Clinical Reminders]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory Blood Bank Workarounds]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Controlled Substances]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Spinal Cord Dysfunction]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Consult/Request Tracking]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory Electronic Data Interchange (LEDI)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Data Management (PDM)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Surgery]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Health Summary]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory Emerging Pathogens Initiative]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Drug Accountability]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of VISTA Imaging System]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Problem List]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory National Laboratory Tests/ LOINC Request Form]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Electronic Claims Management Engine (ECME)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Visual Impairment Service Team (VIST)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of CPRS Text Integration Utility (TIU)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory Universal Interface]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Inpatient Medications]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Vitals / Measurements]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Dentistry]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Laboratory]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy National Drug File (NDF)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Women&#039;s Health]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Dietetics]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Lexicon Utility]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Pharmacy Outpatient Pharmacy]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
=== Infrastructure ===&lt;br /&gt;
&amp;lt;TABLE summary=&amp;quot;This table is for formatting purposes only.&amp;quot; class = &amp;quot;toc&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Capacity Management Tools]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Kernel Delphi Components (KDC)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Minimal Patient Dataset (MPD)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of SlotMaster (Kernel ZSLOT)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Duplicate Record Merge- Patient Merge]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Kernel Installation and Distribution System (KIDS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Name Standardization]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of SQL Interface (SQLI)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Electronic Error and Enhancement Reporting (E3R)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Kernel Toolkit]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of National Online Information Sharing (NOIS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Standard Files and Tables]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of FileMan]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Kernel Unwinder]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of National Patch Module]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Statistical Analysis of Global Growth (SAGG)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of FileMan Delphi Components (FMDC)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of List Manager]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Network Health Exchange (NHE)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Survey Generator]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of HL7 (VistA Messaging)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of M-to-M Broker]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Patient Data Exchange (PDX)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of VistA Data Extraction Framework (VDEF)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Institution File Redesign (IFR)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of MailMan]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Remote Procedure Call (RPC) Broker]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of XML Parser (VistA)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Kernel]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Master Patient Index (MPI)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Resource Usage Monitor]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
=== Financial-Administrative ===&lt;br /&gt;
&amp;lt;TABLE summary=&amp;quot;This table is for formatting purposes only.&amp;quot; class = &amp;quot;toc&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Accounts Receivable (AR)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Engineering (AEMS / MERS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of IFCAP]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Patient Representative]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Auto Safety Incdnt Surv Trak Sys (ASISTS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Enrollment Application System]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Incident Reporting]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Personnel and Accounting Integrated Data (PAID)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Automated Information Collection System (AICS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Equipment / Turn-In Request]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Income Verification Match (IVM)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Police and Security]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Automated Medical Information Exchange (AMIE)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Event Capture]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Integrated Billing (IB)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Quality Management Integration Module]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Clinical Monitoring System]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Fee Basis]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Integrated Patient Funds]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Record Tracking]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Compensation &amp;amp; Pension Records Interchange (CAPRI)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Generic Code Sheet (GCS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Library]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Release of Information (ROI) Manager]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Current Procedural Terminology (CPT)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Health Eligibility Center (HEC)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Missing Patient Register]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Veterans Identification Card (VIC/PICS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Decision Support System (DSS) Extracts]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Hospital Inquiry (HINQ)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Occurrence Screen]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Voluntary Service System (VSS)]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;TR&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of Diagnostic Related Group (DRG) Grouper]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Installation of ICD-9-CM]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&amp;lt;/TABLE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1719</id>
		<title>Software Development (WG1) Version Control (T3)</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1719"/>
		<updated>2005-11-16T22:45:47Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: /* Theory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a VistA Development Environment ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
This is a description of how VistA development environments should be configured.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Monospaced text&amp;lt;/tt&amp;gt; designates program names, directory names, command line parameters, etc., that are intended to be typed in at a Linux shell or a GT.M prompt, e.g. &amp;lt;tt&amp;gt;/bin/bash&amp;lt;/tt&amp;gt;.  &#039;&#039;Italic text&#039;&#039; is a descriptor of something whose actual value must be determined when the command is typed, e.g., &#039;&#039;gtmver&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Theory ===&lt;br /&gt;
&lt;br /&gt;
A release is a collection of routines and global variables.  The canonical packaging of a release, which is suitable for importation into any standard M distribution, is a collection of M source code routines and a database extract in ZWRite format.  When installed on a system, to run with an M implementation, a release may have pre-compiled object files, database files, shell scripts, global directories, etc.&lt;br /&gt;
&lt;br /&gt;
Below is a diagram of the “roll-up” by which a VistA release (“Release A”) gets converted into another VistA release (“Release B”) by a development team.  A and B could be from different families, e.g., Release A could be a FOIA release and Release B could be a Leonardo da VistA release.&lt;br /&gt;
&lt;br /&gt;
[[Image:051112-1WorldVistADevelopmentEnvironment_html_26096dee.gif|&lt;br /&gt;
&amp;quot;Roll up&amp;quot; model of VistA releases]]&lt;br /&gt;
&lt;br /&gt;
Once Release A is installed, it remains frozen and unchanged except for any essential patches that may become available independent of the development process for creating Release B and without which the release lacks some required functionality.  This means, for example, that KIDS patches should be applied in an integration environment rather than a release environment.&lt;br /&gt;
&lt;br /&gt;
At any given time, there can be multiple development projects underway based on Release A.  In other words, there may well be a Release C that is also based on Release A, but which has its own integration and development areas.&lt;br /&gt;
&lt;br /&gt;
To start the development process, an integration directory is created and initialized with a copy of the global variables from Release A, as well as shell scripts, global directories, etc.  The integration directory may well have a different name from Release A and Release B.  For example, Release A may be FOIAVistA_20051021, Release B may become LeonardoDaVistA_0.4 (at the time that the integration area is created, the name and version of Release B may not even be decided yet), and the integration and development areas may be named Greenbelt_200510.  There is no need to copy routines, since the GT.M search path will be set up to look for routines in the integration area before looking in Release A; hence only routines that are different between Release A and the new release need to be duplicated.&lt;br /&gt;
&lt;br /&gt;
Actual development does not take place in the integration area.  Development occurs in development areas, typically in the directories of individual developers; however, there may be a shared development area if two developers are collaborating on making changes to the very same module (i.e., their code changes overlap).  A development area is set up by creating a directory structure, shell scripts, etc.  Note that development areas can be hierarchical so that development subtasks 1a and 1b can be developed separately and integrated into development task 1, prior to integration into the integration area, etc.&lt;br /&gt;
&lt;br /&gt;
During this development process, developers develop code in individual sand boxes (development areas), but normally share the database (global variables) in the integration area – there may typically be no need to create a separate database.  However, if some global variable changes are tied to code changes being made in a development area, a copy of those global variables can be placed in a separate database file in that development area, and a global directory for that development area can map those global variables to the database in that development area, with all other global variables mapped to the database in the integration area.&lt;br /&gt;
&lt;br /&gt;
When a developer has code that is ready for integration, the new versions of the modified routines are promoted to the integration area.  Any global variables tied to the code being promoted that are in a database in the development area must be merged, reconciled or otherwise integrated with the global variables in the database in the integration area and the global directory in the development area modified accordingly.  Note that there needs to be a process, e.g., involving code reviews, by which a development task is considered complete enough to be promoted.  These, and other quality gates, are not discussed herein.&lt;br /&gt;
&lt;br /&gt;
Creating a release is minimally the process of creating the directory structure for Release B, copying the routines from Release A, overlying the routines with those from the integration area, and copying the global variables from the integration area.&lt;br /&gt;
&lt;br /&gt;
Normally, Release A, the integration area and development areas would all use the same GT.M version.  However, this is not a requirement.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;It is strongly recommended that database files in integration and development environments be journaled, and backed up regularly.  It is also strongly recommended that a version control system such as CVS or subversion be used for integration areas.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Practice ===&lt;br /&gt;
&lt;br /&gt;
==== Shell ====&lt;br /&gt;
&lt;br /&gt;
The standard shell for VistA community scripting is bash (installed as &amp;lt;tt&amp;gt;/bin/bash&amp;lt;/tt&amp;gt; on Debian GNU/Linux systems).&lt;br /&gt;
&lt;br /&gt;
==== GT.M Release Directories ====&lt;br /&gt;
&lt;br /&gt;
Each release of GT.M is installed its own subdirectory of &amp;lt;tt&amp;gt;/opt&amp;lt;/tt&amp;gt; (preferred) or &amp;lt;tt&amp;gt;/usr/local&amp;lt;/tt&amp;gt; (acceptable).  Each directory name starts with &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; followed by a release number separated from the release name by an underscore (&amp;lt;tt&amp;gt;_&amp;lt;/tt&amp;gt;).  Thus, for example, GT.M V5.0-000C would be installed in &amp;lt;tt&amp;gt;/opt/gtm_V5.0-000C&amp;lt;/tt&amp;gt;.  &amp;lt;tt&amp;gt;/opt/gtm&amp;lt;/tt&amp;gt; is a relative symbolic link to the latest version, set up with a command sequence such as:&lt;br /&gt;
&lt;br /&gt;
  cd /opt&lt;br /&gt;
  rm -f gtm&lt;br /&gt;
  ln -s gtm_V5.0-000C gtm&lt;br /&gt;
&lt;br /&gt;
When installing GT.M, the file gtmprofile should be edited so that the line:&lt;br /&gt;
&lt;br /&gt;
  EDITOR=&amp;quot;/bin/vi&amp;quot;; export EDITOR&lt;br /&gt;
&lt;br /&gt;
is modified to read:&lt;br /&gt;
&lt;br /&gt;
  export EDITOR=${EDITOR:=/bin/vi}&lt;br /&gt;
&lt;br /&gt;
==== VistA Release Directories ====&lt;br /&gt;
&lt;br /&gt;
Each release is installed in its own sub-directory of a standard system location, such as &amp;lt;tt&amp;gt;/opt&amp;lt;/tt&amp;gt; (preferred) or &amp;lt;tt&amp;gt;/usr/local&amp;lt;/tt&amp;gt; (acceptable).  Each directory has a release family name followed by a release / version number suffix separated from the release name by an underscore.  Directories for releases without version numbers, such as FOIA releases, have a date suffix of the form &#039;&#039;yyyymmdd&#039;&#039; (and where appropriate just &#039;&#039;yyyymm&#039;&#039;).  For example, an August 25, 2005 FOIA release would be in &amp;lt;tt&amp;gt;/opt/FOIAVistA_20050825&amp;lt;/tt&amp;gt;, an October 21, 2005 release in &amp;lt;tt&amp;gt;/opt/FOIAVistA_20051021&amp;lt;/tt&amp;gt;, an OpenVistA 0.3 release in &amp;lt;tt&amp;gt;/opt/OpenVistA_0.3&amp;lt;/tt&amp;gt; and a Leonardo da VistA 0.45 release in &amp;lt;tt&amp;gt;/opt/LeonardoDaVistA_0.45&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The normal protection on all directories and files in a release directory should be read-only.  To install files in the &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; subdirectory, it should be made read-write, the source for the patch copied in, the object file(s) generated, and the directory again made read-only.&lt;br /&gt;
&lt;br /&gt;
For each release family, the release directory contains subdirectories &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt;, symbolic link &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt;, and a script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt;.  Other shell scripts may be created for various maintenance purposes (and ideally would be documented here).&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt; contains a global directory file &amp;lt;tt&amp;gt;mumps.gld&amp;lt;/tt&amp;gt; and a compressed database file &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.  The global directory maps all global variables to a single database file &amp;lt;tt&amp;gt;$vista_home/g/mumps.dat&amp;lt;/tt&amp;gt; (i.e., the environment variable &amp;lt;tt&amp;gt;$vista_home&amp;lt;/tt&amp;gt; is used at run-time to point a GT.M process to the location of the database file, so that different processes can actually use the same global directory to refer to entirely different database files).&lt;br /&gt;
&lt;br /&gt;
*Subdirectories &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; correspond to directories for files containing routine object code and routine source code respectively.  Each file in &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; ends in &amp;lt;tt&amp;gt;.m&amp;lt;/tt&amp;gt; and has a corresponding file in &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt; with a newer time stamp and which ends in &amp;lt;tt&amp;gt;.o&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; contains source and object code for patches to a release (generated outside the scope of the work for creating Release B) and which are deemed to be essential for the proper functioning of the release.&lt;br /&gt;
&lt;br /&gt;
*The symbolic link &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; points to the GT.M directory used for this VistA directory.&lt;br /&gt;
&lt;br /&gt;
*The script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt; creates a new integration directory to be used in creating a new release from this release.    Normally, the initial database file of the integration directory is created by uncompressing &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.  Option &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039;, specifies that the integration directory is to be configured to run a different version of GT.M (as specified by the directory &#039;&#039;gtmver&#039;&#039;) from the one used by the release.  If &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; is used, the default assumption is that the database will need to be extracted with the version of GT.M used by Release A, and loaded into a new database created with the version of GT.M to be used in the integration directory.  When &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; is used, a an additional optional option &amp;lt;tt&amp;gt;--nonewdb&amp;lt;//tt&amp;gt; is used to specify that the releases of GT.M have compatible database formats, and that database from Release A can be used unchanged in the integration directory.  Note that the use of &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; will almost certainly result in a command that takes a long time, because the database may need to be extracted and reloaded, and the routines recompiled.&lt;br /&gt;
&lt;br /&gt;
==== VistA Integration Directories ====&lt;br /&gt;
&lt;br /&gt;
A VistA integration directory is similar to a VistA release directory, with the following differences.&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt; contains a database file, &amp;lt;tt&amp;gt;mumps.dat&amp;lt;/tt&amp;gt;, rather than a compressed database file, &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*The symbolic link &amp;lt;tt&amp;gt;parent&amp;lt;/tt&amp;gt; points to the release directory from which this integration directory was created.  A release directory does not have a symbolic link called parent. (The recommended way for a script to determine whether a directory is a release directory or an integration / development directory is to test for the existence of &amp;lt;tt&amp;gt;parent&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
*A script &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; which invokes and runs VistA in that integration environment.  Note that a VistA release may physically include a &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; script, but it will not work because it is not possible to directly run VistA from a release directory.&lt;br /&gt;
&lt;br /&gt;
*When the &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt; script is executed, it will create a development directory.&lt;br /&gt;
&lt;br /&gt;
*The normal protection on all directories and files in an integration directory should be read-only.  When promoting code to the integration directory from a development directory, or to install externally generated patches in the &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; subdirectory, needed directories should be made read-write, sources copied in, object file(s) generated, and directories again made read-only.&lt;br /&gt;
&lt;br /&gt;
==== VistA Development Directories ====&lt;br /&gt;
&lt;br /&gt;
A development directory is like an integration directory, except that it does not normally have its own database file or global directory.  However, as discussed above, it may be entirely appropriate for a development directory to have database files and global directories.&lt;br /&gt;
&lt;br /&gt;
Indeed, since development directories are hierarchical – a development directory is an integration directory for development directories below it, and itself contributes to an integration directory above it, an integration directory is really nothing more than a development directory that does not itself contribute to an integration directory above it, but instead is used to create a release.&lt;br /&gt;
&lt;br /&gt;
Note that although a GT.M database file can be opened by only one GT.M version at a time, it is quite easy to create a directory structure where Release A, the integration area, and each development area use different versions of GT.M.  In the most common case, where the integration and development areas use a different version of GT.M from Release A, the only additional configuration requirement is to create a directory in the integration area for object files generated from the source files in Release A with the version of GT.M used for integration and development of Release B&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1647</id>
		<title>Software Development (WG1) Version Control (T3)</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1647"/>
		<updated>2005-11-16T22:41:51Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: /* Theory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a VistA Development Environment ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
This is a description of how VistA development environments should be configured.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Monospaced text&amp;lt;/tt&amp;gt; designates program names, directory names, command line parameters, etc., that are intended to be typed in at a Linux shell or a GT.M prompt, e.g. &amp;lt;tt&amp;gt;/bin/bash&amp;lt;/tt&amp;gt;.  &#039;&#039;Italic text&#039;&#039; is a descriptor of something whose actual value must be determined when the command is typed, e.g., &#039;&#039;gtmver&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Theory ===&lt;br /&gt;
&lt;br /&gt;
A release is a collection of routines and global variables.  The canonical packaging of a release, which is suitable for importation into any standard M distribution, is a collection of M source code routines and a database extract in ZWRite format.  When installed on a system, to run with an M implementation, a release may have pre-compiled object files, database files, shell scripts, global directories, etc.&lt;br /&gt;
&lt;br /&gt;
Below is a diagram of the “roll-up” by which a VistA release (“Release A”) gets converted into another VistA release (“Release B”) by a development team.  A and B could be from different families, e.g., Release A could be a FOIA release and Release B could be a Leonardo da VistA release.&lt;br /&gt;
&lt;br /&gt;
[[Image:051112-1WorldVistADevelopmentEnvironment_html_26096dee.gif|&lt;br /&gt;
&amp;quot;Roll up&amp;quot; model of VistA releases]]&lt;br /&gt;
&lt;br /&gt;
Once Release A is installed, it remains frozen and unchanged except for any essential patches that may become available independent of the development process for creating Release B and without which the release lacks some required functionality.  This means, for example, that KIDS patches should be applied in an integration environment rather than a release environment.&lt;br /&gt;
&lt;br /&gt;
At any given time, there can be multiple development projects underway based on Release A.  In other words, there may well be a Release C that is also based on Release A, but which has its own integration and development areas.&lt;br /&gt;
&lt;br /&gt;
To start the development process, an integration directory is created and initialized with a copy of the global variables from Release A, as well as shell scripts, global directories, etc.  The integration directory may well have a different name from Release A and Release B.  For example, Release A may be FOIAVistA_20051021, Release B may become LeonardoDaVistA_0.4 (at the time that the integration area is created, the name and version of Release B may not be decided yet), and the integration and development areas may be named Greenbelt_200510.  There is no need to copy routines, since the GT.M search path will be set up to look for routines in the integration area before looking in Release A; hence only routines that are different between Release A and the new release need to be duplicated.&lt;br /&gt;
&lt;br /&gt;
Actual development does not take place in the integration area.  Development occurs in development areas, typically in the home directories of individual developers; however, there may be a shared development area if two developers are collaborating on making changes to the very same module (i.e., their code changes overlap).  A development area is set up by creating a directory structure, shell scripts, etc.  Note that development areas can be hierarchical so that development subtasks 1a and 1b can be developed separately and integrated into development task 1, prior to integration into the integration area, etc.&lt;br /&gt;
&lt;br /&gt;
During this development process, developers develop code in individual sand boxes (development areas), but normally share the database (global variables) in the integration area – there may typically be no need to create a separate database.  However, if some global variable changes are tied to code changes being made in a development area, a copy of those global variables can be placed in a separate database file in that development area, and a global directory for that development area can map those global variables to the database in that development area, with all other global variables mapped to the database in the integration area.&lt;br /&gt;
&lt;br /&gt;
When a developer has code that is ready for integration, the new versions of the modified routines are promoted to the integration area.  Any global variables tied to the code being promoted that are in a database in the development area must be merged, reconciled or otherwise integrated with the global variables in the database in the integration area and the global directory in the development area modified accordingly.  Note that there needs to be a process, e.g., involving code reviews, by which a development task is considered complete enough to be promoted.  These, and other quality gates, are not discussed herein.&lt;br /&gt;
&lt;br /&gt;
Creating a release is minimally the process of creating the directory structure for Release B, copying the routines from Release A, overlying the routines with those from the integration area, and copying the global variables from the integration area.&lt;br /&gt;
&lt;br /&gt;
Normally, Release A, the integration area and development areas would all use the same GT.M version.  However, this is not a requirement.&lt;br /&gt;
&lt;br /&gt;
=== Practice ===&lt;br /&gt;
&lt;br /&gt;
==== Shell ====&lt;br /&gt;
&lt;br /&gt;
The standard shell for VistA community scripting is bash (installed as &amp;lt;tt&amp;gt;/bin/bash&amp;lt;/tt&amp;gt; on Debian GNU/Linux systems).&lt;br /&gt;
&lt;br /&gt;
==== GT.M Release Directories ====&lt;br /&gt;
&lt;br /&gt;
Each release of GT.M is installed its own subdirectory of &amp;lt;tt&amp;gt;/opt&amp;lt;/tt&amp;gt; (preferred) or &amp;lt;tt&amp;gt;/usr/local&amp;lt;/tt&amp;gt; (acceptable).  Each directory name starts with &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; followed by a release number separated from the release name by an underscore (&amp;lt;tt&amp;gt;_&amp;lt;/tt&amp;gt;).  Thus, for example, GT.M V5.0-000C would be installed in &amp;lt;tt&amp;gt;/opt/gtm_V5.0-000C&amp;lt;/tt&amp;gt;.  &amp;lt;tt&amp;gt;/opt/gtm&amp;lt;/tt&amp;gt; is a relative symbolic link to the latest version, set up with a command sequence such as:&lt;br /&gt;
&lt;br /&gt;
  cd /opt&lt;br /&gt;
  rm -f gtm&lt;br /&gt;
  ln -s gtm_V5.0-000C gtm&lt;br /&gt;
&lt;br /&gt;
When installing GT.M, the file gtmprofile should be edited so that the line:&lt;br /&gt;
&lt;br /&gt;
  EDITOR=&amp;quot;/bin/vi&amp;quot;; export EDITOR&lt;br /&gt;
&lt;br /&gt;
is modified to read:&lt;br /&gt;
&lt;br /&gt;
  export EDITOR=${EDITOR:=/bin/vi}&lt;br /&gt;
&lt;br /&gt;
==== VistA Release Directories ====&lt;br /&gt;
&lt;br /&gt;
Each release is installed in its own sub-directory of a standard system location, such as &amp;lt;tt&amp;gt;/opt&amp;lt;/tt&amp;gt; (preferred) or &amp;lt;tt&amp;gt;/usr/local&amp;lt;/tt&amp;gt; (acceptable).  Each directory has a release family name followed by a release / version number suffix separated from the release name by an underscore.  Directories for releases without version numbers, such as FOIA releases, have a date suffix of the form &#039;&#039;yyyymmdd&#039;&#039; (and where appropriate just &#039;&#039;yyyymm&#039;&#039;).  For example, an August 25, 2005 FOIA release would be in &amp;lt;tt&amp;gt;/opt/FOIAVistA_20050825&amp;lt;/tt&amp;gt;, an October 21, 2005 release in &amp;lt;tt&amp;gt;/opt/FOIAVistA_20051021&amp;lt;/tt&amp;gt;, an OpenVistA 0.3 release in &amp;lt;tt&amp;gt;/opt/OpenVistA_0.3&amp;lt;/tt&amp;gt; and a Leonardo da VistA 0.45 release in &amp;lt;tt&amp;gt;/opt/LeonardoDaVistA_0.45&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The normal protection on all directories and files in a release directory should be read-only.  To install files in the &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; subdirectory, it should be made read-write, the source for the patch copied in, the object file(s) generated, and the directory again made read-only.&lt;br /&gt;
&lt;br /&gt;
For each release family, the release directory contains subdirectories &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt;, symbolic link &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt;, and a script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt;.  Other shell scripts may be created for various maintenance purposes (and ideally would be documented here).&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt; contains a global directory file &amp;lt;tt&amp;gt;mumps.gld&amp;lt;/tt&amp;gt; and a compressed database file &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.  The global directory maps all global variables to a single database file &amp;lt;tt&amp;gt;$vista_home/g/mumps.dat&amp;lt;/tt&amp;gt; (i.e., the environment variable &amp;lt;tt&amp;gt;$vista_home&amp;lt;/tt&amp;gt; is used at run-time to point a GT.M process to the location of the database file, so that different processes can actually use the same global directory to refer to entirely different database files).&lt;br /&gt;
&lt;br /&gt;
*Subdirectories &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; correspond to directories for files containing routine object code and routine source code respectively.  Each file in &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; ends in &amp;lt;tt&amp;gt;.m&amp;lt;/tt&amp;gt; and has a corresponding file in &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt; with a newer time stamp and which ends in &amp;lt;tt&amp;gt;.o&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; contains source and object code for patches to a release (generated outside the scope of the work for creating Release B) and which are deemed to be essential for the proper functioning of the release.&lt;br /&gt;
&lt;br /&gt;
*The symbolic link &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; points to the GT.M directory used for this VistA directory.&lt;br /&gt;
&lt;br /&gt;
*The script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt; creates a new integration directory to be used in creating a new release from this release.    Normally, the initial database file of the integration directory is created by uncompressing &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.  Option &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039;, specifies that the integration directory is to be configured to run a different version of GT.M (as specified by the directory &#039;&#039;gtmver&#039;&#039;) from the one used by the release.  If &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; is used, the default assumption is that the database will need to be extracted with the version of GT.M used by Release A, and loaded into a new database created with the version of GT.M to be used in the integration directory.  When &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; is used, a an additional optional option &amp;lt;tt&amp;gt;--nonewdb&amp;lt;//tt&amp;gt; is used to specify that the releases of GT.M have compatible database formats, and that database from Release A can be used unchanged in the integration directory.  Note that the use of &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; will almost certainly result in a command that takes a long time, because the database may need to be extracted and reloaded, and the routines recompiled.&lt;br /&gt;
&lt;br /&gt;
==== VistA Integration Directories ====&lt;br /&gt;
&lt;br /&gt;
A VistA integration directory is similar to a VistA release directory, with the following differences.&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt; contains a database file, &amp;lt;tt&amp;gt;mumps.dat&amp;lt;/tt&amp;gt;, rather than a compressed database file, &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*The symbolic link &amp;lt;tt&amp;gt;parent&amp;lt;/tt&amp;gt; points to the release directory from which this integration directory was created.  A release directory does not have a symbolic link called parent. (The recommended way for a script to determine whether a directory is a release directory or an integration / development directory is to test for the existence of &amp;lt;tt&amp;gt;parent&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
*A script &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; which invokes and runs VistA in that integration environment.  Note that a VistA release may physically include a &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; script, but it will not work because it is not possible to directly run VistA from a release directory.&lt;br /&gt;
&lt;br /&gt;
*When the &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt; script is executed, it will create a development directory.&lt;br /&gt;
&lt;br /&gt;
*The normal protection on all directories and files in an integration directory should be read-only.  When promoting code to the integration directory from a development directory, or to install externally generated patches in the &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; subdirectory, needed directories should be made read-write, sources copied in, object file(s) generated, and directories again made read-only.&lt;br /&gt;
&lt;br /&gt;
==== VistA Development Directories ====&lt;br /&gt;
&lt;br /&gt;
A development directory is like an integration directory, except that it does not normally have its own database file or global directory.  However, as discussed above, it may be entirely appropriate for a development directory to have database files and global directories.&lt;br /&gt;
&lt;br /&gt;
Indeed, since development directories are hierarchical – a development directory is an integration directory for development directories below it, and itself contributes to an integration directory above it, an integration directory is really nothing more than a development directory that does not itself contribute to an integration directory above it, but instead is used to create a release.&lt;br /&gt;
&lt;br /&gt;
Note that although a GT.M database file can be opened by only one GT.M version at a time, it is quite easy to create a directory structure where Release A, the integration area, and each development area use different versions of GT.M.  In the most common case, where the integration and development areas use a different version of GT.M from Release A, the only additional configuration requirement is to create a directory in the integration area for object files generated from the source files in Release A with the version of GT.M used for integration and development of Release B&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1646</id>
		<title>Software Development (WG1) Version Control (T3)</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1646"/>
		<updated>2005-11-16T22:39:55Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a VistA Development Environment ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
This is a description of how VistA development environments should be configured.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Monospaced text&amp;lt;/tt&amp;gt; designates program names, directory names, command line parameters, etc., that are intended to be typed in at a Linux shell or a GT.M prompt, e.g. &amp;lt;tt&amp;gt;/bin/bash&amp;lt;/tt&amp;gt;.  &#039;&#039;Italic text&#039;&#039; is a descriptor of something whose actual value must be determined when the command is typed, e.g., &#039;&#039;gtmver&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Theory ===&lt;br /&gt;
&lt;br /&gt;
A release is a collection of routines and global variables.  The canonical packaging of a release, which is suitable for importation into any standard M distribution, is a collection of M source code routines and a database extract in ZWRite format.  When installed on a system, to run with an M implementation, a release may have pre-compiled object files, database files, shell scripts, global directories, etc.&lt;br /&gt;
&lt;br /&gt;
Below is a diagram of the “roll-up” by which a VistA release (“Release A”) gets converted into another VistA release (“Release B”) by a development team.  A and B could be from different families, e.g., Release A could be a FOIA release and Release B could be a Leonardo da VistA release.&lt;br /&gt;
&lt;br /&gt;
[[Image:051112-1WorldVistADevelopmentEnvironment_html_26096dee.gif|&lt;br /&gt;
&amp;quot;Roll up&amp;quot; model of VistA releases]]&lt;br /&gt;
&lt;br /&gt;
Once Release A is installed, it remains frozen and unchanged except for any essential patches that may become available independent of the development process for creating Release B and without which the release lacks some required functionality.&lt;br /&gt;
&lt;br /&gt;
At any given time, there can be multiple development projects underway based on Release A.  In other words, there may well be a Release C that is also based on Release A, but which has its own integration and development areas.&lt;br /&gt;
&lt;br /&gt;
To start the development process, an integration directory is created and initialized with a copy of the global variables from Release A, as well as shell scripts, global directories, etc.  The integration directory may well have a different name from Release A and Release B.  For example, Release A may be FOIAVistA_20051021, Release B may become LeonardoDaVistA_0.4 (at the time that the integration area is created, the name and version of Release B may not be decided yet), and the integration and development areas may be named Greenbelt_200510.  There is no need to copy routines, since the GT.M search path will be set up to look for routines in the integration area before looking in Release A; hence only routines that are different between Release A and the new release need to be duplicated.&lt;br /&gt;
&lt;br /&gt;
Actual development does not take place in the integration area.  Development occurs in development areas, typically in the home directories of individual developers; however, there may be a shared development area if two developers are collaborating on making changes to the very same module (i.e., their code changes overlap).  A development area is set up by creating a directory structure, shell scripts, etc.  Note that development areas can be hierarchical so that development subtasks 1a and 1b can be developed separately and integrated into development task 1, prior to integration into the integration area, etc.&lt;br /&gt;
&lt;br /&gt;
During this development process, developers develop code in individual sand boxes (development areas), but normally share the database (global variables) in the integration area – there may typically be no need to create a separate database.  However, if some global variable changes are tied to code changes being made in a development area, a copy of those global variables can be placed in a separate database file in that development area, and a global directory for that development area can map those global variables to the database in that development area, with all other global variables mapped to the database in the integration area.&lt;br /&gt;
&lt;br /&gt;
When a developer has code that is ready for integration, the new versions of the modified routines are promoted to the integration area.  Any global variables tied to the code being promoted that are in a database in the development area must be merged, reconciled or otherwise integrated with the global variables in the database in the integration area and the global directory in the development area modified accordingly.  Note that there needs to be a process, e.g., involving code reviews, by which a development task is considered complete enough to be promoted.  These, and other quality gates, are not discussed herein.&lt;br /&gt;
&lt;br /&gt;
Creating a release is minimally the process of creating the directory structure for Release B, copying the routines from Release A, overlying the routines with those from the integration area, and copying the global variables from the integration area.&lt;br /&gt;
&lt;br /&gt;
Normally, Release A, the integration area and development areas would all use the same GT.M version.  However, this is not a requirement.&lt;br /&gt;
&lt;br /&gt;
=== Practice ===&lt;br /&gt;
&lt;br /&gt;
==== Shell ====&lt;br /&gt;
&lt;br /&gt;
The standard shell for VistA community scripting is bash (installed as &amp;lt;tt&amp;gt;/bin/bash&amp;lt;/tt&amp;gt; on Debian GNU/Linux systems).&lt;br /&gt;
&lt;br /&gt;
==== GT.M Release Directories ====&lt;br /&gt;
&lt;br /&gt;
Each release of GT.M is installed its own subdirectory of &amp;lt;tt&amp;gt;/opt&amp;lt;/tt&amp;gt; (preferred) or &amp;lt;tt&amp;gt;/usr/local&amp;lt;/tt&amp;gt; (acceptable).  Each directory name starts with &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; followed by a release number separated from the release name by an underscore (&amp;lt;tt&amp;gt;_&amp;lt;/tt&amp;gt;).  Thus, for example, GT.M V5.0-000C would be installed in &amp;lt;tt&amp;gt;/opt/gtm_V5.0-000C&amp;lt;/tt&amp;gt;.  &amp;lt;tt&amp;gt;/opt/gtm&amp;lt;/tt&amp;gt; is a relative symbolic link to the latest version, set up with a command sequence such as:&lt;br /&gt;
&lt;br /&gt;
  cd /opt&lt;br /&gt;
  rm -f gtm&lt;br /&gt;
  ln -s gtm_V5.0-000C gtm&lt;br /&gt;
&lt;br /&gt;
When installing GT.M, the file gtmprofile should be edited so that the line:&lt;br /&gt;
&lt;br /&gt;
  EDITOR=&amp;quot;/bin/vi&amp;quot;; export EDITOR&lt;br /&gt;
&lt;br /&gt;
is modified to read:&lt;br /&gt;
&lt;br /&gt;
  export EDITOR=${EDITOR:=/bin/vi}&lt;br /&gt;
&lt;br /&gt;
==== VistA Release Directories ====&lt;br /&gt;
&lt;br /&gt;
Each release is installed in its own sub-directory of a standard system location, such as &amp;lt;tt&amp;gt;/opt&amp;lt;/tt&amp;gt; (preferred) or &amp;lt;tt&amp;gt;/usr/local&amp;lt;/tt&amp;gt; (acceptable).  Each directory has a release family name followed by a release / version number suffix separated from the release name by an underscore.  Directories for releases without version numbers, such as FOIA releases, have a date suffix of the form &#039;&#039;yyyymmdd&#039;&#039; (and where appropriate just &#039;&#039;yyyymm&#039;&#039;).  For example, an August 25, 2005 FOIA release would be in &amp;lt;tt&amp;gt;/opt/FOIAVistA_20050825&amp;lt;/tt&amp;gt;, an October 21, 2005 release in &amp;lt;tt&amp;gt;/opt/FOIAVistA_20051021&amp;lt;/tt&amp;gt;, an OpenVistA 0.3 release in &amp;lt;tt&amp;gt;/opt/OpenVistA_0.3&amp;lt;/tt&amp;gt; and a Leonardo da VistA 0.45 release in &amp;lt;tt&amp;gt;/opt/LeonardoDaVistA_0.45&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The normal protection on all directories and files in a release directory should be read-only.  To install files in the &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; subdirectory, it should be made read-write, the source for the patch copied in, the object file(s) generated, and the directory again made read-only.&lt;br /&gt;
&lt;br /&gt;
For each release family, the release directory contains subdirectories &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt;, symbolic link &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt;, and a script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt;.  Other shell scripts may be created for various maintenance purposes (and ideally would be documented here).&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt; contains a global directory file &amp;lt;tt&amp;gt;mumps.gld&amp;lt;/tt&amp;gt; and a compressed database file &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.  The global directory maps all global variables to a single database file &amp;lt;tt&amp;gt;$vista_home/g/mumps.dat&amp;lt;/tt&amp;gt; (i.e., the environment variable &amp;lt;tt&amp;gt;$vista_home&amp;lt;/tt&amp;gt; is used at run-time to point a GT.M process to the location of the database file, so that different processes can actually use the same global directory to refer to entirely different database files).&lt;br /&gt;
&lt;br /&gt;
*Subdirectories &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; correspond to directories for files containing routine object code and routine source code respectively.  Each file in &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; ends in &amp;lt;tt&amp;gt;.m&amp;lt;/tt&amp;gt; and has a corresponding file in &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt; with a newer time stamp and which ends in &amp;lt;tt&amp;gt;.o&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; contains source and object code for patches to a release (generated outside the scope of the work for creating Release B) and which are deemed to be essential for the proper functioning of the release.&lt;br /&gt;
&lt;br /&gt;
*The symbolic link &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; points to the GT.M directory used for this VistA directory.&lt;br /&gt;
&lt;br /&gt;
*The script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt; creates a new integration directory to be used in creating a new release from this release.    Normally, the initial database file of the integration directory is created by uncompressing &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.  Option &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039;, specifies that the integration directory is to be configured to run a different version of GT.M (as specified by the directory &#039;&#039;gtmver&#039;&#039;) from the one used by the release.  If &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; is used, the default assumption is that the database will need to be extracted with the version of GT.M used by Release A, and loaded into a new database created with the version of GT.M to be used in the integration directory.  When &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; is used, a an additional optional option &amp;lt;tt&amp;gt;--nonewdb&amp;lt;//tt&amp;gt; is used to specify that the releases of GT.M have compatible database formats, and that database from Release A can be used unchanged in the integration directory.  Note that the use of &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; will almost certainly result in a command that takes a long time, because the database may need to be extracted and reloaded, and the routines recompiled.&lt;br /&gt;
&lt;br /&gt;
==== VistA Integration Directories ====&lt;br /&gt;
&lt;br /&gt;
A VistA integration directory is similar to a VistA release directory, with the following differences.&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt; contains a database file, &amp;lt;tt&amp;gt;mumps.dat&amp;lt;/tt&amp;gt;, rather than a compressed database file, &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*The symbolic link &amp;lt;tt&amp;gt;parent&amp;lt;/tt&amp;gt; points to the release directory from which this integration directory was created.  A release directory does not have a symbolic link called parent. (The recommended way for a script to determine whether a directory is a release directory or an integration / development directory is to test for the existence of &amp;lt;tt&amp;gt;parent&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
*A script &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; which invokes and runs VistA in that integration environment.  Note that a VistA release may physically include a &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; script, but it will not work because it is not possible to directly run VistA from a release directory.&lt;br /&gt;
&lt;br /&gt;
*When the &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt; script is executed, it will create a development directory.&lt;br /&gt;
&lt;br /&gt;
*The normal protection on all directories and files in an integration directory should be read-only.  When promoting code to the integration directory from a development directory, or to install externally generated patches in the &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; subdirectory, needed directories should be made read-write, sources copied in, object file(s) generated, and directories again made read-only.&lt;br /&gt;
&lt;br /&gt;
==== VistA Development Directories ====&lt;br /&gt;
&lt;br /&gt;
A development directory is like an integration directory, except that it does not normally have its own database file or global directory.  However, as discussed above, it may be entirely appropriate for a development directory to have database files and global directories.&lt;br /&gt;
&lt;br /&gt;
Indeed, since development directories are hierarchical – a development directory is an integration directory for development directories below it, and itself contributes to an integration directory above it, an integration directory is really nothing more than a development directory that does not itself contribute to an integration directory above it, but instead is used to create a release.&lt;br /&gt;
&lt;br /&gt;
Note that although a GT.M database file can be opened by only one GT.M version at a time, it is quite easy to create a directory structure where Release A, the integration area, and each development area use different versions of GT.M.  In the most common case, where the integration and development areas use a different version of GT.M from Release A, the only additional configuration requirement is to create a directory in the integration area for object files generated from the source files in Release A with the version of GT.M used for integration and development of Release B&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1645</id>
		<title>Software Development (WG1) Version Control (T3)</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1645"/>
		<updated>2005-11-16T22:38:24Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: /* VistA Development Directories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a VistA Development Environment ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
This is a description of how VistA development environments should be configured.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bold text&#039;&#039;&#039; designates program names, directory names, command line parameters, etc., that are intended to be typed in at a Linux shell or a GT.M prompt, e.g. &#039;&#039;&#039;/bin/bash&#039;&#039;&#039;.  &#039;&#039;Italic text&#039;&#039; is a descriptor of something whose actual value must be determined when the command is typed, e.g., &#039;&#039;gtmver&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Theory ===&lt;br /&gt;
&lt;br /&gt;
A release is a collection of routines and global variables.  The canonical packaging of a release, which is suitable for importation into any standard M distribution, is a collection of M source code routines and a database extract in ZWRite format.  When installed on a system, to run with an M implementation, a release may have pre-compiled object files, database files, shell scripts, global directories, etc.&lt;br /&gt;
&lt;br /&gt;
Below is a diagram of the “roll-up” by which a VistA release (“Release A”) gets converted into another VistA release (“Release B”) by a development team.  A and B could be from different families, e.g., Release A could be a FOIA release and Release B could be a Leonardo da VistA release.&lt;br /&gt;
&lt;br /&gt;
[[Image:051112-1WorldVistADevelopmentEnvironment_html_26096dee.gif|&lt;br /&gt;
&amp;quot;Roll up&amp;quot; model of VistA releases]]&lt;br /&gt;
&lt;br /&gt;
Once Release A is installed, it remains frozen and unchanged except for any essential patches that may become available independent of the development process for creating Release B and without which the release lacks some required functionality.&lt;br /&gt;
&lt;br /&gt;
At any given time, there can be multiple development projects underway based on Release A.  In other words, there may well be a Release C that is also based on Release A, but which has its own integration and development areas.&lt;br /&gt;
&lt;br /&gt;
To start the development process, an integration directory is created and initialized with a copy of the global variables from Release A, as well as shell scripts, global directories, etc.  The integration directory may well have a different name from Release A and Release B.  For example, Release A may be FOIAVistA_20051021, Release B may become LeonardoDaVistA_0.4 (at the time that the integration area is created, the name and version of Release B may not be decided yet), and the integration and development areas may be named Greenbelt_200510.  There is no need to copy routines, since the GT.M search path will be set up to look for routines in the integration area before looking in Release A; hence only routines that are different between Release A and the new release need to be duplicated.&lt;br /&gt;
&lt;br /&gt;
Actual development does not take place in the integration area.  Development occurs in development areas, typically in the home directories of individual developers; however, there may be a shared development area if two developers are collaborating on making changes to the very same module (i.e., their code changes overlap).  A development area is set up by creating a directory structure, shell scripts, etc.  Note that development areas can be hierarchical so that development subtasks 1a and 1b can be developed separately and integrated into development task 1, prior to integration into the integration area, etc.&lt;br /&gt;
&lt;br /&gt;
During this development process, developers develop code in individual sand boxes (development areas), but normally share the database (global variables) in the integration area – there may typically be no need to create a separate database.  However, if some global variable changes are tied to code changes being made in a development area, a copy of those global variables can be placed in a separate database file in that development area, and a global directory for that development area can map those global variables to the database in that development area, with all other global variables mapped to the database in the integration area.&lt;br /&gt;
&lt;br /&gt;
When a developer has code that is ready for integration, the new versions of the modified routines are promoted to the integration area.  Any global variables tied to the code being promoted that are in a database in the development area must be merged, reconciled or otherwise integrated with the global variables in the database in the integration area and the global directory in the development area modified accordingly.  Note that there needs to be a process, e.g., involving code reviews, by which a development task is considered complete enough to be promoted.  These, and other quality gates, are not discussed herein.&lt;br /&gt;
&lt;br /&gt;
Creating a release is minimally the process of creating the directory structure for Release B, copying the routines from Release A, overlying the routines with those from the integration area, and copying the global variables from the integration area.&lt;br /&gt;
&lt;br /&gt;
Normally, Release A, the integration area and development areas would all use the same GT.M version.  However, this is not a requirement.&lt;br /&gt;
&lt;br /&gt;
=== Practice ===&lt;br /&gt;
&lt;br /&gt;
==== Shell ====&lt;br /&gt;
&lt;br /&gt;
The standard shell for VistA community scripting is bash (installed as &amp;lt;tt&amp;gt;/bin/bash&amp;lt;/tt&amp;gt; on Debian GNU/Linux systems).&lt;br /&gt;
&lt;br /&gt;
==== GT.M Release Directories ====&lt;br /&gt;
&lt;br /&gt;
Each release of GT.M is installed its own subdirectory of &amp;lt;tt&amp;gt;/opt&amp;lt;/tt&amp;gt; (preferred) or &amp;lt;tt&amp;gt;/usr/local&amp;lt;/tt&amp;gt; (acceptable).  Each directory name starts with &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; followed by a release number separated from the release name by an underscore (&amp;lt;tt&amp;gt;_&amp;lt;/tt&amp;gt;).  Thus, for example, GT.M V5.0-000C would be installed in &amp;lt;tt&amp;gt;/opt/gtm_V5.0-000C&amp;lt;/tt&amp;gt;.  &amp;lt;tt&amp;gt;/opt/gtm&amp;lt;/tt&amp;gt; is a relative symbolic link to the latest version, set up with a command sequence such as:&lt;br /&gt;
&lt;br /&gt;
  cd /opt&lt;br /&gt;
  rm -f gtm&lt;br /&gt;
  ln -s gtm_V5.0-000C gtm&lt;br /&gt;
&lt;br /&gt;
When installing GT.M, the file gtmprofile should be edited so that the line:&lt;br /&gt;
&lt;br /&gt;
  EDITOR=&amp;quot;/bin/vi&amp;quot;; export EDITOR&lt;br /&gt;
&lt;br /&gt;
is modified to read:&lt;br /&gt;
&lt;br /&gt;
  export EDITOR=${EDITOR:=/bin/vi}&lt;br /&gt;
&lt;br /&gt;
==== VistA Release Directories ====&lt;br /&gt;
&lt;br /&gt;
Each release is installed in its own sub-directory of a standard system location, such as &amp;lt;tt&amp;gt;/opt&amp;lt;/tt&amp;gt; (preferred) or &amp;lt;tt&amp;gt;/usr/local&amp;lt;/tt&amp;gt; (acceptable).  Each directory has a release family name followed by a release / version number suffix separated from the release name by an underscore.  Directories for releases without version numbers, such as FOIA releases, have a date suffix of the form &#039;&#039;yyyymmdd&#039;&#039; (and where appropriate just &#039;&#039;yyyymm&#039;&#039;).  For example, an August 25, 2005 FOIA release would be in &amp;lt;tt&amp;gt;/opt/FOIAVistA_20050825&amp;lt;/tt&amp;gt;, an October 21, 2005 release in &amp;lt;tt&amp;gt;/opt/FOIAVistA_20051021&amp;lt;/tt&amp;gt;, an OpenVistA 0.3 release in &amp;lt;tt&amp;gt;/opt/OpenVistA_0.3&amp;lt;/tt&amp;gt; and a Leonardo da VistA 0.45 release in &amp;lt;tt&amp;gt;/opt/LeonardoDaVistA_0.45&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The normal protection on all directories and files in a release directory should be read-only.  To install files in the &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; subdirectory, it should be made read-write, the source for the patch copied in, the object file(s) generated, and the directory again made read-only.&lt;br /&gt;
&lt;br /&gt;
For each release family, the release directory contains subdirectories &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt;, symbolic link &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt;, and a script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt;.  Other shell scripts may be created for various maintenance purposes (and ideally would be documented here).&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt; contains a global directory file &amp;lt;tt&amp;gt;mumps.gld&amp;lt;/tt&amp;gt; and a compressed database file &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.  The global directory maps all global variables to a single database file &amp;lt;tt&amp;gt;$vista_home/g/mumps.dat&amp;lt;/tt&amp;gt; (i.e., the environment variable &amp;lt;tt&amp;gt;$vista_home&amp;lt;/tt&amp;gt; is used at run-time to point a GT.M process to the location of the database file, so that different processes can actually use the same global directory to refer to entirely different database files).&lt;br /&gt;
&lt;br /&gt;
*Subdirectories &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; correspond to directories for files containing routine object code and routine source code respectively.  Each file in &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; ends in &amp;lt;tt&amp;gt;.m&amp;lt;/tt&amp;gt; and has a corresponding file in &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt; with a newer time stamp and which ends in &amp;lt;tt&amp;gt;.o&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; contains source and object code for patches to a release (generated outside the scope of the work for creating Release B) and which are deemed to be essential for the proper functioning of the release.&lt;br /&gt;
&lt;br /&gt;
*The symbolic link &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; points to the GT.M directory used for this VistA directory.&lt;br /&gt;
&lt;br /&gt;
*The script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt; creates a new integration directory to be used in creating a new release from this release.    Normally, the initial database file of the integration directory is created by uncompressing &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.  Option &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039;, specifies that the integration directory is to be configured to run a different version of GT.M (as specified by the directory &#039;&#039;gtmver&#039;&#039;) from the one used by the release.  If &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; is used, the default assumption is that the database will need to be extracted with the version of GT.M used by Release A, and loaded into a new database created with the version of GT.M to be used in the integration directory.  When &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; is used, a an additional optional option &amp;lt;tt&amp;gt;--nonewdb&amp;lt;//tt&amp;gt; is used to specify that the releases of GT.M have compatible database formats, and that database from Release A can be used unchanged in the integration directory.  Note that the use of &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; will almost certainly result in a command that takes a long time, because the database may need to be extracted and reloaded, and the routines recompiled.&lt;br /&gt;
&lt;br /&gt;
==== VistA Integration Directories ====&lt;br /&gt;
&lt;br /&gt;
A VistA integration directory is similar to a VistA release directory, with the following differences.&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt; contains a database file, &amp;lt;tt&amp;gt;mumps.dat&amp;lt;/tt&amp;gt;, rather than a compressed database file, &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*The symbolic link &amp;lt;tt&amp;gt;parent&amp;lt;/tt&amp;gt; points to the release directory from which this integration directory was created.  A release directory does not have a symbolic link called parent. (The recommended way for a script to determine whether a directory is a release directory or an integration / development directory is to test for the existence of &amp;lt;tt&amp;gt;parent&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
*A script &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; which invokes and runs VistA in that integration environment.  Note that a VistA release may physically include a &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; script, but it will not work because it is not possible to directly run VistA from a release directory.&lt;br /&gt;
&lt;br /&gt;
*When the &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt; script is executed, it will create a development directory.&lt;br /&gt;
&lt;br /&gt;
*The normal protection on all directories and files in an integration directory should be read-only.  When promoting code to the integration directory from a development directory, or to install externally generated patches in the &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; subdirectory, needed directories should be made read-write, sources copied in, object file(s) generated, and directories again made read-only.&lt;br /&gt;
&lt;br /&gt;
==== VistA Development Directories ====&lt;br /&gt;
&lt;br /&gt;
A development directory is like an integration directory, except that it does not normally have its own database file or global directory.  However, as discussed above, it may be entirely appropriate for a development directory to have database files and global directories.&lt;br /&gt;
&lt;br /&gt;
Indeed, since development directories are hierarchical – a development directory is an integration directory for development directories below it, and itself contributes to an integration directory above it, an integration directory is really nothing more than a development directory that does not itself contribute to an integration directory above it, but instead is used to create a release.&lt;br /&gt;
&lt;br /&gt;
Note that although a GT.M database file can be opened by only one GT.M version at a time, it is quite easy to create a directory structure where Release A, the integration area, and each development area use different versions of GT.M.  In the most common case, where the integration and development areas use a different version of GT.M from Release A, the only additional configuration requirement is to create a directory in the integration area for object files generated from the source files in Release A with the version of GT.M used for integration and development of Release B&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1644</id>
		<title>Software Development (WG1) Version Control (T3)</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1644"/>
		<updated>2005-11-16T22:37:02Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: /* VistA Integration Directories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a VistA Development Environment ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
This is a description of how VistA development environments should be configured.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bold text&#039;&#039;&#039; designates program names, directory names, command line parameters, etc., that are intended to be typed in at a Linux shell or a GT.M prompt, e.g. &#039;&#039;&#039;/bin/bash&#039;&#039;&#039;.  &#039;&#039;Italic text&#039;&#039; is a descriptor of something whose actual value must be determined when the command is typed, e.g., &#039;&#039;gtmver&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Theory ===&lt;br /&gt;
&lt;br /&gt;
A release is a collection of routines and global variables.  The canonical packaging of a release, which is suitable for importation into any standard M distribution, is a collection of M source code routines and a database extract in ZWRite format.  When installed on a system, to run with an M implementation, a release may have pre-compiled object files, database files, shell scripts, global directories, etc.&lt;br /&gt;
&lt;br /&gt;
Below is a diagram of the “roll-up” by which a VistA release (“Release A”) gets converted into another VistA release (“Release B”) by a development team.  A and B could be from different families, e.g., Release A could be a FOIA release and Release B could be a Leonardo da VistA release.&lt;br /&gt;
&lt;br /&gt;
[[Image:051112-1WorldVistADevelopmentEnvironment_html_26096dee.gif|&lt;br /&gt;
&amp;quot;Roll up&amp;quot; model of VistA releases]]&lt;br /&gt;
&lt;br /&gt;
Once Release A is installed, it remains frozen and unchanged except for any essential patches that may become available independent of the development process for creating Release B and without which the release lacks some required functionality.&lt;br /&gt;
&lt;br /&gt;
At any given time, there can be multiple development projects underway based on Release A.  In other words, there may well be a Release C that is also based on Release A, but which has its own integration and development areas.&lt;br /&gt;
&lt;br /&gt;
To start the development process, an integration directory is created and initialized with a copy of the global variables from Release A, as well as shell scripts, global directories, etc.  The integration directory may well have a different name from Release A and Release B.  For example, Release A may be FOIAVistA_20051021, Release B may become LeonardoDaVistA_0.4 (at the time that the integration area is created, the name and version of Release B may not be decided yet), and the integration and development areas may be named Greenbelt_200510.  There is no need to copy routines, since the GT.M search path will be set up to look for routines in the integration area before looking in Release A; hence only routines that are different between Release A and the new release need to be duplicated.&lt;br /&gt;
&lt;br /&gt;
Actual development does not take place in the integration area.  Development occurs in development areas, typically in the home directories of individual developers; however, there may be a shared development area if two developers are collaborating on making changes to the very same module (i.e., their code changes overlap).  A development area is set up by creating a directory structure, shell scripts, etc.  Note that development areas can be hierarchical so that development subtasks 1a and 1b can be developed separately and integrated into development task 1, prior to integration into the integration area, etc.&lt;br /&gt;
&lt;br /&gt;
During this development process, developers develop code in individual sand boxes (development areas), but normally share the database (global variables) in the integration area – there may typically be no need to create a separate database.  However, if some global variable changes are tied to code changes being made in a development area, a copy of those global variables can be placed in a separate database file in that development area, and a global directory for that development area can map those global variables to the database in that development area, with all other global variables mapped to the database in the integration area.&lt;br /&gt;
&lt;br /&gt;
When a developer has code that is ready for integration, the new versions of the modified routines are promoted to the integration area.  Any global variables tied to the code being promoted that are in a database in the development area must be merged, reconciled or otherwise integrated with the global variables in the database in the integration area and the global directory in the development area modified accordingly.  Note that there needs to be a process, e.g., involving code reviews, by which a development task is considered complete enough to be promoted.  These, and other quality gates, are not discussed herein.&lt;br /&gt;
&lt;br /&gt;
Creating a release is minimally the process of creating the directory structure for Release B, copying the routines from Release A, overlying the routines with those from the integration area, and copying the global variables from the integration area.&lt;br /&gt;
&lt;br /&gt;
Normally, Release A, the integration area and development areas would all use the same GT.M version.  However, this is not a requirement.&lt;br /&gt;
&lt;br /&gt;
=== Practice ===&lt;br /&gt;
&lt;br /&gt;
==== Shell ====&lt;br /&gt;
&lt;br /&gt;
The standard shell for VistA community scripting is bash (installed as &amp;lt;tt&amp;gt;/bin/bash&amp;lt;/tt&amp;gt; on Debian GNU/Linux systems).&lt;br /&gt;
&lt;br /&gt;
==== GT.M Release Directories ====&lt;br /&gt;
&lt;br /&gt;
Each release of GT.M is installed its own subdirectory of &amp;lt;tt&amp;gt;/opt&amp;lt;/tt&amp;gt; (preferred) or &amp;lt;tt&amp;gt;/usr/local&amp;lt;/tt&amp;gt; (acceptable).  Each directory name starts with &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; followed by a release number separated from the release name by an underscore (&amp;lt;tt&amp;gt;_&amp;lt;/tt&amp;gt;).  Thus, for example, GT.M V5.0-000C would be installed in &amp;lt;tt&amp;gt;/opt/gtm_V5.0-000C&amp;lt;/tt&amp;gt;.  &amp;lt;tt&amp;gt;/opt/gtm&amp;lt;/tt&amp;gt; is a relative symbolic link to the latest version, set up with a command sequence such as:&lt;br /&gt;
&lt;br /&gt;
  cd /opt&lt;br /&gt;
  rm -f gtm&lt;br /&gt;
  ln -s gtm_V5.0-000C gtm&lt;br /&gt;
&lt;br /&gt;
When installing GT.M, the file gtmprofile should be edited so that the line:&lt;br /&gt;
&lt;br /&gt;
  EDITOR=&amp;quot;/bin/vi&amp;quot;; export EDITOR&lt;br /&gt;
&lt;br /&gt;
is modified to read:&lt;br /&gt;
&lt;br /&gt;
  export EDITOR=${EDITOR:=/bin/vi}&lt;br /&gt;
&lt;br /&gt;
==== VistA Release Directories ====&lt;br /&gt;
&lt;br /&gt;
Each release is installed in its own sub-directory of a standard system location, such as &amp;lt;tt&amp;gt;/opt&amp;lt;/tt&amp;gt; (preferred) or &amp;lt;tt&amp;gt;/usr/local&amp;lt;/tt&amp;gt; (acceptable).  Each directory has a release family name followed by a release / version number suffix separated from the release name by an underscore.  Directories for releases without version numbers, such as FOIA releases, have a date suffix of the form &#039;&#039;yyyymmdd&#039;&#039; (and where appropriate just &#039;&#039;yyyymm&#039;&#039;).  For example, an August 25, 2005 FOIA release would be in &amp;lt;tt&amp;gt;/opt/FOIAVistA_20050825&amp;lt;/tt&amp;gt;, an October 21, 2005 release in &amp;lt;tt&amp;gt;/opt/FOIAVistA_20051021&amp;lt;/tt&amp;gt;, an OpenVistA 0.3 release in &amp;lt;tt&amp;gt;/opt/OpenVistA_0.3&amp;lt;/tt&amp;gt; and a Leonardo da VistA 0.45 release in &amp;lt;tt&amp;gt;/opt/LeonardoDaVistA_0.45&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The normal protection on all directories and files in a release directory should be read-only.  To install files in the &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; subdirectory, it should be made read-write, the source for the patch copied in, the object file(s) generated, and the directory again made read-only.&lt;br /&gt;
&lt;br /&gt;
For each release family, the release directory contains subdirectories &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt;, symbolic link &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt;, and a script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt;.  Other shell scripts may be created for various maintenance purposes (and ideally would be documented here).&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt; contains a global directory file &amp;lt;tt&amp;gt;mumps.gld&amp;lt;/tt&amp;gt; and a compressed database file &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.  The global directory maps all global variables to a single database file &amp;lt;tt&amp;gt;$vista_home/g/mumps.dat&amp;lt;/tt&amp;gt; (i.e., the environment variable &amp;lt;tt&amp;gt;$vista_home&amp;lt;/tt&amp;gt; is used at run-time to point a GT.M process to the location of the database file, so that different processes can actually use the same global directory to refer to entirely different database files).&lt;br /&gt;
&lt;br /&gt;
*Subdirectories &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; correspond to directories for files containing routine object code and routine source code respectively.  Each file in &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; ends in &amp;lt;tt&amp;gt;.m&amp;lt;/tt&amp;gt; and has a corresponding file in &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt; with a newer time stamp and which ends in &amp;lt;tt&amp;gt;.o&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; contains source and object code for patches to a release (generated outside the scope of the work for creating Release B) and which are deemed to be essential for the proper functioning of the release.&lt;br /&gt;
&lt;br /&gt;
*The symbolic link &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; points to the GT.M directory used for this VistA directory.&lt;br /&gt;
&lt;br /&gt;
*The script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt; creates a new integration directory to be used in creating a new release from this release.    Normally, the initial database file of the integration directory is created by uncompressing &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.  Option &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039;, specifies that the integration directory is to be configured to run a different version of GT.M (as specified by the directory &#039;&#039;gtmver&#039;&#039;) from the one used by the release.  If &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; is used, the default assumption is that the database will need to be extracted with the version of GT.M used by Release A, and loaded into a new database created with the version of GT.M to be used in the integration directory.  When &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; is used, a an additional optional option &amp;lt;tt&amp;gt;--nonewdb&amp;lt;//tt&amp;gt; is used to specify that the releases of GT.M have compatible database formats, and that database from Release A can be used unchanged in the integration directory.  Note that the use of &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; will almost certainly result in a command that takes a long time, because the database may need to be extracted and reloaded, and the routines recompiled.&lt;br /&gt;
&lt;br /&gt;
==== VistA Integration Directories ====&lt;br /&gt;
&lt;br /&gt;
A VistA integration directory is similar to a VistA release directory, with the following differences.&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt; contains a database file, &amp;lt;tt&amp;gt;mumps.dat&amp;lt;/tt&amp;gt;, rather than a compressed database file, &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*The symbolic link &amp;lt;tt&amp;gt;parent&amp;lt;/tt&amp;gt; points to the release directory from which this integration directory was created.  A release directory does not have a symbolic link called parent. (The recommended way for a script to determine whether a directory is a release directory or an integration / development directory is to test for the existence of &amp;lt;tt&amp;gt;parent&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
*A script &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; which invokes and runs VistA in that integration environment.  Note that a VistA release may physically include a &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; script, but it will not work because it is not possible to directly run VistA from a release directory.&lt;br /&gt;
&lt;br /&gt;
*When the &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt; script is executed, it will create a development directory.&lt;br /&gt;
&lt;br /&gt;
*The normal protection on all directories and files in an integration directory should be read-only.  When promoting code to the integration directory from a development directory, or to install externally generated patches in the &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; subdirectory, needed directories should be made read-write, sources copied in, object file(s) generated, and directories again made read-only.&lt;br /&gt;
&lt;br /&gt;
==== VistA Development Directories ====&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1643</id>
		<title>Software Development (WG1) Version Control (T3)</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1643"/>
		<updated>2005-11-16T22:24:56Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: /* Practice */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a VistA Development Environment ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
This is a description of how VistA development environments should be configured.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bold text&#039;&#039;&#039; designates program names, directory names, command line parameters, etc., that are intended to be typed in at a Linux shell or a GT.M prompt, e.g. &#039;&#039;&#039;/bin/bash&#039;&#039;&#039;.  &#039;&#039;Italic text&#039;&#039; is a descriptor of something whose actual value must be determined when the command is typed, e.g., &#039;&#039;gtmver&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Theory ===&lt;br /&gt;
&lt;br /&gt;
A release is a collection of routines and global variables.  The canonical packaging of a release, which is suitable for importation into any standard M distribution, is a collection of M source code routines and a database extract in ZWRite format.  When installed on a system, to run with an M implementation, a release may have pre-compiled object files, database files, shell scripts, global directories, etc.&lt;br /&gt;
&lt;br /&gt;
Below is a diagram of the “roll-up” by which a VistA release (“Release A”) gets converted into another VistA release (“Release B”) by a development team.  A and B could be from different families, e.g., Release A could be a FOIA release and Release B could be a Leonardo da VistA release.&lt;br /&gt;
&lt;br /&gt;
[[Image:051112-1WorldVistADevelopmentEnvironment_html_26096dee.gif|&lt;br /&gt;
&amp;quot;Roll up&amp;quot; model of VistA releases]]&lt;br /&gt;
&lt;br /&gt;
Once Release A is installed, it remains frozen and unchanged except for any essential patches that may become available independent of the development process for creating Release B and without which the release lacks some required functionality.&lt;br /&gt;
&lt;br /&gt;
At any given time, there can be multiple development projects underway based on Release A.  In other words, there may well be a Release C that is also based on Release A, but which has its own integration and development areas.&lt;br /&gt;
&lt;br /&gt;
To start the development process, an integration directory is created and initialized with a copy of the global variables from Release A, as well as shell scripts, global directories, etc.  The integration directory may well have a different name from Release A and Release B.  For example, Release A may be FOIAVistA_20051021, Release B may become LeonardoDaVistA_0.4 (at the time that the integration area is created, the name and version of Release B may not be decided yet), and the integration and development areas may be named Greenbelt_200510.  There is no need to copy routines, since the GT.M search path will be set up to look for routines in the integration area before looking in Release A; hence only routines that are different between Release A and the new release need to be duplicated.&lt;br /&gt;
&lt;br /&gt;
Actual development does not take place in the integration area.  Development occurs in development areas, typically in the home directories of individual developers; however, there may be a shared development area if two developers are collaborating on making changes to the very same module (i.e., their code changes overlap).  A development area is set up by creating a directory structure, shell scripts, etc.  Note that development areas can be hierarchical so that development subtasks 1a and 1b can be developed separately and integrated into development task 1, prior to integration into the integration area, etc.&lt;br /&gt;
&lt;br /&gt;
During this development process, developers develop code in individual sand boxes (development areas), but normally share the database (global variables) in the integration area – there may typically be no need to create a separate database.  However, if some global variable changes are tied to code changes being made in a development area, a copy of those global variables can be placed in a separate database file in that development area, and a global directory for that development area can map those global variables to the database in that development area, with all other global variables mapped to the database in the integration area.&lt;br /&gt;
&lt;br /&gt;
When a developer has code that is ready for integration, the new versions of the modified routines are promoted to the integration area.  Any global variables tied to the code being promoted that are in a database in the development area must be merged, reconciled or otherwise integrated with the global variables in the database in the integration area and the global directory in the development area modified accordingly.  Note that there needs to be a process, e.g., involving code reviews, by which a development task is considered complete enough to be promoted.  These, and other quality gates, are not discussed herein.&lt;br /&gt;
&lt;br /&gt;
Creating a release is minimally the process of creating the directory structure for Release B, copying the routines from Release A, overlying the routines with those from the integration area, and copying the global variables from the integration area.&lt;br /&gt;
&lt;br /&gt;
Normally, Release A, the integration area and development areas would all use the same GT.M version.  However, this is not a requirement.&lt;br /&gt;
&lt;br /&gt;
=== Practice ===&lt;br /&gt;
&lt;br /&gt;
==== Shell ====&lt;br /&gt;
&lt;br /&gt;
The standard shell for VistA community scripting is bash (installed as &amp;lt;tt&amp;gt;/bin/bash&amp;lt;/tt&amp;gt; on Debian GNU/Linux systems).&lt;br /&gt;
&lt;br /&gt;
==== GT.M Release Directories ====&lt;br /&gt;
&lt;br /&gt;
Each release of GT.M is installed its own subdirectory of &amp;lt;tt&amp;gt;/opt&amp;lt;/tt&amp;gt; (preferred) or &amp;lt;tt&amp;gt;/usr/local&amp;lt;/tt&amp;gt; (acceptable).  Each directory name starts with &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; followed by a release number separated from the release name by an underscore (&amp;lt;tt&amp;gt;_&amp;lt;/tt&amp;gt;).  Thus, for example, GT.M V5.0-000C would be installed in &amp;lt;tt&amp;gt;/opt/gtm_V5.0-000C&amp;lt;/tt&amp;gt;.  &amp;lt;tt&amp;gt;/opt/gtm&amp;lt;/tt&amp;gt; is a relative symbolic link to the latest version, set up with a command sequence such as:&lt;br /&gt;
&lt;br /&gt;
  cd /opt&lt;br /&gt;
  rm -f gtm&lt;br /&gt;
  ln -s gtm_V5.0-000C gtm&lt;br /&gt;
&lt;br /&gt;
When installing GT.M, the file gtmprofile should be edited so that the line:&lt;br /&gt;
&lt;br /&gt;
  EDITOR=&amp;quot;/bin/vi&amp;quot;; export EDITOR&lt;br /&gt;
&lt;br /&gt;
is modified to read:&lt;br /&gt;
&lt;br /&gt;
  export EDITOR=${EDITOR:=/bin/vi}&lt;br /&gt;
&lt;br /&gt;
==== VistA Release Directories ====&lt;br /&gt;
&lt;br /&gt;
Each release is installed in its own sub-directory of a standard system location, such as &amp;lt;tt&amp;gt;/opt&amp;lt;/tt&amp;gt; (preferred) or &amp;lt;tt&amp;gt;/usr/local&amp;lt;/tt&amp;gt; (acceptable).  Each directory has a release family name followed by a release / version number suffix separated from the release name by an underscore.  Directories for releases without version numbers, such as FOIA releases, have a date suffix of the form &#039;&#039;yyyymmdd&#039;&#039; (and where appropriate just &#039;&#039;yyyymm&#039;&#039;).  For example, an August 25, 2005 FOIA release would be in &amp;lt;tt&amp;gt;/opt/FOIAVistA_20050825&amp;lt;/tt&amp;gt;, an October 21, 2005 release in &amp;lt;tt&amp;gt;/opt/FOIAVistA_20051021&amp;lt;/tt&amp;gt;, an OpenVistA 0.3 release in &amp;lt;tt&amp;gt;/opt/OpenVistA_0.3&amp;lt;/tt&amp;gt; and a Leonardo da VistA 0.45 release in &amp;lt;tt&amp;gt;/opt/LeonardoDaVistA_0.45&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The normal protection on all directories and files in a release directory should be read-only.  To install files in the &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; subdirectory, it should be made read-write, the source for the patch copied in, the object file(s) generated, and the directory again made read-only.&lt;br /&gt;
&lt;br /&gt;
For each release family, the release directory contains subdirectories &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt;, symbolic link &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt;, and a script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt;.  Other shell scripts may be created for various maintenance purposes (and ideally would be documented here).&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;g&amp;lt;/tt&amp;gt; contains a global directory file &amp;lt;tt&amp;gt;mumps.gld&amp;lt;/tt&amp;gt; and a compressed database file &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.  The global directory maps all global variables to a single database file &amp;lt;tt&amp;gt;$vista_home/g/mumps.dat&amp;lt;/tt&amp;gt; (i.e., the environment variable &amp;lt;tt&amp;gt;$vista_home&amp;lt;/tt&amp;gt; is used at run-time to point a GT.M process to the location of the database file, so that different processes can actually use the same global directory to refer to entirely different database files).&lt;br /&gt;
&lt;br /&gt;
*Subdirectories &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; correspond to directories for files containing routine object code and routine source code respectively.  Each file in &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; ends in &amp;lt;tt&amp;gt;.m&amp;lt;/tt&amp;gt; and has a corresponding file in &amp;lt;tt&amp;gt;o&amp;lt;/tt&amp;gt; with a newer time stamp and which ends in &amp;lt;tt&amp;gt;.o&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*Subdirectory &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; contains source and object code for patches to a release (generated outside the scope of the work for creating Release B) and which are deemed to be essential for the proper functioning of the release.&lt;br /&gt;
&lt;br /&gt;
*The symbolic link &amp;lt;tt&amp;gt;gtm&amp;lt;/tt&amp;gt; points to the GT.M directory used for this VistA directory.&lt;br /&gt;
&lt;br /&gt;
*The script &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt; creates a new integration directory to be used in creating a new release from this release.    Normally, the initial database file of the integration directory is created by uncompressing &amp;lt;tt&amp;gt;mumps.dat.gz&amp;lt;/tt&amp;gt;.  Option &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039;, specifies that the integration directory is to be configured to run a different version of GT.M (as specified by the directory &#039;&#039;gtmver&#039;&#039;) from the one used by the release.  If &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; is used, the default assumption is that the database will need to be extracted with the version of GT.M used by Release A, and loaded into a new database created with the version of GT.M to be used in the integration directory.  When &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; is used, a an additional optional option &amp;lt;tt&amp;gt;--nonewdb&amp;lt;//tt&amp;gt; is used to specify that the releases of GT.M have compatible database formats, and that database from Release A can be used unchanged in the integration directory.  Note that the use of &amp;lt;tt&amp;gt;--newgtm&amp;lt;/tt&amp;gt; &#039;&#039;gtmver&#039;&#039; will almost certainly result in a command that takes a long time, because the database may need to be extracted and reloaded, and the routines recompiled.&lt;br /&gt;
&lt;br /&gt;
==== VistA Integration Directories ====&lt;br /&gt;
&lt;br /&gt;
==== VistA Development Directories ====&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1642</id>
		<title>Software Development (WG1) Version Control (T3)</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1642"/>
		<updated>2005-11-16T21:58:54Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: /* Theory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a VistA Development Environment ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
This is a description of how VistA development environments should be configured.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bold text&#039;&#039;&#039; designates program names, directory names, command line parameters, etc., that are intended to be typed in at a Linux shell or a GT.M prompt, e.g. &#039;&#039;&#039;/bin/bash&#039;&#039;&#039;.  &#039;&#039;Italic text&#039;&#039; is a descriptor of something whose actual value must be determined when the command is typed, e.g., &#039;&#039;gtmver&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Theory ===&lt;br /&gt;
&lt;br /&gt;
A release is a collection of routines and global variables.  The canonical packaging of a release, which is suitable for importation into any standard M distribution, is a collection of M source code routines and a database extract in ZWRite format.  When installed on a system, to run with an M implementation, a release may have pre-compiled object files, database files, shell scripts, global directories, etc.&lt;br /&gt;
&lt;br /&gt;
Below is a diagram of the “roll-up” by which a VistA release (“Release A”) gets converted into another VistA release (“Release B”) by a development team.  A and B could be from different families, e.g., Release A could be a FOIA release and Release B could be a Leonardo da VistA release.&lt;br /&gt;
&lt;br /&gt;
[[Image:051112-1WorldVistADevelopmentEnvironment_html_26096dee.gif|&lt;br /&gt;
&amp;quot;Roll up&amp;quot; model of VistA releases]]&lt;br /&gt;
&lt;br /&gt;
Once Release A is installed, it remains frozen and unchanged except for any essential patches that may become available independent of the development process for creating Release B and without which the release lacks some required functionality.&lt;br /&gt;
&lt;br /&gt;
At any given time, there can be multiple development projects underway based on Release A.  In other words, there may well be a Release C that is also based on Release A, but which has its own integration and development areas.&lt;br /&gt;
&lt;br /&gt;
To start the development process, an integration directory is created and initialized with a copy of the global variables from Release A, as well as shell scripts, global directories, etc.  The integration directory may well have a different name from Release A and Release B.  For example, Release A may be FOIAVistA_20051021, Release B may become LeonardoDaVistA_0.4 (at the time that the integration area is created, the name and version of Release B may not be decided yet), and the integration and development areas may be named Greenbelt_200510.  There is no need to copy routines, since the GT.M search path will be set up to look for routines in the integration area before looking in Release A; hence only routines that are different between Release A and the new release need to be duplicated.&lt;br /&gt;
&lt;br /&gt;
Actual development does not take place in the integration area.  Development occurs in development areas, typically in the home directories of individual developers; however, there may be a shared development area if two developers are collaborating on making changes to the very same module (i.e., their code changes overlap).  A development area is set up by creating a directory structure, shell scripts, etc.  Note that development areas can be hierarchical so that development subtasks 1a and 1b can be developed separately and integrated into development task 1, prior to integration into the integration area, etc.&lt;br /&gt;
&lt;br /&gt;
During this development process, developers develop code in individual sand boxes (development areas), but normally share the database (global variables) in the integration area – there may typically be no need to create a separate database.  However, if some global variable changes are tied to code changes being made in a development area, a copy of those global variables can be placed in a separate database file in that development area, and a global directory for that development area can map those global variables to the database in that development area, with all other global variables mapped to the database in the integration area.&lt;br /&gt;
&lt;br /&gt;
When a developer has code that is ready for integration, the new versions of the modified routines are promoted to the integration area.  Any global variables tied to the code being promoted that are in a database in the development area must be merged, reconciled or otherwise integrated with the global variables in the database in the integration area and the global directory in the development area modified accordingly.  Note that there needs to be a process, e.g., involving code reviews, by which a development task is considered complete enough to be promoted.  These, and other quality gates, are not discussed herein.&lt;br /&gt;
&lt;br /&gt;
Creating a release is minimally the process of creating the directory structure for Release B, copying the routines from Release A, overlying the routines with those from the integration area, and copying the global variables from the integration area.&lt;br /&gt;
&lt;br /&gt;
Normally, Release A, the integration area and development areas would all use the same GT.M version.  However, this is not a requirement.&lt;br /&gt;
&lt;br /&gt;
=== Practice ===&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1641</id>
		<title>Software Development (WG1) Version Control (T3)</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1641"/>
		<updated>2005-11-16T21:55:41Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a VistA Development Environment ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
This is a description of how VistA development environments should be configured.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bold text&#039;&#039;&#039; designates program names, directory names, command line parameters, etc., that are intended to be typed in at a Linux shell or a GT.M prompt, e.g. &#039;&#039;&#039;/bin/bash&#039;&#039;&#039;.  &#039;&#039;Italic text&#039;&#039; is a descriptor of something whose actual value must be determined when the command is typed, e.g., &#039;&#039;gtmver&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Theory ===&lt;br /&gt;
&lt;br /&gt;
A release is a collection of routines and global variables.  The canonical packaging of a release, which is suitable for importation into any standard M distribution, is a collection of M source code routines and a database extract in ZWRite format.  When installed on a system, to run with an M implementation, a release may have pre-compiled object files, database files, shell scripts, global directories, etc.&lt;br /&gt;
&lt;br /&gt;
Below is a diagram of the “roll-up” by which a VistA release (“Release A”) gets converted into another VistA release (“Release B”) by a development team.  A and B could be from different families, e.g., Release A could be a FOIA release and Release B could be a Leonardo da VistA release.&lt;br /&gt;
&lt;br /&gt;
[[Image:051112-1WorldVistADevelopmentEnvironment_html_26096dee.gif|&lt;br /&gt;
&amp;quot;Roll up&amp;quot; model of VistA releases]]&lt;br /&gt;
&lt;br /&gt;
Once Release A is installed, it remains frozen and unchanged except for any essential patches that may become available independent of the development process for creating Release B and without which the release lacks some required functionality.&lt;br /&gt;
&lt;br /&gt;
At any given time, there can be multiple development projects underway based on Release A.  In other words, there may well be a Release C that is also based on Release A, but which has its own integration and development areas.&lt;br /&gt;
&lt;br /&gt;
To start the development process, an integration directory is created and initialized with a copy of the global variables from Release A, as well as shell scripts, global directories, etc.  The integration directory may well have a different name from Release A and Release B.  For example, Release A may be FOIAVistA_20051021, Release B may become LeonardoDaVistA_0.4 (at the time that the integration area is created, the name and version of Release B may not be decided yet), and the integration and development areas may be named Greenbelt_200510.  There is no need to copy routines, since the GT.M search path will be set up to look for routines in the integration area before looking in Release A; hence only routines that are different between Release A and the new release need to be duplicated.&lt;br /&gt;
&lt;br /&gt;
=== Practice ===&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=File:051112-1WorldVistADevelopmentEnvironment_html_26096dee.gif&amp;diff=9820</id>
		<title>File:051112-1WorldVistADevelopmentEnvironment html 26096dee.gif</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=File:051112-1WorldVistADevelopmentEnvironment_html_26096dee.gif&amp;diff=9820"/>
		<updated>2005-11-16T21:42:49Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: &amp;quot;Roll up&amp;quot; VistA sofware development model&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;Roll up&amp;quot; VistA sofware development model&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1640</id>
		<title>Software Development (WG1) Version Control (T3)</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Software_Development_(WG1)_Version_Control_(T3)&amp;diff=1640"/>
		<updated>2005-11-16T21:40:47Z</updated>

		<summary type="html">&lt;p&gt;Bhaskar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a VistA Development Environment ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
This is a description of how VistA development environments should be configured.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bold text&#039;&#039;&#039; designates program names, directory names, command line parameters, etc., that are intended to be typed in at a Linux shell or a GT.M prompt, e.g. &#039;&#039;&#039;/bin/bash&#039;&#039;&#039;.  &#039;&#039;Italic text&#039;&#039; is a descriptor of something whose actual value must be determined when the command is typed, e.g., &#039;&#039;gtmver&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Theory ===&lt;br /&gt;
&lt;br /&gt;
A release is a collection of routines and global variables.  The canonical packaging of a release, which is suitable for importation into any standard M distribution, is a collection of M source code routines and a database extract in ZWRite format.  When installed on a system, to run with an M implementation, a release may have pre-compiled object files, database files, shell scripts, global directories, etc.&lt;br /&gt;
&lt;br /&gt;
Below is a diagram of the “roll-up” by which a VistA release (“Release A”) gets converted into another VistA release (“Release B”) by a development team.  A and B could be from different families, e.g., Release A could be a FOIA release and Release B could be a Leonardo da VistA release.&lt;br /&gt;
&lt;br /&gt;
=== Practice ===&lt;/div&gt;</summary>
		<author><name>Bhaskar</name></author>
	</entry>
</feed>