[#8168] {literal}#[]= — EGUCHI Osamu <eguchi@...>

えぐち@エスアンドイーです。

16 messages 1999/11/01
[#8172] Re: {literal}#[]= — matz@... (Yukihiro Matsumoto) 1999/11/01

まつもと ゆきひろです

[#8176] Multiple self assignment — Kazuhiro Yoshida <moriq.kazuhiro@...>

もりきゅうです。

35 messages 1999/11/01
[#8178] Re: Multiple self assignment — matz@... (Yukihiro Matsumoto) 1999/11/01

まつもと ゆきひろです

[#8212] Re: Multiple self assignment — Kazuhiro Yoshida <moriq.kazuhiro@...> 1999/11/02

もりきゅうです。

[#8213] Re: Multiple self assignment — matz@... (Yukihiro Matsumoto) 1999/11/03

まつもと ゆきひろです

[#8232] 例外を処理する 2 項演算子 — Kazunori NISHI <kazunori@...> 1999/11/05

西@九大です。

[#8233] Re: 例外を処理する 2 項演算子 — matz@... (Yukihiro Matsumoto) 1999/11/05

まつもと ゆきひろです

[#8236] Re: 例外を処理する 2 項演算子 — Kazuhiro Yoshida <moriq.kazuhiro@...> 1999/11/05

もりきゅうです。

[#8266] Re: 例外を処理する 2 項演算子 — EGUCHI Osamu <eguchi@...> 1999/11/07

えぐち@エスアンドイー です。

[#8269] Re: 例外を処理する 2 項演算子 — gotoken@... (GOTO Kentaro) 1999/11/07

In message "[ruby-dev:8266] Re: 例外を処理する 2 項演算子"

[#8271] Re: 例外を処理する 2 項演算子 — matz@... (Yukihiro Matsumoto) 1999/11/08

まつもと ゆきひろです

[#8274] Re: 例外を処理する 2 項演算子 — keiju@... (石塚圭樹) 1999/11/08

けいじゅ@日本ラショナルソフトウェアです.

[#8204] Re: [ruby-list:18281] Re: アクセス制御について — Shugo Maeda <shugo@...>

前田です。

12 messages 1999/11/02
[#8205] Re: [ruby-list:18281] Re: アクセス制御について — Shin-ichiro Hara <sinara@...> 1999/11/02

原です。

[#8315] Re: [ruby-list:18601] Re: [REQ] [].grep(pat){} ==> [].grep(pat).collect{} — Kazunori NISHI <kazunori@...>

西@九大です。

37 messages 1999/11/15
[#8316] Re: [ruby-list:18601] Re: [REQ] [].grep(pat){} ==> [].grep(pat).collect{} — matz@... (Yukihiro Matsumoto) 1999/11/15

まつもと ゆきひろです

[#8369] Re: [REQ] [].grep(pat){} ==> [].grep(pat).collect{} — Koji Arai <JCA02266@...> 1999/11/18

新井です。

[#8374] Re: [REQ] [].grep(pat){} ==> [].grep(pat).collect{} — matz@... (Yukihiro Matsumoto) 1999/11/18

まつもと ゆきひろです

[#8384] Re: [REQ] [].grep(pat){} ==> [].grep(pat).collect{} — Koji Arai <JCA02266@...> 1999/11/19

新井です。

[#8405] 1.4.3 (Re: Re: [REQ] [].grep(pat){} ==> [].grep(pat).collect{}) — matz@... (Yukihiro Matsumoto) 1999/11/24

[#8319] Re: Exception handling — Jun Adachi <adachi@...>

安達@沖データと申します。

21 messages 1999/11/16
[#8350] Re: Exception handling — Kazunori NISHI <kazunori@...> 1999/11/17

西@九大です。

[#8446] [REQ] {enumerable, integer, range}.rand — Kazunori NISHI <kazunori@...>

西@九大です。

37 messages 1999/11/29
[#8449] Re: [REQ] {enumerable, integer, range}.rand — matz@... (Yukihiro Matsumoto) 1999/11/30

まつもと ゆきひろです

[#8463] Re: [REQ] {enumerable, integer, range}.rand — Kazunori NISHI <kazunori@...> 1999/11/30

西@九大です。

[#8474] Re: [REQ] {enumerable, integer, range}.rand — matz@... (Yukihiro Matsumoto) 1999/12/01

まつもと ゆきひろです

[#8476] Re: [REQ] {enumerable, integer, range}.rand — Kazunori NISHI <kazunori@...> 1999/12/01

西@九大です。

[#8487] Re: [REQ] {enumerable, integer, range}.rand — matz@... (Yukihiro Matsumoto) 1999/12/02

まつもと ゆきひろです

[#8494] Re: [REQ] {enumerable, integer, range}.rand — Kazunori NISHI <kazunori@...> 1999/12/02

西@九大です。

[#8451] new Hash (Re: [ruby-list:19043]) — Wakou Aoyama <wakou@...>

青山です。

18 messages 1999/11/30

[ruby-dev:8291] Get specified branch via cvsweb

From: Katsuyuki Komatsu <komatsu@...>
Date: 1999-11-08 13:48:25 UTC
List: ruby-dev #8291
小松です。

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)

In This Thread

Prev Next