daff 1.2.6 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -6
  3. data/bin/daff.rb +0 -0
  4. data/lib/daff.rb +6 -0
  5. data/lib/lib/coopy/alignment.rb +146 -169
  6. data/lib/lib/coopy/cell_builder.rb +1 -1
  7. data/lib/lib/coopy/cell_info.rb +2 -1
  8. data/lib/lib/coopy/column_change.rb +16 -0
  9. data/lib/lib/coopy/compare_flags.rb +33 -5
  10. data/lib/lib/coopy/compare_table.rb +219 -99
  11. data/lib/lib/coopy/coopy.rb +205 -99
  12. data/lib/lib/coopy/csv.rb +17 -22
  13. data/lib/lib/coopy/diff_render.rb +16 -8
  14. data/lib/lib/coopy/flat_cell_builder.rb +11 -8
  15. data/lib/lib/coopy/highlight_patch.rb +363 -63
  16. data/lib/lib/coopy/highlight_patch_unit.rb +1 -1
  17. data/lib/lib/coopy/index.rb +21 -8
  18. data/lib/lib/coopy/index_item.rb +7 -3
  19. data/lib/lib/coopy/index_pair.rb +13 -10
  20. data/lib/lib/coopy/merger.rb +3 -3
  21. data/lib/lib/coopy/meta.rb +17 -0
  22. data/lib/lib/coopy/mover.rb +7 -5
  23. data/lib/lib/coopy/ndjson.rb +2 -2
  24. data/lib/lib/coopy/nested_cell_builder.rb +7 -7
  25. data/lib/lib/coopy/ordering.rb +6 -2
  26. data/lib/lib/coopy/property_change.rb +16 -0
  27. data/lib/lib/coopy/row.rb +1 -0
  28. data/lib/lib/coopy/row_change.rb +42 -0
  29. data/lib/lib/coopy/row_stream.rb +11 -0
  30. data/lib/lib/coopy/simple_table.rb +84 -30
  31. data/lib/lib/coopy/simple_view.rb +8 -8
  32. data/lib/lib/coopy/sparse_sheet.rb +1 -1
  33. data/lib/lib/coopy/sql_column.rb +22 -10
  34. data/lib/lib/coopy/sql_compare.rb +397 -85
  35. data/lib/lib/coopy/sql_database.rb +2 -0
  36. data/lib/lib/coopy/sql_helper.rb +5 -0
  37. data/lib/lib/coopy/sql_table.rb +122 -19
  38. data/lib/lib/coopy/sql_table_name.rb +1 -1
  39. data/lib/lib/coopy/sqlite_helper.rb +250 -3
  40. data/lib/lib/coopy/table.rb +1 -0
  41. data/lib/lib/coopy/table_diff.rb +643 -464
  42. data/lib/lib/coopy/table_io.rb +19 -6
  43. data/lib/lib/coopy/table_modifier.rb +1 -1
  44. data/lib/lib/coopy/table_stream.rb +102 -0
  45. data/lib/lib/coopy/terminal_diff_render.rb +4 -3
  46. data/lib/lib/coopy/unit.rb +22 -2
  47. data/lib/lib/coopy/viterbi.rb +4 -4
  48. data/lib/lib/haxe/ds/int_map.rb +1 -1
  49. data/lib/lib/haxe/ds/string_map.rb +1 -1
  50. data/lib/lib/haxe/format/json_parser.rb +1 -1
  51. data/lib/lib/haxe/format/json_printer.rb +1 -1
  52. data/lib/lib/haxe/io/bytes.rb +2 -2
  53. data/lib/lib/haxe/io/eof.rb +1 -1
  54. data/lib/lib/haxe/io/output.rb +1 -1
  55. data/lib/lib/hx_overrides.rb +1 -1
  56. data/lib/lib/hx_sys.rb +9 -5
  57. data/lib/lib/lambda.rb +3 -3
  58. data/lib/lib/list.rb +1 -1
  59. data/lib/lib/rb/ruby_iterator.rb +2 -2
  60. data/lib/lib/reflect.rb +1 -1
  61. data/lib/lib/sys/io/file_output.rb +1 -1
  62. data/lib/lib/sys/io/hx_file.rb +1 -1
  63. data/lib/lib/x_list/list_iterator.rb +2 -2
  64. metadata +29 -25
  65. data/lib/lib/coopy/table_text.rb +0 -26
  66. data/lib/lib/haxe/io/bytes_buffer.rb +0 -19
  67. data/lib/lib/haxe/io/bytes_input.rb +0 -13
  68. data/lib/lib/haxe/io/bytes_output.rb +0 -33
  69. data/lib/lib/haxe/io/input.rb +0 -11
@@ -8,16 +8,16 @@ module Coopy
8
8
  end
9
9
 
10
10
  def get_content(name)
11
- return ::Sys::Io::HxFile.get_content(name)
11
+ ::Sys::Io::HxFile.get_content(name)
12
12
  end
13
13
 
14
14
  def save_content(name,txt)
15
15
  ::Sys::Io::HxFile.save_content(name,txt)
16
- return true
16
+ true
17
17
  end
18
18
 
19
19
  def args
20
- return HxSys.args
20
+ HxSys.args
21
21
  end
22
22
 
23
23
  def write_stdout(txt)
@@ -38,15 +38,28 @@ module Coopy
38
38
  end
39
39
 
40
40
  def async
41
- return false
41
+ false
42
42
  end
43
43
 
44
44
  def exists(path)
45
- return File.exist?(path)
45
+ File.exist?(path)
46
+ end
47
+
48
+ def is_tty_known
49
+ false
50
+ end
51
+
52
+ def is_tty
53
+ return true if HxSys.get_env("GIT_PAGER_IN_USE") == "true"
54
+ false
46
55
  end
47
56
 
48
57
  def open_sqlite_database(path)
49
- return nil
58
+ nil
59
+ end
60
+
61
+ def send_to_browser(html)
62
+ puts "do not know how to send to browser in this language"
50
63
  end
51
64
 
52
65
  haxe_me ["coopy", "TableIO"]
@@ -31,7 +31,7 @@ module Coopy
31
31
  end
32
32
  end
33
33
  end
34
- return @t.insert_or_delete_columns(fate,@t.get_width - 1)
34
+ @t.insert_or_delete_columns(fate,@t.get_width - 1)
35
35
  end
36
36
 
37
37
  haxe_me ["coopy", "TableModifier"]
@@ -0,0 +1,102 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ module Coopy
5
+ class TableStream
6
+
7
+ def initialize(t)
8
+ @t = t
9
+ @at = -1
10
+ @h = t.get_height
11
+ @src = nil
12
+ if @h < 0
13
+ meta = t.get_meta
14
+ raise hx_raise("Cannot get meta information for table") if meta == nil
15
+ @src = meta.get_row_stream
16
+ raise hx_raise("Cannot iterate table") if @src == nil
17
+ end
18
+ end
19
+
20
+ protected
21
+
22
+ attr_accessor :t
23
+ attr_accessor :at
24
+ attr_accessor :h
25
+ attr_accessor :src
26
+ attr_accessor :columns
27
+ attr_accessor :row
28
+
29
+ public
30
+
31
+ def fetch_columns
32
+ return @columns if @columns != nil
33
+ if @src != nil
34
+ @columns = @src.fetch_columns
35
+ return @columns
36
+ end
37
+ @columns = Array.new
38
+ begin
39
+ _g1 = 0
40
+ _g = @t.get_width
41
+ while(_g1 < _g)
42
+ i = _g1
43
+ _g1+=1
44
+ @columns.push(@t.get_cell(i,0))
45
+ end
46
+ end
47
+ @columns
48
+ end
49
+
50
+ def fetch_row
51
+ return @src.fetch_row if @src != nil
52
+ return nil if @at >= @h
53
+ row = {}
54
+ begin
55
+ _g1 = 0
56
+ _g = @columns.length
57
+ while(_g1 < _g)
58
+ i = _g1
59
+ _g1+=1
60
+ begin
61
+ v = @t.get_cell(i,@at)
62
+ begin
63
+ value = v
64
+ row[@columns[i]] = value
65
+ end
66
+ v
67
+ end
68
+ end
69
+ end
70
+ row
71
+ end
72
+
73
+ def fetch
74
+ if @at == -1
75
+ @at+=1
76
+ self.fetch_columns if @src != nil
77
+ return true
78
+ end
79
+ if @src != nil
80
+ @at = 1
81
+ @row = self.fetch_row
82
+ return @row != nil
83
+ end
84
+ @at+=1
85
+ @at < @h
86
+ end
87
+
88
+ def get_cell(x)
89
+ return @columns[x] if @at == 0
90
+ return @row[@columns[x]] if @row != nil
91
+ @t.get_cell(x,@at)
92
+ end
93
+
94
+ def width
95
+ self.fetch_columns
96
+ @columns.length
97
+ end
98
+
99
+ haxe_me ["coopy", "TableStream"]
100
+ end
101
+
102
+ end
@@ -32,6 +32,7 @@ module Coopy
32
32
  @v = t.get_cell_view
33
33
  @codes = {}
34
34
  @codes["header"] = "\x1B[0;1m"
35
+ @codes["meta"] = "\x1B[0;1m"
35
36
  @codes["spec"] = "\x1B[35;1m"
36
37
  @codes["add"] = "\x1B[32;1m"
37
38
  @codes["conflict"] = "\x1B[33;1m"
@@ -74,7 +75,7 @@ module Coopy
74
75
  @v = nil
75
76
  @csv = nil
76
77
  @codes = nil
77
- return txt
78
+ txt
78
79
  end
79
80
 
80
81
  protected
@@ -101,7 +102,7 @@ module Coopy
101
102
  else
102
103
  val = cell.pretty_value
103
104
  end
104
- return @csv.render_cell(@v,val)
105
+ @csv.render_cell(@v,val)
105
106
  end
106
107
 
107
108
  def pick_sizes(t)
@@ -161,7 +162,7 @@ module Coopy
161
162
  end
162
163
  end
163
164
  return nil if total > 130
164
- return sizes
165
+ sizes
165
166
  end
166
167
 
167
168
  haxe_me ["coopy", "TerminalDiffRender"]
@@ -24,7 +24,7 @@ module Coopy
24
24
 
25
25
  def to_s
26
26
  return _hx_str(::Coopy::Unit.describe(@p)) + "|" + _hx_str(::Coopy::Unit.describe(@l)) + ":" + _hx_str(::Coopy::Unit.describe(@r)) if @p >= -1
27
- return _hx_str(::Coopy::Unit.describe(@l)) + ":" + _hx_str(::Coopy::Unit.describe(@r))
27
+ _hx_str(::Coopy::Unit.describe(@l)) + ":" + _hx_str(::Coopy::Unit.describe(@r))
28
28
  end
29
29
 
30
30
  def from_string(txt)
@@ -54,7 +54,27 @@ module Coopy
54
54
  end
55
55
  end
56
56
  end
57
- return false
57
+ false
58
+ end
59
+
60
+ # protected - in ruby this doesn't play well with static/inline methods
61
+
62
+ def base26(num)
63
+ alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
64
+ return "-" if num < 0
65
+ out = ""
66
+ begin
67
+ out = _hx_str(out) + _hx_str(alpha[num.remainder(26)])
68
+ num = (num / 26).floor - 1
69
+ end while(num >= 0)
70
+ out
71
+ end
72
+
73
+ public
74
+
75
+ def to_base26string
76
+ return _hx_str(self.base26(@p)) + "|" + _hx_str(self.base26(@l)) + ":" + _hx_str(self.base26(@r)) if @p >= -1
77
+ _hx_str(self.base26(@l)) + ":" + _hx_str(self.base26(@r))
58
78
  end
59
79
 
60
80
  # protected - in ruby this doesn't play well with static/inline methods
@@ -153,22 +153,22 @@ module Coopy
153
153
  end
154
154
  end
155
155
  txt += " costs " + _hx_str(self.get_cost)
156
- return txt
156
+ txt
157
157
  end
158
158
 
159
159
  def length
160
160
  self.calculate_path if @index > 0
161
- return @index
161
+ @index
162
162
  end
163
163
 
164
164
  def get(i)
165
165
  self.calculate_path
166
- return @path.get(0,i)
166
+ @path.get(0,i)
167
167
  end
168
168
 
169
169
  def get_cost
170
170
  self.calculate_path
171
- return @best_cost
171
+ @best_cost
172
172
  end
173
173
 
174
174
  haxe_me ["coopy", "Viterbi"]
@@ -9,7 +9,7 @@ module Ds
9
9
  end
10
10
 
11
11
  def get(key)
12
- return self[key]
12
+ self[key]
13
13
  end
14
14
 
15
15
  haxe_me ["haxe", "ds", "IntMap"]
@@ -9,7 +9,7 @@ module Ds
9
9
  end
10
10
 
11
11
  def get(key)
12
- return self[key]
12
+ self[key]
13
13
  end
14
14
 
15
15
  haxe_me ["haxe", "ds", "StringMap"]
@@ -246,7 +246,7 @@ module Format
246
246
  end
247
247
  end
248
248
  buf_b += @str[start,@pos - start - 1]
249
- return buf_b
249
+ buf_b
250
250
  end
251
251
 
252
252
  def invalid_char
@@ -230,7 +230,7 @@ module Format
230
230
  def JsonPrinter._print(o,replacer = nil,space = nil)
231
231
  printer = ::Haxe::Format::JsonPrinter.new(replacer,space)
232
232
  printer.write("",o)
233
- return printer.buf.b
233
+ printer.buf.b
234
234
  end
235
235
 
236
236
  haxe_me ["haxe", "format", "JsonPrinter"]
@@ -20,11 +20,11 @@ module Io
20
20
 
21
21
  def get_string(pos,len)
22
22
  raise hx_raise(::Haxe::Io::Error.outside_bounds) if pos < 0 || len < 0 || pos + len > @length
23
- return @b.byteslice(pos,len)
23
+ @b.byteslice(pos,len)
24
24
  end
25
25
 
26
26
  def Bytes.of_string(s)
27
- return ::Haxe::Io::Bytes.new(s.bytesize,s)
27
+ ::Haxe::Io::Bytes.new(s.bytesize,s)
28
28
  end
29
29
 
30
30
  haxe_me ["haxe", "io", "Bytes"]
@@ -8,7 +8,7 @@ module Io
8
8
  protected
9
9
 
10
10
  def to_s
11
- return "Eof"
11
+ "Eof"
12
12
  end
13
13
 
14
14
  haxe_me ["haxe", "io", "Eof"]
@@ -18,7 +18,7 @@ module Io
18
18
  pos+=1
19
19
  k-=1
20
20
  end
21
- return len
21
+ len
22
22
  end
23
23
 
24
24
  def write_full_bytes(s,pos,len)
@@ -11,7 +11,7 @@
11
11
  h = date.get_hours
12
12
  mi = date.get_minutes
13
13
  s = date.get_seconds
14
- return _hx_str(date.get_full_year) + "-" + _hx_str((((m < 10) ? "0" + _hx_str(m) : "" + _hx_str(m)))) + "-" + _hx_str((((d < 10) ? "0" + _hx_str(d) : "" + _hx_str(d)))) + " " + _hx_str((((h < 10) ? "0" + _hx_str(h) : "" + _hx_str(h)))) + ":" + _hx_str((((mi < 10) ? "0" + _hx_str(mi) : "" + _hx_str(mi)))) + ":" + _hx_str((((s < 10) ? "0" + _hx_str(s) : "" + _hx_str(s))))
14
+ _hx_str(date.get_full_year) + "-" + _hx_str((((m < 10) ? "0" + _hx_str(m) : "" + _hx_str(m)))) + "-" + _hx_str((((d < 10) ? "0" + _hx_str(d) : "" + _hx_str(d)))) + " " + _hx_str((((h < 10) ? "0" + _hx_str(h) : "" + _hx_str(h)))) + ":" + _hx_str((((mi < 10) ? "0" + _hx_str(mi) : "" + _hx_str(mi)))) + ":" + _hx_str((((s < 10) ? "0" + _hx_str(s) : "" + _hx_str(s))))
15
15
  end
16
16
 
17
17
  haxe_me ["HxOverrides"]
@@ -4,7 +4,11 @@
4
4
  class HxSys
5
5
 
6
6
  def HxSys.args
7
- return ARGV
7
+ ARGV
8
+ end
9
+
10
+ def HxSys.get_env(s)
11
+ getenv(s)
8
12
  end
9
13
 
10
14
  # protected - in ruby this doesn't play well with static/inline methods
@@ -27,7 +31,7 @@
27
31
  end
28
32
  end
29
33
  return arg if ok
30
- return "\"" + _hx_str(arg.split("\"").join("\\\"")) + "\""
34
+ "\"" + _hx_str(arg.split("\"").join("\\\"")) + "\""
31
35
  end
32
36
 
33
37
  public
@@ -50,15 +54,15 @@
50
54
  else
51
55
  result = 1
52
56
  end
53
- return result
57
+ result
54
58
  end
55
59
 
56
60
  def HxSys.stdout
57
- return ::Sys::Io::FileOutput.new(STDOUT)
61
+ ::Sys::Io::FileOutput.new(STDOUT)
58
62
  end
59
63
 
60
64
  def HxSys.stderr
61
- return ::Sys::Io::FileOutput.new(STDERR)
65
+ ::Sys::Io::FileOutput.new(STDERR)
62
66
  end
63
67
 
64
68
  haxe_me ["Sys"]
@@ -10,7 +10,7 @@
10
10
  i = _it._next
11
11
  a.push(i)
12
12
  end
13
- return a
13
+ a
14
14
  end
15
15
 
16
16
  def Lambda.map(it,f)
@@ -20,7 +20,7 @@
20
20
  x = _it._next
21
21
  l.add((f).call(x))
22
22
  end
23
- return l
23
+ l
24
24
  end
25
25
 
26
26
  def Lambda.has(it,elt)
@@ -29,7 +29,7 @@
29
29
  x = _it._next
30
30
  return true if x == elt
31
31
  end
32
- return false
32
+ false
33
33
  end
34
34
 
35
35
  haxe_me ["Lambda"]
@@ -28,7 +28,7 @@
28
28
  end
29
29
 
30
30
  def iterator
31
- return ::X_List::ListIterator.new(@h)
31
+ ::X_List::ListIterator.new(@h)
32
32
  end
33
33
 
34
34
  haxe_me ["List"]
@@ -34,14 +34,14 @@ module Rb
34
34
  def has_next
35
35
  return @ref[:has_next].call if @at == -1
36
36
  return @ref[:has_next][:call].call if @at == -2
37
- return @at < @len
37
+ @at < @len
38
38
  end
39
39
 
40
40
  def _next
41
41
  return @ref[:_next].call if @at == -1
42
42
  return @ref[:_next][:call].call if @at == -2
43
43
  @at+=1
44
- return @ref.next
44
+ @ref.next
45
45
  end
46
46
 
47
47
  haxe_me ["rb", "RubyIterator"]
@@ -23,7 +23,7 @@
23
23
  end
24
24
 
25
25
  def Reflect.is_function(f)
26
- return f.respond_to?("call")
26
+ f.respond_to?("call")
27
27
  end
28
28
 
29
29
  haxe_me ["Reflect"]