[#11952] NORETURN — "Nobuyoshi.Nakada" <nobu.nakada@...>

なかだです。

24 messages 2001/01/10
[#11956] Re: NORETURN — WATANABE Hirofumi <eban@...> 2001/01/10

わたなべです.

[#11957] Re: NORETURN — matz@... (Yukihiro Matsumoto) 2001/01/10

まつもと ゆきひろです

[#11958] Re: NORETURN — WATANABE Hirofumi <eban@...> 2001/01/10

わたなべです.

[#11959] CVS branches (Re: Re: NORETURN) — matz@... (Yukihiro Matsumoto) 2001/01/10

[#12087] string#index, gsub, []= のバグ? — Beyond <beyond@...>

18 messages 2001/01/27
[#12091] Re: string#index, gsub, []= のバグ? — matz@... (Yukihiro Matsumoto) 2001/01/27

まつもと ゆきひろです

[ruby-dev:12004] Ruby CVS commit mail

From: "Akinori MUSHA" <knu@...>
Date: 2001-01-13 05:35:45 UTC
List: ruby-dev #12004
 こんにちは。

 Ruby の commit mail のセットアップが一通りできました。RAA にも
登録されている cvsmailer にいろいろと手を入れて使わせていただき
ました。中嶋 さんや ringo さんにはこの場を借りてお礼申し上げます。

 サンプルとしては、次のようなメールを出します。お使いのメール
エージェントや procmail 等の振り分けの参考にしてください。

> From: knu@ruby-lang.org
> Date: Sat Jan 13 02:56:12 UTC 2001
> Subject: [ruby-cvs] CVSROOT: Sync with www/CVSROOT.
> To: cvs-admin@ruby-lang.org
> Sender: knu@ruby-lang.org
> X-Ruby-CVS-User: knu
> X-Ruby-CVS-Root: /ruby
> X-Ruby-CVS-Module: CVSROOT
> X-Ruby-CVS-Branch: HEAD
> 
> knu         Sat Jan 13 02:56:12 UTC 2001
> 
>   Module:
>     /ruby/CVSROOT
>   Modified files:
>     loginfo loginfo.rb
>   Log:
>     Sync with www/CVSROOT.
>   
>   Revision  Changes    Path
>   1.7       +2   -2    CVSROOT/loginfo
>   1.8       +213 -192  CVSROOT/loginfo.rb

このメールは CVSROOT モジュールの更新なので

	To: cvs-admin@ruby-lang.org

になっていますが、 ruby モジュールの更新の場合は

	To: ruby-cvs@ruby-lang.org

(予定)になります。

 レポジトリが /ruby でなく /www の場合も同様です。

 差分は付けないのか、という御質問がありましたが、サイズがでかく
なるので、 committer が多い(そして増えていく)現状には即さないと
思い、付けていません。

 それでも「いや、何としてもすぐに差分が見たい」という人のために、
FreeBSD 方面で使われているスクリプトからの派生バージョンを末尾に
添付しました。

 これは Warner Losh が Perl で書いたものを Brian Feldman が
Ruby に移植し、私が汎用化して Ruby の commit mail に対応させる
などいろいろと改良を加えたものです。処理内容は、 commit mail を
(何通でも)標準入力から受け取り、 cvs または rcsdiff を用いて
差分を取得し、標準出力に吐き出すというものです。

 使い方は、たとえば Emacs lisp によるメールエージェントの多くは
サマリー画面で | (pipe) を押すとカーソル上のメールをパイプで
任意のコマンドに渡す機能がありますので、 | を押して cm2diff と
コマンド名を入れてやれば差分が自動的に抽出されて新しいバッファに
出現するわけです。

 引数を指定するとそのまま cvs diff または rcsdiff に渡ります。
-c を付ければ context diff, -u を付ければ unified diff といった
具合。

 Windows 環境などでは、メールエージェントにパイプ機能がない
かもしれませんが、もしメールサーバで procmail などを使っている
場合は、そこでメールの末尾に差分を付け足すようなことができる
でしょう。(@ruby-lang.org のアドレスを持っている人は helium で
やるとか)


 またこれを応用すれば、 CVSweb の差分表示画面の URL を生成する
スクリプトを書くのも簡単だと思います。


 それでは、 commit mail について何か御要望・御質問等あれば遠慮
なくお願いします。

-- 
                     /
                    /__  __            Akinori.org / MUSHA.org
                   / )  )  ) )  /     FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ /  ( (__(  @ iDaemons.org / and.or.jp

"We're only at home when we're on the run, on the wing, on the fly"

#!/usr/bin/env ruby
#
# Placed into the public domain by M. Warner Losh. 1997.  Enjoy.
# Rewrote to be ruby by Brian Feldman. 2000.  Enjoy more :)
# Modified by Akinori MUSHA 2000.  Well, Ruby rules :)
#
# >    1.94      +72 -34    src/sys/i386/scsi/aic7xxx.c
#
# Turns into a lot of diffs
#
# $Id: cm2diff,v 1.1.1.1 2001/01/13 05:11:32 knu Exp $
#

def do_diff(root, file, rev, args)
  /^(.*\.)(\d+)$/ =~ rev or return

  revold = $1
  last = $2.to_i

  next if /^(?:1\.1\.)*1\.1$/ =~ rev

  if last == 1 && rev.split('.').length & 1 == 0 	# a branch, EVILNESS
    revold.chop!
  else
    revold += (last - 1).to_s
  end

  cmd = nil

  if /:/ =~ root
    cmd = "cvs -d #{root} rdiff #{args.join ' '} -r#{revold} -r#{rev} #{file}"
  else
    cmd = "rcsdiff -u #{args.join ' '} -r#{revold} -r#{rev} #{root}/#{file},v"
  end

  if cmd
    puts cmd
    system cmd
  end
end

def main(args)
  root = ''

  STDIN.each_line do |line|
    case line
    when /^X-Ruby-CVS-Root: *(\S+)/
      root = ':pserver:anonymous@cvs.ruby-lang.org:' + $1
      #root = '/home/cvs/ruby' + $1
    when /^X-FreeBSD-CVS-Branch:/
      root = ':pserver:anoncvs@anoncvs.FreeBSD.org:/home/ncvs'
      #root = '/home/ncvs'
    when /^ *((?:\d+\.)+\d+) +\+\d+ +-\d+ +(\S+)/
      do_diff(root, $2, $1, args)
    end
  end
end

if $0 == __FILE__
  main ARGV
end

In This Thread

Prev Next