CWRA - Compelte Walker Revision Administrator β7

CMS3サーバー＆クライアントプロトコル本仕様

(CMS(Changing Management System)の送受信サーバー CMS3リビジョン管理サーバから応答を受信する）


基本仕様
・「Complete Walker Revision Administrator β7」は現在 Vine Linux 5.2 上で稼動中である。
・認証のためのUSERとPASSはCMSの２種類のログインユーザを使用する（/musr /fusr）
・fusrはソースコードのサーバー側のリビジョン情報を管理するがネットワーク側には公開しない。musr はネットワーク側にリビジョン情報を公開する。
・CMS側はRUBYスクリプトにてソケット通信を行う
・差分ファイルの記録を行うkorn-shellコマンドはRUBYスクリプトからの呼び出しで行う
・最新ファイルのGET及び差分登録のPUTは組込みFTPクライアント機能での送受信を行う
・ソケット通信に使用するポートはCMS3が3390~3399番ポートを使用する
・クライアント側のユーザインターフェースはJAVA-SwingのEclipseプラグインプログラムである本プログラム を利用する
・Eclipseプラグインのインストールは、http://codoo2hk.corede.net/cms3/cms3install/ リポジトリから直接可能である。
・Eclipseプラグインのアップデートは、http://codoo2hk.corede.net/cms3/cms3update/ リポジトリから直接可能である。
・また、Eclipseプラグインの臨時アップデートは、http://codoo2hk.corede.net/cms3/cms3update2/ リポジトリから直接可能となっている。
・PUTを行った後では誰でもGETが可能となる。
・PUTはファイルを送信後にサーバー側でリビジョンの登録を行う。サーバーは処理を一度に行うため送信は最も早く行わなければならない。
・PUTはリビジョンの登録後に /cms/diff/cmssetq のユーザにもしメールアドレスが登録されている場合、そのアドレスにPUT完了のメールを送信する。
・PUTはメール送信時、プラグイン操作においてメモ入力がされている場合はそのメモの内容をメールの本文に記録する。
・PUTはユーザのメールアドレスが登録されていない場合はCMSの代わりのFTPアドレスであるFTPSにそのメールを転送する。
・NEWFILEはその後にUNGETを行わないと他の開発者がGET出来なくなる。
・NEWFILEの実行時サーバー側に指定したディレクトリが存在しなければ自動的にそれを作成する。ディレクトリを作成するのはFTPプロトコルである。
・UNGETコマンドを利用出来るのはファイルをGETしたユーザとCMS管理者だけである。
・VGETは同時にそのリビジョンの差分ファイルも一緒に受信する。差分ファイル名にはバージョンとリビジョン番号が追加されている。
・ファイルの存在と排他制御を確認するのはサーバーのSTATコマンドになる。
・実際にファイルの送受信を行うのは組込みFTPプロトコルである。
・組込みFTPプロトコル及び、FTPメソッドは以下の動作を行う。
１）もし、テーブルファイルに多重階層のディレクトリを用いたファイルの設定があった場合、そのディレクトリを遡ってRETRを行う。
２）もし、ローカル側（Windows)でテーブルファイルに登録された階層のフォルダが無かった場合、新たにフォルダを作成してファイルを受信する。
３）もし、サーバー側（Linux)でテーブルファイルに登録された階層のディレクトリが無かった場合、新たにディレクトリを作成してファイルを送信する。
※ディレクトリ及びフォルダの階層は最大６４階層まで自動作成可能。
※組込みFTPは/cms/fusr/ をホームディレクトリとすること。

リポジトリ仕様
・専用サーバのユーザID　cms　を利用してリポジトリを管理する。
・cms　は既にsshにおけるバージョン/リビジョン管理システムとして利用出来る環境を保有する。
・各リポジトリは /cms/fusr 配下に置かれ、リポジトリ配下の階層管理が可能となっている。
・リポジトリを管理するコマンドは /cms/bin に用意されている。
・専用サーバではリポジトリ管理の他に故障管理と修正管理を行うことが出来る。
・リポジトリを利用出来るユーザはsshにおいて２種類のタイプを持つ。（/cms/fusr と /cms/musr）
・ネットワークからCMS3プロトコルを通して本リポジトリを利用出来るユーザは /cms/diff/cmssetq にパスワードの存在するユーザだけである。
・リポジトリ管理のためのユーザIDは　cms　である。これはsshにおいてcms　を利用するユーザは誰でもリポジトリ管理者となることを意味する。
・サーバー側に於いてリポジトリを操作するコマンドは　cf　である。このコマンドはファイラーであり、視覚的にリビジョンを管理する。
・リポジトリ操作のためのマニュアルは/cms/doc/cms.txt の最後に記述されている。
・リポジトリに登録できるファイルはテキストファイルのみである。拡張子は .c .cc .java .sh .ksh .bash .rb .py .php 等多岐に渡って登録可能である。
・リビジョン管理されたファイルの最初の１行にバージョン/リビジョン番号と登録した日付が振られることになる。
・ネットワークからリポジトリを操作するプログラムはCMS3プロトコルである。

プロトコル仕様
サーバ側の常駐プログラムは cms3-server.rb スクリプトである。このスクリプトは ruby で記述されている。
このプログラムはプロジェクトのリポジトリ名ごとに　cms　にログインし、リポジトリディレクトリのkorn-shll 環境で　.profile　を実行した後に起動しなければならない。
常駐するためのコマンドラインは以下となる。
nohup cms3-server.rb -p 3390 > /cms/logs/$$.{username}.3390.log &
オプション -p の次にあるポート番号はリポジトリごとに　3390～3399までが利用出来る。各ポートごとのソケットのFIFOキューは５つ用意してある。
現在用意したリポジトリ管理サーバのアドレスは codoo2hk.corede.net となる。これは個人のサーバであるためcmsのためのsshのパスワードは公開出来ない。
cmsではリビジョンのコンフリクト（衝突）を防止するためリビジョンを登録出来るユーザは必ず毎時１ユーザだけに限られる。但しファイルの編集は誰でもいつでも出来る。

USER - ユーザIDを確認する。サーバー側は/cms/diff/cmssetq のユーザIDと照合し、OKであれば　"+OK USER" を返信する。
PASS - パスワードを確認する。サーバー側は/cms/diff/cmssetq のユーザIDに対するパスワードを照合し、OKであれば　"+OK PASS" を返信する。
STAT 0 - カレントディレクトリを調査し、PWD[0]に/fusr または /musr のディレクトリを格納する。
STAT 1 - サーバー側のファイルがターゲットリポジトリにあるかどうかを調査する。ファイルが存在する場合は　"+OK STAT 1" を返信する。存在しない場合は"+NG STAT 1"を返信する。
STAT 2 - WHOコマンドのためにある機能。サーバの/cms/diff/lock/ 配下にある排他制御用ファイルを確認し、もしロックしてあればどのユーザがGETしているのかを報告する。
OKであれば　"-OK STAT 2" を返信する。既にGETされている場合は "-NT STAT 2"を送信する。また、ファイルが存在しない場合は"+NG STAT 2"を返信する。
STAT 3 - ファイルがサーバの/cms/fusr/リポジトリ（開発システム名：Eclipseではプロジェクト名）に存在する場合には"+OK STAT 3" 存在しない場合には"+NT STAT 3"を返信する。
STAT 4 - GETのための調査を行う。サーバーの排他制御ファイルのlockを確認し、lockが確認された場合は/cms/diff/log/getlog.{Version}のGET情報を返信する。
GETが利用出来ない場合は"+NT STAT 4"とGET情報。利用可能な場合は"+OK STAT 4"を返信する。
LIST 0 - 何もしない。リスト表示は行わない。
LIST 1 - /cms/diff/tabs/リポジトリ名+tab ファイルの中にあるターゲットファイル名をリストし送信する。
STOR 0 - 何も実行しない。"+OK STOR 0"を返信する。
STOR 1 - サーバーは/cms/bin/cms3-put.ksh スクリプトを実行する。その時リポジトリ環境変数のバージョン番号を読み取りそれをパラメータに渡し実行する。
cms3-put.ksh file-name user-name version-number
コマンドが実行に成功した場合は"+OK STOR 1" 失敗した場合には "+NT STOR 1"　を返信する。
cms3-put.ksh からのエラーメッセージは以下の７文字の応答コードに要約されている。サーバーはこれらのコードに応じて処理を行わなければならない。
"Not determine the system name."
"-NT SYS"

"$1 is not registered in the table."
"-NT TBL"

"Target file not found."
"-NT FND"

"$2 is not a registered user."
"-NT REG"

"There is no directory for exclusive control."
"-NT LCK"

"$File does not exist."
"-NT EXT"

"$File has not changed. PUT does not."
"-NT CHG"

"Complete"
"-OK PUT"


STOR 2 - リポジトリに新規のファイルを登録する場合実行する。サーバでは以下のコマンドを実行する。
cms3-newfile.ksh file-name user-name version-number
コマンドが実行に成功した場合は"+OK STOR 2" 失敗した場合には "+NT STOR 2"　を返信する。
cms3-newfile.ksh からのエラーメッセージは以下の７文字の応答コードに要約されている。サーバーはこれらのコードに応じて処理を行わなければならない。

"Is not set environment requires CMS SYSNAME and TABFILE."
"-NT SYS"

"${File} is not defined in ${TABFILE}."
"-NT TAB"

"${User} is a user registered in the CMS"
"-NT CMS"

"$File dose not exist."
-NT EXT"

"${Targetfile} complete."
"-OK NEW"


RETR 0 - 何も実行しない。"+OK RETR 0" を返信する。
RETR 1 - リポジトリから最新のファイルを呼び出し、プロジェクトのファイルと入れ替える。以下のコマンドを実行する。
cms3-get.ksh file-name user-name version-number
コマンドが実行に成功した場合は"+OK RETR 1" 失敗した場合には "+NT RETR 1"　を返信する。

cms3-get.ksh からのエラーメッセージは以下の７文字の応答コードに要約されている。サーバーはこれらのコードに応じて処理を行わなければならない。
"$1 user has been found tablefile."
"-NT TBL"

"$2 is not a registered user to CMS."
"-NT USR"

"Create a directory and not lock / CMS is."
"-NT LCK"

"$File exist."
"-OK EXT"

"${File} は ${op} {File} has {} to get"
"-OK GET"

"SUBMIT to $ {File} is $ {op} (Fix completion notice) are."
"-OK SUB"

"${File} The COMMIT (end version) are."
"-OK COM"

"We have different $ {User}."
"-NT DUR"

"Complete"
"-OK GET"


RETR 2 - リポジトリからGETしたファイルのGETを取り消す。以下のコマンドを実行する。
cms3-unget.ksh file-name user-name version-number
コマンドが実行に成功した場合は"+OK RETR 2" 失敗した場合には "+NT RETR 2"　を返信する。
cms3-unget.ksh からのエラーメッセージは以下の７文字の応答コードに要約されている。サーバーはこれらのコードに応じて処理を行わなければならない。

"$1 name is not SYSTEM."
"-NT SYS"

"$1 Can not find the file table,"
"-NT NFL"

"$2 Username not found."
"-NT USR"

"$File does not exist."
"-NT EXT"

"SUBMIT to $ {File} is $ {op} (Fix completion notice) are."
"-OK SUB"

"Complete"
"-OK UNG"


RETR 3 - リポジトリからファイルの履歴を数値でリストし、PUTしたファイルのリビジョンごとにGETを行う。以下のコマンドを実行する。
cms3-vget.ksh file-name user-name version-number revision-number(00 - 99)
コマンドが実行に成功した場合は"+OK RETR 3" 失敗した場合には "+NT RETR 3"　を返信する。
cms3-vget.ksh からのエラーメッセージは以下の７文字の応答コードに要約されている。サーバーはこれらのコードに応じて処理を行わなければならない。

"Name is not SYSTEM"
"-NT SYS"

"Can not find the file table"
"-NT TBL"

"There is $1 in the table file"
"-NT NTB"

"In the $2 CMS users do not"
"-NT NUS"

"Will submit a ${File} ${op} (complete correction) are"
"-NT SUB"

"Located in the current directory ${File}"
"-OK EXT"

"No differences were recorded files."
"-NT MDF"

"${File}: Version ${Version}. There is no record of the difference between ${Revision}．"
"-NT MDR"

"Revision file ${Version}. There is no ${Revision}"
"-NT RVF"

"${Version} in the current directory. There is a ${Revision}."
"-OK RVF"

"Complete"
"-OK VGT"


RETR 4 - リポジトリからVGETしたファイルのVGETを取り消す。以下のコマンドを実行する。
cms3-unvget.ksh file-name user-name version-number revision-number(00 - 99)
コマンドが実行に成功した場合は"+OK RETR 4" 失敗した場合には "+NT RETR 4"　を返信する。
cms3-unvget.ksh からのエラーメッセージは以下の７文字の応答コードに要約されている。サーバーはこれらのコードに応じて処理を行わなければならない。

"$1 name is not SYSTEM."
"-NT SYS"

"$1 Can not find the file table,"
"-NT NFL"

"$2 Username not found."
"-NT USR"

"$File does not exist."
"-NT EXT"

"Will submit a ${File} ${op} (complete correction) are."
"-OK SUB"

"Complete"
"-OK UNV"


QUIT - 何もしない。終わりの印にすぎないことに注意すること。

注意点
・サーバー側にはその他多くの管理コマンドがあるが、ネットワーク側には公開しません。

その他
本プロトコルはPOP3プロトコルに似せてあるのでPOP3を参考にすると良い

Copyright(c) 2012 S.Ono

