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 +4 -4
- data/lib/daff.rb +2 -2
- data/lib/lib/coopy/coopy.rb +191 -159
- data/lib/lib/coopy/csv.rb +5 -5
- data/lib/lib/coopy/diff_summary.rb +1 -0
- data/lib/lib/coopy/table_diff.rb +11 -7
- data/lib/lib/coopy/terminal_diff_render.rb +10 -6
- data/lib/lib/rb/boot.rb +2 -2
- data/lib/lib/type.rb +2 -0
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bcecf9714f4f125b4335e3113fb57bbf96b1db9b
|
4
|
+
data.tar.gz: 101dab4d573f812ec2faf2dee8d3cca85cb9b5e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eab198c780357ddd7c3e7a27393b07cd36ed2815c3d39eadec1919f6365052b9f44b44fe3db8fd9f73dce1959109578f056e329dbbdaade832c60b7aa50df499
|
7
|
+
data.tar.gz: afae043f38fab30472f802d16f6eedae1a8920654baf039de88bdb4fa16f0e9c222691938da13ff6def39fe05543eab5528928091f7125c3bd2461ac74c6114e
|
data/lib/daff.rb
CHANGED
@@ -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?(
|
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?(
|
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
|
data/lib/lib/coopy/coopy.rb
CHANGED
@@ -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
|
-
|
697
|
-
|
698
|
-
|
699
|
-
|
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
|
-
|
702
|
-
|
703
|
-
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
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
|
726
|
-
|
727
|
-
|
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
|
-
|
774
|
-
|
775
|
-
|
776
|
-
|
777
|
-
|
778
|
-
|
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
|
-
|
781
|
-
|
782
|
-
|
783
|
-
|
784
|
-
|
785
|
-
|
786
|
-
|
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
|
-
|
790
|
-
|
791
|
-
|
792
|
-
|
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
|
-
|
801
|
-
|
802
|
-
|
803
|
-
|
804
|
-
|
805
|
-
|
806
|
-
|
807
|
-
|
808
|
-
|
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
|
-
|
812
|
-
|
813
|
-
|
814
|
-
|
815
|
-
|
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
|
-
|
831
|
-
|
832
|
-
|
833
|
-
|
834
|
-
|
835
|
-
|
836
|
-
|
837
|
-
|
838
|
-
|
839
|
-
|
840
|
-
|
841
|
-
|
842
|
-
|
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
|
-
|
845
|
-
|
846
|
-
|
847
|
-
|
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.
|
914
|
+
@version = "1.3.27"
|
883
915
|
|
884
916
|
def Coopy.diff_as_html(local,remote,flags = nil)
|
885
917
|
comp = ::Coopy::TableComparisonState.new
|
data/lib/lib/coopy/csv.rb
CHANGED
@@ -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
|
-
|
45
|
-
|
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
|
-
|
48
|
+
txts.push(eol)
|
49
49
|
end
|
50
|
-
|
50
|
+
txts.join("")
|
51
51
|
end
|
52
52
|
|
53
53
|
def render_cell(v,d)
|
data/lib/lib/coopy/table_diff.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
704
|
-
|
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
|
-
|
83
|
+
txts.push(" ")
|
84
84
|
at+=1
|
85
85
|
end
|
86
86
|
end
|
87
87
|
end
|
88
|
-
|
89
|
-
|
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
|
-
|
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
|
-
|
108
|
+
txts.join("")
|
105
109
|
end
|
106
110
|
|
107
111
|
protected
|
data/lib/lib/rb/boot.rb
CHANGED
@@ -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?
|
22
|
+
return o.is_a? 0.class
|
23
23
|
elsif cl == Float
|
24
|
-
return o.is_a?(Float) || o.is_a?(
|
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
|
data/lib/lib/type.rb
CHANGED
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.
|
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:
|
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.
|
128
|
+
rubygems_version: 2.4.8
|
129
129
|
signing_key:
|
130
130
|
specification_version: 4
|
131
131
|
summary: '[](https://travis-ci.org/paulfitz/daff)
|