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

[mhc:00506] Re: mhc-cvs.el



白井です。ちなみに私の実験環境は

・UNIX:  CVSROOT=/cvsroot (いつも online)
・WinNT: CVSROOT=:ext:shirai@UNIX (ssh、いつも online)
・Win95: CVSROOT=:pserver:shirai@UNIX (online/offline 両用)

でやっています。

cvs はすべて Version 1.10.5 で、Win の方は Cygwin 環境で自前で
make したものです。

# きっと、Win32 native な cvs では crlf とかの関係でうまく動かな
# いんじゃないなかなぁ、という気もします。(けど、私にはわからない)

From: TSUCHIYA Masatoshi <tsuchiya@xxxxxxxxxxxxxxxxxxxxxxx> さん曰く
Subject: [mhc:00503] Re: mhc-cvs.el
Message-ID: <mpad7nnoeyn.fsf@xxxxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 18 Apr 2000 19:56:03 +0900

白井> ですね。できたら、MUA に関わらず、mhc 内部で close していた方が
白井> いいと思います。

土> これなんですけど、現状の MHC には、全体を初期化したり後始末をしたりす
土> るためのまとまった場所がないので、どこに追加するのが適当なのか、ちょっ
土> と判断出来ませんでした。乃村さんの判断を待ちたいと思います。

ふむ。了解です。

白井> 1. mhc-file-sync の結果で "M" の file や、add した file はその場
白井> で commit した方がいいんじゃないかと思います。

土> はい、update した時の結果を解析するようにしました。また、Conflict が発
土> 生した場合も、明示的に修正を求めるようにしました。

conflict の再編集も確認しました。

白井> (2) cvs command の出力を解析して、その directory に
白井> mhc-misc-touch-directory() する。

土> 後者で対応しました。

どうもです。順調です。

白井> # ありゃりゃ、Windows だと call-process に
白井> # "CVSIGNORE=.mhc-mtime trash" が引き継がれていないみたい。
白井> # Windows 向けだと (getenv "CVSIGNORE") (setenv "CVSIGNORE" "hoge")
白井> # かな?

土> 環境変数で制御するのを止め、コマンドライン引数で制御するようにしました。

これ、実は私の勘違いだったようです。ごめんなさい。最初に import
するとき、".mhc-mtime" も import しちゃったからみたいでした。だ
けど、引数で制御した方がいいですね。

## 一から import したけど、今度は "schedule/trash" をいれてしまっ
## た。どうするのが一番いいのかわかんないから、また一からやろう ^^;;;
 
白井> 3. 現在の mhc-file/offline の値をどこかに表示する option がある
白井> と NotePC はうれしいです。あと、これぐらいの message 表示は欲し
白井> いかな?

土> モードラインに表示するようにしました。ただし、表示/非表示を制御するよ
土> うにはしていません。

後述します。

土> ところで、CVS による管理の欠点として次のような点がありますので、運用上、
土> 少し注意して扱う必要があるかと思います。

土> (1) 最後に追加したスケジュールを削除すると、次にスケジュールを追加する
土>     ときに、現行の mhc は、削除されたファイルと同じ番号のファイルを作
土>     成しようとする。このため、CVS の履歴が混乱する。

そんなに modify するものでも無いし、履歴が混乱しても問題ないと思
います。逆に履歴情報は無くても良かったりしますけどね。

土> (2) サーバー側とクライアント側で同時に異なるスケジュールを追加した場合
土>     には、単純に conflict するため、手作業での修正が大きく必要になる。

現在の mhc は single user のみ対応なので、今のところは簡単な運用
上の注意で大丈夫でしょうね。今までの NotePC との sync 方法を考え
ると天国です。:-)

以下、若干修正してみたのですがどうでしょうか。

● :pserver: や :ext: だと

cvs update: Updating schedule/2000/04

じゃなくて

cvs server: Updating schedule/2000/04

だったので対応。

● Win32 上の cvs の出力は(local な CVSROOT だと) argv[0] の関係で

cvs.exe" update: Updating schedule/2000/04
   ~~~~~
となるらしい。たしかそうですよね? > 三好さん
私も commit は↓の様になりました。

cvs.exe" commit: Examining schedule/2000/04

ソースが汚くなるけど、許して下さい。

● やっぱり モードラインの表示/非表示は欲しい。
 mhc-file-toggle-offline をすれば変わるから、これだけでいいので
 は無いでしょうか?

● Mew では間違って(?) +schedule/2000/04 に goto-folder してしま
 うと、.mew-cache や .mew-touch などが出来てしまうので、
 cvs update の option を "-I .*" にしてしまった。WL や Gnus で不
 都合がなければこの方がいいと思います。

● debug 中は defsubst 使うといろいろと大変だから、とりあえず
 defun にした(ごめんなさい)。変更が有効になっているのか良くわか
 らないし。。。
 あと、若干、私の趣味。 ^^;;

-- 
白井秀行 (mailto:shirai@xxxxxxxxxxxxxxxxxxx)
--- mhc-cvs.el.orig	Wed Apr 19 09:35:08 2000
+++ mhc-cvs.el	Wed Apr 19 14:41:22 2000
@@ -68,9 +68,10 @@
   (= 0 (mhc-cvs/backend "remove" filename)))
 
 ;;; CVS Backend Function
-(defconst mhc-cvs/tmp-buffer-name "*mhc-cvs*")
+(defconst mhc-cvs/tmp-buffer-name " *mhc-cvs*")
 
-(defsubst mhc-cvs/backend (&rest options)
+;; (defsubst mhc-cvs/backend (&rest options)
+(defun mhc-cvs/backend (&rest options)
   (let ((buffer (get-buffer-create mhc-cvs/tmp-buffer-name))
 	(current-buffer (current-buffer)))
     (unwind-protect
@@ -87,7 +88,7 @@
 (defun mhc-cvs/update ()
   (and
    ;; ローカルのスケジュールファイル群を update する
-   (mhc-cvs/backend "update" "-I" ".mhc-mtime" "-I" "trash")
+   (mhc-cvs/backend "update" "-I" ".*" "-I" "trash")
    (let (modified-files conflict-files updated-files commit-fault-files)
      ;; update の結果を解析する
      (let ((buffer (get-buffer mhc-cvs/tmp-buffer-name))
@@ -110,10 +111,10 @@
 		 (setq updated-files
 		       (cons (buffer-substring (match-end 0) (progn (end-of-line) (point)))
 			     updated-files)))
-		((looking-at "cvs update: Updating ")
+		((looking-at "cvs\\(\.exe\"\\)? \\(update:\\|server:\\) Updating ")
 		 (setq current-folder
 		       (buffer-substring (match-end 0) (progn (end-of-line) (point)))))
-		((looking-at "cvs update: warning:")
+		((looking-at "cvs\\(\.exe\"\\)? \\(update:\\|server:\\) warning:")
 		 (mhc-misc-touch-directory (mhc-summary-folder-to-path current-folder))))
 	       (forward-line 1)))
 	 (set-buffer current-buffer)))
--- mhc-file.el.orig	Wed Apr 19 09:35:08 2000
+++ mhc-file.el	Wed Apr 19 15:16:01 2000
@@ -16,6 +16,7 @@
 
 ;;; Global Variables
 (defvar mhc-file-method 'mhc-spool)
+(defvar mhc-file-show-status nil)
 
 
 ;;; Internal Variables
@@ -35,8 +36,11 @@
 
 
 (defun mhc-file-line-status ()
-  (format " mhc[%s]" (if mhc-file/offline "offline" "online")))
-
+  (format " mhc%s"
+	  (cond
+	   ((and mhc-file-show-status mhc-file/offline) "[offline]")
+	   ((and mhc-file-show-status (not mhc-file/offline)) "[ONLINE]")
+	   (t ""))))
 
 (defun mhc-file-toggle-offline ()
   "*スケジュールファイル管理のオフライン操作/オンライン操作を切り替える"
@@ -53,7 +57,11 @@
 
 (defun mhc-file-sync ()
   (interactive)
-  (or mhc-file/offline (funcall (get mhc-file-method 'sync))))
+  (if mhc-file/offline
+      ()
+    (message "mhc file sync ...")
+    (funcall (get mhc-file-method 'sync))
+    (message "mhc file sync ... done.")))
 
 
 (defun mhc-file-write-buffer (buffer file)