How to use Complete Walker Revision Administrator

CMS3のチュートリアル
cms3の利用方法
Androidの入門コース「ん・ぱか工房」のサンプルソースを例にcms3の利用方法をチュートリアルします。
Eclipse v3.7とjdk7、android sdk は既にインストールしてあることを前提としています。
・まず以下のように「ん・ぱか工房」からサンプルを /home/cms/fusr/npaka に作成します。
drwxrwxr-x 27 cms cms 4096 5月 4日 09:50 .
drwxr-xr-x 16 cms cms 4096 3月11日 16:13 ..
drwxrwxr-x 2 cms cms 4096 3月12日 17:04 activityex
drwxrwxr-x 2 cms cms 4096 1月18日 14:55 adapterex
drwxrwxr-x 2 cms cms 4096 2月14日 15:54 buttonex
drwxr-xr-x 2 cms cms 4096 2月 2日 16:16 cameraex
drwxrwxr-x 2 cms cms 4096 1月16日 16:24 checkboxex
drwxrwxr-x 2 cms cms 4096 2月 5日 15:48 dbproviderex
drwxrwxr-x 2 cms cms 4096 1月17日 11:45 edittextex
drwxrwxr-x 2 cms cms 4096 2月15日 12:24 fileex
drwxrwxr-x 2 cms cms 4096 2月 5日 15:42 fileproviderex
drwxrwxr-x 4 cms cms 4096 1月16日 21:40 fragmentex
drwxrwxr-x 2 cms cms 4096 1月27日 13:18 gestureex
drwxr-xr-x 2 cms cms 4096 2月 2日 16:12 homeex
drwxrwxr-x 2 cms cms 4096 1月20日 13:47 httpex
drwxrwxr-x 2 cms cms 4096 1月30日 10:07 intentreceiverex
drwxr-xr-x 2 cms cms 4096 2月 2日 16:12 locationex
drwxrwxr-x 2 cms cms 4096 1月17日 21:21 mapviewex
drwxrwxr-x 2 cms cms 4096 1月26日 14:11 myactivityex
drwxrwxr-x 2 cms cms 4096 1月24日 22:52 optionmenuex
drwxrwxr-x 2 cms cms 4096 1月19日 22:32 preferencesex
drwxr-xr-x 2 cms cms 4096 2月 2日 16:12 sensorex
drwxrwxr-x 2 cms cms 4096 2月 2日 16:15 serviceex
drwxrwxr-x 2 cms cms 4096 2月 7日 09:49 socketex
drwxrwxr-x 2 cms cms 4096 1月20日 10:02 sqliteex
drwxrwxr-x 2 cms cms 4096 2月13日 13:28 surfaceviewex
drwxrwxr-x 2 cms cms 4096 1月17日 21:17 webviewex
・次に /home/cms/fusr/cmssetq に以下の行を追加します。
npaka;30001;/bin/ksh;/home/cms/fusr/npaka;passwd123;;

・次に上の数程多くなくても良いですが、必ず以下のコマンドでcmsに登録しておく必要があります。
newfile.ksh activityex npaka 0

・次に /home/cms/musr/android のディレクトリを作成しておきます。
・.profile を /home/cms/diff/ からコピーし、以下の変数を android に直します。
 
HOME="/home/cms/musr/android"
PS1=">android>> !> "
HISTFILE="${HOME}/.history.android"
CMS_USERNAME=android
SYSNAME=npaka
TABFILE=npakatab

・次に /home/cms/musr/android のディレクトリで以下のコマンドを実行します。
 nohup ruby /home/cms/bin/cms3-server.rb -p 3399 > /home/cms/logs/$$.android.3399.log &
※cms3ではFTPを利用するため、事前にcmsをユーザとするFTPサーバを用意してください。
以上でサーバー側での準備は終わりです。
・Eclipseプラグインをインストールする。
※「新規ソフトウェアのインストール」で http://codoo2hk.corede.net/cms3/cms3uphttp://codoo2hk.corede.net/cms3/cms3update5/  のアドレスを「作業対象」に貼り付け「次へ」ボタンをクリック。

Eclipseが再起動され、「リビジョン管理サーバー」というメニューが追加されます。
以降、以下の方法で取得出来ます。
・Eclipseにて新規プロジェクトを作成する。
・次にクラスを作成する。
※この時、パッケージ名を net.npaka.gestureex とした場合、Eclipse は自動的に
 net/npaka/gestureex のフォルダを作成しそこに新規クラスファイルを保存します。

  ※以下のプロジェクト配置はGestureEx プロジェクトのフォルダ実装例です。
GestureEx    C:/Documents and Settings/son.CMS2/workspace/GestGestureEx/net/npaka/gestureex

次にプラグインを実行します。
プラグインのホストアドレスをマウスクリックし、「regedtに登録します。」というメッセージが表示されますが、「いいえ」を選択し、
ホストアドレスのテキストフィールドに codoo2hk.corede.net と記述し、Enterキーを押します。
そして、もう一度、ホストアドレスをマウスクリックします。
「codoo2hk.corede.net を regedtに登録します。」というメッセージが表示されます。今度は「はい」をクリックします。
以下、ポート番号は 3399
ユーザIDは android
パスワードは pass0123
と、タイプします。
次に「登録フォルダ」のテキストフィールドの上をマウスクリックすると、フォルダの参照用ダイアログが表示されます。
そこで、まずローカルディスクCを選択します。
後は、 C:/Documents and Settings/son.CMS2/workspace/GesturGestureExet/npaka/
※上の例は、workspace のある場所の下の プロジェクト名 の下の src の下の net の下にある npaka  になります。
最後にある、npaka までたどり着いたところで「開く」ボタンをクリックします。
これで、現在利用しているプロジェクトでのフォルダ設定は完了です。
※プロジェクトごとにフォルダ設定の作業が必要になります。
次に、「LISTの実行」ボタンをクリックします。
「LISTが完了しました。ファイルの選択を行ってください。」というメッセージが表示されたらOKです。
※上のメッセージが表示されない場合は ホスト名、ポート番号、ユーザ名、パスワードの4つを確認してください。
次に「ファイルの選択」コンボボックスで現在利用中のプロジェクトのファイルを選択します。
※例えば gestureex/GestureEx.GestureExます。
以上の作業で ジェスチャープロジェクトのGestureEx.java を プロジェクトの適切なフォルダにダウンロード可能GestureEx
次に、「GET」ボタンをクリックします。
指定したファイルがダウンロードされます。
次にEclipseのプロジェクトの下にある src をクリックし、F5キーを押します。
ファイルがプロジェクト内に追加されているのが確認出来ればOKです。
以上、このプラグインを利用してファイルの追加や変更の差分管理を行うことが出来ます。
ファイルを変更して「PUT」ボタンをクリックすると、変更記録がサーバーにリビジョンとして記録され、
いつでもそのリビジョンに戻ることが可能となります。
この機能を利用して、「ん・ぱか工房」のソースコードを変更していろいろ試してください。
なお、「GET」が済んだらすぐに「UNGET」ボタンをクリックしておいてください。
※前に状態に戻るのは「リビジョンの呼び出し」で選択したリビジョンの後の「VGET」ボタンです。
【注意事項】
cms-clientプログラムはWindows専用になっていますのでShift-JISコードのまま利用してください。
※Eclipse でプロパティがUTF-8だと文字化けしますので必ずShift-JISに変更してください。
(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 は故障管理とソースの修正管理及び修理記録管理を行うためのシステムです。
16種類の機能をメニューで呼び出しながら使用するか、コマンドをタイプして行います。
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グリッド&サブフォームライブラリ
+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 MR(修正記録)の見本フォーマット
trcsv.sed TR(Trouble Recorder)をCSVOUTするときに使用するフィルタ
mr/trformat TR(故障記録)の見本フォーマット
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 で使用します。TeraTerm
設定方法(TerTerm 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 時起動するシェルを設定出来ます。
各フィールドはセミコロンで区切られ、以下の意味になります。
第1フィールド
 cms-login 名
第2フィールド
 IPCキューID
第3フィールド
 実行シェル
弟4フィールド
 メモ
「例」
cms;30001;/usr/bin/ksh;/home/cms/fusr/cms;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"
export CYGWIN=server
export PGDATA=/var/postgresql/data
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 という名前のファイルを新規作成します。
<例1>
$ cat cwtab
makefile
filer.cc
comcurses.cc
dtree.cc
filertool.cc
ase.cc
filer.h
ftx.h
階層化も出来るのでその場合は以下のように記述します。
ディレクトリの階層も以下のようになっていなければなりません。
<例2>
$ 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- 9
注意事項
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. MRの編集    MR(修正記録)を再編集します。
f. MRの登録    MR(修正記録)を新規登録します。
g. GETの取り消し    再度GETが出来ます。
h. GET履歴の表示    GETされたファイルの日付を表示します。
i. PUT履歴の表示       PUTされたファイルの日付を表示します。
j. MAKE            make コマンドを実行します。
k. ソースの編集    ファイルの編集を行います。
l. TRのレポート        TR(故障記録)を編集します。
m. TRの登録          TR(故障記録)を新規登録します。
n. CMSへファイルの登録  新規ファイルを CMS へ登録します。
o. CMSテーブルファイルの編集 新規ファイルをテーブルファイルに登録します。
p. 故障記録のレポート  TRを表示します。
q. MRの削除    MR(修正記録)の削除を行います。
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)MRの編集
 mredit.ksh を実行し、MR(故障記録票)の編集を行います。MRは000から999 または英数字のいずれか記録できます。
f)MRの登録
 mr.ksh を実行し、MR(修正記録票)の登録を行います。MRは000から999 または英数字のいずれか記録できます。
g)GETの取り消し
unget.ksh を実行し、直前に実行した get.ksh をキャンセルします。
GET及びPUT,UNGETの実行記録は CMS によってログ保存されます。
h)GET履歴の表示
ログ保存されたGET、UNGETの履歴を表示します。
i)PUT履歴の表示
ログ保存されたPUTの履歴を表示します。
j)MAKE
make コマンドをファイル名の拡張子を除いた指定で実行します。
そのため、Makefile のコンパイル指定も以下のように指定する必要があります。
cmsmenu : $(OBJ)/cmsmenu.o
$(CC) $(CFLAGS) $(OBJ)/cmsmenu.c -o $@ -lncursesw
k)ソースの編集
環境変数 EDITOR に設定されたエディタ名でソースファイルを編集します。CMS-loginディレクトリで作業します。
l)TRの編集
trset.ksh を実行し、MR登録時作成されたTRへ故障の詳細情報を記録します。
これは後に説明する「故障管理」で使用するデータをCSV形式でテキストアウトするための機能です。
実際には「故障管理」で使用する故障管理データベース上で作業した方が便利です。
m)TRの登録
 tr.ksh を実行し、TR(故障記録票)の登録を行います。TRは000から999 または英数字のいずれか記録できます。
n)CMSへファイルの登録
newfile.ksh を実行し、新しく作成したソースファイルをCMSに登録します。
このとき、テーブルファイル S233 の場合は S233tab を編集してファイル名を追加します。
テーブルファイルの追加は o)CMSテーブルファイルの編集 で行います。
o)CMSテーブルファイルの編集
tabchg.ksh を実行してログオンディレクトリのテーブルファイルを編集します。
編集が終了すると、 CMS に登録するかどうか聞いてきます。
p)故障記録のレポート
mrreport.ksh を実行し、MR記録を閲覧します。
q)MRの削除
rejectmr.ksh を実行し、任意のMR記録を削除します。
この時、TRにはMRの削除理由を記録し履歴保存しておきます。(故障管理の履歴はTRに永久保存されることになります。)
r)リビジョンの削除
reject.ksh を実行し、任意のソースファイルの差分を削除します。
s)SUBMITの実行
ひとつの機能追加や故障修理が終了した場合、対象のソースをMB番管の管理する場所に戻し、自分も含めたあらゆるユーザから保護する必要があります。
SUBMITコマンドは、そのひとつ前まで実行します。
SUBMITフラグを解除するには ~/cms/diff/lock 配下の lkfile[0-9] の中に書き込まれている "submit"の文字を消去します。
0-9なお、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 (source-file-name) (user-name) (version-number)

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

関連項目
  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 コマンドを使用し、ma
kefileの修正も行なわなければなりません。又、修正登録するとき、
登録修正者名は CMS 管理者から与えられた名前となります。

   putによる修正登録をすると、ソースファイルはカレントディレクトリから
削除されることに注意してください。
   put はファイルの修正登録時同時にバージョン毎にリビジョン、及び修正
  者の情報を記録します。それぞれのバージョン及び、リビジョンの記録は
  putlog コマンドによって確認することが出来ます。各バージョン及びリビジョ
  ンの取り出しには、vgetコマンドを使用します。
   現在 CMS ではバージョンを9バージョンまで、リビジョンを0~99ま
  で登録可能になっていますので、それを念頭に使用してください。
   MR番号の登録を行なっていない場合でも、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番号で管理します。
  MRは環境変数 EDITOR を参照して EDITOR の内容のエディタを呼び出しま
  す。
   MRの呼び出すファイルにはあらかじめ故障処理の為のフォーマットが登録
  されていますので、内容を記述するだけになっています。

関連項目

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

MREDIT(0) MRファイルの編集

名前

  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は過去における修正記録の履歴を報告します。但し、MR登録をし
  てあるリビジョンに限ります。これらの修正記録はプログラムの各開発者及
  び、修正者が個々に記述したものなので、MR記録の修正を行ないたい時は
  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]
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
<補足事項3>その他のプログラム
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 "キューID" "送信文字" "cms-login-name"
manconv.ksh
 UNIX nroffフォーマットファイル内の余計なエスケープシーケンスを取り除きます。
mkdir2
 深い構造のディレクトリ階層を一発で作成。
 mkdir2 /yama/kawa/umi/sora
popmsg
 ユーザに選択を促すメッセージをウインドウ表示します。Y か N で終了します。
 Y の場合はリターンコードに 1 を返します。
 popmsg "メッセージ文字"
dialogmsg
入力の無いメッセージです。常に終了します。
 dialogmsg "メッセージ文字"
errmsg
現在の状況を報告するメッセージです。全てのキータッチで終了します。
 errmsg "メッセージ文字"
inpmsg
 ユーザに入力を促すメッセージをウインドウ表示します。Enterで終了します。
 inpmsg "設定する環境変数名" "環境変数に入力する文字列"
tabchg.ksh
 テーブルファイルの変更と更新を行うコマンドです。
9.参考文献
Complete Walker and CMS を開発するにあたって参考にした文献は以下になります。
UNIXプログラミング環境
ボブ・パイク/ブライアン・カーニハン著
KSH入門
デビッド・コーン著