3

Prescript: 驚くべきetherpadが最近オープンソース化されました。ここから入手してください: http://code.google.com/p/etherpad。これは、etherpad コードに関する StackOverflow で私が知っている最初の質問です。あなたが etherpad オープン ソース コミュニティの一員である場合、 「etherpad」とタグ付けされた質問の RSS フィードを購読することをお勧めします。

私の実際の質問は、自分のサーバーにetherpadがインストールされていることを前提としています:

まず、最近編集したパッドを表示するクエリを次に示します。

SELECT id,lastWriteTime,creationTime,headRev 
  FROM PAD_SQLMETA ORDER BY lastWriteTime, headRev;

または、UNIX プロンプトから実行する場合は、次のようにします。

mysql -u root -pPASSWD etherpad -e "select id,lastWriteTime,creationTime,headRev 
  from PAD_SQLMETA order by lastWriteTime, headRev"

これは便利ですが、lastWriteTime実際には、誰かがブラウザでパッドを表示するたびに更新されます。パッドを実際に最後に編集した日時で並べ替えたいと思います。実際の最終編集時刻を表示する、別のテーブルとの結合を含む複雑な SQL クエリが存在する可能性があります。誰かそれが何であるか知っていますか?または、headRev が変更されたときに通知するスクリプトを作成することもできますが、これは最もクリーンな方法とは思えません。

4

1 に答える 1

1

元の質問に対する答えはまだわかりませんが、同様のことを実現するスクリプトを書きました。主な目的は、すべてのパッドのプレーン テキスト バージョンをエクスポートして、ラップトップに保存することです。副作用として、どのパッドが変更されたかが表示され、最後にエクスポートされたバージョンからの差分が表示されます。また、新しく作成されたものも表示されます。

padlist.plまず、 etherpad インスタンスをホストするサーバーで次のスクリプト を作成します。

#!/usr/bin/env perl

$list = `mysql -u root -pPASSWD etherpad -e 
         "select id from PAD_SQLMETA order by lastWriteTime DESC, headRev DESC"`;

$list =~ s/^id\s*\n//s;  # get rid of the column header mysql adds.
print $list;

fetchall.pl次に、ローカル マシンで次のスクリプト を実行します。それはあなたのすべてのパッドのスナップショットを吸い込み、どのパッドが変更され、どのパッドが新しく登場したかを教えてくれます。

#!/usr/bin/env perl

use LWP::Simple qw(get);
$| = 1;  # autoflush.
$server = "server.com"; # the server that hosts your etherpad instance.

$pads = `ssh $server etherpad/padlist.pl`;
@padlist = split(/\s+/, $pads);

$neednewline = 0; # printing "." for each pad where nothing to be done.
for(@padlist) {
  $ep = $_;
  $localfile = "$ep.txt";
  if(-e $localfile) { 
    $localexists = 1; 
    $localcontent = do {local (@ARGV,$/) = $localfile; <>};
  } else { $localexists = 0; }
  $livecontent = get("http://$server/ep/pad/export/$ep/latest?format=txt");
  if($livecontent ne $localcontent) {
    if($neednewline) { print "\n";  $neednewline = 0; }
    if($localexists) { 
      print "CHANGED: $ep\n"; 
      open(F, ">prev/$localfile") or die "Probably need to create 'prev' dir.";
      print F $localcontent;
      close(F);
    } else { print "NEW:     $ep\n"; }
    open(F, ">$localfile") or die;
    print F $livecontent;
    close(F);
  } else {
    print ".";
    $neednewline = 1;
} }

前回フェッチしてからのパッド foo の差分を表示するには:

diff prev/foo.txt foo.txt
于 2010-05-27T21:07:26.030 に答える