[前][次][番号順一覧][スレッド一覧]

ruby-changes:37624

From: nobu <ko1@a...>
Date: Mon, 23 Feb 2015 23:20:08 +0900 (JST)
Subject: [ruby-changes:37624] nobu:r49705 (trunk): vcs.rb: do not use -C for older git

nobu	2015-02-23 23:19:45 +0900 (Mon, 23 Feb 2015)

  New Revision: 49705

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=49705

  Log:
    vcs.rb: do not use -C for older git
    
    * tool/vcs.rb (IO.popen): support :chdir option.
    * tool/vcs.rb (VCS::GIT.get_revisions): use :chdir option instead
      of -C option which is not supported by older git.
      [ruby-dev:48880] [Bug #10890]

  Modified files:
    trunk/ChangeLog
    trunk/tool/vcs.rb
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 49704)
+++ ChangeLog	(revision 49705)
@@ -1,3 +1,11 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Mon Feb 23 23:19:42 2015  Nobuyoshi Nakada  <nobu@r...>
+
+	* tool/vcs.rb (IO.popen): support :chdir option.
+
+	* tool/vcs.rb (VCS::GIT.get_revisions): use :chdir option instead
+	  of -C option which is not supported by older git.
+	  [ruby-dev:48880] [Bug #10890]
+
 Mon Feb 23 15:26:39 2015  Nobuyoshi Nakada  <nobu@r...>
 
 	* string.c (rb_str_split_m): raise ArgumentError at broken string
Index: tool/vcs.rb
===================================================================
--- tool/vcs.rb	(revision 49704)
+++ tool/vcs.rb	(revision 49705)
@@ -21,19 +21,39 @@ if RUBY_VERSION < "1.9" https://github.com/ruby/ruby/blob/trunk/tool/vcs.rb#L21
 
     if defined?(fork)
       def self.popen(command, *rest, &block)
-        if !(Array === command)
-          @orig_popen.call(command, *rest, &block)
-        elsif block
-          @orig_popen.call("-", *rest) {|f| f ? yield(f) : exec(*command)}
+        if Hash === (opts = rest[-1])
+          dir = opts.delete(:chdir)
+          rest pop if opts.empty?
+        end
+        if block
+          @orig_popen.call("-", *rest) do |f|
+            if f
+              yield(f)
+            else
+              Dir.chdir(dir) if dir
+              exec(*command)
+            end
+          end
         else
-          @orig_popen.call("-", *rest) or exec(*command)
+          f = @orig_popen.call("-", *rest)
+          unless f
+            Dir.chdir(dir) if dir
+            exec(*command)
+          end
+          f
         end
       end
     else
       require 'shellwords'
       def self.popen(command, *rest, &block)
+        if Hash === (opts = rest[-1])
+          dir = opts.delete(:chdir)
+          rest pop if opts.empty?
+        end
         command = command.shelljoin if Array === command
-        @orig_popen.call(command, *rest, &block)
+        Dir.chdir(dir || ".") do
+          @orig_popen.call(command, *rest, &block)
+        end
       end
     end
   end
@@ -255,24 +275,23 @@ class VCS https://github.com/ruby/ruby/blob/trunk/tool/vcs.rb#L275
 
     def self.get_revisions(path, srcdir = nil)
       gitcmd = %W[git]
-      gitcmd.push("-C", srcdir) if srcdir
       logcmd = gitcmd + %W[log -n1 --date=iso]
       logcmd << "--grep=^ *git-svn-id: .*@[0-9][0-9]*"
       idpat = /git-svn-id: .*?@(\d+) \S+\Z/
-      log = IO.pread(logcmd)
+      log = IO.pread(logcmd, :chdir => srcdir)
       commit = log[/\Acommit (\w+)/, 1]
       last = log[idpat, 1]
       if path
         cmd = logcmd
         cmd += [path] unless path == '.'
-        log = IO.pread(cmd)
+        log = IO.pread(cmd, :chdir => srcdir)
         changed = log[idpat, 1]
       else
         changed = last
       end
       modified = log[/^Date:\s+(.*)/, 1]
-      branch = IO.pread(gitcmd + %W[symbolic-ref HEAD])[%r'\A(?:refs/heads/)?(.+)', 1]
-      title = IO.pread(gitcmd + ["log", "--format=%s", "-n1", "#{commit}..HEAD"])
+      branch = IO.pread(gitcmd + %W[symbolic-ref HEAD], :chdir => srcdir)[%r'\A(?:refs/heads/)?(.+)', 1]
+      title = IO.pread(gitcmd + %W[log --format=%s -n1 #{commit}..HEAD], :chdir => srcdir)
       title = nil if title.empty?
       [last, changed, modified, branch, title]
     end
@@ -291,14 +310,12 @@ class VCS https://github.com/ruby/ruby/blob/trunk/tool/vcs.rb#L310
 
     def stable
       cmd = %W"git for-each-ref --format=\%(refname:short) refs/heads/ruby_[0-9]*"
-      cmd[1, 0] = ["-C", @srcdir] if @srcdir
-      branch(IO.pread(cmd)[/.*^(ruby_\d+_\d+)$/m, 1])
+      branch(IO.pread(cmd, :chdir => srcdir)[/.*^(ruby_\d+_\d+)$/m, 1])
     end
 
     def branch_list(pat)
       cmd = %W"git for-each-ref --format=\%(refname:short) refs/heads/#{pat}"
-      cmd[1, 0] = ["-C", @srcdir] if @srcdir
-      IO.popen(cmd) {|f|
+      IO.popen(cmd, :chdir => srcdir) {|f|
         f.each {|line|
           line.chomp!
           yield line
@@ -308,9 +325,8 @@ class VCS https://github.com/ruby/ruby/blob/trunk/tool/vcs.rb#L325
 
     def grep(pat, tag, *files, &block)
       cmd = %W[git grep -h --perl-regexp #{tag} --]
-      cmd[1, 0] = ["-C", @srcdir] if @srcdir
       set = block.binding.eval("proc {|match| $~ = match}")
-      IO.popen([cmd, *files]) do |f|
+      IO.popen([cmd, *files], :chdir => srcdir) do |f|
         f.grep(pat) do |s|
           set[$~]
           yield s

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]