cvscheck.inc.php †
サマリ | ローカルファイルとCVSファイルとのバージョンの差分表示 |
---|
リビジョン | 0.11 |
---|
対応バージョン | 1.4rc4 |
---|
投稿者 | sha |
---|
投稿日 | |
---|
概要 †
- PukiWikiプログラムのローカルファイルとCVSファイルとの差分をテーブルとして表示する。
- 開発版のPukiWikiファイルのアップデートのチェックに便利。
- 標準添付のファイルの表示、インストールした自作プラグインの表示を行う。
説明 †
- CVS側に存在するファイルに関して、ローカルファイル(cvscheckを実行したサイト側のファイル)と比較し、バージョンが違っていたり、
バージョンが取得できなかったり、ファイルが存在しなかったりするとテーブルとして表示する。
- ローカルにしか存在しないファイルについては無視する。
- チェックするディレクトリは、"./"と"./plugin/"の2つのみ。
- チェックするファイルは、何らかの拡張子がついているファイル全ての内、バージョン表示のあるもの。
- localオプションの指定で、ローカルにだけ存在してバージョンが取得できるファイルを表示する。
- CVSページのHTMLの構造を正規表現で取得しているので、表示フォーマットが変わると取得できなくなる可能性がある。
- versionlist.inc.phpではバージョン表記として「\d+\.\d+」をチェックしていたが、cvscheck.inc.phpでは「[\d\.]+」。よって、例えばローカルファイルに独自の修正を加えた場合、「1.46.1」のような表記が可。
- ローカルファイル名の拡張子のチェックは「\.\w+$」。従って、ローカルファイルのバックアップをその場に置いて、かつcvscheckの対象にしたくない場合には、最後の拡張子にハイフンなどを含めればよい。
- ローカルファイルのファイル名はバージョン表記から取得する。pukiwiki.phpをindex.phpに変更してもバージョン表記がpukiwiki.phpのままなら比較できる。ただし、バックアップの場合は前述などのような対処が必要。
- localオプション指定時には「自作プラグイン」のチェックにプラグインls2を使用。pukiwiki.orgのls2の出力仕様が変更されると「自作プラグイン」のチェックに失敗する可能性がある。
- ここで実験しています→「sha:cvscheck.inc.php」
使用法 †
#cvscheck([local])
local: ローカルにだけ存在するファイルの表示
./?plugin=cvscheck&refer=<page>¶m=[cvs|local]
[./?plugin=cvscheck&refer=<page>¶m=[cvs|local] cvscheck]
<page>: 戻り先ページ名
- 前者は、ブラウザのWebアドレス入力にて使用する方法。
- 後者は、リンクとしてPukiWikiページに貼りつける場合の方法。クリックすると実行する。
- &refer=<page>は省略可。付けると戻り先ページ名として表示される。
- ¶m=cvsは省略可。デフォルト動作。¶m=localでローカルのみ存在するファイルの表示モード
使用例 †
- 拡張子がついてさえいればチェックの対象とするので、*.inc.phpや+.phpはもちろんのこと、例えば、*.txt, *.lngなどもチェック対象となる。ただし、ファイル内部にバージョンの記載が無いものはチェックできないので除外される。
- CVS側に存在するファイルのバージョン比較
#cvscheck
- ローカルにのみ存在するファイルのバージョン表示
#cvscheck(local)
file name | local versions |
plugin/gotaku.inc.php? | 0.4 |
plugin/printenv.inc.php | 0.1 |
plugin/fversion.inc.php? | 0.1 |
plugin/turing.inc.php | 0.2 |
plugin/chartable.inc.php | 0.2 |
plugin/cvscheck.inc.php? | 0.6 |
ダウンロード †
ここに添付しました。御利用下さい。
- 「&ref(): ERROR: File not found: "cvscheck.inc.php.11" at page "バックアップ/cvscheck.inc.php";」←提供中
リビジョン | 内容 |
v0.11 | Ratbetaさんの提案。local指定時に自作プラグインへのリンク |
v0.10 | Ratbetaさんの提案。not found表記とCVSファイルへの直接アクセス |
v0.9 | debug/ローカルに画像ファイルが無い場合フルパスが出る |
v0.8 | debug/preg_match_allでスタックオーバーフロー(?) |
v0.7 | debug/localモードの時にファイルがソートされてない |
v0.6 | ローカルのみ存在するファイルの表示 |
v0.5 | 更新対象が無い場合の表示、referに対応 |
v0.4 | ローカルファイルが存在してバージョンが取得できない場合は除外 |
v0.3 | ブロック型に対応 |
v0.2 | Ratbetaさんの修正に対応 |
v0.1 | versionlist.inc.phpとmsearch.inc.phpから新規作成 |
アンケート †
- このプラグインに満足しておりますか?
- 「いいえ」に投票した方に質問です。
どのような修正を加えれば、よくなると思いますか?下記のコメントに記入して下さい。
コメント †
- Ratbeta?
面白そうなんでちょっと書き換えてみました。修正箇所は以下。
83行目 : 修正前
$outs[] = '|'. $s . $file .'|'. $lver .'|'. $cver ."|\n";
83行目 : 修正後
$outs[] = '|[['. $s . $file .':'
. $_cvscheck_messages['URL'] . '/' . $s . $file . ']]|'. $lver .'|'. $cver ."|\n";
- Ratbeta?
0.4入れてみました。ローカル(Apache1.3.28+php4.3.3)で動かないです。proxy.phpの86行目、タイムオーバーというエラーが出ています。
- Ratbeta?
エラー文自体は、『Fatal error: Maximum execution time of 30 seconds exceeded in x:\x\proxy.php on line 86』との事。解釈間違ってそう(汗)。
- あなたのPukiWikiは、proxyを必要とするfirewallの中に設置されていますか?
- pukiwiki.ini.phpの$use_proxy以降の設定は正しいですか?
- cvsサイトは生きていますか?(私は出来てるんだから、もちろん生きてますよね)
- あとは何だろう?(もしチェックマニュアルを作るなら、こんなのも入れとくのかな(笑)→「電源コードはコンセントにささっておりますか?」)
- Ratbeta?
あ、今やって見たら動きました。どうやら127.0.0.1と127.0.0.0/8が被っていたのが原因みたいです(^^;)。
- sha
話は変わりますが、http_request()はすばらしいです。自作プラグイン/msearch.inc.php?でも使っていますが、これが使えるようになってネットワーク経由で何かするプラグインが、proxyとか気にすることなく、とても簡単に書けるようになりました。ほんとすばらしい。
- sha
すばらしい。。。とか思って、cvscheckを社内PukiWikiに設置してみたのですが、動きませんでした。proxy自体がユーザ認証を必要としたため社外へアクセスできなかったようです
。proxy.phpはこういう場合に対応できるんでしょうか?
- upk?
SOCKS5に対応できていないと記述してるんですけど、もっと詳しく説明をして欲しいということですか?まぁ、あのページは、開発者を想定したものなので、逆にあのレベルとしてRFCなどへのリンクをはっているんですけどね。
- sha
社内でSOCKは運用してないので、その点は問題になっておりません。HTTP/1.1(rfc2616)のProxy-Authorization:に対応していれば社内でも大丈夫なのですが、ここまで勉強してからproxy.phpを見てみたのですが、どうやら対応してなさそうです。
- upk?
内容は了解しました。今は手出しできないので、調べて理解した仕様を書いておきますけど、Proxy-Authorization 対応するには、userid:pass の文字列を MIME の base64 でエンコードして、これを、このヘッダーの内容にすれば良いはずです。なので対応そのものは、sha さんならできると思いますよ。改修して OK なら、パッチでも提供してもらえれば、喜ぶ人も多いのではと思います。
- upk?
よくみたら、ヘッダー名が違うものの、同じ対処してるので、そのコードがずばりですね。
$query .= 'Authorization: Basic '.
base64_encode($arr['user'].':'.$arr['pass'])."\r\n";
な部分があるので、それに合わせると、こんな感じで
$query .= 'Proxy-Authorization: '.
base64_encode($arr['user'].':'.$arr['pass'])."\r\n";
てな感じですかね。
Proxy鯖用のIDとパスワードのパラメータが足りないと思うので、pukiwiki.ini.php に足して取得することになりますかね?
- sha
upk?さん、ありがとうございます。上記のproxy認証に対応したパッチを紹介しておきました。興味ある方はご参照下さい。→ここ「dev:PukiWiki/1.4/ちょっと便利に/ユーザ認証付きproxyへの対応」
- upk?
ちょっと便利にというレベルじゃないと思うので、dev 復活後に備忘録程度に、BugTrack? にでも計上しておいて下さいよ。一応、別件もあってぱんだ?さんにはお願いしておきましたけども。
- upk?
ところで、この串って、どういうものなのでしょうか?Authorization:だって、フォームに自動的に入力を補う機能に過ぎないし、Proxy-Authorization:も同じく串にしかしない。というものなんですよね。私のところでは、NTLM で認証してないと、串が使えないので、PukiWiki の串対応では、そもそも無理なので、どうしたものぞ。と思っていました。そのヒントになればなぁ。なんですが。
- sha
社内の串はSquidとかいうものでした。社外アクセスしようとするとダイヤログが出てID,PWの入力を促します。
下記は気が向いたら勉強してみようかなと思っているページです。ご参考まで。
「NTLM認証の仕組み」
「NTLM認証の実装」
「md4のソース」
「RFC1320」
- sha
現在Proxy-Autorization: Basic XXXX....Xとかでプロキシ認証を経て社外へアクセスできることを確認しました。ところが、Windows XP Pro, Apache2.0.46, PHP4.3.3RC1, PukiWiki1.4rc3環境でpreg_match_allが無限ループに陥っているかのような症状(まだ未確認)に悩まされています。プラットフォームで動作が違うのでPHPのバグっぽい動作です。現在仕事で大急ぎの締め切りを抱えているので、この調査を来週まで先送りします。申し訳なし。
- sha
なんか、PHP4.3.3, PukiWiki1.4rc4でも同じでした。まいった。
- sha
来週へ先送りとか言ってる割に現実逃避(笑)。大丈夫な正規表現を発見。どうやらマッチングに時間がかかってタイムアウトスタックオーバーフロー?していたのかもしれません。そこで「一回だけ使用するサブパターン→(?>)」という技を使って高速化を図りました。これでうまく行きました。
ダメだった例
preg_match_all('/<tr[^>]*>((?:.(?!<\/tr>))+.)<\/tr>/is',$html,$matches)
今回の対処の例。効果的だったのは2つ目の(?>)。
preg_match_all('/<tr(?>[^>])*>((?>.(?!<\/tr>))+.)<\/tr>/is',$html,$matches)
- merlin?
ううむ local 側でなんかversion取得失敗してるみたい。 merlin:Plugin/Demo/cvscheck.inc.php
- sha
もしかして、newpage2.inc.phpのバージョン表記の部分のファイル名がnewpage.inc.phpになっていたりしませんか?誤記の場合もあるとすると今の仕様じゃ危険かな。versionlist.inc.phpのまねをしたんだけど。。。実際のファイル名を使うべきかな。
- merlin?
おおあたりでした。 m(_._)m こちらの fversion だと ファイル名でやっているのでそこで違いが出たみたいです。
- sha
そういえば、pukiwiki.phpをindex.phpにrenameして使っていたりするので、実際のファイル名よりはバージョン記述のファイル名で比較した方がありがたかったりするのです。他のファイルでそういう状況は無さそうですが。
- Ratbeta?
ローカルに画像が存在しない場合、altが表示される訳ですが、これが直パスなのですが、ファイル名のみに変えられませんでしょうか?phpで出力してる部分が見つからなかったので差分はなしです(^^;
- sha
あ、ほんとだ。どうしよう。表示部分は、一番最初のRatbetaさんの修正とほとんど同じなのですが、これって画像かどうかで動作を変えないといけないのかな?
- sha
いやぁ、姑息な技で対応してしまいましたぁ。cvscheck.inc.php.9を御利用下さい。
元々画像を表示したかったわけではないので、ファイル名の見かけは変わらなくとも拡張子で画像だと判断されないようにしてみました。要するに、各ファイル名の最後に をくっつけました ![[huh]](image/face/huh.png)
- Ratbeta?
リンクの方の仕様だったんですね。てっきりcvscheck.inc.phpの方で設定しているものと思い込んでしまって…。失礼致しました。
- Ratbeta?
いろいろ修正してみました。個人の好みがあるので使用するのは適当にしてください。
24行目 : 修正前
'title_name' => 'plugin',
24行目 : 修正後
'title_name' => 'name',
117行目 : 修正前
$outs[] = "|[[$s :$url/$s]]|$lver|$cver|\n";
117行目 : 修正後
if(eregi('\.[gp][in][fg]$',$s)){
$curl = "$url/$s?rev=$cver&content-type=text/vnd.viewcvs-markup";
}else{
$curl = "http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/*checkout*/pukiwiki/pukiwiki/$s?rev=$cver&content-type=text/plain";
}
if(eregi('\.[gp][in][fg]$',$s)){
if(!$lver){
$lver = "not found";
$lurl = "$url/$s?";
}else{
$lurl = "$url/$s?rev=$lver&content-type=text/vnd.viewcvs-markup";
}
}else{
$lurl = "http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/*checkout*/pukiwiki/pukiwiki/$s?rev=$lver&content-type=text/plain";
}
$outs[] = "|[[$s :$url/$s]]|[[$lver:$lurl]]|[[$cver:$curl]]|\n";
150(165)行目 : 修正前
$outs[] = '|'. $s . $file .'|'. $lver ."|\n";
150(165)行目 : 修正後
$outs[] = '|[['. $s . $file .':http://pukiwiki.org/?%E8%87%AA%E4%BD%9C%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%2F'. $file .']]|'. $lver ."|\n";
- sha
上の差分を見た感想です。多機能になっていて、すばらしいです。ただ、いくつか難点があります。例えば、ローカルバージョンは設置者が修正して独自に振っている場合があることや、自作プラグインがpukiwiki.orgにあるとは限らない点です(現に私も独自の修正をしたり公開してないプラグインを設置したりしてますし、そもそも旧バージョンは設置済みなのだから取得する必要はないのでは?)。あと、できれば画像の判定はバージョン比較の本質じゃないのでなるべくしたくないものです。でも、'not found'表示と、$curlはいいアイデアなので是非取り込みたいです。cvscheck.inc.php.10にて対応。
- Ratbeta?
画像の判定はバージョンの比較に使用するものではありません。画像だけCVSの表示パスが変わるので…。ちなみにこの判定をしない場合、プレーンテキストとして表示してしまいます。PukiWiki.orgへのリンクを設定したのは、最新版がそこにある(可能性が高い)からです。正規表現でPukiWikiにページが存在するかどうかを見るのも良いかもしれません。CVSの独自修正版も同じく(正規表現とか私は得意じゃないので…)。
- sha
画像の判定がバージョン比較と関係ないので遠慮したかったのですよ。その点では、cvscheck.inc.php.10は画像判定してませんが、そこそこうまくいってるんじゃないかなと思います。それから、pukiwiki.orgへのリンクが存在する可能性が高いのは私も納得します。その機能が実装できれば便利ですしね。でも実際に存在しなかった場合に宛先のないリンクが出てしまうのが、公開プラグインとしてはとってもまずいです。クリックすると新規ページが作られてしまいます。それを避けるために事前に確認するとなると、該当ファイルごとにネットワークアクセスが発生して表示が著しく遅いものになってしまいます(本当に遅いです)。それもまた避けたいところです。そのあたりも考えてみますと、上のRatbetaさんの提案の中ではcvscheck.inc.php.10で取り込んだ部分までが現実的だと思います。
- Ratbeta?
独自修正版は、CVSとバージョンを比較して、CVSのバージョンより高ければ表示しない、というのはどうでしょうか?
- sha
なるほど、独自修正版についてはそういう手もありますね。でも、そもそも旧バージョンを取得しやすくするのは間違いのもとだと思いませんか?「入手したら同じものだった」というケアレスミスを誘発しやすくなります。そもそも押してはいけないボタンは付けないのがGUIとして親切だと言われています。旧バージョンが欲しい場合にはファイル名をクリックすれば行くことは出来ますので手段は用意されてますし。。。
- Ratbeta?
表示してリンクだけ外してしまう、というのはどうでしょうか?これなら旧バージョンを入れる可能性も少なくて済むと思うのですが…。
- Ratbeta?
同じく独自修正版ですが、SourceForge?側で用意されている差分のURLを追加する、というのも効果的かもしれません。pukiwiki.ini.phpなどの設定ファイルなんかでも差分を使うと修正しやすいですし。
- Ratbeta?
説明不足でしたね。独自修正版の差分ではなくて、CVS版の旧バージョンと新バージョンの間の差分です。毎度毎度DLして修正して…では面倒だと思いますので。勿論、独自修正版でなくても有る方がいいかも知れません。
- merlin?
CVSへ行けば 旧バージョンとの差分が取れるので CVSへのURLだけでいいと思います。そこからどうするかは ユーザーの部分になるのでは? 私の場合、独自部分はパッチにしてあるので新バージョンに対してそれを当てるって感じで運営しています。ただ 修正が大きくて当たらない場合も結構あるし、たいてい独自部分は、修正される部分とぶつかることが多いので どっちからやってもうまく当たらない可能性が高いかなぁなんて思ってます。
- sha
pukiwiki.orgの自作プラグインにページが存在するかどうかを、表示時間への影響を少なくチェックできる方法を思いつきました。Ratbetaさんの提案機能がうまく実装できるかも!今時間がないので後日。