内容が変更されていないときのファイル更新について†
- ページ: BugTrack2
- 投稿者: 名無しさん
- 優先順位: 低
- 状態: 完了
- カテゴリー: その他
- 投稿日: 2007-04-04 (水) 19:00:36
- バージョン: 1.4.7
- リリース予定バージョン: 1.5.1
メッセージ†
現状、編集画面で内容を一切変更していなくても、
更新ボタンを押すと、各種更新処理がおこなわれてしまいます。
これは無駄な処理であるとともに、変更がないにもかかわらず、最終更新が書き換えられるので、
管理する側にとってもユーザー側にとってもあまり良くないように思います*1。
ソースを見るためにプラグインのsource を使わずに編集(edit)で代用している人がいる*2ので、キャンセルではなく間違って更新を押しているせいだとは思うのですが。
そこで、このような改造はどうでしょうか?
見出しから見出しまでの編集などの自作系への影響は、まだ確認してないので参考までにどうぞ。
// $Id: file.php,v 1.78 2007/02/11 05:53:30 henoheno Exp $
(変更点がないため、中略)
// Put a data(wiki text) into a physical file(diff, backup, text)
function page_write($page, $postdata, $notimestamp = FALSE)
{
global $autoalias, $aliaspage;
if (PKWK_READONLY) return; // Do nothing
$postdata = make_str_rules($postdata);
// Create and write diff
$oldpostdata = is_page($page) ? join('', get_source($page)) : '';
//分岐を追加
if ($oldpostdata == $postdata) return; // Do nothing
$diffdata = do_diff($oldpostdata, $postdata);
file_write(DIFF_DIR, $page, $diffdata);
(変更点がないため、以降省略)
ファイルの更新処理をしてしまうのは、バグと言ってしまう程のものではないので、
現状のままにするというのもありなのかもしれません*3。
なので、上にも書きましたが参考意見のひとつとしてみてください。
- 私は差分を消す目的で、変更無しの更新をかけるときがあります (^^; -- teanan
- 差分(diff)コマンドで表示した後、過去の差分を削除するためのリンクをクリックする。
認証画面でパスワードを入れる。
差分を消す
よりは楽ですからね~。 --
- ↑に追加、ただどちらにしても、バックアップのサイズが少なからず増えてしまう気が。
それと、変更が何もないのにリンク更新の処理をする*4というのはサーバーへの負荷を増やしてしまうことになると。 --
- 「空更新」というべき行為自体は、現状までにいくつかの役割が認識されていますが、どれもメリットとデメリットがありました。例えばその一つはRecentChangesの上位にそのページを掲載して、注意を促す事(未処理のBugTrackがそうしてピックアップされる事もありました)。Wikiはあらゆるアクションが基本的にはエネルギーに変わるので、ほどほどであればあまり問題ではありませんでした。しかしあまり脈絡のない空postが多くあると、rssやRecentChangesを購読している人が萎えます。もう一つはteananさんが言われている、diffのクリアです。いたずらを直したときにその痕跡を(ある程度)隠すことでWikiに落ち着いた感じを与える事ができますが、いたずらをする方がその痕跡を(ある程度)隠すことにも使えます。実際にURL貼り付けspamに悪用されています。 -- henoheno
- ここで挙げられているのは、恐らく別の視点のデメリット、というか単純な無駄の指摘ですよね。ツッコミありがとうございます。 -- henoheno
- いま最初に挙げたとおりで、このアクションにメリットが無いとも言い切れませんが、デメリットの方を強く感じるような環境や、場面があると思います。利用感覚に関する互換性も考慮すると、(今回挙げられたような単純な無駄は省けるようにした上で)どっちがいいかを管理者が選べるようにするのがスマートな道なのではないかと思います。いかがでしょうか。 -- henoheno
- 回答ありがとうございます。返答が遅れてしまい、すみません。
henoheno さんの言うとおり、各管理者が変更できる方がいいと思います。
あと、上の例ではほぼすべての処理をキャンセルしていますが、実際に実装する時はどうするか、というぐらいでしょうか。
同じようにするのか、それともdiffやbackup、wiki textの更新など、それぞれに分岐を作るのか。 --
- 対応しました。「管理者が挙動を選択できるように」が柔軟性は高いですが、簡単のために、一旦「同内容での更新は更新無し扱いとし、何もしない(仕様変更)」とします。不都合が大きいようであれば再度仕様変更を検討します -- umorigu
- 管理者が挙動を選択するにはページごとでは無く全体で管理ならば変数をひとつ増やすだけではいいのでは -- -
- define() や globalで定義した$nodiff_refreshの真偽値を確認して処理を進めれば後の布石になりませんかね -- -
- 実装はご指摘の通りです。ただ設定値をpukiwiki.ini.phpに追加して切り替えるほどよく使いたい機能でもないように考えましたので、単純に仕様変更としました。ほとんどのケースで「同内容での更新はキャンセル扱い」で問題にならないと思っています -- umorigu