daff 1.3.26 → 1.3.27

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6de82d34735508353ff7f517ec2f1a89ccab5149
4
- data.tar.gz: d3db7b910dc71a114d4dd19c6b75bfb2f60f3197
3
+ metadata.gz: bcecf9714f4f125b4335e3113fb57bbf96b1db9b
4
+ data.tar.gz: 101dab4d573f812ec2faf2dee8d3cca85cb9b5e9
5
5
  SHA512:
6
- metadata.gz: 8915ca51ed765481e2f645e1c2a5f5a5ffc4ba2eefe9786b39da6286b33fa43c3864735e51f02b2dc51cda3111c01e76450dfa77cf3017e71946b5b5999483ed
7
- data.tar.gz: 5d8b5d7028ab402842bd925811c176d3e3b4a0f41418d3d6ccb02ed3cee5618bc6a7ffa7620b8b22446f7d42017d07daf6b1188eb306b5ddc5ca3b5f9abb5a24
6
+ metadata.gz: eab198c780357ddd7c3e7a27393b07cd36ed2815c3d39eadec1919f6365052b9f44b44fe3db8fd9f73dce1959109578f056e329dbbdaade832c60b7aa50df499
7
+ data.tar.gz: afae043f38fab30472f802d16f6eedae1a8920654baf039de88bdb4fa16f0e9c222691938da13ff6def39fe05543eab5528928091f7125c3bd2461ac74c6114e
@@ -16,14 +16,14 @@ def haxe_me(source_name)
16
16
  end
17
17
  old_get = instance_method(:[]) rescue nil
18
18
  define_method(:[]) do |x|
19
- return old_get.bind(self).(x) if x.is_a?(Integer)
19
+ return old_get.bind(self).(x) if x.is_a?(0.class)
20
20
  tag = _haxe_vars_[x]
21
21
  return instance_variable_get(tag) if tag
22
22
  method x
23
23
  end
24
24
  old_set = instance_method(:[]=) rescue nil
25
25
  define_method(:[]=) do |x,y|
26
- return old_set.bind(self).(x,y) if x.is_a?(Integer)
26
+ return old_set.bind(self).(x,y) if x.is_a?(0.class)
27
27
  instance_variable_set(_haxe_vars_[x],y)
28
28
  end
29
29
  define_method(:haxe_name) do
@@ -26,6 +26,8 @@ module Coopy
26
26
  attr_accessor :fragment
27
27
  attr_accessor :flags
28
28
  attr_accessor :cache_txt
29
+ attr_accessor :fail_if_diff
30
+ attr_accessor :diffs_found
29
31
  attr_accessor :mv
30
32
 
31
33
  def init
@@ -43,6 +45,8 @@ module Coopy
43
45
  @fragment = false
44
46
  @flags = nil
45
47
  @cache_txt = nil
48
+ @fail_if_diff = false
49
+ @diffs_found = false
46
50
  end
47
51
 
48
52
  def check_format(name)
@@ -297,6 +301,10 @@ module Coopy
297
301
  td.hilite_with_nesting(os)
298
302
  use_color = self.use_color(flags,output)
299
303
  self.save_tables(output,os,use_color,true)
304
+ if @fail_if_diff
305
+ summary = td.get_summary
306
+ @diffs_found = true if summary.different
307
+ end
300
308
  end
301
309
 
302
310
  public
@@ -688,182 +696,206 @@ module Coopy
688
696
  @csv_eol_preference = ending
689
697
  args.slice!(i,2)
690
698
  break
699
+ elsif tag == "--fail-if-diff"
700
+ more = true
701
+ @fail_if_diff = true
702
+ args.slice!(i,1)
703
+ break
691
704
  end
692
705
  end
693
706
  end
694
707
  end
695
708
  cmd = args[0]
696
- if args.length < 2
697
- if cmd == "version"
698
- io.write_stdout(_hx_str(::Coopy::Coopy.version) + "\n")
699
- return 0
709
+ ok = true
710
+ begin
711
+ if args.length < 2
712
+ if cmd == "version"
713
+ io.write_stdout(_hx_str(::Coopy::Coopy.version) + "\n")
714
+ return 0
715
+ end
716
+ if cmd == "git"
717
+ io.write_stdout("You can use daff to improve git's handling of csv files, by using it as a\ndiff driver (for showing what has changed) and as a merge driver (for merging\nchanges between multiple versions).\n")
718
+ io.write_stdout("\n")
719
+ io.write_stdout("Automatic setup\n")
720
+ io.write_stdout("---------------\n\n")
721
+ io.write_stdout("Run:\n")
722
+ io.write_stdout(" daff git csv\n")
723
+ io.write_stdout("\n")
724
+ io.write_stdout("Manual setup\n")
725
+ io.write_stdout("------------\n\n")
726
+ io.write_stdout("Create and add a file called .gitattributes in the root directory of your\nrepository, containing:\n\n")
727
+ io.write_stdout(" *.csv diff=daff-csv\n")
728
+ io.write_stdout(" *.csv merge=daff-csv\n")
729
+ io.write_stdout("\nCreate a file called .gitconfig in your home directory (or alternatively\nopen .git/config for a particular repository) and add:\n\n")
730
+ io.write_stdout(" [diff \"daff-csv\"]\n")
731
+ io.write_stdout(" command = daff diff --git\n")
732
+ io.write_stderr("\n")
733
+ io.write_stdout(" [merge \"daff-csv\"]\n")
734
+ io.write_stdout(" name = daff tabular merge\n")
735
+ io.write_stdout(" driver = daff merge --output %A %O %A %B\n\n")
736
+ io.write_stderr("Make sure you can run daff from the command-line as just \"daff\" - if not,\nreplace \"daff\" in the driver and command lines above with the correct way\nto call it. Add --no-color if your terminal does not support ANSI colors.")
737
+ io.write_stderr("\n")
738
+ return 0
739
+ end
740
+ if args.length < 1
741
+ io.write_stderr("daff can produce and apply tabular diffs.\n")
742
+ io.write_stderr("Call as:\n")
743
+ io.write_stderr(" daff [--color] [--no-color] [--output OUTPUT.csv] a.csv b.csv\n")
744
+ io.write_stderr(" daff [--output OUTPUT.html] a.csv b.csv\n")
745
+ io.write_stderr(" daff [--output OUTPUT.csv] parent.csv a.csv b.csv\n")
746
+ io.write_stderr(" daff [--output OUTPUT.ndjson] a.ndjson b.ndjson\n")
747
+ io.write_stderr(" daff [--www] a.csv b.csv\n")
748
+ io.write_stderr(" daff patch [--inplace] [--output OUTPUT.csv] a.csv patch.csv\n")
749
+ io.write_stderr(" daff merge [--inplace] [--output OUTPUT.csv] parent.csv a.csv b.csv\n")
750
+ io.write_stderr(" daff trim [--output OUTPUT.csv] source.csv\n")
751
+ io.write_stderr(" daff render [--output OUTPUT.html] diff.csv\n")
752
+ io.write_stderr(" daff copy in.csv out.tsv\n")
753
+ io.write_stderr(" daff in.csv\n")
754
+ io.write_stderr(" daff git\n")
755
+ io.write_stderr(" daff version\n")
756
+ io.write_stderr("\n")
757
+ io.write_stderr("The --inplace option to patch and merge will result in modification of a.csv.\n")
758
+ io.write_stderr("\n")
759
+ io.write_stderr("If you need more control, here is the full list of flags:\n")
760
+ io.write_stderr(" daff diff [--output OUTPUT.csv] [--context NUM] [--all] [--act ACT] a.csv b.csv\n")
761
+ io.write_stderr(" --act ACT: show only a certain kind of change (update, insert, delete)\n")
762
+ io.write_stderr(" --all: do not prune unchanged rows or columns\n")
763
+ io.write_stderr(" --all-rows: do not prune unchanged rows\n")
764
+ io.write_stderr(" --all-columns: do not prune unchanged columns\n")
765
+ io.write_stderr(" --color: highlight changes with terminal colors (default in terminals)\n")
766
+ io.write_stderr(" --context NUM: show NUM rows of context\n")
767
+ io.write_stderr(" --fail-if-diff: return status is 0 if equal, 1 if different, 2 if problem\n")
768
+ io.write_stderr(" --id: specify column to use as primary key (repeat for multi-column key)\n")
769
+ io.write_stderr(" --ignore: specify column to ignore completely (can repeat)\n")
770
+ io.write_stderr(" --index: include row/columns numbers from original tables\n")
771
+ io.write_stderr(" --input-format [csv|tsv|ssv|psv|json]: set format to expect for input\n")
772
+ io.write_stderr(" --eol [crlf|lf|cr|auto]: separator between rows of csv output.\n")
773
+ io.write_stderr(" --no-color: make sure terminal colors are not used\n")
774
+ io.write_stderr(" --ordered: assume row order is meaningful (default for CSV)\n")
775
+ io.write_stderr(" --output-format [csv|tsv|ssv|psv|json|copy|html]: set format for output\n")
776
+ io.write_stderr(" --padding [dense|sparse|smart]: set padding method for aligning columns\n")
777
+ io.write_stderr(" --table NAME: compare the named table, used with SQL sources\n")
778
+ io.write_stderr(" --unordered: assume row order is meaningless (default for json formats)\n")
779
+ io.write_stderr(" -w / --ignore-whitespace: ignore changes in leading/trailing whitespace\n")
780
+ io.write_stderr(" -i / --ignore-case: ignore differences in case\n")
781
+ io.write_stderr("\n")
782
+ io.write_stderr(" daff render [--output OUTPUT.html] [--css CSS.css] [--fragment] [--plain] diff.csv\n")
783
+ io.write_stderr(" --css CSS.css: generate a suitable css file to go with the html\n")
784
+ io.write_stderr(" --fragment: generate just a html fragment rather than a page\n")
785
+ io.write_stderr(" --plain: do not use fancy utf8 characters to make arrows prettier\n")
786
+ io.write_stderr(" --www: send output to a browser\n")
787
+ return 1
788
+ end
700
789
  end
701
- if cmd == "git"
702
- io.write_stdout("You can use daff to improve git's handling of csv files, by using it as a\ndiff driver (for showing what has changed) and as a merge driver (for merging\nchanges between multiple versions).\n")
703
- io.write_stdout("\n")
704
- io.write_stdout("Automatic setup\n")
705
- io.write_stdout("---------------\n\n")
706
- io.write_stdout("Run:\n")
707
- io.write_stdout(" daff git csv\n")
708
- io.write_stdout("\n")
709
- io.write_stdout("Manual setup\n")
710
- io.write_stdout("------------\n\n")
711
- io.write_stdout("Create and add a file called .gitattributes in the root directory of your\nrepository, containing:\n\n")
712
- io.write_stdout(" *.csv diff=daff-csv\n")
713
- io.write_stdout(" *.csv merge=daff-csv\n")
714
- io.write_stdout("\nCreate a file called .gitconfig in your home directory (or alternatively\nopen .git/config for a particular repository) and add:\n\n")
715
- io.write_stdout(" [diff \"daff-csv\"]\n")
716
- io.write_stdout(" command = daff diff --git\n")
717
- io.write_stderr("\n")
718
- io.write_stdout(" [merge \"daff-csv\"]\n")
719
- io.write_stdout(" name = daff tabular merge\n")
720
- io.write_stdout(" driver = daff merge --output %A %O %A %B\n\n")
721
- io.write_stderr("Make sure you can run daff from the command-line as just \"daff\" - if not,\nreplace \"daff\" in the driver and command lines above with the correct way\nto call it. Add --no-color if your terminal does not support ANSI colors.")
722
- io.write_stderr("\n")
723
- return 0
790
+ cmd1 = args[0]
791
+ offset = 1
792
+ if !Lambda.has(["diff","patch","merge","trim","render","git","version","copy"],cmd1)
793
+ if (cmd1.index("--",nil || 0) || -1) == 0
794
+ cmd1 = "diff"
795
+ offset = 0
796
+ elsif (cmd1.index(".",nil || 0) || -1) != -1
797
+ if args.length == 2
798
+ cmd1 = "diff"
799
+ offset = 0
800
+ elsif args.length == 1
801
+ cmd1 = "copy"
802
+ offset = 0
803
+ end
804
+ end
724
805
  end
725
- if args.length < 1
726
- io.write_stderr("daff can produce and apply tabular diffs.\n")
727
- io.write_stderr("Call as:\n")
728
- io.write_stderr(" daff [--color] [--no-color] [--output OUTPUT.csv] a.csv b.csv\n")
729
- io.write_stderr(" daff [--output OUTPUT.html] a.csv b.csv\n")
730
- io.write_stderr(" daff [--output OUTPUT.csv] parent.csv a.csv b.csv\n")
731
- io.write_stderr(" daff [--output OUTPUT.ndjson] a.ndjson b.ndjson\n")
732
- io.write_stderr(" daff [--www] a.csv b.csv\n")
733
- io.write_stderr(" daff patch [--inplace] [--output OUTPUT.csv] a.csv patch.csv\n")
734
- io.write_stderr(" daff merge [--inplace] [--output OUTPUT.csv] parent.csv a.csv b.csv\n")
735
- io.write_stderr(" daff trim [--output OUTPUT.csv] source.csv\n")
736
- io.write_stderr(" daff render [--output OUTPUT.html] diff.csv\n")
737
- io.write_stderr(" daff copy in.csv out.tsv\n")
738
- io.write_stderr(" daff in.csv\n")
739
- io.write_stderr(" daff git\n")
740
- io.write_stderr(" daff version\n")
741
- io.write_stderr("\n")
742
- io.write_stderr("The --inplace option to patch and merge will result in modification of a.csv.\n")
743
- io.write_stderr("\n")
744
- io.write_stderr("If you need more control, here is the full list of flags:\n")
745
- io.write_stderr(" daff diff [--output OUTPUT.csv] [--context NUM] [--all] [--act ACT] a.csv b.csv\n")
746
- io.write_stderr(" --act ACT: show only a certain kind of change (update, insert, delete)\n")
747
- io.write_stderr(" --all: do not prune unchanged rows or columns\n")
748
- io.write_stderr(" --all-rows: do not prune unchanged rows\n")
749
- io.write_stderr(" --all-columns: do not prune unchanged columns\n")
750
- io.write_stderr(" --color: highlight changes with terminal colors (default in terminals)\n")
751
- io.write_stderr(" --context NUM: show NUM rows of context\n")
752
- io.write_stderr(" --id: specify column to use as primary key (repeat for multi-column key)\n")
753
- io.write_stderr(" --ignore: specify column to ignore completely (can repeat)\n")
754
- io.write_stderr(" --index: include row/columns numbers from original tables\n")
755
- io.write_stderr(" --input-format [csv|tsv|ssv|psv|json]: set format to expect for input\n")
756
- io.write_stderr(" --eol [crlf|lf|cr|auto]: separator between rows of csv output.\n")
757
- io.write_stderr(" --no-color: make sure terminal colors are not used\n")
758
- io.write_stderr(" --ordered: assume row order is meaningful (default for CSV)\n")
759
- io.write_stderr(" --output-format [csv|tsv|ssv|psv|json|copy|html]: set format for output\n")
760
- io.write_stderr(" --padding [dense|sparse|smart]: set padding method for aligning columns\n")
761
- io.write_stderr(" --table NAME: compare the named table, used with SQL sources\n")
762
- io.write_stderr(" --unordered: assume row order is meaningless (default for json formats)\n")
763
- io.write_stderr(" -w / --ignore-whitespace: ignore changes in leading/trailing whitespace\n")
764
- io.write_stderr(" -i / --ignore-case: ignore differences in case\n")
765
- io.write_stderr("\n")
766
- io.write_stderr(" daff render [--output OUTPUT.html] [--css CSS.css] [--fragment] [--plain] diff.csv\n")
767
- io.write_stderr(" --css CSS.css: generate a suitable css file to go with the html\n")
768
- io.write_stderr(" --fragment: generate just a html fragment rather than a page\n")
769
- io.write_stderr(" --plain: do not use fancy utf8 characters to make arrows prettier\n")
770
- io.write_stderr(" --www: send output to a browser\n")
771
- return 1
806
+ if cmd1 == "git"
807
+ types = args.slice!(offset,args.length - offset)
808
+ return self.install_git_driver(io,types)
772
809
  end
773
- end
774
- cmd1 = args[0]
775
- offset = 1
776
- if !Lambda.has(["diff","patch","merge","trim","render","git","version","copy"],cmd1)
777
- if (cmd1.index("--",nil || 0) || -1) == 0
778
- cmd1 = "diff"
810
+ if git
811
+ ct = args.length - offset
812
+ if ct != 7 && ct != 9
813
+ io.write_stderr("Expected 7 or 9 parameters from git, but got " + _hx_str(ct) + "\n")
814
+ return 1
815
+ end
816
+ git_args = args.slice!(offset,ct)
817
+ args.slice!(0,args.length)
779
818
  offset = 0
780
- elsif (cmd1.index(".",nil || 0) || -1) != -1
781
- if args.length == 2
782
- cmd1 = "diff"
783
- offset = 0
784
- elsif args.length == 1
785
- cmd1 = "copy"
786
- offset = 0
819
+ old_display_path = git_args[0]
820
+ new_display_path = git_args[0]
821
+ old_file = git_args[1]
822
+ new_file = git_args[4]
823
+ if ct == 9
824
+ io.write_stdout(git_args[8])
825
+ new_display_path = git_args[7]
787
826
  end
827
+ io.write_stdout("--- a/" + _hx_str(old_display_path) + "\n")
828
+ io.write_stdout("+++ b/" + _hx_str(new_display_path) + "\n")
829
+ args.push(old_file)
830
+ args.push(new_file)
788
831
  end
789
- end
790
- if cmd1 == "git"
791
- types = args.slice!(offset,args.length - offset)
792
- return self.install_git_driver(io,types)
793
- end
794
- if git
795
- ct = args.length - offset
796
- if ct != 7 && ct != 9
797
- io.write_stderr("Expected 7 or 9 parameters from git, but got " + _hx_str(ct) + "\n")
798
- return 1
832
+ parent = nil
833
+ if args.length - offset >= 3
834
+ parent = self.load_table(args[offset])
835
+ offset+=1
799
836
  end
800
- git_args = args.slice!(offset,ct)
801
- args.slice!(0,args.length)
802
- offset = 0
803
- old_display_path = git_args[0]
804
- new_display_path = git_args[0]
805
- old_file = git_args[1]
806
- new_file = git_args[4]
807
- if ct == 9
808
- io.write_stdout(git_args[8])
809
- new_display_path = git_args[7]
837
+ aname = args[offset]
838
+ a = self.load_table(aname)
839
+ b = nil
840
+ if args.length - offset >= 2
841
+ if cmd1 != "copy"
842
+ b = self.load_table(args[1 + offset])
843
+ else
844
+ output = args[1 + offset]
845
+ end
810
846
  end
811
- io.write_stdout("--- a/" + _hx_str(old_display_path) + "\n")
812
- io.write_stdout("+++ b/" + _hx_str(new_display_path) + "\n")
813
- args.push(old_file)
814
- args.push(new_file)
815
- end
816
- parent = nil
817
- if args.length - offset >= 3
818
- parent = self.load_table(args[offset])
819
- offset+=1
820
- end
821
- aname = args[offset]
822
- a = self.load_table(aname)
823
- b = nil
824
- if args.length - offset >= 2
825
- if cmd1 != "copy"
826
- b = self.load_table(args[1 + offset])
827
- else
828
- output = args[1 + offset]
847
+ @flags.diff_strategy = @strategy
848
+ if inplace
849
+ io.write_stderr("Please do not use --inplace when specifying an output.\n") if output != nil
850
+ output = aname
851
+ return 1
829
852
  end
830
- end
831
- @flags.diff_strategy = @strategy
832
- if inplace
833
- io.write_stderr("Please do not use --inplace when specifying an output.\n") if output != nil
834
- output = aname
835
- return 1
836
- end
837
- output = "-" if output == nil
838
- ok = true
839
- if cmd1 == "diff"
840
- if !@order_set
841
- @flags.ordered = @order_preference
842
- @flags.unchanged_context = 0 if !@flags.ordered
853
+ output = "-" if output == nil
854
+ if cmd1 == "diff"
855
+ if !@order_set
856
+ @flags.ordered = @order_preference
857
+ @flags.unchanged_context = 0 if !@flags.ordered
858
+ end
859
+ @flags.allow_nested_cells = @nested_output
860
+ if @fail_if_diff
861
+ begin
862
+ self.run_diff(parent,a,b,@flags,output)
863
+ rescue => e
864
+ e = hx_rescued(e)
865
+ return 2
866
+ end
867
+ return 1 if @diffs_found
868
+ else
869
+ self.run_diff(parent,a,b,@flags,output)
870
+ end
871
+ elsif cmd1 == "patch"
872
+ patcher = ::Coopy::HighlightPatch.new(a,b)
873
+ patcher.apply
874
+ self.save_table(output,a)
875
+ elsif cmd1 == "merge"
876
+ merger = ::Coopy::Merger.new(parent,a,b,@flags)
877
+ conflicts = merger.apply
878
+ ok = conflicts == 0
879
+ io.write_stderr(_hx_str(conflicts) + " conflict" + _hx_str((((conflicts > 1) ? "s" : ""))) + "\n") if conflicts > 0
880
+ self.save_table(output,a)
881
+ elsif cmd1 == "trim"
882
+ self.save_table(output,a)
883
+ elsif cmd1 == "render"
884
+ self.render_table(output,a)
885
+ elsif cmd1 == "copy"
886
+ os = ::Coopy::Tables.new(a)
887
+ os.add("untitled")
888
+ self.save_tables(output,os,self.use_color(@flags,output),false)
843
889
  end
844
- @flags.allow_nested_cells = @nested_output
845
- self.run_diff(parent,a,b,@flags,output)
846
- elsif cmd1 == "patch"
847
- patcher = ::Coopy::HighlightPatch.new(a,b)
848
- patcher.apply
849
- self.save_table(output,a)
850
- elsif cmd1 == "merge"
851
- merger = ::Coopy::Merger.new(parent,a,b,@flags)
852
- conflicts = merger.apply
853
- ok = conflicts == 0
854
- io.write_stderr(_hx_str(conflicts) + " conflict" + _hx_str((((conflicts > 1) ? "s" : ""))) + "\n") if conflicts > 0
855
- self.save_table(output,a)
856
- elsif cmd1 == "trim"
857
- self.save_table(output,a)
858
- elsif cmd1 == "render"
859
- self.render_table(output,a)
860
- elsif cmd1 == "copy"
861
- os = ::Coopy::Tables.new(a)
862
- os.add("untitled")
863
- self.save_tables(output,os,self.use_color(@flags,output),false)
890
+ rescue => e1
891
+ e1 = hx_rescued(e1)
892
+ raise hx_raise(e1) if !@fail_if_diff
893
+ return 2
864
894
  end
865
895
  if ok
866
896
  return 0
897
+ elsif @fail_if_diff
898
+ return 2
867
899
  else
868
900
  return 1
869
901
  end
@@ -879,7 +911,7 @@ module Coopy
879
911
  class << self
880
912
  attr_accessor :version
881
913
  end
882
- @version = "1.3.26"
914
+ @version = "1.3.27"
883
915
 
884
916
  def Coopy.diff_as_html(local,remote,flags = nil)
885
917
  comp = ::Coopy::TableComparisonState.new
@@ -31,23 +31,23 @@ module Coopy
31
31
  eol = @preferred_eol
32
32
  eol = "\r\n" if eol == nil
33
33
  result = ""
34
- txt = ""
35
34
  v = t.get_cell_view
36
35
  stream = ::Coopy::TableStream.new(t)
37
36
  w = stream.width
37
+ txts = Array.new
38
38
  while(stream.fetch)
39
39
  begin
40
40
  _g = 0
41
41
  while(_g < w)
42
42
  x = _g
43
43
  _g+=1
44
- txt += @delim if x > 0
45
- txt += self.render_cell(v,stream.get_cell(x))
44
+ txts.push(@delim) if x > 0
45
+ txts.push(self.render_cell(v,stream.get_cell(x)))
46
46
  end
47
47
  end
48
- txt += eol
48
+ txts.push(eol)
49
49
  end
50
- txt
50
+ txts.join("")
51
51
  end
52
52
 
53
53
  def render_cell(v,d)
@@ -22,6 +22,7 @@ module Coopy
22
22
  attr_accessor :row_count_final
23
23
  attr_accessor :col_count_initial
24
24
  attr_accessor :col_count_final
25
+ attr_accessor :different
25
26
  haxe_me ["coopy", "DiffSummary"]
26
27
  end
27
28
 
@@ -687,30 +687,33 @@ module Coopy
687
687
  end
688
688
 
689
689
  def check_meta(t,meta)
690
+ return false if meta == nil
691
+ return meta.get_width == 1 && meta.get_height == 1 if t == nil
690
692
  return false if meta.get_width != t.get_width + 1
691
693
  return false if meta.get_width == 0 || meta.get_height == 0
692
694
  true
693
695
  end
694
696
 
695
697
  def get_meta_table(t)
696
- return nil if t == nil
698
+ if t == nil
699
+ result = ::Coopy::SimpleTable.new(1,1)
700
+ result.set_cell(0,0,"@")
701
+ return result
702
+ end
697
703
  meta = t.get_meta
698
704
  return nil if meta == nil
699
705
  meta.as_table
700
706
  end
701
707
 
702
708
  def add_meta(output)
703
- a_meta = nil
704
- b_meta = nil
705
- p_meta = nil
709
+ return false if @a == nil && @b == nil && @p == nil
710
+ return false if !@flags.show_meta
706
711
  a_meta = self.get_meta_table(@a)
707
712
  b_meta = self.get_meta_table(@b)
708
713
  p_meta = self.get_meta_table(@p)
709
- return false if a_meta == nil || b_meta == nil || p_meta == nil
710
714
  return false if !self.check_meta(@a,a_meta)
711
715
  return false if !self.check_meta(@b,b_meta)
712
716
  return false if !self.check_meta(@p,p_meta)
713
- return false if !@flags.show_meta
714
717
  meta_diff = ::Coopy::SimpleTable.new(0,0)
715
718
  meta_flags = ::Coopy::CompareFlags.new
716
719
  meta_flags.add_primary_key("@@")
@@ -721,7 +724,7 @@ module Coopy
721
724
  td = ::Coopy::TableDiff.new(meta_align,meta_flags)
722
725
  td.preserve_columns = true
723
726
  td.hilite(meta_diff)
724
- if td.has_difference
727
+ if td.has_difference || td.has_schema_difference
725
728
  h = output.get_height
726
729
  dh = meta_diff.get_height
727
730
  offset = nil
@@ -1176,6 +1179,7 @@ module Coopy
1176
1179
  ds.row_count_final = @align.get_target.get_height - @align.get_target_header - 1
1177
1180
  ds.col_count_initial = @align.get_source.get_width
1178
1181
  ds.col_count_final = @align.get_target.get_width
1182
+ ds.different = @row_deletes + @row_inserts + @row_updates + @row_reorders + @col_deletes + @col_inserts + @col_updates + @col_renames + @col_reorders > 0
1179
1183
  ds
1180
1184
  end
1181
1185
 
@@ -46,7 +46,6 @@ module Coopy
46
46
  result = ""
47
47
  w = t.get_width
48
48
  h = t.get_height
49
- txt = ""
50
49
  @t = t
51
50
  @v = t.get_cell_view
52
51
  @codes = {}
@@ -61,6 +60,7 @@ module Coopy
61
60
  @codes["remove"] = "\x1B[31;1m"
62
61
  sizes = nil
63
62
  sizes = self.pick_sizes(t) if @align_columns
63
+ txts = Array.new
64
64
  begin
65
65
  _g = 0
66
66
  while(_g < h)
@@ -80,13 +80,17 @@ module Coopy
80
80
  while(_g2 < spaces)
81
81
  i = _g2
82
82
  _g2+=1
83
- txt += " "
83
+ txts.push(" ")
84
84
  at+=1
85
85
  end
86
86
  end
87
87
  end
88
- txt += _hx_str(@codes["minor"]) + _hx_str(@delim) + _hx_str(@codes["done"]) if x > 0
89
- txt += self.get_text(x,y,true)
88
+ if x > 0
89
+ txts.push(@codes["minor"])
90
+ txts.push(@delim)
91
+ txts.push(@codes["done"])
92
+ end
93
+ txts.push(self.get_text(x,y,true))
90
94
  if sizes != nil
91
95
  bit = self.get_text(x,y,false)
92
96
  at += bit.length
@@ -94,14 +98,14 @@ module Coopy
94
98
  end
95
99
  end
96
100
  end
97
- txt += "\r\n"
101
+ txts.push("\r\n")
98
102
  end
99
103
  end
100
104
  @t = nil
101
105
  @v = nil
102
106
  @csv = nil
103
107
  @codes = nil
104
- txt
108
+ txts.join("")
105
109
  end
106
110
 
107
111
  protected
@@ -19,9 +19,9 @@ module Rb
19
19
  def Boot.__instanceof(o,cl)
20
20
  return false if cl == nil
21
21
  if cl == Integer
22
- return o.is_a? Integer
22
+ return o.is_a? 0.class
23
23
  elsif cl == Float
24
- return o.is_a?(Float) || o.is_a?(Integer)
24
+ return o.is_a?(Float) || o.is_a?(0.class)
25
25
  elsif cl == TrueClass
26
26
  return ((o.is_a? TrueClass)||(o.is_a? FalseClass))
27
27
  elsif cl == String
@@ -16,6 +16,8 @@
16
16
  return ValueType.tclass(String)
17
17
  when "Integer"
18
18
  return ValueType.tint
19
+ when "Fixnum"
20
+ return ValueType.tint
19
21
  when "Float"
20
22
  return ValueType.tfloat
21
23
  when "Proc"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: daff
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.26
4
+ version: 1.3.27
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Smith
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-08-17 00:00:00.000000000 Z
12
+ date: 2018-04-17 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Diff and patch tables
15
15
  email:
@@ -115,17 +115,17 @@ require_paths:
115
115
  - lib
116
116
  required_ruby_version: !ruby/object:Gem::Requirement
117
117
  requirements:
118
- - - ">="
118
+ - - '>='
119
119
  - !ruby/object:Gem::Version
120
120
  version: '0'
121
121
  required_rubygems_version: !ruby/object:Gem::Requirement
122
122
  requirements:
123
- - - ">="
123
+ - - '>='
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
126
  requirements: []
127
127
  rubyforge_project:
128
- rubygems_version: 2.6.10
128
+ rubygems_version: 2.4.8
129
129
  signing_key:
130
130
  specification_version: 4
131
131
  summary: '[![Build Status](https://travis-ci.org/paulfitz/daff.svg?branch=master)](https://travis-ci.org/paulfitz/daff)