ディレクトリ追加失敗時の挙動はアトミックでない
ちょっとびっくりしたので記録。
ディレクトリを追加する操作で、先行の追加に失敗すると後行はローカル作業ディレクトリだけ管理情報が更新されてしまい、リポジトリには存在しない状態になる。
例えばリポジトリ内に hoge が既に存在し、moge は存在しないとする時に、以下のように両方を追加しようとすると
% cvs add hoge moge (←二つのディレクトリを追加しようとする) cvs [add aborted]: there is a version in hoge already (← hoge は既にある) % cvs update cvs update: cannot open directory /repo/module/moge: No such file or directory cvs update: skipping directory moge (← moge はリポジトリ内に追加されていない) % find moge moge/CVS/Root moge/CVS/Repository moge/CVS/Entries (↑しかし、作業ディレクトリ側の管理情報は、できてしまっている…)