Revision 441:cbce1fd3b1b7 lib/redmine/.svn/text-base

View differences:

lib/redmine/.svn/text-base/custom_field_format.rb.svn-base
22 22
    cattr_accessor :available
23 23
    @@available = {}
24 24

  
25
    attr_accessor :name, :order, :label
25
    attr_accessor :name, :order, :label, :edit_as, :class_names
26 26

  
27 27
    def initialize(name, options={})
28 28
      self.name = name
29 29
      self.label = options[:label]
30 30
      self.order = options[:order]
31
      self.edit_as = options[:edit_as] || name
32
      self.class_names = options[:only]
31 33
    end
32 34

  
33 35
    def format(value)
......
47 49
        return value
48 50
      }
49 51
    end
50

  
51
    # Allow displaying the edit type of another field_format
52
    #
53
    # Example: display a custom field as a list
54
    def edit_as
55
      name
52
    
53
    ['user', 'version'].each do |name|
54
      define_method("format_as_#{name}") {|value|
55
        return value.blank? ? "" : name.classify.constantize.find_by_id(value.to_i).to_s
56
      }
56 57
    end
57 58

  
58 59
    class << self
......
79 80
      end
80 81

  
81 82
      # Return an array of custom field formats which can be used in select_tag
82
      def as_select
83
        @@available.values.sort {|a,b|
83
      def as_select(class_name=nil)
84
        fields = @@available.values
85
        fields = fields.select {|field| field.class_names.nil? || field.class_names.include?(class_name)}
86
        fields.sort {|a,b|
84 87
          a.order <=> b.order
85 88
        }.collect {|custom_field_format|
86 89
          [ l(custom_field_format.label), custom_field_format.name ]
lib/redmine/.svn/text-base/mime_type.rb.svn-base
37 37
      'text/xml' => 'xml,xsd,mxml',
38 38
      'text/yaml' => 'yml,yaml',
39 39
      'text/csv' => 'csv',
40
      'text/x-po' => 'po',
40 41
      'image/gif' => 'gif',
41 42
      'image/jpeg' => 'jpg,jpeg,jpe',
42 43
      'image/png' => 'png',
lib/redmine/.svn/text-base/notifiable.rb.svn-base
14 14
      notifications << Notifiable.new('issue_status_updated', 'issue_updated')
15 15
      notifications << Notifiable.new('issue_priority_updated', 'issue_updated')
16 16
      notifications << Notifiable.new('news_added')
17
      notifications << Notifiable.new('news_comment_added')
17 18
      notifications << Notifiable.new('document_added')
18 19
      notifications << Notifiable.new('file_added')
19 20
      notifications << Notifiable.new('message_posted')
lib/redmine/.svn/text-base/unified_diff.rb.svn-base
1
# redMine - project management software
2
# Copyright (C) 2006-2008  Jean-Philippe Lang
1
# Redmine - project management software
2
# Copyright (C) 2006-2011  Jean-Philippe Lang
3 3
#
4 4
# This program is free software; you can redistribute it and/or
5 5
# modify it under the terms of the GNU General Public License
......
17 17

  
18 18
module Redmine
19 19
  # Class used to parse unified diffs
20
  class UnifiedDiff < Array  
20
  class UnifiedDiff < Array
21
    attr_reader :diff_type
22
    
21 23
    def initialize(diff, options={})
22 24
      options.assert_valid_keys(:type, :max_lines)
23 25
      diff = diff.split("\n") if diff.is_a?(String)
24
      diff_type = options[:type] || 'inline'
26
      @diff_type = options[:type] || 'inline'
25 27
      lines = 0
26 28
      @truncated = false
27
      diff_table = DiffTable.new(diff_type)
29
      diff_table = DiffTable.new(@diff_type)
28 30
      diff.each do |line|
29 31
        line_encoding = nil
30 32
        if line.respond_to?(:force_encoding)
......
53 55
  end
54 56

  
55 57
  # Class that represents a file diff
56
  class DiffTable < Hash  
57
    attr_reader :file_name, :line_num_l, :line_num_r    
58
  class DiffTable < Array  
59
    attr_reader :file_name
58 60

  
59 61
    # Initialize with a Diff file and the type of Diff View
60 62
    # The type view must be inline or sbs (side_by_side)
61 63
    def initialize(type="inline")
62 64
      @parsing = false
63
      @nb_line = 1
64
      @start = false
65
      @before = 'same'
66
      @second = true
65
      @added = 0
66
      @removed = 0
67 67
      @type = type
68 68
    end
69 69

  
......
86 86
          @line_num_l = $2.to_i
87 87
          @line_num_r = $5.to_i
88 88
        else
89
          @nb_line += 1 if parse_line(line, @type)          
89
          parse_line(line, @type)          
90 90
        end
91 91
      end
92 92
      return true
93 93
    end
94
    
95
    def each_line
96
      prev_line_left, prev_line_right = nil, nil
97
      each do |line|
98
        spacing = prev_line_left && prev_line_right && (line.nb_line_left != prev_line_left+1) && (line.nb_line_right != prev_line_right+1)
99
        yield spacing, line
100
        prev_line_left = line.nb_line_left.to_i if line.nb_line_left.to_i > 0
101
        prev_line_right = line.nb_line_right.to_i if line.nb_line_right.to_i > 0
102
      end
103
    end
94 104

  
95 105
    def inspect
96 106
      puts '### DIFF TABLE ###'
......
100 110
      end
101 111
    end
102 112

  
103
  private  
104
    # Test if is a Side By Side type
105
    def sbs?(type, func)
106
      if @start and type == "sbs"
107
        if @before == func and @second
108
          tmp_nb_line = @nb_line
109
          self[tmp_nb_line] = Diff.new
110
        else
111
            @second = false
112
            tmp_nb_line = @start
113
            @start += 1
114
            @nb_line -= 1
115
        end
116
      else
117
        tmp_nb_line = @nb_line
118
        @start = @nb_line
119
        self[tmp_nb_line] = Diff.new
120
        @second = true
121
      end
122
      unless self[tmp_nb_line]
123
        @nb_line += 1
124
        self[tmp_nb_line] = Diff.new
125
      else
126
        self[tmp_nb_line]
127
      end
128
    end
113
    private
129 114

  
130 115
    # Escape the HTML for the diff
131 116
    def escapeHTML(line)
132 117
        CGI.escapeHTML(line)
133 118
    end
119
      
120
    def diff_for_added_line
121
      if @type == 'sbs' && @removed > 0 && @added < @removed
122
        self[-(@removed - @added)]
123
      else
124
        diff = Diff.new
125
        self << diff
126
        diff
127
      end
128
    end
134 129

  
135 130
    def parse_line(line, type="inline")
136 131
      if line[0, 1] == "+"
137
        diff = sbs? type, 'add'
138
        @before = 'add'
132
        diff = diff_for_added_line
139 133
        diff.line_right = escapeHTML line[1..-1]
140 134
        diff.nb_line_right = @line_num_r
141 135
        diff.type_diff_right = 'diff_in'
142 136
        @line_num_r += 1
137
        @added += 1
143 138
        true
144 139
      elsif line[0, 1] == "-"
145
        diff = sbs? type, 'remove'
146
        @before = 'remove'
140
        diff = Diff.new
147 141
        diff.line_left = escapeHTML line[1..-1]
148 142
        diff.nb_line_left = @line_num_l
149 143
        diff.type_diff_left = 'diff_out'
144
        self << diff
150 145
        @line_num_l += 1
146
        @removed += 1
151 147
        true
152
      elsif line[0, 1] =~ /\s/
153
        @before = 'same'
154
        @start = false
155
        diff = Diff.new
156
        diff.line_right = escapeHTML line[1..-1]
157
        diff.nb_line_right = @line_num_r
158
        diff.line_left = escapeHTML line[1..-1]
159
        diff.nb_line_left = @line_num_l
160
        self[@nb_line] = diff
161
        @line_num_l += 1
162
        @line_num_r += 1
163
        true
164
      elsif line[0, 1] = "\\"
148
      else
149
        write_offsets
150
        if line[0, 1] =~ /\s/
151
          diff = Diff.new
152
          diff.line_right = escapeHTML line[1..-1]
153
          diff.nb_line_right = @line_num_r
154
          diff.line_left = escapeHTML line[1..-1]
155
          diff.nb_line_left = @line_num_l
156
          self << diff
157
          @line_num_l += 1
158
          @line_num_r += 1
159
          true
160
        elsif line[0, 1] = "\\"
165 161
          true
166 162
        else
167 163
          false
168 164
        end
169 165
      end
170 166
    end
167
    
168
    def write_offsets
169
      if @added > 0 && @added == @removed
170
        @added.times do |i|
171
          line = self[-(1 + i)]
172
          removed = (@type == 'sbs') ? line : self[-(1 + @added + i)]
173
          offsets = offsets(removed.line_left, line.line_right)
174
          removed.offsets = line.offsets = offsets
175
        end
176
      end
177
      @added = 0
178
      @removed = 0
179
    end
180
    
181
    def offsets(line_left, line_right)
182
      if line_left.present? && line_right.present? && line_left != line_right
183
        max = [line_left.size, line_right.size].min
184
        starting = 0
185
        while starting < max && line_left[starting] == line_right[starting]
186
          starting += 1
187
        end
188
        ending = -1
189
        while ending >= -(max - starting) && line_left[ending] == line_right[ending]
190
          ending -= 1
191
        end
192
        unless starting == 0 && ending == -1
193
          [starting, ending]
194
        end
195
      end
196
    end
197
  end
171 198

  
172 199
  # A line of diff
173 200
  class Diff  
......
177 204
    attr_accessor :line_right
178 205
    attr_accessor :type_diff_right
179 206
    attr_accessor :type_diff_left
207
    attr_accessor :offsets
180 208
    
181 209
    def initialize()
182 210
      self.nb_line_left = ''
......
186 214
      self.type_diff_right = ''
187 215
      self.type_diff_left = ''
188 216
    end
217
    
218
    def type_diff
219
      type_diff_right == 'diff_in' ? type_diff_right : type_diff_left
220
    end
221
    
222
    def line
223
      type_diff_right == 'diff_in' ? line_right : line_left
224
    end
225
    
226
    def html_line_left
227
      if offsets
228
        line_left.dup.insert(offsets.first, '<span>').insert(offsets.last, '</span>')
229
      else
230
        line_left
231
      end
232
    end
233
    
234
    def html_line_right
235
      if offsets
236
        line_right.dup.insert(offsets.first, '<span>').insert(offsets.last, '</span>')
237
      else
238
        line_right
239
      end
240
    end
241
    
242
    def html_line
243
      if offsets
244
        line.dup.insert(offsets.first, '<span>').insert(offsets.last, '</span>')
245
      else
246
        line
247
      end
248
    end
189 249

  
190 250
    def inspect
191 251
      puts '### Start Line Diff ###'
lib/redmine/.svn/text-base/version.rb.svn-base
3 3
module Redmine
4 4
  module VERSION #:nodoc:
5 5
    MAJOR = 1
6
    MINOR = 1
7
    TINY  = 1
8
    
6
    MINOR = 2
7
    TINY  = 0
8

  
9 9
    # Branch values:
10 10
    # * official release: nil
11 11
    # * stable branch:    stable
12 12
    # * trunk:            devel
13
    BRANCH = 'devel'
13
    BRANCH = 'stable'
14 14

  
15 15
    def self.revision
16 16
      revision = nil
......
20 20
          f = File.open(entries_path, 'r')
21 21
          entries = f.read
22 22
          f.close
23
     	  if entries.match(%r{^\d+})
24
     	    revision = $1.to_i if entries.match(%r{^\d+\s+dir\s+(\d+)\s})
25
     	  else
26
   	        xml = REXML::Document.new(entries)
27
   	        revision = xml.elements['wc-entries'].elements[1].attributes['revision'].to_i
28
   	      end
29
   	    rescue
30
   	      # Could not find the current revision
31
   	    end
32
 	  end
33
 	  revision
23
          if entries.match(%r{^\d+})
24
            revision = $1.to_i if entries.match(%r{^\d+\s+dir\s+(\d+)\s})
25
          else
26
            xml = REXML::Document.new(entries)
27
            revision =
28
              xml.elements['wc-entries'].elements[1].attributes['revision'].to_i
29
          end
30
        rescue
31
          # Could not find the current revision
32
        end
33
      end
34
      revision
34 35
    end
35 36

  
36 37
    REVISION = self.revision
37
    ARRAY = [MAJOR, MINOR, TINY, BRANCH, REVISION].compact
38
    STRING = ARRAY.join('.')
38
    ARRAY    = [MAJOR, MINOR, TINY, BRANCH, REVISION].compact
39
    STRING   = ARRAY.join('.')
39 40
    
40
    def self.to_a; ARRAY end
41
    def self.to_a; ARRAY  end
41 42
    def self.to_s; STRING end    
42 43
  end
43 44
end

Also available in: Unified diff