[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[cvs-ml 686] Re:ロック機能について



From: Atsuko TAMADA <atsuko@kke.co.jp>
Subject: [cvs-ml 683] Re: ロック機能について
Date: Tue, 25 Jul 2000 18:42:15 +0900

  | 色々試みていたら、規則性(?)みたいなものがわかりました。
  | 最初にimportしたリビジョンは1.1.1.1になるのですが、それに関して、
  | lock⇒修正⇒commitすると、リビジョン1.1と1.1.1.1の二つのリビジョンを
  | ロックされてしまうようなのです。
  | リビジョンが1.2以降のものに関しては、同様の現象がおこりませんでした。
  | だからと言って、原因がわかったわけではないのですが・・・

しらべてみた結果だけ書きます。

ファイルをimportすると,vファイルの状態は
  o リビジョン番号は1.1.1.1
  o デフォルトブランチは1.1.1
  o headは1.1
になります。

admin -lすると、
  o デフォルトブランチの先頭リビジョンをロックするか
    あるいはheadをロックする。 ⇒ 1.1.1.1をロック

commitすると
  o とにかくデフォルトブランチを抹消
  o HEADリビジョンをロック ⇒ 1.1をロック
  o deltaを追加するためにロックしているリビジョンを取得する。 (*)
  o delta追加。
  o ロック解放

問題なのは(*)のところにあって、commitしようとしているユーザはcommitし
ようとしているリビジョン以外はロックしていてはいけません。

この制約はRCSのciに由来していて、
    - RCSではcheckinするにはそのリビジョンをロックしておかなくてはならない
    - RCSにはCVS/のような作業ファイルの状態を記録する機構がない
という理由から、ciするときにロックされているリビジョンが
作業ファイルのリビジョンだと考えます。
もし複数リビジョンをロックしている場合には-rオプションで
リビジョンを指定することで対応します(これはRCSの話)。

今回問題になったのは、admin -lでロックしたリビジョンと、commitが一時的に
取得するロックのリビジョンが一致しないため、
(*)のところでロックが2つ存在してしまって、処理が中断したということです。

importをつかわずに
    1. add
    2. commit
    3. admin -l
    4. commit
というシーケンスの場合には3と4のロックが一致するのでよかったのですが
importをつかった
    1. import
    2. admin -l
    3. commit
というシーケンスの場合には2と3のロックが異ったリビジョンになるので失敗します。

とりあえず、cvs adminでロックするときにデフォルトブランチを参照しない
ようにしてすればよいとおもいます。

一方、cvs admin -lはリビジョンを指定しないと
HEADリビジョンをロックしようとしますが
作業ファイルのリビジョンをロックしてほしいよなぁ、というのもありますね。
#contrib/rcslock.plがつかえるかなとおもって試してみましたが
#使いかたがわからん...

ところで、なぜロックをつかおうと思ったのですか?

--
KOIE Hidetaka 鯉江英隆 <hide@koie.org>