[#8166] jcode.rb for UTF-8 — WATANABE Hirofumi <Hirofumi.Watanabe@...>
わたなべです.
[#8168] {literal}#[]= — EGUCHI Osamu <eguchi@...>
えぐち@エスアンドイーです。
まつもと ゆきひろです
えぐち@エスアンドイー です。
まつもと ゆきひろです
えぐち@エスアンドイー です。
In message "[ruby-dev:8189] Re: {literal}#[]="
[#8175] yacc generated symbols — Masaki Fukushima <fukusima@...>
福嶋です。
[#8176] Multiple self assignment — Kazuhiro Yoshida <moriq.kazuhiro@...>
もりきゅうです。
まつもと ゆきひろです
もりきゅうです。
まつもと ゆきひろです
西@九大です。
まつもと ゆきひろです
西@九大です。
もりきゅうです。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
In message "[ruby-dev:8266] Re: 例外を処理する 2 項演算子"
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
[#8204] Re: [ruby-list:18281] Re: アクセス制御について — Shugo Maeda <shugo@...>
前田です。
原です。
前田です。
けいじゅ@日本ラショナルソフトウェアです.
前田です。
[#8218] append_features — gotoken@... (GOTO Kentaro)
ごとけんです
[#8234] Syntax check in test.rb — Katsuyuki Komatsu <komatsu@...>
小松です。
[#8259] Re: [ruby-list:18468] Re: Array doesn't include Comparable — ttate@...
立石です。
[#8290] [patch] autoupdate — EGUCHI Osamu <eguchi@...>
えぐち@エスアンドイーです。
まつもと ゆきひろです
[#8305] [patch] duplicated include in regex.c — Minero Aoki <aamine@...>
あおきです。
[#8315] Re: [ruby-list:18601] Re: [REQ] [].grep(pat){} ==> [].grep(pat).collect{} — Kazunori NISHI <kazunori@...>
西@九大です。
まつもと ゆきひろです
西@九大です。
まつもと ゆきひろです
西@九大です。
新井です。
まつもと ゆきひろです
新井です。
新井です。
まつもと ゆきひろです
小松です。
まつもと ゆきひろです
ごとけんです
なかだです。
[#8319] Re: Exception handling — Jun Adachi <adachi@...>
安達@沖データと申します。
西@九大です。
けいじゅ@日本ラショナルソフトウェアです.
[#8320] constants definition in extarnal files — nagai@...
永井@知能.九工大です.
In message "[ruby-dev:8320] constants definition in extarnal files"
[#8325] rdtool-0.5.2 and racc-0.9.5/racc-0.10.0 — Katsuyuki Komatsu <komatsu@...>
小松です。
[#8330] Re: Exception handling — Kazuhiro Yoshida <moriq.kazuhiro@...>
もりきゅうです。
[#8332] Re: Exception handling — Kazuhiro Yoshida <moriq.kazuhiro@...>
もりきゅうです。
[#8353] Regexp <=> — Kazuhiro Nishiyama <nishiyama@...1.tiki.ne.jp>
こんばんは、ZnZです。
まつもと ゆきひろです
こんばんは、ZnZです。
まつもと ゆきひろです
[#8366] Re: Exception handling — Kazuhiro Yoshida <moriq.kazuhiro@...>
もりきゅうです。
[#8375] File test methods for Stat — nobu.nakada@...
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
[#8445] [PATCH] Ruby/Tk and ... — Koji Arai <JCA02266@...>
新井です。
新井です。
永井@知能.九工大です.
[#8446] [REQ] {enumerable, integer, range}.rand — Kazunori NISHI <kazunori@...>
西@九大です。
まつもと ゆきひろです
西@九大です。
まつもと ゆきひろです
西@九大です。
まつもと ゆきひろです
西@九大です。
まつもと ゆきひろです
西@九大です。
まつもと ゆきひろです
これつぐです。
まつもと ゆきひろです
[#8451] new Hash (Re: [ruby-list:19043]) — Wakou Aoyama <wakou@...>
青山です。
原です。
松で
青山です。
[ruby-dev:8291] Get specified branch via cvsweb
小松です。
CVSでつなげられない環境のために、cvsweb経由で特定のBranchの
ファイルを取得するスクリプトを書いてみました。
# まだ、ディレクトリを見るところまで行ってないので、ファイルの
# 増減などには対応できません。
タイムスタンプが違うと常にファイルを取ってきてしまいますので、
自分の変更を消してしまわないように気をつけてください。
なお、必要なら$proxyの行、
$proxy = nil # 'http://proxy.foo.xx.jp:8080/'
を環境に合わせてください。
ruby-1.4.2.tar.gzをベースとしてruby-1.5.0のファイル群を
取得する場合は、
% tar xzvf ruby-1.4.2.tar.gz
% mv ruby-1.4.2 ruby-1.5.0
% cd ruby-1.5.0
% rm missing/fnmatch.*
% find * -type f \! -name configure -exec cvsget.rb '{}' \;
のような感じで、ruby-1.4.3のファイル群を取得する場合は、
% tar xzvf ruby-1.4.2.tar.gz
% mv ruby-1.4.2 ruby-1.4.3
% cd ruby-1.4.3
% find * -type f \! -name configure -exec cvsget.rb '{}' ruby_1_4 \;
のような感じです。
--
小松克行 / Katsuyuki Komatsu <komatsu@sarion.co.jp>
#!/usr/local/bin/ruby
# cvsget.rb - Get specified branch via cvsweb
#
# REQUIRE
# o library
# html-parser-19990912
# http-access-0.0.4
# o command
# gzip
#
# USAGE
# cvsget.rb FILE [TAG]
#
# FILE File name.
# TAG CVS tag, branch or revision.
#
# EXAMPLE
# cvsget.rb hash.c
# Get the latest revision (HEAD) of hash.c.
# cvsget.rb eval.c ruby_1_4
# Get the latest revision of eval.c on the ruby_1_4 branch.
# cvsget.rb ext/extmk.rb.in 1.2
# Get the revision 1.2 of ext/extmk.rb.in.
#
# NOTE
# 'cvsget.rb' was tested with cvsweb-108-DEB only.
require 'parsedate'
require 'sgml-parser'
require 'url-parse'
require 'http-access'
$proxy = nil # 'http://proxy.foo.xx.jp:8080/'
$baseurl = 'http://cvs.netlab.co.jp/cgi-bin/cvsweb/ruby/'
$basepath = URL.new($baseurl).path
$gunzip = 'gzip -d -f'
class CVSWebLogParser < SGMLParser
def initialize(verbose = nil)
super(verbose)
@scan_tags = false
@anchor = nil
@description = nil
@revisions = []
@last_anchor = nil
@last_description = nil
end
def revisions
@revisions
end
def handle_data(data)
@description << data if @description
end
def append_revision
@date = nil
@tags = []
@description.split('\n').each { |s|
if !@date
@date = s.sub(/\(.*\)/, '').strip
@tags << 'HEAD' if s =~ /\(vendor branch\)/
elsif s =~ /CVS Tags:|Branch:/
@tags += s.gsub(/\s*(CVS Tags:|Branch:)\s*/, '').split(/\s*[;,]\s*/)
end
}
@revisions << [@last_anchor, @last_description, @date, @tags]
@scan_tags = false
end
def anchor_bgn(href)
append_revision if @scan_tags
@anchor = href
@description = ''
end
def anchor_end
if @anchor && @description
@anchor = $1 if @anchor =~ /^"(.*)"$/
if @anchor.length > @description.length
if @anchor =~ /^#{$basepath}/ && @anchor =~ /\=#{@description}$/
@scan_tags = true
@last_anchor = @anchor
@last_description = @description
@description = ''
else
@description = nil
end
end
@anchor = nil
end
end
def start_a(attrs)
href = nil
for attrname, value in attrs
value = value.strip
if attrname == 'href'
href = value
end
end
anchor_bgn(href)
end
def end_a
anchor_end
end
def start_pre(attrs)
append_revision if @scan_tags
end
end
def getrevision(file, tag)
p = CVSWebLogParser.new
url = URL.new($baseurl + file)
h = HTTPAccess.new(url.netloc, url.port, $proxy)
h.request_get(url.path, 'User-Agent'=>"cvsget.rb/ruby#{VERSION}")
response = h.get_response
return response[1] + ' ' + response[2], nil if response[1] != '200'
h.get_data { |data| p.feed data }
p.revisions.each { |x|
# year, mon, mday, hour, min, sec, zone, wday = ParseDate.parsedate(x[2])
return x[1], Time.gm(*ParseDate.parsedate(x[2])[0..5]) if x[1] == tag
x[3].each { |t|
return x[1], Time.gm(*ParseDate.parsedate(x[2])[0..5]) if t == tag
}
}
p.close
return nil, nil
end
def getcvsfile(file, rev)
url = URL.new($baseurl + file)
path = ''
path << url.path << '?rev=' << rev
h = HTTPAccess.new(url.netloc, url.port, $proxy)
h.request_get(path, 'User-Agent'=>"cvsget.rb/ruby#{VERSION}")
response = h.get_response
if response[1] != '200'
STDERR.print file, ': ', response[1], ' ', response[2], "\n"
return false
end
begin
f = open(file + '.gz', 'wb')
rescue
STDERR.print file, ': ', $!, "\n"
return false
end
h.get_data { |data| f.print data }
f.close
return true
end
def getfile(file, tag)
STDOUT.print 'Checking ', file, ' ', tag, ' '
STDOUT.flush
rev, revdate = getrevision(file, tag)
p [rev, revdate]
if !rev || !revdate
STDERR.print file, ": No CVS entry\n"
return false
end
begin
fstat = File.stat(file)
# Don't use 'fstat.mtime.to_i == revdate.to_i'
# to work with DOS time resolution file system.
if (fstat.mtime.to_i - revdate.to_i).abs <= 1
STDOUT.print 'Skip ', file, ' ["local", ', fstat.mtime, "]\n"
return true
end
STDOUT.print 'Fetching ', file, ' ["local", ', fstat.mtime, "]\n"
rescue
STDOUT.print 'Fetching ', file, " [No local file]\n"
end
gunzipcmd = $gunzip
gunzipcmd << ' ' << file << '.gz'
return false unless getcvsfile(file, rev)
File.utime revdate.to_i, revdate.to_i, file + '.gz'
return false unless system(gunzipcmd)
return true
end
file = ARGV.shift
tag = ARGV.shift
if !file || ARGV[0]
STDERR.print 'Usage: ', $0, " FILE [TAG]\n"
exit 1
end
tag = 'HEAD' unless tag
exit 2 unless getfile(file, tag)