codemodels-ruby 0.1.5-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +3 -0
 - data/Gemfile +3 -0
 - data/README.md +6 -0
 - data/Rakefile +13 -0
 - data/codemodels-ruby.gemspec +33 -0
 - data/lib/codemodels/ruby.rb +12 -0
 - data/lib/codemodels/ruby/code.rb +14 -0
 - data/lib/codemodels/ruby/info_extraction.rb +100 -0
 - data/lib/codemodels/ruby/language.rb +17 -0
 - data/lib/codemodels/ruby/metamodel.rb +481 -0
 - data/lib/codemodels/ruby/model_building.rb +36 -0
 - data/lib/codemodels/ruby/parser.rb +809 -0
 - data/lib/codemodels/ruby/query.rb +25 -0
 - data/lib/jars/com.google.collect_1.0.0.v201105210816.jar +0 -0
 - data/lib/jars/com.google.inject_2.0.0.v201105231817.jar +0 -0
 - data/lib/jars/com.ibm.icu_4.4.2.v20110208.jar +0 -0
 - data/lib/jars/org.apache.commons.lang_2.4.0.v201005080502.jar +0 -0
 - data/lib/jars/org.apache.commons.logging_1.1.1.jar +0 -0
 - data/lib/jars/org.apache.log4j_1.2.16.jar +0 -0
 - data/lib/jars/org.eclipse.core.runtime.compatibility_3.2.100.v20100505.jar +0 -0
 - data/lib/jars/org.eclipse.core.runtime_3.7.0.v20110110.jar +0 -0
 - data/test/data/012_add_comments_permissions.rb +14 -0
 - data/test/data/darcs_adapter.rb +242 -0
 - data/test/data/example_of_complex_class.rb +157 -0
 - data/test/data/issues_helper_test.rb +271 -0
 - data/test/data/status_test.rb +14 -0
 - data/test/data/user_custom_field.rb +23 -0
 - data/test/helper.rb +87 -0
 - data/test/test_assignments.rb +14 -0
 - data/test/test_blocks.rb +102 -0
 - data/test/test_constants.rb +14 -0
 - data/test/test_exception_handling.rb +35 -0
 - data/test/test_info.rb +52 -0
 - data/test/test_logic.rb +61 -0
 - data/test/test_metamodel.rb +70 -0
 - data/test/test_modules_and_classes.rb +81 -0
 - data/test/test_not_variable_assignements.rb +75 -0
 - data/test/test_operations.rb +440 -0
 - data/test/test_parsing_complex.rb +49 -0
 - data/test/test_parsing_literals.rb +92 -0
 - data/test/test_statements.rb +169 -0
 - data/test/test_terms_extraction.rb +240 -0
 - data/test/test_values_extraction.rb +102 -0
 - data/test/test_variables.rb +81 -0
 - metadata +272 -0
 
| 
         @@ -0,0 +1,25 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module CodeModels
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Ruby
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            	def self.is_call(node,name=nil,args=nil)
         
     | 
| 
      
 6 
     | 
    
         
            +
            		return false unless node.is_a? Ruby::Call
         
     | 
| 
      
 7 
     | 
    
         
            +
            		return false if name and node.name!=name
         
     | 
| 
      
 8 
     | 
    
         
            +
            		if args
         
     | 
| 
      
 9 
     | 
    
         
            +
            			return false if args.count != node.args.count
         
     | 
| 
      
 10 
     | 
    
         
            +
            			for i in 0..(args.count-1)
         
     | 
| 
      
 11 
     | 
    
         
            +
            				return false unless args[i].eql?(node.args[i])
         
     | 
| 
      
 12 
     | 
    
         
            +
            			end
         
     | 
| 
      
 13 
     | 
    
         
            +
            		end
         
     | 
| 
      
 14 
     | 
    
         
            +
            		true
         
     | 
| 
      
 15 
     | 
    
         
            +
            	end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            	def self.is_def(node,name=nil)
         
     | 
| 
      
 18 
     | 
    
         
            +
            		return false unless node.is_a? Ruby::Def
         
     | 
| 
      
 19 
     | 
    
         
            +
            		return false if name and node.name!=name
         
     | 
| 
      
 20 
     | 
    
         
            +
            		true
         
     | 
| 
      
 21 
     | 
    
         
            +
            	end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            end
         
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         @@ -0,0 +1,14 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class AddCommentsPermissions < ActiveRecord::Migration
         
     | 
| 
      
 2 
     | 
    
         
            +
              # model removed
         
     | 
| 
      
 3 
     | 
    
         
            +
              class Permission < ActiveRecord::Base; end
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              def self.up
         
     | 
| 
      
 6 
     | 
    
         
            +
                Permission.create :controller => "news", :action => "add_comment", :description => "label_comment_add", :sort => 1130, :is_public => false, :mail_option => 0, :mail_enabled => 0
         
     | 
| 
      
 7 
     | 
    
         
            +
                Permission.create :controller => "news", :action => "destroy_comment", :description => "label_comment_delete", :sort => 1133, :is_public => false, :mail_option => 0, :mail_enabled => 0
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              def self.down
         
     | 
| 
      
 11 
     | 
    
         
            +
                Permission.where("controller=? and action=?", 'news', 'add_comment').first.destroy
         
     | 
| 
      
 12 
     | 
    
         
            +
                Permission.where("controller=? and action=?", 'news', 'destroy_comment').first.destroy
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,242 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Redmine - project management software
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright (C) 2006-2013  Jean-Philippe Lang
         
     | 
| 
      
 3 
     | 
    
         
            +
            #
         
     | 
| 
      
 4 
     | 
    
         
            +
            # This program is free software; you can redistribute it and/or
         
     | 
| 
      
 5 
     | 
    
         
            +
            # modify it under the terms of the GNU General Public License
         
     | 
| 
      
 6 
     | 
    
         
            +
            # as published by the Free Software Foundation; either version 2
         
     | 
| 
      
 7 
     | 
    
         
            +
            # of the License, or (at your option) any later version.
         
     | 
| 
      
 8 
     | 
    
         
            +
            #
         
     | 
| 
      
 9 
     | 
    
         
            +
            # This program is distributed in the hope that it will be useful,
         
     | 
| 
      
 10 
     | 
    
         
            +
            # but WITHOUT ANY WARRANTY; without even the implied warranty of
         
     | 
| 
      
 11 
     | 
    
         
            +
            # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
         
     | 
| 
      
 12 
     | 
    
         
            +
            # GNU General Public License for more details.
         
     | 
| 
      
 13 
     | 
    
         
            +
            #
         
     | 
| 
      
 14 
     | 
    
         
            +
            # You should have received a copy of the GNU General Public License
         
     | 
| 
      
 15 
     | 
    
         
            +
            # along with this program; if not, write to the Free Software
         
     | 
| 
      
 16 
     | 
    
         
            +
            # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            require 'redmine/scm/adapters/abstract_adapter'
         
     | 
| 
      
 19 
     | 
    
         
            +
            require 'rexml/document'
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            module Redmine
         
     | 
| 
      
 22 
     | 
    
         
            +
              module Scm
         
     | 
| 
      
 23 
     | 
    
         
            +
                module Adapters
         
     | 
| 
      
 24 
     | 
    
         
            +
                  class DarcsAdapter < AbstractAdapter
         
     | 
| 
      
 25 
     | 
    
         
            +
                    # Darcs executable name
         
     | 
| 
      
 26 
     | 
    
         
            +
                    DARCS_BIN = Redmine::Configuration['scm_darcs_command'] || "darcs"
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                    class << self
         
     | 
| 
      
 29 
     | 
    
         
            +
                      def client_command
         
     | 
| 
      
 30 
     | 
    
         
            +
                        @@bin    ||= DARCS_BIN
         
     | 
| 
      
 31 
     | 
    
         
            +
                      end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                      def sq_bin
         
     | 
| 
      
 34 
     | 
    
         
            +
                        @@sq_bin ||= shell_quote_command
         
     | 
| 
      
 35 
     | 
    
         
            +
                      end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                      def client_version
         
     | 
| 
      
 38 
     | 
    
         
            +
                        @@client_version ||= (darcs_binary_version || [])
         
     | 
| 
      
 39 
     | 
    
         
            +
                      end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                      def client_available
         
     | 
| 
      
 42 
     | 
    
         
            +
                        !client_version.empty?
         
     | 
| 
      
 43 
     | 
    
         
            +
                      end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                      def darcs_binary_version
         
     | 
| 
      
 46 
     | 
    
         
            +
                        darcsversion = darcs_binary_version_from_command_line.dup
         
     | 
| 
      
 47 
     | 
    
         
            +
                        if darcsversion.respond_to?(:force_encoding)
         
     | 
| 
      
 48 
     | 
    
         
            +
                          darcsversion.force_encoding('ASCII-8BIT')
         
     | 
| 
      
 49 
     | 
    
         
            +
                        end
         
     | 
| 
      
 50 
     | 
    
         
            +
                        if m = darcsversion.match(%r{\A(.*?)((\d+\.)+\d+)})
         
     | 
| 
      
 51 
     | 
    
         
            +
                          m[2].scan(%r{\d+}).collect(&:to_i)
         
     | 
| 
      
 52 
     | 
    
         
            +
                        end
         
     | 
| 
      
 53 
     | 
    
         
            +
                      end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                      def darcs_binary_version_from_command_line
         
     | 
| 
      
 56 
     | 
    
         
            +
                        shellout("#{sq_bin} --version") { |io| io.read }.to_s
         
     | 
| 
      
 57 
     | 
    
         
            +
                      end
         
     | 
| 
      
 58 
     | 
    
         
            +
                    end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                    def initialize(url, root_url=nil, login=nil, password=nil,
         
     | 
| 
      
 61 
     | 
    
         
            +
                                   path_encoding=nil)
         
     | 
| 
      
 62 
     | 
    
         
            +
                      @url = url
         
     | 
| 
      
 63 
     | 
    
         
            +
                      @root_url = url
         
     | 
| 
      
 64 
     | 
    
         
            +
                    end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                    def supports_cat?
         
     | 
| 
      
 67 
     | 
    
         
            +
                      # cat supported in darcs 2.0.0 and higher
         
     | 
| 
      
 68 
     | 
    
         
            +
                      self.class.client_version_above?([2, 0, 0])
         
     | 
| 
      
 69 
     | 
    
         
            +
                    end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                    # Get info about the darcs repository
         
     | 
| 
      
 72 
     | 
    
         
            +
                    def info
         
     | 
| 
      
 73 
     | 
    
         
            +
                      rev = revisions(nil,nil,nil,{:limit => 1})
         
     | 
| 
      
 74 
     | 
    
         
            +
                      rev ? Info.new({:root_url => @url, :lastrev => rev.last}) : nil
         
     | 
| 
      
 75 
     | 
    
         
            +
                    end
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                    # Returns an Entries collection
         
     | 
| 
      
 78 
     | 
    
         
            +
                    # or nil if the given path doesn't exist in the repository
         
     | 
| 
      
 79 
     | 
    
         
            +
                    def entries(path=nil, identifier=nil, options={})
         
     | 
| 
      
 80 
     | 
    
         
            +
                      path_prefix = (path.blank? ? '' : "#{path}/")
         
     | 
| 
      
 81 
     | 
    
         
            +
                      if path.blank?
         
     | 
| 
      
 82 
     | 
    
         
            +
                        path = ( self.class.client_version_above?([2, 2, 0]) ? @url : '.' )
         
     | 
| 
      
 83 
     | 
    
         
            +
                      end
         
     | 
| 
      
 84 
     | 
    
         
            +
                      entries = Entries.new
         
     | 
| 
      
 85 
     | 
    
         
            +
                      cmd = "#{self.class.sq_bin} annotate --repodir #{shell_quote @url} --xml-output"
         
     | 
| 
      
 86 
     | 
    
         
            +
                      cmd << " --match #{shell_quote("hash #{identifier}")}" if identifier
         
     | 
| 
      
 87 
     | 
    
         
            +
                      cmd << " #{shell_quote path}"
         
     | 
| 
      
 88 
     | 
    
         
            +
                      shellout(cmd) do |io|
         
     | 
| 
      
 89 
     | 
    
         
            +
                        begin
         
     | 
| 
      
 90 
     | 
    
         
            +
                          doc = REXML::Document.new(io)
         
     | 
| 
      
 91 
     | 
    
         
            +
                          if doc.root.name == 'directory'
         
     | 
| 
      
 92 
     | 
    
         
            +
                            doc.elements.each('directory/*') do |element|
         
     | 
| 
      
 93 
     | 
    
         
            +
                              next unless ['file', 'directory'].include? element.name
         
     | 
| 
      
 94 
     | 
    
         
            +
                              entries << entry_from_xml(element, path_prefix)
         
     | 
| 
      
 95 
     | 
    
         
            +
                            end
         
     | 
| 
      
 96 
     | 
    
         
            +
                          elsif doc.root.name == 'file'
         
     | 
| 
      
 97 
     | 
    
         
            +
                            entries << entry_from_xml(doc.root, path_prefix)
         
     | 
| 
      
 98 
     | 
    
         
            +
                          end
         
     | 
| 
      
 99 
     | 
    
         
            +
                        rescue
         
     | 
| 
      
 100 
     | 
    
         
            +
                        end
         
     | 
| 
      
 101 
     | 
    
         
            +
                      end
         
     | 
| 
      
 102 
     | 
    
         
            +
                      return nil if $? && $?.exitstatus != 0
         
     | 
| 
      
 103 
     | 
    
         
            +
                      entries.compact!
         
     | 
| 
      
 104 
     | 
    
         
            +
                      entries.sort_by_name
         
     | 
| 
      
 105 
     | 
    
         
            +
                    end
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
                    def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={})
         
     | 
| 
      
 108 
     | 
    
         
            +
                      path = '.' if path.blank?
         
     | 
| 
      
 109 
     | 
    
         
            +
                      revisions = Revisions.new
         
     | 
| 
      
 110 
     | 
    
         
            +
                      cmd = "#{self.class.sq_bin} changes --repodir #{shell_quote @url} --xml-output"
         
     | 
| 
      
 111 
     | 
    
         
            +
                      cmd << " --from-match #{shell_quote("hash #{identifier_from}")}" if identifier_from
         
     | 
| 
      
 112 
     | 
    
         
            +
                      cmd << " --last #{options[:limit].to_i}" if options[:limit]
         
     | 
| 
      
 113 
     | 
    
         
            +
                      shellout(cmd) do |io|
         
     | 
| 
      
 114 
     | 
    
         
            +
                        begin
         
     | 
| 
      
 115 
     | 
    
         
            +
                          doc = REXML::Document.new(io)
         
     | 
| 
      
 116 
     | 
    
         
            +
                          doc.elements.each("changelog/patch") do |patch|
         
     | 
| 
      
 117 
     | 
    
         
            +
                            message = patch.elements['name'].text
         
     | 
| 
      
 118 
     | 
    
         
            +
                            message << "\n" + patch.elements['comment'].text.gsub(/\*\*\*END OF DESCRIPTION\*\*\*.*\z/m, '') if patch.elements['comment']
         
     | 
| 
      
 119 
     | 
    
         
            +
                            revisions << Revision.new({:identifier => nil,
         
     | 
| 
      
 120 
     | 
    
         
            +
                                          :author => patch.attributes['author'],
         
     | 
| 
      
 121 
     | 
    
         
            +
                                          :scmid => patch.attributes['hash'],
         
     | 
| 
      
 122 
     | 
    
         
            +
                                          :time => Time.parse(patch.attributes['local_date']),
         
     | 
| 
      
 123 
     | 
    
         
            +
                                          :message => message,
         
     | 
| 
      
 124 
     | 
    
         
            +
                                          :paths => (options[:with_path] ? get_paths_for_patch(patch.attributes['hash']) : nil)
         
     | 
| 
      
 125 
     | 
    
         
            +
                                        })
         
     | 
| 
      
 126 
     | 
    
         
            +
                          end
         
     | 
| 
      
 127 
     | 
    
         
            +
                        rescue
         
     | 
| 
      
 128 
     | 
    
         
            +
                        end
         
     | 
| 
      
 129 
     | 
    
         
            +
                      end
         
     | 
| 
      
 130 
     | 
    
         
            +
                      return nil if $? && $?.exitstatus != 0
         
     | 
| 
      
 131 
     | 
    
         
            +
                      revisions
         
     | 
| 
      
 132 
     | 
    
         
            +
                    end
         
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
      
 134 
     | 
    
         
            +
                    def diff(path, identifier_from, identifier_to=nil)
         
     | 
| 
      
 135 
     | 
    
         
            +
                      path = '*' if path.blank?
         
     | 
| 
      
 136 
     | 
    
         
            +
                      cmd = "#{self.class.sq_bin} diff --repodir #{shell_quote @url}"
         
     | 
| 
      
 137 
     | 
    
         
            +
                      if identifier_to.nil?
         
     | 
| 
      
 138 
     | 
    
         
            +
                        cmd << " --match #{shell_quote("hash #{identifier_from}")}"
         
     | 
| 
      
 139 
     | 
    
         
            +
                      else
         
     | 
| 
      
 140 
     | 
    
         
            +
                        cmd << " --to-match #{shell_quote("hash #{identifier_from}")}"
         
     | 
| 
      
 141 
     | 
    
         
            +
                        cmd << " --from-match #{shell_quote("hash #{identifier_to}")}"
         
     | 
| 
      
 142 
     | 
    
         
            +
                      end
         
     | 
| 
      
 143 
     | 
    
         
            +
                      cmd << " -u #{shell_quote path}"
         
     | 
| 
      
 144 
     | 
    
         
            +
                      diff = []
         
     | 
| 
      
 145 
     | 
    
         
            +
                      shellout(cmd) do |io|
         
     | 
| 
      
 146 
     | 
    
         
            +
                        io.each_line do |line|
         
     | 
| 
      
 147 
     | 
    
         
            +
                          diff << line
         
     | 
| 
      
 148 
     | 
    
         
            +
                        end
         
     | 
| 
      
 149 
     | 
    
         
            +
                      end
         
     | 
| 
      
 150 
     | 
    
         
            +
                      return nil if $? && $?.exitstatus != 0
         
     | 
| 
      
 151 
     | 
    
         
            +
                      diff
         
     | 
| 
      
 152 
     | 
    
         
            +
                    end
         
     | 
| 
      
 153 
     | 
    
         
            +
             
     | 
| 
      
 154 
     | 
    
         
            +
                    def cat(path, identifier=nil)
         
     | 
| 
      
 155 
     | 
    
         
            +
                      cmd = "#{self.class.sq_bin} show content --repodir #{shell_quote @url}"
         
     | 
| 
      
 156 
     | 
    
         
            +
                      cmd << " --match #{shell_quote("hash #{identifier}")}" if identifier
         
     | 
| 
      
 157 
     | 
    
         
            +
                      cmd << " #{shell_quote path}"
         
     | 
| 
      
 158 
     | 
    
         
            +
                      cat = nil
         
     | 
| 
      
 159 
     | 
    
         
            +
                      shellout(cmd) do |io|
         
     | 
| 
      
 160 
     | 
    
         
            +
                        io.binmode
         
     | 
| 
      
 161 
     | 
    
         
            +
                        cat = io.read
         
     | 
| 
      
 162 
     | 
    
         
            +
                      end
         
     | 
| 
      
 163 
     | 
    
         
            +
                      return nil if $? && $?.exitstatus != 0
         
     | 
| 
      
 164 
     | 
    
         
            +
                      cat
         
     | 
| 
      
 165 
     | 
    
         
            +
                    end
         
     | 
| 
      
 166 
     | 
    
         
            +
             
     | 
| 
      
 167 
     | 
    
         
            +
                    private
         
     | 
| 
      
 168 
     | 
    
         
            +
             
     | 
| 
      
 169 
     | 
    
         
            +
                    # Returns an Entry from the given XML element
         
     | 
| 
      
 170 
     | 
    
         
            +
                    # or nil if the entry was deleted
         
     | 
| 
      
 171 
     | 
    
         
            +
                    def entry_from_xml(element, path_prefix)
         
     | 
| 
      
 172 
     | 
    
         
            +
                      modified_element = element.elements['modified']
         
     | 
| 
      
 173 
     | 
    
         
            +
                      if modified_element.elements['modified_how'].text.match(/removed/)
         
     | 
| 
      
 174 
     | 
    
         
            +
                        return nil
         
     | 
| 
      
 175 
     | 
    
         
            +
                      end
         
     | 
| 
      
 176 
     | 
    
         
            +
             
     | 
| 
      
 177 
     | 
    
         
            +
                      Entry.new({:name => element.attributes['name'],
         
     | 
| 
      
 178 
     | 
    
         
            +
                                 :path => path_prefix + element.attributes['name'],
         
     | 
| 
      
 179 
     | 
    
         
            +
                                 :kind => element.name == 'file' ? 'file' : 'dir',
         
     | 
| 
      
 180 
     | 
    
         
            +
                                 :size => nil,
         
     | 
| 
      
 181 
     | 
    
         
            +
                                 :lastrev => Revision.new({
         
     | 
| 
      
 182 
     | 
    
         
            +
                                   :identifier => nil,
         
     | 
| 
      
 183 
     | 
    
         
            +
                                   :scmid => modified_element.elements['patch'].attributes['hash']
         
     | 
| 
      
 184 
     | 
    
         
            +
                                   })
         
     | 
| 
      
 185 
     | 
    
         
            +
                                 })
         
     | 
| 
      
 186 
     | 
    
         
            +
                    end
         
     | 
| 
      
 187 
     | 
    
         
            +
             
     | 
| 
      
 188 
     | 
    
         
            +
                    def get_paths_for_patch(hash)
         
     | 
| 
      
 189 
     | 
    
         
            +
                      paths = get_paths_for_patch_raw(hash)
         
     | 
| 
      
 190 
     | 
    
         
            +
                      if self.class.client_version_above?([2, 4])
         
     | 
| 
      
 191 
     | 
    
         
            +
                        orig_paths = paths
         
     | 
| 
      
 192 
     | 
    
         
            +
                        paths = []
         
     | 
| 
      
 193 
     | 
    
         
            +
                        add_paths = []
         
     | 
| 
      
 194 
     | 
    
         
            +
                        add_paths_name = []
         
     | 
| 
      
 195 
     | 
    
         
            +
                        mod_paths = []
         
     | 
| 
      
 196 
     | 
    
         
            +
                        other_paths = []
         
     | 
| 
      
 197 
     | 
    
         
            +
                        orig_paths.each do |path|
         
     | 
| 
      
 198 
     | 
    
         
            +
                          if path[:action] == 'A'
         
     | 
| 
      
 199 
     | 
    
         
            +
                            add_paths << path
         
     | 
| 
      
 200 
     | 
    
         
            +
                            add_paths_name << path[:path]
         
     | 
| 
      
 201 
     | 
    
         
            +
                          elsif path[:action] == 'M'
         
     | 
| 
      
 202 
     | 
    
         
            +
                            mod_paths << path
         
     | 
| 
      
 203 
     | 
    
         
            +
                          else
         
     | 
| 
      
 204 
     | 
    
         
            +
                            other_paths << path
         
     | 
| 
      
 205 
     | 
    
         
            +
                          end
         
     | 
| 
      
 206 
     | 
    
         
            +
                        end
         
     | 
| 
      
 207 
     | 
    
         
            +
                        add_paths_name.each do |add_path|
         
     | 
| 
      
 208 
     | 
    
         
            +
                          mod_paths.delete_if { |m| m[:path] == add_path }
         
     | 
| 
      
 209 
     | 
    
         
            +
                        end
         
     | 
| 
      
 210 
     | 
    
         
            +
                        paths.concat add_paths
         
     | 
| 
      
 211 
     | 
    
         
            +
                        paths.concat mod_paths
         
     | 
| 
      
 212 
     | 
    
         
            +
                        paths.concat other_paths
         
     | 
| 
      
 213 
     | 
    
         
            +
                      end
         
     | 
| 
      
 214 
     | 
    
         
            +
                      paths
         
     | 
| 
      
 215 
     | 
    
         
            +
                    end
         
     | 
| 
      
 216 
     | 
    
         
            +
             
     | 
| 
      
 217 
     | 
    
         
            +
                    # Retrieve changed paths for a single patch
         
     | 
| 
      
 218 
     | 
    
         
            +
                    def get_paths_for_patch_raw(hash)
         
     | 
| 
      
 219 
     | 
    
         
            +
                      cmd = "#{self.class.sq_bin} annotate --repodir #{shell_quote @url} --summary --xml-output"
         
     | 
| 
      
 220 
     | 
    
         
            +
                      cmd << " --match #{shell_quote("hash #{hash}")} "
         
     | 
| 
      
 221 
     | 
    
         
            +
                      paths = []
         
     | 
| 
      
 222 
     | 
    
         
            +
                      shellout(cmd) do |io|
         
     | 
| 
      
 223 
     | 
    
         
            +
                        begin
         
     | 
| 
      
 224 
     | 
    
         
            +
                          # Darcs xml output has multiple root elements in this case (tested with darcs 1.0.7)
         
     | 
| 
      
 225 
     | 
    
         
            +
                          # A root element is added so that REXML doesn't raise an error
         
     | 
| 
      
 226 
     | 
    
         
            +
                          doc = REXML::Document.new("<fake_root>" + io.read + "</fake_root>")
         
     | 
| 
      
 227 
     | 
    
         
            +
                          doc.elements.each('fake_root/summary/*') do |modif|
         
     | 
| 
      
 228 
     | 
    
         
            +
                            paths << {:action => modif.name[0,1].upcase,
         
     | 
| 
      
 229 
     | 
    
         
            +
                                      :path => "/" + modif.text.chomp.gsub(/^\s*/, '')
         
     | 
| 
      
 230 
     | 
    
         
            +
                                     }
         
     | 
| 
      
 231 
     | 
    
         
            +
                          end
         
     | 
| 
      
 232 
     | 
    
         
            +
                        rescue
         
     | 
| 
      
 233 
     | 
    
         
            +
                        end
         
     | 
| 
      
 234 
     | 
    
         
            +
                      end
         
     | 
| 
      
 235 
     | 
    
         
            +
                      paths
         
     | 
| 
      
 236 
     | 
    
         
            +
                    rescue CommandFailed
         
     | 
| 
      
 237 
     | 
    
         
            +
                      paths
         
     | 
| 
      
 238 
     | 
    
         
            +
                    end
         
     | 
| 
      
 239 
     | 
    
         
            +
                  end
         
     | 
| 
      
 240 
     | 
    
         
            +
                end
         
     | 
| 
      
 241 
     | 
    
         
            +
              end
         
     | 
| 
      
 242 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,157 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'test/unit'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'ruby-lightmodels'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
         
     | 
| 
      
 6 
     | 
    
         
            +
            class TestOperations < Test::Unit::TestCase
         
     | 
| 
      
 7 
     | 
    
         
            +
             
         
     | 
| 
      
 8 
     | 
    
         
            +
              def test_symbol
         
     | 
| 
      
 9 
     | 
    
         
            +
                root = Ruby.parse(':a')
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                assert_right_class root, Ruby::Symbol
         
     | 
| 
      
 12 
     | 
    
         
            +
                assert_equal 'a',root.name
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              def test_sum
         
     | 
| 
      
 16 
     | 
    
         
            +
              	root = Ruby.parse('3+40')
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              	assert_right_class root, Ruby::Call
         
     | 
| 
      
 19 
     | 
    
         
            +
              	assert_equal '+', root.name  	
         
     | 
| 
      
 20 
     | 
    
         
            +
              	assert_is_int root.receiver, 3
         
     | 
| 
      
 21 
     | 
    
         
            +
                assert_equal false, root.implicit_receiver
         
     | 
| 
      
 22 
     | 
    
         
            +
              	assert_equal 1,  root.args.count
         
     | 
| 
      
 23 
     | 
    
         
            +
              	assert_is_int root.args[0], 40
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              def test_def_with_some_statements
         
     | 
| 
      
 27 
     | 
    
         
            +
                root = Ruby.parse("def somefunc \n 1\n 2\n 3\n end")
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                assert_right_class root, Ruby::Def
         
     | 
| 
      
 30 
     | 
    
         
            +
                assert_equal 'somefunc', root.name        
         
     | 
| 
      
 31 
     | 
    
         
            +
                assert root.body.is_a? Ruby::Block
         
     | 
| 
      
 32 
     | 
    
         
            +
                assert_equal 3,root.body.contents.count
         
     | 
| 
      
 33 
     | 
    
         
            +
                assert_is_int root.body.contents[0], 1
         
     | 
| 
      
 34 
     | 
    
         
            +
                assert_is_int root.body.contents[1], 2
         
     | 
| 
      
 35 
     | 
    
         
            +
                assert_is_int root.body.contents[2], 3
         
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
              def test_def_with_one_statements
         
     | 
| 
      
 39 
     | 
    
         
            +
              	root = Ruby.parse("def somefunc \n 10\n end")
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
              	assert_right_class root, Ruby::Def
         
     | 
| 
      
 42 
     | 
    
         
            +
              	assert_equal 'somefunc', root.name  	
         
     | 
| 
      
 43 
     | 
    
         
            +
                assert_is_int root.body, 10
         
     | 
| 
      
 44 
     | 
    
         
            +
              end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
              def test_require
         
     | 
| 
      
 47 
     | 
    
         
            +
                root = Ruby.parse("require 'something'")
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                assert_right_class root, Ruby::Call
         
     | 
| 
      
 50 
     | 
    
         
            +
                assert_equal 'require', root.name
         
     | 
| 
      
 51 
     | 
    
         
            +
                assert_equal true, root.implicit_receiver
         
     | 
| 
      
 52 
     | 
    
         
            +
                assert_equal 1, root.args.count
         
     | 
| 
      
 53 
     | 
    
         
            +
                assert_is_str root.args[0],'something'   
         
     | 
| 
      
 54 
     | 
    
         
            +
              end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
              def test_class_decl_ext_class_in_module
         
     | 
| 
      
 57 
     | 
    
         
            +
                root = Ruby.parse("class TestOperations < Test::Unit::TestCase\nend")
         
     | 
| 
      
 58 
     | 
    
         
            +
              
         
     | 
| 
      
 59 
     | 
    
         
            +
                assert_right_class root, Ruby::ClassDecl
         
     | 
| 
      
 60 
     | 
    
         
            +
                assert_right_class root.super_class,Ruby::Constant
         
     | 
| 
      
 61 
     | 
    
         
            +
                assert_equal 'TestCase', root.super_class.name
         
     | 
| 
      
 62 
     | 
    
         
            +
                assert_right_class root.super_class.container,Ruby::Constant
         
     | 
| 
      
 63 
     | 
    
         
            +
                assert_equal 'Unit', root.super_class.container.name
         
     | 
| 
      
 64 
     | 
    
         
            +
                assert_right_class root.super_class.container.container,Ruby::Constant
         
     | 
| 
      
 65 
     | 
    
         
            +
                assert_equal 'Test', root.super_class.container.container.name
         
     | 
| 
      
 66 
     | 
    
         
            +
                assert_equal nil, root.super_class.container.container.container
         
     | 
| 
      
 67 
     | 
    
         
            +
              end
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
              def test_class_decl_ext_class_simple
         
     | 
| 
      
 70 
     | 
    
         
            +
                root = Ruby.parse("class Literal < Value\nend")
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                assert_right_class root, Ruby::ClassDecl
         
     | 
| 
      
 73 
     | 
    
         
            +
                assert_equal 'Value', root.super_class.name
         
     | 
| 
      
 74 
     | 
    
         
            +
                assert_equal nil,root.super_class.container
         
     | 
| 
      
 75 
     | 
    
         
            +
              end
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
              def test_class_decl_no_ext
         
     | 
| 
      
 78 
     | 
    
         
            +
                root = Ruby.parse("class Literal\nend")
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                assert_right_class root, Ruby::ClassDecl
         
     | 
| 
      
 81 
     | 
    
         
            +
                assert_equal nil,root.super_class
         
     | 
| 
      
 82 
     | 
    
         
            +
              end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
              def test_class_with_content
         
     | 
| 
      
 85 
     | 
    
         
            +
                root = Ruby.parse("class AClass\nattr_accessor :name\nend")
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                assert_right_class root, Ruby::ClassDecl
         
     | 
| 
      
 88 
     | 
    
         
            +
                assert_equal nil,root.super_class
         
     | 
| 
      
 89 
     | 
    
         
            +
                assert_simple_const root.defname,'AClass'
         
     | 
| 
      
 90 
     | 
    
         
            +
                assert_equal 1,root.body.count
         
     | 
| 
      
 91 
     | 
    
         
            +
                assert_right_class root.body[0], Ruby::Call
         
     | 
| 
      
 92 
     | 
    
         
            +
              end
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
              def test_false
         
     | 
| 
      
 95 
     | 
    
         
            +
                root = Ruby.parse('false')
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
                assert_right_class root, Ruby::BooleanLiteral
         
     | 
| 
      
 98 
     | 
    
         
            +
                assert_equal false,root.value
         
     | 
| 
      
 99 
     | 
    
         
            +
              end
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
              def test_dstring
         
     | 
| 
      
 102 
     | 
    
         
            +
                root = Ruby.parse("\"some string\"")
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
                assert_right_class root, Ruby::StringLiteral
         
     | 
| 
      
 105 
     | 
    
         
            +
                assert_equal 'some string', root.value
         
     | 
| 
      
 106 
     | 
    
         
            +
              end
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
              def test_dstring_with_value
         
     | 
| 
      
 109 
     | 
    
         
            +
                root = Ruby.parse('"some #{val} string"')
         
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
      
 111 
     | 
    
         
            +
                assert_right_class root, Ruby::StringLiteral
         
     | 
| 
      
 112 
     | 
    
         
            +
                assert_equal 3, root.pieces.count
         
     | 
| 
      
 113 
     | 
    
         
            +
                assert_is_str root.pieces[0],'some '
         
     | 
| 
      
 114 
     | 
    
         
            +
                assert_is_str root.pieces[2],' string'
         
     | 
| 
      
 115 
     | 
    
         
            +
              end
         
     | 
| 
      
 116 
     | 
    
         
            +
             
     | 
| 
      
 117 
     | 
    
         
            +
              def test_true
         
     | 
| 
      
 118 
     | 
    
         
            +
                root = Ruby.parse('true')
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
                assert_right_class root, Ruby::BooleanLiteral
         
     | 
| 
      
 121 
     | 
    
         
            +
                assert_equal true,root.value
         
     | 
| 
      
 122 
     | 
    
         
            +
              end
         
     | 
| 
      
 123 
     | 
    
         
            +
             
     | 
| 
      
 124 
     | 
    
         
            +
              def test_nil
         
     | 
| 
      
 125 
     | 
    
         
            +
                root = Ruby.parse('nil')
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
                assert_right_class root, Ruby::NilLiteral
         
     | 
| 
      
 128 
     | 
    
         
            +
              end
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
              def test_load_this_file
         
     | 
| 
      
 131 
     | 
    
         
            +
                content = s = IO.read(__FILE__)
         
     | 
| 
      
 132 
     | 
    
         
            +
                #root = Ruby.parse(content)
         
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
      
 134 
     | 
    
         
            +
                # check no exceptions are generated...
         
     | 
| 
      
 135 
     | 
    
         
            +
              end
         
     | 
| 
      
 136 
     | 
    
         
            +
             
     | 
| 
      
 137 
     | 
    
         
            +
              def assert_is_int(node,value)
         
     | 
| 
      
 138 
     | 
    
         
            +
              	assert node.is_a? Ruby::IntLiteral
         
     | 
| 
      
 139 
     | 
    
         
            +
              	assert_equal value, node.value
         
     | 
| 
      
 140 
     | 
    
         
            +
              end
         
     | 
| 
      
 141 
     | 
    
         
            +
             
     | 
| 
      
 142 
     | 
    
         
            +
              def assert_is_str(node,value)
         
     | 
| 
      
 143 
     | 
    
         
            +
                assert node.is_a? Ruby::StringLiteral
         
     | 
| 
      
 144 
     | 
    
         
            +
                assert_equal value, node.value
         
     | 
| 
      
 145 
     | 
    
         
            +
              end
         
     | 
| 
      
 146 
     | 
    
         
            +
             
     | 
| 
      
 147 
     | 
    
         
            +
              def assert_right_class(node,clazz)
         
     | 
| 
      
 148 
     | 
    
         
            +
              	assert node.is_a?(clazz), "Instead #{node.class}"
         
     | 
| 
      
 149 
     | 
    
         
            +
              end
         
     | 
| 
      
 150 
     | 
    
         
            +
             
     | 
| 
      
 151 
     | 
    
         
            +
              def assert_simple_const(node,name)
         
     | 
| 
      
 152 
     | 
    
         
            +
                assert_right_class node,Ruby::Constant
         
     | 
| 
      
 153 
     | 
    
         
            +
                assert_equal name, node.name
         
     | 
| 
      
 154 
     | 
    
         
            +
                assert_equal nil, node.container
         
     | 
| 
      
 155 
     | 
    
         
            +
              end
         
     | 
| 
      
 156 
     | 
    
         
            +
             
         
     | 
| 
      
 157 
     | 
    
         
            +
            end
         
     |