(Complete Walker)コンプリートウォーカーとCMSの統合環境について
                (Complete Walker and CMS)

はじめに

CMS(Change Management System)はソースファイルの修正を管理するシステムの名前である。
2009年の開発名Complete Walker(cw)のためCMSに改善を行った。
今回初めて CMS の全体像と操作方法及びコマンドマニュアルを公開する。
CMSのインストールはLinuxのシステムにほとんど影響を与えない。
影響を与えるとすれば、CMSの稼働に必要なPDSソフトウェアの導入だけであろう。
また、CMSはコンピュータ間の転居が非常に簡単である。もしあなたのコンピュータが壊れてもCMS配下のディレクトリのバックアップがあれば、それを新しいコンピュータにコピーするだけですぐ稼働できるようになるだろう。
これはCMSがその配下のディレクトリ階層にソース管理の履歴と故障管理の履歴やログを保存しているためである。
但し、Complete Walkerの開発によってPostgreSQLとインターネットサーバーファイルの管理と、PostgreSQLのデータソースへのアクセスが統合されたことで、それらのファイルやDBはCMSの管理外となることに注意すべきである。


1.CMSとは

 CMS は故障管理とソースの修正管理及び修理記録管理を行うためのシステムです。
１６種類の機能をメニューで呼び出しながら使用するか、コマンドをタイプして行います。

2.CMS構成
		cw や cf はバージョン管理を行う cmsmenu というプログラムを実行出来ます。
		cf はそれ自体が cms 専用ファイラーです。
		'@'コマンドで cmsmenu を起動しバージョン/リビジョンの管理が行えます。
		cw と cf については cw.txt を御覧ください。

		さて、CMSが管理するディレクトリは以下のディレクトリになります。

		+cms
		  +bin				CMSのコマンド専用
		  +diff
		  | +lock			排他成制御用（各種制御用ファイルも含む）
		  | | +ase
		  | | +cms
		  | | +curlib01
		  | | +cw
		  | | +ftx
		  | | +libsubform
		  | +log			CMS操作の記録
		  | +tabs			各ソースの管理ファイル
		  | +mr				修正記録の管理
		  | | +ver_0
		  | | +ver_1
		  | | +ver_2
		  | | +ver_3
		  | | +ver_4
		  | | +ver_5
		  | | +ver_6
		  | | +ver_7
		  | | +ver_8
		  | | +ver_9
		  | +tr				故障記録の管理
		  | | +ver_0
		  | | +ver_1
		  | | +ver_2
		  | | +ver_3
		  | | +ver_4
		  | | +ver_5
		  | | +ver_6
		  | | +ver_7
		  | | +ver_8
		  | | +ver_9
		  | +ver_0			差分の管理(バージョン0〜9、リビジョン0〜99)
		  | +ver_1
		  | +ver_2
		  | +ver_3
		  | +ver_4
		  | +ver_5
		  | +ver_6
		  | +ver_7
		  | +ver_8
		  | +ver_9
		  +etc				FTXの管理ファイル等
		  +fusr				CMS ログインユーザ用（今回Complete Walkerが使用）
		  | | +ase			オートマチックサブフォームエディタ
		  | | +cms			CMSメニュー等のソースと cf のソース
		  | | +curlib01		wsubform用のユーティリティ関数等
		  | | +cw			コンプリートウォーカー本体
		  | | +ftx			FTPクラスライブラリ
		  | | +libsubform	DBグリッド＆サブフォームライブラリ
		  | +cms3-client	cms3のクラアントプログラム（JAVAで作成）
		  | | +actions
		  | | | +doc
		  | +cms3-server	cms3のサーバープログラム（Rubyで作成）
		  +musr				CMS ログインユーザ用（個人用）
		  | | +gun
		  | | +emi
		  | | +ono
		  +src				最新のソースファイル
		  | | +ase
		  | | +cms
		  | | +curlib01
		  | | +cw
		  | | +ftx
		  | | +libsubform
		  +man				各開発システムのマニュアル等
		  | | +ase
		  | | +cms
		  | | +curlib01
		  | | +cw
		  | | +ftx
		  | | +libsubform
		  +doc				CMS自身ののマニュアルとドキュメント
		  +lib				kterm & teraerm 用の端末制御ファイルソース
		  | | +terminfo		kterm & teraerm 用の端末制御ファイル
		  +siten			バージョン起点のソースファイル
		  | | +ase
		  | | +cms
		  | | +curlib01
		  | | +cw
		  | | +ftx
		  | | +libsubform
		  +sub				submitされたファイル
		  +tmp				テンポラリディレクトリ


3.~/cms/diff 配下のファイル及びディレクトリの説明

.profile					.profile の見本
.profile-kterm-wsubform		kterm 用の .profile の見本
.profile-teraterm-wsubform	teraterm 用の .profile の見本
catlog			修正記録の見本ファイル
cmstab			テーブルファイル
cmssetq			CMSログイン時に使用するキューID及びログインシェルを指定
cmsworks		CMSログイン用ファイル
lock/			排他制御用ディレクトリ
log/			GETやPUTの履歴を保存するディレクトリ
mr/				故障記録の履歴を保存するディレクトリ
mrcsv.sed		MR(Modify Register)をCSVOUTするときに使用するフィルタ
tabs/			ユーザテーブルファイルの保存するディレクトリ
mr/mrformat		ＭＲ（修正記録）の見本フォーマット
trcsv.sed		TR(Trouble Recorder)をCSVOUTするときに使用するフィルタ
mr/trformat		ＴＲ（故障記録）の見本フォーマット
userfile		CMSログイン後に使用できるシステムのuserID（fusr/配下名と同一）

sampletab		サンプルのテーブルファイル
uftab			テーブルファイル
ver_0/			修正管理 Version 0 Revision 0 - 99 を管理する
ver_1/			修正管理 Version 1 Revision 0 - 99 を管理する
ver_2/			修正管理 Version 2 Revision 0 - 99 を管理する
ver_3/			修正管理 Version 3 Revision 0 - 99 を管理する
ver_4/			修正管理 Version 4 Revision 0 - 99 を管理する
ver_5/			修正管理 Version 5 Revision 0 - 99 を管理する
ver_6/			修正管理 Version 6 Revision 0 - 99 を管理する
ver_7/			修正管理 Version 7 Revision 0 - 99 を管理する
ver_8/			修正管理 Version 8 Revision 0 - 99 を管理する
ver_9/			修正管理 Version 9 Revision 0 - 99 を管理する

その他端末制御ソースファイルが lib ディレクトリの下にあります。

	keterm-wsubform はLinux 上の kterm で使用します。

	teraterm-wsubform は Windows から通信ソフト TeraTerm で使用します。k

	設定方法(TerTerm の場合)

	$ export TERMINFO=${CMSPATH}/lib/terminfo

	$ tic teraterm-wsubform


4.CMS login方法

1)Teraterm を起動し、cms でloginします。

以下のようにタイプします。
$ cms ono

[注意事項]
なお、Teraterm の文字コード設定はUTF-8にしてください。
これは、CMS のソースコードの日本語は全てUTF-8 の環境で記述されているためです。
EUC または Shift-JIS コードでの表示を行いたい場合は後術の fconv.ksh または cwファイラの 'f' 'F' '' キー命令でソースコードの変換を行って再コンパイルしてください。


他のユーザは仮に以下になっています。メンバーは256人まで追加可能です。
admin
cms
gun
emi
ono


2)loginメニュー

担当のシステムを表示するloginメニューが表示されます。
矢印キーか j or k のキーで上下し、担当システム名を選択。

各ワークディレクトリの .profile によって開発システム毎の環境設定が行われ、cmsset'q' ファイルに指定したシェルがワークディレクトリ上で起動されます。
環境設定ファイルは KSH 用の .profile になっています。これについては後で説明します。

自分の担当システムが増えた場合は以下のファイルを編集し、新しいシステム名を入力してください。
担当者が増えた場合は [ ] の中にその人のcms-login名を入力し、その下にシステム名を入れる。

$ cd  /home/diff

$ cat  /home/diff/cmsworks

[admin]
cms
[cms]
uf
cw
ftx
ase
cms
tcp
listbox
SchCtl
Apscheduler
Comunicater
Executer
Ritrictor
curlib01
libsubform
javatest
test
bowmoon
ack
[ono]
LogCtl

このファイルは [ ] で囲まれたところがcms-login名となります。
[ ] で囲まれたところから次の[ ] で囲まれたところまでが自分の担当するシステム名（CMSユーザ名）になります。


5.CMS-login環境設定ファイル

＜login-queID 設定＞
CMSではloginをIPCキューを使用して管理します。
また、cms-login 時起動するシェルを設定出来ます。
各フィールドはセミコロンで区切られ、以下の意味になります。

第１フィールド
　cms-login 名
第２フィールド
　IPCキューＩＤ
第３フィールド
　実行シェル
弟４フィールド
　メモ

「例」
cms;30001;/usr/bin/ksh;/home/cms/fusr/cms;ＣＭＳソース変更専用
admin;30001;/usr/local/bin/cw;/home/cms/fusr/LogCtl;administraor専用
emi;30001;/usr/bin/ksh;/home/cms/musr/emi;
gun;30001;/bin/sh;/home/cms/musr/gun;
ono;30001;/bin/bash;/home/cms/musr/ono;小野

最後のフィードはコメントになっています。

＜CMS-login 環境設定＞
CMSの個別ディレクトリ /fusr 配下のディレクトリにcms-loginする時、.profile が　ksh によって実行されます。
.profile はCMS のインストールの各ユーザ作成時に自動的にそのスケルトンが /home/cms/fusr/(cms-login-name) にコピーされます。

.profile の内容

$ cat .profile

[例:以下はJAVAで開発する場合のKSH用 .profile]
-------------------------------------------------------------------------------
CMSPATH=/home/cms
if [ ! -d ${CMSPATH} ]
then
	../../bin/errmsg "ディレクトリ構成が変わりました。.profile を修正して下さい。"
	exit
fi
PATH=".:/bin:/usr/bin:/usr/local/bin:${CMSPATH}/bin"
HOME="${CMSPATH}/fusr/javatest"
TMP=/tmp
TZ=JST-9
SHELL=/bin/ksh
TERM=kterm-wsubform
TERMINFO=/home/cms/lib
TERMCAP=/usr/lib
MAN=/usr/man
EXINIT=":source ${CMSPATH}/.exrc"
VISUAL=vi
PAGER=more

PS1=">javatest>> !> "
PS2=">> "
HISTFILE="${HOME}/.history.javatest"
HISTSIZE=2048
CDPATH=":/:/fusr"

#set CMS environment
SYSNAME=javatest
TABFILE=javatesttab
EDITOR=vi
KEIVER=1
MREDITOR=vi

export CMSPATH
export PATH
export SYSNAME
export TABFILE
export EDITOR
export KEIVER
export MREDITOR

CMS_SYSNAME=$SYSNAME
CMS_TABFILE=$TABFILE
CMS_USERNAME=javatest
CMS_EDITOR=vi
CMS_VERSION=$KEIVER
CMS_CALENDAR=${CMSPATH}/fusr/calendar
CMS_QUEID=`awk 'BEGIN {FS=";"} /^'$CMS_LOGNAME'/ {print $2}' $CMSPATH/diff/cmssetq`

export HOME
export TMP
export TZ
export SHELL
export TERM
export TERMCAP
export TERMINFO
export MAN
export EXINIT
export VISUAL
export PAGER

export PS1
export PS2
export HISTFILE
export HISTSIZE
export CDPATH

export CMS_SYSNAME
export CMS_TABFILE
export CMS_USERNAME
export CMS_EDITOR
export CMS_VERSION
export CMS_CALENDAR
export CMS_QUEID

#set JAVA environment
export LD_LIBRARY_PATH=.
export JAVA_PATH=/usr/local/j2sdk
export JAVA_HOME=/usr/local/j2sdk
#export CLASSPATH=".:$JAVA_HOME/bin/jar:/usr/share/tomcat5/common/lib/servlet-api.jar"

#set Tomcat connector einvironments
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/apache22/modules
export LD_RUN_PATH=${LD_LIBRARY_PATH}

#set ANT environments
export ANT_HOME=/usr/local/ant

#set CATALINA environments
export CATALINA_BASE=/usr/local/tomcat-5.5.27
export CATALINA_HOME=/usr/local/tomcat-5.5.27

#Tomcat-servlet & MySql-4.1 & PostgreSQL-7.4 & PostgreSQL-8.3
export CLASSPATH=.:$CATALINA_HOME/common/lib/servlet-api.jar:/usr/local/mysql/mysql-connector-java-3.1.14-bin.jar:/opt/PostgreSQL/pgJDBC/postgresql-8.3-604.jdbc3.jar:/opt/PostgreSQL/pgJDBC/postgresql-8.3-604.jdbc4.jar:/usr/local/postgresql745.jar

export JRE_HOME=/usr/local/j2sdk/jre

#set OpenSSL environments
export SSL_HOME=/usr/local/ssl

#set MYSQL environments
export MYSQL_HOME=/usr/local/mysql

#set PostgreSQL-8.3.7 environments
export PGSQL_HOME=/opt/PostgreSQL/8.3

#for PostgreSQL-7.4.5 & MySql-4.1
export PATH=".:$JAVA_HOME:$CATALINA_HOME/bin:$JRE_HOME/bin:$ANT_HOME/bin:$SSL_HOME/bin:$MYSQL_HOME/bin:$PATH"

LANG=ja_JP.UTF-8
export LANG
alias vi='vim'

-------------------------------------------------------------------------------

ディレクトリ構成が変わった場合には、最初の行にある CMSPATH を変更することで対応します。
また、KSH以外のSHELL を利用したい場合は環境変数を変更しないで上記サンプルに合わせてください。

＜musr 配下のユーザディレクトリ＞
/musr 配下の個人用ディレクトリは、1つのソースファイルを複数の開発者が交互に記述するためのディレクトリです。
ここでは排他制御を利用してリビジョンを管理します。
ここでの開発は、cmsmenu コマンドか cf（CMSファイラー）の利用で行います。
慣れない場合は cmsmenu からの利用を推奨します。
cmsmenu の使用方法は後述します。


＜CMSユーザ名ファイル＞
/home/cms/diff の下にある userfile にはCMSに登録した全てのCMSユーザ名（ディレクトリ名）を記入します。これは /home/cms/fusr 配下のcms-login ディレクトリ名と同じになります。

$ cat userfile

cms
uf
SchCtl
Apscheduler
Comunicater
Executer
Ritrictor
libsubform
curlib01
ase
javatest
tcp
ftx
listbox
cw
gun
emi
ono


＜CMSで管理可能なファイルの種類＞
CMS管理するファイルはテキストファイルに限定されています。
以下の拡張子を持つファイル名だけが管理可能となります。
追加する場合は、新規の拡張子を /home/cms/bin/suffixes.sed に追加してください。

.c
.cpp
.h
.cc
.pc
.pcc
.pgc
.y
.l
.s
.p
.f
.C
.Y
.L
.L
.F
.S
.sh
.ksh
.csh
.bash
.awk
.sed
.roff
.rtf
.pl
.perl
.mod
.ln
.sym
.cps
.def
.mk
.mak
.sql
.txt
.doc
.tab
.ps
.pdf
.me
.ini
.INI
.INF
.org
.java
.js
.cf
.jsp
.xml
.html
.htm
.css
.php
.php4
.php5
.rb
.tcl
.py



6.CMSへのユーザ登録方法

まず、/home/cms/fusr の下にuserfile に登録したユーザ名と同じ名前のディレクトリを作成します。
次に/home/cms/fusr/ユーザ名(cms-login-name)に開発中のソースファイルを全てコピーします。


次に、（ユーザ名）tab という名前のファイルを新規作成します。

＜例１＞
$ cat cwtab

makefile
filer.cc
comcurses.cc
dtree.cc
filertool.cc
ase.cc
filer.h
ftx.h

階層化も出来るのでその場合は以下のように記述します。
ディレクトリの階層も以下のようになっていなければなりません。

＜例２＞
$ cat cwtab

makefile
main/filer.cc
main/comcurses.cc
main/dtree.cc
main/filertool.cc
main/filer.h
main/ftx.h
ase/ase.cc

このように階層化も出来ますが、CMSコマンド get.ksh 及び、 put.ksh はcms-loginディレクトリで行う必要があります。

次に、cms-login予定のディレクトリ（システム名のディレクトリ）で以下のコマンドをタイプします。

$ ../../bin/mkbase.ksh

問い合わせには以下のように入力します。

作成するシステム名を入力:M201（例）

作成するバージョンを入力[0 - 9]:1


[注意事項]
mkbase.ksh はカレントディレクトリのソースファイルを /home/cms/siten/(cms-login-name) と /home/cms/src/(cms-login-name) にコピーします。
もし、カレントディレクトリに .profile が無い場合は mkbase.ksh 実行時 /home/diff/.profile のXXX と言う文字がcms-loginディレクトリ名に置換され、入力したバージョン番号と共に cms-login ディレクトリにコピーされます。

[注意事項]
CMS は基本的に SH と KSH で動作します。そのため、fusr 配下の全てのシステムユーザディレクトリは .profile であるあことが必要です。
musr 配下の個人ユーザディレクトリでは .bsh_profile も利用出来ます。
※ CMS は CSH には対応しておりませんので注意をお願いします。

次に、CMSにloginを行います。
以下のようにコマンドに自分のログオン名を続けてタイプします。

$ cms ono

選択メニューボックスが表示されるので、任意のシステムを選択します。

cms-loginディレクトリ（システム名）上でcmssetq に指定したシェルが起動。

次に以下のコマンドをタイプします。

$ mkcms.ksh

mkcms.ksh は(cms-login-name)tabのテーブルファイルに記述された全てのソースファイルのバージョン／リビジョン管理を行えるようにするコマンドです。

最後に、musr 配下に個人用ディレクトリを作成します。

$ cd /home/cms/musr

$ mkdir gun

共同開発するためのテーブルファイルを fusr 配下のディレクトリから個人用ディレクトリにコピーします。

$ cp ../../fusr/ftx/ftxtab .

ついでにプロファイルもコピーします。

$ cp ../../fusr/ftx/.profile .

プロファイルは基本的な変更箇所は以下の部分になります。

HOME="${CMSPATH}/fusr/ftx"
PS1=">ftx>> !> "
HISTFILE="${HOME}/.history.ftx"

HOME="${CMSPATH}/musr/gun"
PS1=">cms-gun>> !> "
HISTFILE="${HOME}/.history.gun"


以上でCMSへの登録は終了です。
以後 cw からはコマンド @ で、シェル画面からは cmsmenu とタイプするとCMSメニューが呼び出され、リビジョン管理、MR管理等が行えます。
なお、一般ユーザ（/home 配下のディレクトリのユーザ）からも CMS の一部の機能を利用出来ます。それについては次の章で説明します。


7.CMSメニューの使用方法

	a. GETの実行		　	　　　最新のファイルを呼び出します。
	b. PUTの実行			　　　修正差分を保存し、新規リビジョンの登録を行います。
	c. PUT履歴の編集		　　　修正記録を再編集します。
	d. リビジョンの呼び出し		　以前のリビジョン番号から任意のファイルを呼び出します。
	e. ＭＲの編集			　　　ＭＲ（修正記録）を再編集します。
	f. ＭＲの登録			　　　ＭＲ（修正記録）を新規登録します。
	g. GETの取り消し		　　　再度ＧＥＴが出来ます。
	h. GET履歴の表示		　　　ＧＥＴされたファイルの日付を表示します。
	i. PUT履歴の表示　　　　　　　ＰＵＴされたファイルの日付を表示します。
	j. MAKE　　　　　　　　　　　　make コマンドを実行します。
	k. ソースの編集			　　　ファイルの編集を行います。
	l. TRのレポート 　　　　　　　ＴＲ（故障記録）を編集します。
	m. TRの登録　　　　　　　　　 ＴＲ（故障記録）を新規登録します。
	n. CMSへファイルの登録		　新規ファイルを CMS へ登録します。
	o. CMSテーブルファイルの編集　新規ファイルをテーブルファイルに登録します。
	p. 故障記録のレポート		　ＴＲを表示します。
	q. ＭＲの削除			　　　ＭＲ（修正記録）の削除を行います。
	r. リビジョンの削除		　　　任意のリビジョンを削除します。
	s. SUBMITの実行			　　　修正作業が完了したときだけ実行します。


メニューの説明

a)GETの実行
get.ksh を実行し、最新のファイルをログインディレクトリに持ってきます。
なお、GETしたファイルを不注意に削除してしまった場合は、get.ksh と unget.ksh 使用出来なくなるため、vget.ksh で最も新しいリビジョンのファイルを呼び出してください。

b)PUTの実行
put.ksh を実行し、基点ソース（~/cms/siten 配下）と現在のソースとの差分を登録します。
また、putolog.ksh を起動し、修正の詳細を記録します。
CMSのバージョン管理は0〜9までに制限してありますが、基点のソースファイルとの差分が増える毎に差分ファイルの容量が増加してきます。これはCMSの差分登録が基点ソースとの差分を保存するためです。
ソースファイルの最終変更完了コマンドは submit.ksh になります。
submit.ksh はソースファイルの以後の変更を出来なくします。


c)PUT履歴の編集
put.ksh 実行時に記録したソース修正記録を再編集します。リビジョン毎に選択できます。

d)リビジョンの呼び出し
vget.ksh を実行し、ソースファイルの任意のリビジョンをカレントディレクトリに持ってきます。
このコマンドを実行すると過去のソースファイルの状態に戻るため注意してください。

e)ＭＲの編集
　mredit.ksh を実行し、ＭＲ（故障記録票）の編集を行います。ＭＲは000から999 または英数字のいずれか記録できます。


f)ＭＲの登録
　mr.ksh を実行し、ＭＲ（修正記録票）の登録を行います。ＭＲは000から999 または英数字のいずれか記録できます。


g)GETの取り消し
unget.ksh を実行し、直前に実行した get.ksh をキャンセルします。
ＧＥＴ及びＰＵＴ，ＵＮＧＥＴの実行記録は CMS によってログ保存されます。

h)GET履歴の表示
ログ保存されたＧＥＴ、ＵＮＧＥＴの履歴を表示します。

i)PUT履歴の表示
ログ保存されたＰＵＴの履歴を表示します。

j)MAKE
make コマンドをファイル名の拡張子を除いた指定で実行します。
そのため、Makefile のコンパイル指定も以下のように指定する必要があります。

cmsmenu : $(OBJ)/cmsmenu.o
	$(CC) $(CFLAGS) $(OBJ)/cmsmenu.c -o $@ -lncursesw


k)ソースの編集
環境変数 EDITOR に設定されたエディタ名でソースファイルを編集します。CMS-loginディレクトリで作業します。

l)TRの編集
trset.ksh を実行し、ＭＲ登録時作成されたＴＲへ故障の詳細情報を記録します。
これは後に説明する「故障管理」で使用するデータをＣＳＶ形式でテキストアウトするための機能です。
実際には「故障管理」で使用する故障管理データベース上で作業した方が便利です。

m)TRの登録
　tr.ksh を実行し、ＴＲ（故障記録票）の登録を行います。ＴＲは000から999 または英数字のいずれか記録できます。

n)CMSへファイルの登録
newfile.ksh を実行し、新しく作成したソースファイルをCMSに登録します。
このとき、テーブルファイル S233 の場合は S233tab を編集してファイル名を追加します。
テーブルファイルの追加は o)CMSテーブルファイルの編集　で行います。

o)CMSテーブルファイルの編集
tabchg.ksh を実行してログオンディレクトリのテーブルファイルを編集します。
編集が終了すると、 CMS に登録するかどうか聞いてきます。

p)故障記録のレポート
mrreport.ksh を実行し、ＭＲ記録を閲覧します。

q)MRの削除
rejectmr.ksh を実行し、任意のＭＲ記録を削除します。
この時、ＴＲにはＭＲの削除理由を記録し履歴保存しておきます。（故障管理の履歴はＴＲに永久保存されることになります。）

r)リビジョンの削除
reject.ksh を実行し、任意のソースファイルの差分を削除します。

s)SUBMITの実行
ひとつの機能追加や故障修理が終了した場合、対象のソースをＭＢ番管の管理する場所に戻し、自分も含めたあらゆるユーザから保護する必要があります。
ＳＵＢＭＩＴコマンドは、そのひとつ前まで実行します。
ＳＵＢＭＩＴフラグを解除するには ~/cms/diff/lock 配下の lkfile[0-9] の中に書き込まれている "submit"の文字を消去します。
なお、SUBMIT コマンドの転送先は以下になります。
~cms/sub/ver_[ 0 - 9]/（システム名）

[注意事項]
但し、submit.ksh は起点ソースの同期を更新しませんので、手作業になりますが、元の編集可能状態に戻すことが可能です。
戻す場合は以下のファイルを編集してください。

/home/cms/diff/lock/ユーザ名/ソースファイル名/lkfile(version)

このファイルの中の 'submit' と書かれている行を削除します。
（このファイルを削除してはいけません）

COMMITについて
commit.ksh というコマンドはsubmitの後に実行することの出来る最後のコマンドです。
commit.ksh は最重要なコマンドで最終的な実行コマンドなので cmsmenu からは実行出来ません。手作業でタイプしてください。

$ commit.ksh filename username version

commit.ksh は起点ソースと最新ソースとの同期を一致化します。
そのため、commit.ksh を実行すると古いソースファイルは最新のソースファイルい上書きされ、これまでの差分は全て無効となります。
つまり、新しいバージョンとして再出発ということになります。
新しいバージョンで開発を開始する場合は .profile の KEIVER=1 を 例えば、KEIVER=2 とし、再度cms-login を行ってください。

[注意事項]
COMMITを実行してしまってから元に戻ることは出来ません。必ず新しいバージョンで操作をしてください。


※  cms コマンドは各既存コンピュータのバージョン管理構成に左右されます。
　もし、ディレクトリ構成に変化があった場合、cms コマンドはエラー表示を行い、どうしたら良いのかを教えてくれます。


＜＜参考＞＞
cms sample とするとサンプルのファイルで CMS を体験出来ます。


＜外部ユーザからの利用＞
cmsmenu にある GET コマンドのみが一般ユーザから利用出来ます。
但し、リビジョン管理、排他制御は行われません。
cf からの利用も可能になっていますが、cf から利用する場合、環境変数 CMS_USERNAME を元のシステム名に設定しておいてください。


<補足事項１>　コマンドリファレンス


    GET(0)                  ソースファイルの呼出


    名前
    　　get.ksh

    使用法
    　　get.ksh (source-file-name) (user-name) (version-number)

    概要
        　get は最新のソースコードを取り出します。
    　　　get はソースコードに新たな修正を加えるときに限って使用します。
    　　　get が使用するパラメータには、呼び出すソースファイル名、修正者名、
    　　バージョン番号があります。どれかが抜けていても  get は動作を行ないま
    　　せん。
        　get が使用出来るのはユーザのホームディレクトリにある XXXtab に記述
        された構成のディレクトリだけです。
        他のディレクトリに呼び出したい場合は vget コマンドを使用します。
    　　　現在 CMS ではバージョンを９バージョンまで、リビジョンを０〜９９ま
    　　で登録可能になっていますので、それを念頭に使用してください。

    関連項目
    　　put(0) vget(0) mr(0) mrreport(0) verlock(0)
~


    PUT(0)                  ソースファイルの登録


    名前

    　　put.ksh

    使用法

    　　put.ksh (source-file-name) (user-name) (version-number)

    概要

    　　　put は getによって呼ばれたファイルのソースコードに修正を加え、コン
    　　パイルを行ない、すべてのエラーが解消され、テスト可能になった場合に
        限って使用します。
        put によって登録したソースファイルへの修正を中止するとき、
        または差分の削除を行なうには、rejectコマンドのみを使用してください。
    　　　put が使用するパラメータには、修正したソースファイル名、修正者名、
    　　バージョン番号があります。どれかが抜けていても  put は正しい動作を行
    　　ないません。
    　　　呼び出したソースファイル名は勝手に変更してはいけません。変更する場
    　　合及び、新規にファイルを登録する時は、newfile コマンドを使用し、ｍａ
        ｋｅｆｉｌｅの修正も行なわなければなりません。又、修正登録するとき、
        登録修正者名は CMS 管理者から与えられた名前となります。

    　　　putによる修正登録をすると、ソースファイルはカレントディレクトリから
        削除されることに注意してください。
    　　　put はファイルの修正登録時同時にバージョン毎にリビジョン、及び修正
    　　者の情報を記録します。それぞれのバージョン及び、リビジョンの記録は
    　　putlog コマンドによって確認することが出来ます。各バージョン及びリビジョ
    　　ンの取り出しには、vgetコマンドを使用します。
    　　　現在 CMS ではバージョンを９バージョンまで、リビジョンを０〜９９ま
    　　で登録可能になっていますので、それを念頭に使用してください。
    　　　ＭＲ番号の登録を行なっていない場合でも、put は使用可能です。

    関連項目

    　　get(0) vget(0) mr(0) mrreport(0) reject(0)


    VGET(0)     　      バージョン及びリビジョンの呼出


    名前
    　　vget.ksh

    使用法
    　　vget.ksh (file-name) (user-name) (version-number) (revision-number)

    概要
    　　vget は過去のバージョン及び、リビジョンを復活させる時に使用します。
    　　vgetで呼び出したファイルはバージョンの基点 Ver1.0とvgetによって指定し
    　　たバージョンとの差分を元に作成されています。vgetによって呼び出したファ
    　　イルは rm コマンドによって削除してもかまいません。
    　　　vgetはバージョン毎に何度でもファイルを呼び出すことが出来ます。


    関連項目
    　　put(0) get(0) mr(0) putlog(0) verlock(0)



    NEWFILE(0)              新しいソースファイルの登録


    名前

    　　newfile.ksh

    使用法

    　　newfile.ksh (source-file-name) (user-name) (version-number)

    概要

    　　　newfile はソースファイルを新しく作成し、 CMS に登録するときだけ使
    　　用します。newfile を使用するとき、カレントディレクトリに新しいソース
    　　ファイルがなければなりません。
    　　~/cms/diff のテーブルファイルへ登録を行い、newfile コマンドを実行します~
。

        ソースファイルは環境変数 $KEIVER の値を使用してバージョン登録されます。
        登録されたファイルは getコマンドによっていつでも呼出しが可能となります。

    関連項目

    　　put(0) vget(0) mr(0) report(0) listfile(0) verlock(0)



    UNGET(0)         最新ソースファイル呼出しの取り消し

    名前
    　　unget.ksh

    使用法
    　　unget.ksh (source-file-name) (user-name) (version-number)

    概要

    　unget コマンドは get で呼び出したソースファイルの取り消しを行います。
    　get コマンドは put コマンドと対で使用しなければなりません。
    　unget を使用することで get の呼び出しをキャンセルすることが出来ます。
    　get コマンドが呼び出したファイルを rm 等により削除してしまうと
    　unget 出来なくなるので注意してください。その場合は vget コマンドで
    　一旦ソースを元のディレクトリに呼び出してから unget を行ってください。
    　


    関連項目
    　　put(0) get(0) vget(0) verlock(0)


    PUTLOG(0)     　          ログファイルの編集


    名前
    　　putlog.ksh

    使用法
    　　putlog.ksh (file-name) (user-name) (version-number) (revision-number)

    概要
    　　putlog は過去の put 実行時の修正記録を編集します。
    　　編集には vi エディタを使用します。


    関連項目
    　　put(0) get(0) mr(0) mredit(0)



    MR(0)          故障管理及びファイル修正時の記録


    名前

    　　mr.ksh

    使用法

    　　mr.ksh (MR-number) (user-name) (version-number)

    概要

    　　　MRは CMS 上におけるアプリケーション開発時の故障処理や修正毎に発行する
    　　修正記録(Modify Register)の略称です。
    　　　 CMS では開発者が修正時に記述する記録を、このＭＲ番号で管理します。
    　    MRは環境変数 EDITOR を参照して EDITOR の内容のエディタを呼び出しま
    　　す。
    　　　MRの呼び出すファイルにはあらかじめ故障処理の為のフォーマットが登録
    　　されていますので、内容を記述するだけになっています。

    関連項目

    　　put(0) get(0) mrreport(0) verlock(0)


    MREDIT(0)               ＭＲファイルの編集


    名前

    　　mredit.ksh

    使用法

    　　mredit.ksh (MR-number) (user-name) (version-number)


    概要

    　　　mredit　は環境変数 EDITOR を参照して EDITOR の内容のエディタを呼び
    　　出します。
    　　　エディタには vi か ed を選ぶことが出来ます。mrの呼び出すファ
    　　イルにはあらかじめ故障処理用のフォーマットが組んであり、統一して記述
    　　することが出来ます。


    関連項目

    　　put(0) putlog(0) get(0) verlock(0) mr(0)


    MRREPORT(0)             機能追加及びファイル修正時の記録


    名前

    　　mrreport.ksh

    使用法

    　　mrreport.ksh [ -a -s ] (MR-number) (user-name) (version-number)

    概要

    　　mrreportは過去における修正記録の履歴を報告します。但し、ＭＲ登録をし
    　　てあるリビジョンに限ります。これらの修正記録はプログラムの各開発者及
    　　び、修正者が個々に記述したものなので、ＭＲ記録の修正を行ないたい時は
    　　mreditコマンドを利用してください。

    関連項目

    　　put(0) get(0) vget(0) mrreport(0) verlock(0) mredit(0)



    VERLOCK(0)        ファイル重複アクセスの防止


    名前

    　　verlock.ksh

    使用法

    　　verlock.ksh [ -l -r -s ] (file-name) (version-number)

    概要

    　　verlock は同一ファイルへのアクセスの重複を防止します。
    　　あるファイルのバージョンはユーザ任意の取りだしが可能ですが、get コマ
    　　ンドを使用すると自動的にこの verlock コマンドを起動して、その取り出し
    　　たファイルに他のユーザがアクセス出来ないようガードをかけます。そして
    　　そのファイルは put  コマンドを使用して CMS に戻し登録をしない限り、
    　　他のユーザは get コマンドを使用して取り出すことが出来ません。

    　　-l　引数で指定したファイルにロックをかけます。

    　　-r　引数で指定したファイルのロックを解除します。

    　　-s　引数で指定したファイルに submit フラグを立てます。

    関連項目

    　　put(0) submit(0) get(0) mr(0) mredit(0) mkver(0)
~
~

    SUBMIT(0)             ソースファイルの修正完了登録


    名前

    　　submit.ksh

    使用法

    　　submit (source-file-name) (user-name) (version-number)

    概要

        submit は getによって呼ばれたファイルのソースコードに修正が完了し
        た場合だけ使用します。
        このときソースコードは最後の修正版だけが ~/cms/sub/ver_[1-9]
        にコピーされます。
        これ以降 get vget put コマンドは submit されたファイルに対して使用
        不可になります。

    関連項目

    　　put(0) get(0) vget(0) mr(0) mrreport(0) reject(0)


CMS起動コマンドの内容

参考のため以下にCMS起動コマンドの中身を例示します。
このコマンドはShellスクリプトで記述されています。

$ cat /home/bin/cms

#!/bin/sh

case $# in
1);;
*) exit;;
esac

#リリースやバージョンが変更になった場合ここを修正してください。
#RelDir=home
#VerDir=QS.01.001.00

#例
#UserDir=/home3/system/${RelDir}/${VerDir}/WORK/cms/fusr
#DiffDir=/home3/system/${RelDir}/${VerDir}/WORK/cms/diff
#BinDir=/home3/system/${RelDir}/${VerDir}/WORK/cms/bin

UserDir=/home/cms/fusr
UserDir2=/home/cms/musr
DiffDir=/home/cms/diff
BinDir=/home/cms/bin

<CMS起動コマンド>
CMS にログインするにはまず、一般ユーザとして cms を /etc/passwd に追加します。
次に、他のユーザも（個人ユーザ）も追加します。
この時、group-ID は cms と同じにします。
/home/cms となります。
プロファイルは /home/cms/diff/ の下にあるサンプルの .profile を使用します。
このプロファイルは PATH だけ必ず /bin /usr/bin /home/cms/bin を参照するようにしてください。
後は、cms コマンドが全てを行います。以下に cms コマンドの実行を簡単に説明します。

＜cms コマンドの実行＞
cms コマンドは以下のように実行します。

$ cms (ユーザ名　又は　システム名)


これは CMS 上位のツリー構造が変わった場合のメッセージです。
if [ ! -d ${UserDir} ]
then
	echo "ディレクトリ構成が変わりました。/home/bin/cms を修正して下さい。"
	exit
fi

ここでループに入ります。
while true
do
chmod 444 ${DiffDir}/cmsworks
ユーザの一覧を作成します。
Userworks=`cat ${DiffDir}/cmsworks | sed -n '/\['$1'\]/,/\[/p' | sed 's/\[.*//' | sed '/^$/d'`

ユーザが無い場合は終了します。
if [ x"$Userworks" = x"" ]
then
	chmod 644 ${DiffDir}/cmsworks
	exit
else
コマンドの引数はログネームとなります。
	if [ x"${CMS_LOGNAME}" = x"" ]
	then
		CMS_LOGNAME=`echo $1 | awk '{print $1}'`
	fi
	cmssetq ファイルの内容で使うキューIDを設定します。
	if [ x"$CMS_QUEID" = x"" ]
	then
		CMS_QUEID=`awk 'BEGIN {FS=";"} /^'$CMS_LOGNAME'/ {print $2}' ${DiffDir}/cmssetq`
	fi
	ipcs コマンドの16進数のIDをキューに設定します。
	Hex=`printf %x $CMS_QUEID`
	Qhex=`ipcs -q | grep $Hex | awk '{print $2}'`

	リストボックスにユーザ名を表示します。
	リストボックスは 'q' で終了します。
	cmslistbox $Userworks $1
	if [ $? = 255 ]
	then
		chmod 644 ${DiffDir}/cmsworks
		exit
	fi
	stty echo onlcr

	#キューの設定はここで行います。システムにあわせて変更してください。
	if [ x"${CMS_QUEID}" = x"" ]
	then
		echo "Error!!"
		exit
	else
		fmusrname=`cmsctl -r ${CMS_QUEID} | awk '{print $1}'`
	fi

	export CMS_LOGNAME=$1

	cmssetq の4番めのフィールドの内容を CMS_HOMEDIR にいれます。
	CMS_HOMEDIR=`awk 'BEGIN {FS=";"} /^'${fmusrname}'/ {print $4}' ${DiffDir}/cmssetq`
	CMS_HOMEDIR の内容と一致するディレクトリが存在した場合はそのディレクトリの
	profile を実行します。
	if [ -d ${CMS_HOMEDIR} ]
	then
		cd ${CMS_HOMEDIR}
		if [ -f .profile ]
		then
		. .profile
		fi
		cmssetq の3番目のフィールドの内容にあるシェルを実行します。
		CMS_SHELL=`awk 'BEGIN {FS=";"} /^'$CMS_LOGNAME'/ {print $3}' ${DiffDir}/cmssetq`
		$CMS_SHELL
	fi
fi
chmod 644 ${DiffDir}/cmsworks
done


<補足事項３>その他のプログラム

shmctrl の使用方法

　shmctrl [ -c shm-id shm-size ] [ -u shm-id file-name ] [ -r shm-id ]

	-c はメモリの確保　キーとサイズを指定する

	-u はメモリへの書き込み　キーとファイルを指定する（バイナリファイルもOK）

	-r はメモリからの読み出し。キーを指定する。

cmsctrl の使用方法

　cmsctrl [ -s que-id "string" ] [ -r que-id ]

	-s はキューの送信　キーと内容をパラメータに直接指定する

	-r はキューからの読み出し。キーを指定する。

inpmsg
　入力用ウインドウ
　inpmsg "メッセージ文字" "input string"

listbox
　cmsctrl の s オプションを利用して CMS ウィンドウ間でメッセージを交換します。

　実際の内容は以下の通りです。
　cmsctrl -s "キューＩＤ" "送信文字" "cms-login-name"

manconv.ksh
　UNIX nroffフォーマットファイル内の余計なエスケープシーケンスを取り除きます。

mkdir2
　深い構造のディレクトリ階層を一発で作成。
　mkdir2 /yama/kawa/umi/sora

popmsg
　ユーザに選択を促すメッセージをウインドウ表示します。Y か N で終了します。
　Y の場合はリターンコードに　１　を返します。
　popmsg "メッセージ文字"

dialogmsg
  入力の無いメッセージです。常に終了します。
　dialogmsg "メッセージ文字"

errmsg
  現在の状況を報告するメッセージです。全てのキータッチで終了します。
　errmsg "メッセージ文字"

inpmsg
　ユーザに入力を促すメッセージをウインドウ表示します。Enterで終了します。
　inpmsg "設定する環境変数名" "環境変数に入力する文字列"

tabchg.ksh
　テーブルファイルの変更と更新を行うコマンドです。


9.参考文献
Complete Walker and CMS を開発するにあたって参考にした文献は以下になります。

ＵＮＩＸプログラミング環境
ボブ・パイク/ブライアン・カーニハン著

ＫＳＨ入門
デビッド・コーン著


10.作者後書

CMS を私がはじめて使いだしてもう20年以上の年月が流れた。
最初は UNIXコンピュータ、次にMS-DOSやNetWareに移植してみたりと、Windows以外のOSに乗っけて自分の記述したソースコードや文書の管理に使用してきた。
今回、もう古くさいかもしれないこのシステムを公開することには若干のためらいもあったが、私が15年ぶりに C++ を使用して作った Complete Walker というプログラムを世間様に紹介するにはどうしても CMS の存在が必要になったのである。
そういうわで、拙作恥ずかしながらこの CMS を加えて、また、C++ のクラスライブラリなるものも、クラスライブラリを初めて作った自分としての未熟をあえて公開することになるのは、今回のこれらのプログラムに対する御意見、御指摘、御指南等をいただければ幸いで、無視されるのではないかと非常に恐れている。
なお、いつものことながら、CMS をはじめとするプログラムを利用して、問題が生じたとしても作者は何の責任も負わないこととするので十分注意して利用してほしい。
今回一部のソースコードはオープンに出来なかった。それは原本が私以外の作者であることと、私がもう少し管理して熟成した方が良いと思われる2つのファイルである。
いつか、その2つのファイルを公開する時があればと思っている。
2009年7月28日
著者　小野重樹
メールアドレス xkgpm804@ybb.ne.jp

