CodeMRI Administration Example - Analyzing Many Codebases

Configuring Your Projects & Systems

Test source code we are using

In these examples we got open source code for early versions of the Apache HTTPd web server, early versions of the Linux Kernel, and all released versions of Axis2.

You can follow along with these same codebases by going to the following websites and downloading <package>-<version>.tar.gz files.

1 2 3 4 5 https://mirrors.edge.kernel.org/pub/linux/kernel/Historic/v0.99/ https://mirrors.edge.kernel.org/pub/linux/kernel/Historic/ https://mirrors.edge.kernel.org/pub/linux/kernel/v1.1/ https://archive.apache.org/dist/httpd/ https://github.com/apache/axis-axis2-java-core/tags

https://mirrors.edge.kernel.org/pub/linux/kernel/v1.1/

https://mirrors.edge.kernel.org/pub/linux/kernel/Historic/

https://mirrors.edge.kernel.org/pub/linux/kernel/Historic/v0.99/

https://archive.apache.org/dist/httpd/

https://github.com/apache/axis-axis2-java-core/tags

Where things might go

Location of the CodeMRI Data Vault where databases, reports, and other things are stored by CodeMRI

  • $HOME/Documents/test_datavault

Location where you store the source code you are analyzing

  • $HOME/Documents/test_sourcecode

You can put these wherever you like. I am going to do the following:

1 2 3 # on any Unux machine, including Linux and MacOS export CMRI_VAULT=$HOME/Documents/test_datavault export CMRI_SOURCECODE=$HOME/Documents/test_sourcecode

Set these in your UNIX shell to set the variables temporarily.

Add them to your .bashrc or .zshrc file if you want them to always be available.

Get Your Source Code Ready

In this demo, we are putting source code into a directory structure with the name ‘test_sourcecode’ that will mirror the structure that the CodeMRI Data Vault will take when it is processed.

1 2 3 4 5 6 dan $ls -l test_sourcecode total 8 drwxr-xr-x 18 dan staff 576 Oct 14 01:35 Apache_HTTPd drwxr-xr-x 24 dan staff 768 Oct 14 01:36 Axis2 drwxr-xr-x 44 dan staff 1408 Oct 14 02:02 Linux_Kernel -rw-r--r-- 1 dan staff 150 Oct 12 10:39 README

 

We downloaded the .tar.gz files into this directory structure:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 dan $ls -l test_sourcecode/Axis2/tar_files total 322288 -rw-r--r--@ 1 dan staff 7747396 Oct 12 10:39 axis-axis2-java-core-1.5.3.tar.gz -rw-r--r--@ 1 dan staff 7766202 Oct 12 10:39 axis-axis2-java-core-1.5.4.tar.gz -rw-r--r--@ 1 dan staff 7768751 Oct 12 10:39 axis-axis2-java-core-1.5.5.tar.gz -rw-r--r--@ 1 dan staff 7774707 Oct 12 10:39 axis-axis2-java-core-1.5.6.tar.gz -rw-r--r--@ 1 dan staff 8090678 Oct 12 10:39 axis-axis2-java-core-1.6.0.tar.gz -rw-r--r--@ 1 dan staff 8106817 Oct 12 10:39 axis-axis2-java-core-1.6.1.tar.gz -rw-r--r--@ 1 dan staff 8115902 Oct 12 10:39 axis-axis2-java-core-1.6.2.tar.gz -rw-r--r--@ 1 dan staff 8362665 Oct 12 10:39 axis-axis2-java-core-1.6.3.tar.gz -rw-r--r--@ 1 dan staff 8282619 Oct 12 10:38 axis-axis2-java-core-1.6.4.tar.gz -rw-r--r--@ 1 dan staff 8458609 Oct 12 10:38 axis-axis2-java-core-1.7.0.tar.gz -rw-r--r--@ 1 dan staff 8454629 Oct 12 10:38 axis-axis2-java-core-1.7.1.tar.gz -rw-r--r--@ 1 dan staff 8455957 Oct 12 10:38 axis-axis2-java-core-1.7.2.tar.gz -rw-r--r--@ 1 dan staff 8459411 Oct 12 10:38 axis-axis2-java-core-1.7.3.tar.gz -rw-r--r--@ 1 dan staff 8453438 Oct 12 10:38 axis-axis2-java-core-1.7.4.tar.gz -rw-r--r--@ 1 dan staff 8454106 Oct 12 10:38 axis-axis2-java-core-1.7.5.tar.gz -rw-r--r--@ 1 dan staff 8453947 Oct 12 10:38 axis-axis2-java-core-1.7.6.tar.gz -rw-r--r--@ 1 dan staff 8465864 Oct 12 10:38 axis-axis2-java-core-1.7.7.tar.gz -rw-r--r--@ 1 dan staff 8465646 Oct 12 10:38 axis-axis2-java-core-1.7.8.tar.gz -rw-r--r--@ 1 dan staff 8465496 Oct 12 10:38 axis-axis2-java-core-1.7.9.tar.gz -rw-r--r--@ 1 dan staff 8366794 Oct 12 10:38 axis-axis2-java-core-1.8.0.tar.gz

 

The ‘tar’ command was used to unpack each source code directory. For this example we used Linux shell scripting to automate the process. Once this was complete, we moved the .tar.gz files into a subdirectory called ‘tar_files’:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # TO UNPACK LINUX for i in `ls *.tar.gz` ; do echo $i; j=$(echo $i | sed 's/\.tar\.gz//') ; mkdir $j ; tar xvzf $i -C $j ; done # TO UNPACK APACHE_HTTPD & AXIS2 for i in `ls *.tar.gz` ; do echo $i; j=$(echo $i | sed 's/\.tar\.gz//') ; tar xvzf $i ; done mkdir tar_files mv *.tar.gz tar_files

 

The Axis2 source code directory then looked like the following:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 dan $ls -l test_sourcecode/Axis2 total 0 drwxr-xr-x@ 13 dan staff 416 Nov 11 2010 axis-axis2-java-core-1.5.3 drwxr-xr-x@ 13 dan staff 416 Dec 19 2010 axis-axis2-java-core-1.5.4 drwxr-xr-x@ 13 dan staff 416 May 28 2011 axis-axis2-java-core-1.5.5 drwxr-xr-x@ 13 dan staff 416 Aug 30 2011 axis-axis2-java-core-1.5.6 drwxr-xr-x@ 13 dan staff 416 May 17 2011 axis-axis2-java-core-1.6.0 drwxr-xr-x@ 13 dan staff 416 Aug 30 2011 axis-axis2-java-core-1.6.1 drwxr-xr-x@ 13 dan staff 416 Apr 17 2012 axis-axis2-java-core-1.6.2 drwxr-xr-x@ 13 dan staff 416 Jun 27 2015 axis-axis2-java-core-1.6.3 drwxr-xr-x@ 12 dan staff 384 Dec 28 2015 axis-axis2-java-core-1.6.4 drwxr-xr-x@ 13 dan staff 416 Jan 18 2016 axis-axis2-java-core-1.7.0 drwxr-xr-x@ 13 dan staff 416 Feb 20 2016 axis-axis2-java-core-1.7.1 drwxr-xr-x@ 13 dan staff 416 May 2 2016 axis-axis2-java-core-1.7.2 drwxr-xr-x@ 14 dan staff 448 May 30 2016 axis-axis2-java-core-1.7.3 drwxr-xr-x@ 14 dan staff 448 Oct 21 2016 axis-axis2-java-core-1.7.4 drwxr-xr-x@ 14 dan staff 448 May 6 2017 axis-axis2-java-core-1.7.5 drwxr-xr-x@ 14 dan staff 448 Jul 30 2017 axis-axis2-java-core-1.7.6 drwxr-xr-x@ 14 dan staff 448 Nov 20 2017 axis-axis2-java-core-1.7.7 drwxr-xr-x@ 15 dan staff 480 May 19 2018 axis-axis2-java-core-1.7.8 drwxr-xr-x@ 16 dan staff 512 Nov 15 2018 axis-axis2-java-core-1.7.9 drwxr-xr-x@ 16 dan staff 512 Aug 1 13:16 axis-axis2-java-core-1.8.0 drwxr-xr-x 22 dan staff 704 Oct 12 11:33 tar_files

 

In the operating system ‘Finder' application, the entire layout looked like the following

We now have several versions of multiple projects stored for use by CodeMRI.

Install CodeMRI - follow installation instructions

Configure the CodeMRI Data Vault

1 2 3 # change directories into cd /Users/dan/Documents/test_datavault cmri vault create

Make sure your CodeMRI license is set up

Add Projects - via CodeMRI Command Line Shell

On the UNIX command line:

1 2 3 cmri project add --name Axis2 cmri project add --name Linux_Kernel cmri project add --name Apache_HTTPd

Alternatively, do this inside the CodeMRI shell itself:

 

1 2 3 4 $ cmri shell > project add --name Axis2 > project add --name Linux_Kernel > project add --name Apache_HTTPd

 

Note: If you ever want to remove those projects, run the following

1 2 cmri project remove --selection Apache_HTTPd cmri project remove --force --selection Axis2:Linux_Kernel

Add systems - via CodeMRI Command Line Shell

Using Apache_HTTPd as the example

1 2 3 4 5 6 7 8 9 10 11 12 13 # THIS WORKS IN ZSH & BASH PROJECT=Apache_HTTPd PROJECT_SRC_LOCATION="/home/dan/Documents/test_sourcecode/Apache_HTTPd" BASENAME_START='apache_' PROJECT_SRC_DIRS=$(ls -d ${PROJECT_SRC_LOCATION}/${BASENAME_START}*) while read sourcedir; do basedir=$(basename ${sourcedir}) ; version=$(echo $basedir | sed "s/${BASENAME_START}//") ; echo "cmri system add --selection ${PROJECT} --origin ${sourcedir} --name ${PROJECT} --version ${version}" ; done <<<"$PROJECT_SRC_DIRS"

 

At your terminal, you can open a CodeMRI shell (cmri) to run commands interactively

1 $cmri shell

To add each system one at a time, type the following

1 2 3 4 5 system add --selection Apache_HTTPd --origin /Users/dan/Documents/test_sourcecode/Apache_HTTPd/apache_1.3.0 --name Apache_HTTPd --version 1.3.0 system add --selection Apache_HTTPd --origin /Users/dan/Documents/test_sourcecode/Apache_HTTPd/apache_1.3.1 --name Apache_HTTPd --version 1.3.1 system add --selection Apache_HTTPd --origin /Users/dan/Documents/test_sourcecode/Apache_HTTPd/apache_1.3.11 --name Apache_HTTPd --version 1.3.11 ... AND SO ON ...

Note: You could remove all the Apache_HTTPd systems from the DataVault by typing this:

1 system remove --force --selection Apache_HTTPd/*

Add systems - via Linux / Windows command Line

Using Linux_Kernel as the example

Helps with system administration & automation

This command tells you that important information is being captured

1 2 3 4 5 6 7 for sourcedir in $(ls -d /home/dan/Documents/test_sourcecode/Linux_Kernel/linux-*) ; do basedir=$(basename $sourcedir) ; version=$(echo $basedir | sed 's/linux-//') ; echo $sourcedir ; echo $basedir ; echo $version ; done

 

This command produces strings you will want to cut an paste into the terminal to add systems

1 2 3 4 5 6 7 8 9 10 11 PROJECT=Linux_Kernel PROJECT_SRC_LOCATION="/home/dan/Documents/test_sourcecode/Linux_Kernel" BASENAME_START='linux-' PROJECT_SRC_DIRS=$(ls -d ${PROJECT_SRC_LOCATION}/${BASENAME_START}*) while read sourcedir; do basedir=$(basename ${sourcedir}) ; version=$(echo $basedir | sed "s/${BASENAME_START}//") ; echo "cmri system add --selection ${PROJECT} --origin ${sourcedir} --name ${PROJECT} --version ${version}" ; done <<<"$PROJECT_SRC_DIRS"

Now run all the ‘cmri system add’ commands in a shell

Result:

Add systems - via CodeMRI Batch Mode

Using Axis2 as the example

1 $cmri shell
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 # THIS WORKS IN ZSH PROJECT=Axis2 PROJECT_SRC_LOCATION="/home/dan/Documents/test_sourcecode/Axis2" BASENAME_START='axis-axis2-java-core-' PROJECT_SRC_DIRS=$(ls -d ${PROJECT_SRC_LOCATION}/${BASENAME_START}*) # PROJECT_SRC_DIRS=$(ls -d ${PROJECT_SRC_LOCATION}/${BASENAME_START}* | xargs sed "s/${BASENAME_START}//") while read sourcedir; do echo "$sourcedir"; basedir=$(basename ${sourcedir}) ; echo $basedir ; version=$(echo $basedir | sed "s/${BASENAME_START}//") ; echo $version ; done <<<"$PROJECT_SRC_DIRS" while read sourcedir; do basedir=$(basename ${sourcedir}) ; version=$(echo $basedir | sed "s/${BASENAME_START}//") ; echo "system add --selection ${PROJECT} --origin ${sourcedir} --name ${PROJECT} --version ${version}" ; done <<<"$PROJECT_SRC_DIRS"

Add systems - via Batch Script

Save the list of commands as a file: /tmp/Axis2_add.cmri and then run cmri in batch mode

1 cmri batch run /tmp/Axis2_add.cmri

Select Systems to Operate On

CodeMRI commands operate on ‘selected’ projects and systems in a DataVault. When you first start CodeMRI shell, no systems are selected (unless environment variables are set up.)

 

1 2 $ cmri shell > vault list

You can select a single system to operate on. Note below that one system now shows ‘SELECTED’ to be ‘True’

1 2 > select Axis2/Axis2-1.5.3 > vault list

You can select multiple systems by using ‘globbing'. This allows CodeMRI to run operations on multiple systems to be run in parallel.

1 2 > select Linux_Kernel/* > vault list

See What Kind of Jobs Can Be Run

1 > job list

See details for ‘produce_reports’ job

Produce Reports for a System (Default Set of Reports)

First, select a single system

1 > select Axis2/Axis2-1.7.9

Then run a job called ‘produce_reports’ which generates a number of Excel files about the system

1 > job run produce_reports

You can also do this for multiple systems in parallel. Your machine’s resources (CPUs, RAM) will be used to determine how many jobs will run in parallel:

First, select a single system

1 2 > select Linux_Kernel/* > job run produce_reports

While you have jobs running in one terminal, you could open up a second terminal to see the history of jobs that are running and have been run:

1 > job history

Produce the ‘Technical Health Improvement Plan’ (THIP)

If the system has ‘core’ files, you will probably also want to produce a ‘Technical Health Improvement Plan’ (THIP). This may be a long-running job, and only is necessary if the system has cores, so isn’t run as part included in the default set of Excel files generated

1 > job run produce_thip

Look at CodeMRI Excel Files

The previous commands (produce_reports, produce_thip) create a number of Excel files in the <data vault>/reports directory for each system

Others Jobs You Might Want To Run

1 2 3 4 5 6 7 8 9 10 # In UNIX shell $ cmri shell # In cmri interactive shell > job run export_web_data > job run generate_query_data > job run generate_system_summary # this enables 'cmri project describe Axis2' > job run generate_vault_summary # this enables 'cmri vault describe' > job run produce_sourcedata_file # these help us recover from wierd problems > job run produce_unprocessed_metadata # these help us recover from wierd problems

Settings for Systems and Projects

The settings and what they do

Each project and system stored in a Data Vault has settings. To see the list of settings, do the following to show the options:

1 > system config list

Modifying settings

Now let’s select a single system and look at it’s settings:

1 2 > select Axis2/Axis2-1.7.9 > system config get name

Now let’s look at all the settings:

1 > system config get *

Let’s change one of these settings. Note that ‘release_date’ is wrong. It’s set to the date the scan was run, not the release date for the project. By looking at the timestamp on the source directory unpacked from the .tar.gz file we unpacked, we know that the release date was actually Nov 15, 2018.

Getting this right for each system will be useful later when we want to show trends across the project in the CodeMRI web interface. Note: If you are using the web interface, run the ‘export_web_data’ job after setting all the release_date fields properly

 

Let’s make the change:

1 2 system config set release_date '2018-11-15 12:00:00' system config get release_date

We can also do this without ‘selecting’ a single system (or multiple systems) to operate on and instead use the --selection flag for the command to do so:

1 system config get release_date --selection Axis2/Axis2-1.7.8

Modifying settings in bulk - ‘release_date’ example

Let’s make the dates correct for all the Axis2 systems in the Data Vault. Note that the directories have UNIX timestamps indicating the release date for each version. In this example, we’ll parse these dates and use them for inputs into CodeMRI.

1 ls -ld /home/dan/Documents/test_sourcecode /Axis2/*

Let’s rerun the ‘ls’ command to get the exact style we entered into CodeMRI previously for the ‘release_date’ setting:

1 ls -ld --time-style="+%Y-%m-%d %H:%M:%S" /home/dan/Documents/test_sourcecode/Axis2/*

Now we’ll write some UNIX script code to generate the CodeMRI command we want

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 PROJECT=Axis2 PROJECT_SRC_LOCATION="/home/dan/Documents/test_sourcecode/Axis2" BASENAME_START='axis-axis2-java-core-' PROJECT_SRC_DIRS=$(ls -d ${PROJECT_SRC_LOCATION}/${BASENAME_START}*) PROJECT=Apache_HTTPd PROJECT_SRC_LOCATION="/home/dan/Documents/test_sourcecode/Apache_HTTPd" BASENAME_START='apache_' PROJECT_SRC_DIRS=$(ls -d ${PROJECT_SRC_LOCATION}/${BASENAME_START}*) # To show and debug logic while read sourcedir; do echo ${PROJECT} ; basedir=$(basename ${sourcedir}) ; echo $basedir ; version=$(echo $basedir | sed "s/${BASENAME_START}//") ; echo $version ; ls_string=$(ls -ld --time-style="+%Y-%m-%d %H:%M:%S" $sourcedir) ; echo $ls_string ; date_string=$(echo ${ls_string} | tr -s ' ' | cut -d' ' -f6-7) ; echo $date_string ; done <<<"$PROJECT_SRC_DIRS" # To generate commands we want to run to set 'release_date' for all of Axis2 while read sourcedir; do basedir=$(basename ${sourcedir}) ; version=$(echo $basedir | sed "s/${BASENAME_START}//") ; ls_string=$(ls -ld --time-style="+%Y-%m-%d %H:%M:%S" $sourcedir) ; date_string=$(echo ${ls_string} | tr -s ' ' | cut -d' ' -f6-7) ; system_name=${PROJECT}/${PROJECT}-${version} ; echo system config set release_date \'${date_string}\' --selection ${system_name} ; done <<<"$PROJECT_SRC_DIRS"

 

Let’s confirm that this worked:

1 system config get release_date --selection Axis2/*

Note that the same thing can be done to set release_date for Apache_HTTPd because the .tar.gz files unzip with valid release dates for that project as well. For early versions of Linux, this doesn’t work. Instead you will have to get dates by looking at the download sites.

1 2 3 https://mirrors.edge.kernel.org/pub/linux/kernel/Historic/v0.99/ https://mirrors.edge.kernel.org/pub/linux/kernel/Historic/ https://mirrors.edge.kernel.org/pub/linux/kernel/v1.1/

From here, you can copy the contents of the download pages into an editor write some scripts to produce the correct CodeMRI commands

1 2 3 4 5 6 7 8 9 10 11 12 13 14 PROJECT=Linux_Kernel PROJECT_SRC_LOCATION="/home/dan/Documents/test_sourcecode/Linux_Kernel" BASENAME_START='linux-' PROJECT_SRC_DIRS=$(ls -d ${PROJECT_SRC_LOCATION}/${BASENAME_START}*) # I manually created this file by copying linux-<ver>.tar.gz lines from the websites above. REV_DATE_FILE=${PROJECT_SRC_LOCATION}/Linux_download_site_releaes_dates while read rel_date_line; do version=$(echo $rel_date_line | sed s/linux-// | sed s/\.tar\.gz.*//) ; rev_date=$(echo $rel_date_line | tr -s ' ' | cut -d' ' -f2-3) ; system_name=${PROJECT}/${PROJECT}-${version} ; echo cmri system config set release_date \'${rev_date}\' --selection ${system_name} ; done <"$REV_DATE_FILE"

Here are some commands you could use to set release_date for the Linux systems without going through the process above

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 cmri system config set release_date '06-Apr-1998 05:10' --selection Linux_Kernel/Linux_Kernel-0.99.11 cmri system config set release_date '06-Apr-1998 05:11' --selection Linux_Kernel/Linux_Kernel-0.99.12 cmri system config set release_date '06-Apr-1998 05:11' --selection Linux_Kernel/Linux_Kernel-0.99.13 cmri system config set release_date '06-Apr-1998 05:11' --selection Linux_Kernel/Linux_Kernel-0.99.15 cmri system config set release_date '04-Dec-1994 00:00' --selection Linux_Kernel/Linux_Kernel-0.11 cmri system config set release_date '04-Dec-1994 00:00' --selection Linux_Kernel/Linux_Kernel-0.12 cmri system config set release_date '08-Mar-1992 00:00' --selection Linux_Kernel/Linux_Kernel-0.95 cmri system config set release_date '24-Mar-1992 00:00' --selection Linux_Kernel/Linux_Kernel-0.95a cmri system config set release_date '15-Jan-1993 00:00' --selection Linux_Kernel/Linux_Kernel-0.96a cmri system config set release_date '15-Jul-1992 00:00' --selection Linux_Kernel/Linux_Kernel-0.96b cmri system config set release_date '19-Jul-1992 00:00' --selection Linux_Kernel/Linux_Kernel-0.96c cmri system config set release_date '23-May-1994 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.13 cmri system config set release_date '27-Jun-1994 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.23 cmri system config set release_date '14-Jul-1994 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.29 cmri system config set release_date '21-Jul-1994 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.33 cmri system config set release_date '24-Jul-1994 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.35 cmri system config set release_date '15-Aug-1994 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.45 cmri system config set release_date '06-Oct-1994 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.52 cmri system config set release_date '28-Oct-1994 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.59 cmri system config set release_date '14-Nov-1994 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.63 cmri system config set release_date '15-Nov-1994 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.64 cmri system config set release_date '28-Nov-1994 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.67 cmri system config set release_date '02-Dec-1994 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.70 cmri system config set release_date '05-Dec-1994 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.71 cmri system config set release_date '15-Dec-1994 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.73 cmri system config set release_date '23-Dec-1994 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.74 cmri system config set release_date '29-Dec-1994 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.75 cmri system config set release_date '02-Jan-1995 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.76 cmri system config set release_date '09-Jan-1995 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.78 cmri system config set release_date '11-Jan-1995 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.79 cmri system config set release_date '12-Jan-1995 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.80 cmri system config set release_date '13-Jan-1995 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.81 cmri system config set release_date '16-Jan-1995 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.82 cmri system config set release_date '18-Jan-1995 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.83 cmri system config set release_date '22-Jan-1995 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.84 cmri system config set release_date '23-Jan-1995 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.85 cmri system config set release_date '27-Jan-1995 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.86 cmri system config set release_date '30-Jan-1995 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.87 cmri system config set release_date '31-Jan-1995 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.88 cmri system config set release_date '05-Feb-1995 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.89 cmri system config set release_date '08-Feb-1995 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.90 cmri system config set release_date '12-Feb-1995 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.91 cmri system config set release_date '15-Feb-1995 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.92 cmri system config set release_date '20-Feb-1995 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.93 cmri system config set release_date '22-Feb-1995 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.94 cmri system config set release_date '02-Mar-1995 00:00' --selection Linux_Kernel/Linux_Kernel-1.1.95

 

Note: If you are using the CodeMRI web server, run the ‘export_web_data’ job after setting all the release_date fields properly to update the views