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

[mhc:01213] Re: 削除した予定の復活方法



From: KOIE Hidetaka (鯉江英隆) <hide@xxxxxxxx> さん曰く
Subject: [mhc:01212] 削除した予定の復活方法
Message-ID: <01Jan30.160654jst.29574@xxxxxxxxxxxxxxxxxx>
Date: Tue, 30 Jan 2001 16:06:53 +0900

鯉江> mhc-cvs.elをつかっているのですが
鯉江> C-c . d で削除した予定を復活させるにはどうしたらよいでしょうか。

鯉江> mhc-cvs.elをつかわない場合には+schedule/trashに溜め込まれるので
鯉江> 復活させるのは簡単でした。

鯉江> もし手動でCVSコマンドを叩くしか方法がないとすれば
鯉江> .mhc-db-logから仮想trashを生成できないものでしょうか。

現在は、online 環境で C-c . d しちゃうと、cvs コマンド打たないと
ダメみたいですね。

.mhc-db-log から仮想 trash を作るとなると、同じ file 名を何回も
add して remove したときに大変だと思います。(というか可能なので
すか?)

鯉江> あるいは、cvs removeする代りに X-SC-Category: dead を付加するというのは
鯉江> どんなもんでしょうか。

## これはもっと大変そう。

お手軽な方法として、

(defun mhc-cvs/remove (filename &optional offline)
  "ファイルを削除する関数"
  (let ((added (mhc-cvs/get-added-flag-file-name filename))
	(removed (mhc-cvs/get-removed-file-name filename))
    	(new-path (expand-file-name
		   "trash"
		   (mhc-summary-folder-to-path mhc-base-folder))))
    (or (file-directory-p new-path)
	(make-directory new-path))
    (if offline
	(progn
	  (if (file-exists-p added)
	      (progn
		(delete-file added)
		(rename-file filename (mhc-misc-get-new-path new-path)))
	    (copy-file filename (mhc-misc-get-new-path new-path))
	    (rename-file filename removed t))
	  t)	;; return value
      (if (file-exists-p added) (delete-file added))
      (if (file-exists-p removed) (delete-file removed))
      (if (file-exists-p filename)
	  (rename-file filename (mhc-misc-get-new-path new-path)))
      (and (= 0 (mhc-cvs/backend (list "remove" (mhc-cvs/shrink-file-name filename))))
	   (mhc-cvs/modify filename)))))

として、CVS 使用時も trash に(なにも考えずに ^^;)入れていくのは
どうでしょうか? offline 状態のときの removed file と中身が重複
するのがちょっとだけもったいないですけども。

で、MUA の機能を使うなり、手動で copy するなりして、trash から
2001/01 などに refile すると、次に cvs update したときに cvs の
出力で

? 2001/01/14

と '?' がでますから、そいつを parse して mhc の schedule file な
らユーザに

"A)dd CVS repository, R)emove file immediately, M)ove to trash" 

と質問して、その通りに処理をするといいと思います。


ちなみに、cvs update したときに '?' が行頭につくのって、

info> `? FILE'
info>      作業ディレクトリに FILE というファイルがあるが、リポジトリには対
info>      応するファイルが無く、CVS が無視するファイルの一覧にも入ってない
info>      ことを示します (`-I' オプションの説明の参照と、*Note cvsignore::)。
info>      作業ディレクトリを削除すれば、このファイルは失なわれます。

のときだけですよね?

## 久しぶりに、現実逃避タイムが mhc モードになっている途中なので、
## 上記 elisp はすぐには commit 出来なかったりします。まだ、他の
## ところが中途半端なので。

-- 
白井秀行@鯉江さんや馬場さんが書いた CVS 本、早く買わないと。。。