daff 1.3.26 → 1.3.27

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.
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)