The installer again -- further tests.

Hugh Sasse Staff Elec Eng hgs at dmu.ac.uk
Fri Dec 17 10:37:56 EST 2004


I think I have traced the problem to the backup function.
This seems to be treated as if it is to backup file to file, instead
of file to directory.  When doing an install patched as below I get

ruby ./bin/vim-ruby-install.rb

Possible Vim installation directories:
   1) /usr/local/share/vim/vim63

Please select one (or anything else to specify another directory): 1
in install: source_path is compiler/ruby.vim
in install: target_path is /usr/local/share/vim/vim63/compiler/ruby.vim
in backup @base is ./vim-ruby-backup.10788
in backup basedir is /usr/local/share/vim/vim63/compiler/ruby.vim
in backup path is compiler/ruby.vim
in backup: source is /usr/local/share/vim/vim63/compiler/ruby.vim/compiler/ruby.vim
in backup: target is ./vim-ruby-backup.10788/compiler/ruby.vim
/usr/local/lib/ruby/1.8/fileutils.rb:859:in `stat': Not a directory - /usr/local/share/vim/vim63/compiler/ruby.vim/compiler/ruby.vim (Errno::ENOTDIR)
         from /usr/local/lib/ruby/1.8/fileutils.rb:859:in `fu_same?'
         from /usr/local/lib/ruby/1.8/fileutils.rb:838:in `fu_each_src_dest'
         from /usr/local/lib/ruby/1.8/fileutils.rb:837:in `fu_each_src_dest0'
         from /usr/local/lib/ruby/1.8/fileutils.rb:837:in `fu_each_src_dest'
         from /usr/local/lib/ruby/1.8/fileutils.rb:333:in `cp'
         from ./bin/vim-ruby-install.rb:303:in `backup'
         from ./bin/vim-ruby-install.rb:261:in `install'
         from ./bin/vim-ruby-install.rb:253:in `each'
         from ./bin/vim-ruby-install.rb:253:in `install'
         from ./bin/vim-ruby-install.rb:252:in `chdir'
         from ./bin/vim-ruby-install.rb:252:in `install'
         from ./bin/vim-ruby-install.rb:384


I'm not sure which way to fix this: make the code respect backup's
file to directory semantics or fix backup to be file to file.

         Hugh

--- ./vim-ruby-install.rb.orig	2004-10-27 13:18:10.948557000 +0100
+++ ./vim-ruby-install.rb	2004-12-17 15:30:26.634622000 +0000
@@ -1,6 +1,7 @@
  #!/usr/local/bin/ruby

  # vim-ruby-install: install the Vim config files for Ruby editing
+# vim:set sw=2 et:
  #
  #  * scope out the target directry and get user to confirm
  #    * if no directory found, ask user
@@ -52,6 +53,8 @@
        # 1. Try the current directory.
      if SOURCE_FILES.all? { |path| FileTest.file?(path) }
        return '.'
+    elsif SOURCE_FILES.map{|f| File.join(File.dirname($0), '..',f)}.all? { |path| FileTest.file?(path) }
+      return File.join(File.dirname($0), '..')
      end
        # 2. Try the gem 'vim-ruby'.
      begin
@@ -231,6 +234,9 @@
      # will be copied.  Both are strings.
    def initialize(source, target)
      @source_dir = source
+    unless FileTest.directory?(@source_dir)
+      raise "Automatically determined source directory ('#{@source_dir}') doesn't exist"
+    end
      unless FileTest.directory?(target)
        raise "Chosen target directory ('#{target}') doesn't exist"
      end
@@ -247,6 +253,8 @@
        SOURCE_FILES.each do |path|
          source_path = Pathname.new(path)
          target_path = @target_dir[path]
+        puts "in install: source_path is #{source_path.to_s}"
+        puts "in install: target_path is #{target_path.to_s}"
          if target_path.file? and target_path.mtime > source_path.mtime
              # We're going to overwrite a newer file; back it up, unless they're the same.
            unless _same_contents?(target_path, source_path)
@@ -283,10 +291,15 @@
      end
        # Copy basedir/path to @path/path.
      def backup(basedir, path)
+      puts "in backup @base is #{@base}"
+      puts "in backup basedir is #{basedir}"
+      puts "in backup path is #{path}"
        @base.mkpath unless @base.directory?
        source = Pathname.new(basedir) + path
        target = @base + path
        target.dirname.mkpath
+      puts "in backup: source is #{source.to_s}"
+      puts "in backup: target is #{target.to_s}"
        FileUtils.cp(source.to_s, target.to_s)
      end
      def [](path)
@@ -366,6 +379,7 @@
  op.parse!(ARGV)

  source_dir = Env.determine_source_directory
+if source_dir.nil? then raise "source_dir is Nil"; end
  target_dir = $options[:target_dir] || TargetDirectory.finder.find_target_directory
  VimRubyInstaller.new(source_dir, target_dir).install




More information about the vim-ruby-devel mailing list