rrdiff 0.9.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ *.gem
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in hi.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ (The MIT License)
2
+
3
+ Copyright (c) 2005-2010 The RSpec Development Team
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README ADDED
@@ -0,0 +1,32 @@
1
+ rrdiff - Ruby bindings to librsync/rdiff.
2
+
3
+ Lets say you have two files oldfile and newfile where newfile
4
+ is a modified version of oldfile. We want to be able to apply
5
+ the change to oldfile such that it becomes newfile.
6
+
7
+ The first process is to create a signature for the oldfile. The
8
+ parameters are the original file and where you want to store
9
+ the signature file.
10
+
11
+ RRDiff.signature("oldfile", "sigfile")
12
+
13
+ Then from the newfile and the sigfile generate a delta. Deltafile
14
+ is where the delta is stored.
15
+
16
+ RRDiff.delta("newfile", "sigfile", "deltafile")
17
+
18
+ Finally, apply the deltafile to the oldfile to create the patchedfile
19
+ which should be equivalent to newfile.
20
+
21
+ RRDiff.patch("oldfile", "deltafile", "patchedfile")
22
+
23
+ There is also a File interface, that you can pass File instances.
24
+ It will return Tempfiles.
25
+
26
+ RRDiff::File.signature(oldfile) #=> <File>
27
+
28
+ RRDiff::File.delta(sigfile, newfile) #=> <File>
29
+
30
+ RRDiff::File.diff(oldfile, newfile) #=> <File>
31
+
32
+ RRDiff::File.patch(oldfile, deltafile) #=> <File>
data/Rakefile ADDED
@@ -0,0 +1,24 @@
1
+ require 'rubygems'
2
+ require 'rake/clean'
3
+ require 'rspec/core/rake_task'
4
+
5
+ NAME = 'rrdiff'
6
+
7
+ # rule to build the extension: this says
8
+ # that the extension should be rebuilt
9
+ # after any change to the files in ext
10
+ file "lib/#{NAME}/#{NAME}.#{RbConfig::CONFIG['DLEXT']}" => Dir.glob("ext/#{NAME}/*{.rb,.c}") do
11
+ Dir.chdir("ext/#{NAME}") do
12
+ # this does essentially the same thing
13
+ # as what RubyGems does
14
+ ruby "extconf.rb"
15
+ sh "make"
16
+ end
17
+ end
18
+
19
+ CLEAN.include('ext/**/*{.o,.log,.so,.bundle}')
20
+ CLEAN.include('ext/**/Makefile')
21
+ CLOBBER.include('lib/**/*.so')
22
+
23
+ RSpec::Core::RakeTask.new(:spec)
24
+ task :default => ["lib/#{NAME}/#{NAME}.#{RbConfig::CONFIG['DLEXT']}", :spec]
@@ -0,0 +1,6 @@
1
+ require 'mkmf'
2
+
3
+ fail unless have_library('rsync')
4
+ have_header('librsync.h')
5
+
6
+ create_makefile('rrdiff/rrdiff')
@@ -0,0 +1,82 @@
1
+ #include <ruby.h>
2
+ #include <stdio.h>
3
+ #include <stdlib.h>
4
+ #include <librsync.h>
5
+
6
+ VALUE RRDiff = Qnil;
7
+
8
+ static VALUE rrdiff_signature(VALUE mod, VALUE old_file, VALUE sig_file)
9
+ {
10
+ FILE *basis, *signature;
11
+
12
+ rs_result result;
13
+ rs_stats_t stats;
14
+
15
+ basis = fopen(StringValuePtr(old_file), "rb");
16
+ signature = fopen(StringValuePtr(sig_file), "wb");
17
+
18
+ result = rs_sig_file(basis, signature, RS_DEFAULT_BLOCK_LEN, RS_DEFAULT_STRONG_LEN, &stats);
19
+
20
+ fclose(basis);
21
+ fclose(signature);
22
+
23
+ return Qnil;
24
+ }
25
+
26
+ static VALUE rrdiff_delta(VALUE mod, VALUE new_file, VALUE sig_file, VALUE delta_file)
27
+ {
28
+ FILE *newfile, *sigfile, *deltafile;
29
+
30
+ rs_result result;
31
+ rs_stats_t stats;
32
+ rs_signature_t *sig;
33
+
34
+ newfile = fopen(StringValuePtr(new_file), "rb");
35
+ sigfile = fopen(StringValuePtr(sig_file), "rb");
36
+ deltafile = fopen(StringValuePtr(delta_file), "wb");
37
+
38
+ if((result = rs_loadsig_file(sigfile, &sig, &stats)) != RS_DONE)
39
+ return Qnil;
40
+
41
+ if ((result = rs_build_hash_table(sig)) != RS_DONE)
42
+ return Qnil;
43
+
44
+ result = rs_delta_file(sig, newfile, deltafile, &stats);
45
+
46
+ rs_free_sumset(sig);
47
+
48
+ fclose(newfile);
49
+ fclose(sigfile);
50
+ fclose(deltafile);
51
+
52
+ return Qnil;
53
+ }
54
+
55
+ static VALUE rrdiff_patch(VALUE mod, VALUE old_file, VALUE delta_file, VALUE patched_file)
56
+ {
57
+ FILE *basisfile, *deltafile, *newfile;
58
+
59
+ rs_stats_t stats;
60
+ rs_result result;
61
+
62
+ basisfile = fopen(StringValuePtr(old_file), "rb");
63
+ deltafile = fopen(StringValuePtr(delta_file), "rb");
64
+ newfile = fopen(StringValuePtr(patched_file), "wb");
65
+
66
+ result = rs_patch_file(basisfile, deltafile, newfile, &stats);
67
+
68
+ fclose(newfile);
69
+ fclose(deltafile);
70
+ fclose(basisfile);
71
+
72
+ return Qnil;
73
+ }
74
+
75
+ void Init_rrdiff()
76
+ {
77
+ RRDiff = rb_define_module("RRDiff");
78
+
79
+ rb_define_singleton_method(RRDiff, "signature", rrdiff_signature, 2);
80
+ rb_define_singleton_method(RRDiff, "delta", rrdiff_delta, 3);
81
+ rb_define_singleton_method(RRDiff, "patch", rrdiff_patch, 3);
82
+ }
@@ -0,0 +1,33 @@
1
+ require "tempfile"
2
+
3
+ module RRDiff
4
+ module File
5
+ # File interface to RRDiff
6
+
7
+ extend self
8
+
9
+ def patch(ofile, dfile)
10
+ nfile = Tempfile.new("nfile")
11
+ RRDiff.patch(ofile.path, dfile.path, nfile.path)
12
+ nfile
13
+ end
14
+
15
+ def signature(file)
16
+ sfile = Tempfile.new("sigfile")
17
+ RRDiff.signature(file.path, sfile.path)
18
+ sfile
19
+ end
20
+
21
+ def delta(sfile, file)
22
+ dfile = Tempfile.new("delfile")
23
+ RRDiff.delta(file.path, sfile.path, dfile.path)
24
+ dfile
25
+ end
26
+
27
+ def diff(ofile, nfile)
28
+ sfile = signature(ofile)
29
+ delta(sfile, nfile)
30
+ end
31
+
32
+ end
33
+ end
data/lib/rrdiff.rb ADDED
@@ -0,0 +1,4 @@
1
+ $: << File.dirname(__FILE__)
2
+
3
+ require File.join(File.dirname(__FILE__),'..','ext','rrdiff', 'rrdiff')
4
+ require "rrdiff/file"
data/rrdiff.gemspec ADDED
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "rrdiff"
5
+ s.version = "0.10.0"
6
+
7
+ s.authors = ["Abhi Yerra"]
8
+ s.email = %q{ykabhinav@gmail.com}
9
+
10
+ s.add_development_dependency('rake')
11
+ s.add_development_dependency('rspec')
12
+ s.add_development_dependency('debugger')
13
+
14
+ s.description = %q{Ruby bindings to librsync which provides rdiff.}
15
+ s.summary = %q{Ruby bindings to librsync which provides rdiff.}
16
+ s.homepage = %q{http://github.com/abhiyerra/rrdiff}
17
+
18
+ s.extensions = ["ext/rrdiff/extconf.rb"]
19
+
20
+ s.files = `git ls-files`.split($/)
21
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
22
+ s.require_paths = ["lib"]
23
+ end
Binary file
data/spec/newfile ADDED
@@ -0,0 +1 @@
1
+ This is maybe a test.
data/spec/oldfile ADDED
@@ -0,0 +1 @@
1
+ This is a test
@@ -0,0 +1,34 @@
1
+ require File.join(File.dirname(__FILE__),'..','ext','rrdiff', 'rrdiff')
2
+
3
+ require 'debugger'
4
+
5
+ debugger; 1
6
+
7
+ describe RRDiff do
8
+ it "should create a signature from an oldfile" do
9
+ RRDiff.signature("oldfile", "sigfile")
10
+
11
+ correct_sig_file = open("sigfile.correct", "rb")
12
+ new_sig_file = open("sigfile", "rb")
13
+
14
+ correct_sig_file.read.should == new_sig_file.read
15
+ end
16
+
17
+ it "show create a delta" do
18
+ RRDiff.delta("newfile", "sigfile", "deltafile")
19
+
20
+ correct_delta_file = open("deltafile.correct", "rb")
21
+ new_delta_file = open("deltafile", "rb")
22
+
23
+ correct_delta_file.read.should == new_delta_file.read
24
+ end
25
+
26
+ it "show patch the oldfile and create a patched file" do
27
+ RRDiff.patch("oldfile", "deltafile", "patchedfile")
28
+
29
+ correct_patched_file = open("newfile", "rb")
30
+ new_patched_file = open("patchedfile", "rb")
31
+
32
+ correct_patched_file.read.should == new_patched_file.read
33
+ end
34
+ end
Binary file
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rrdiff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ hash: 55
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 10
9
+ - 0
10
+ version: 0.10.0
5
11
  platform: ruby
6
12
  authors:
7
13
  - Abhi Yerra
@@ -9,48 +15,110 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2010-01-30 00:00:00 -08:00
13
- default_executable:
14
- dependencies: []
15
-
18
+ date: 2013-06-27 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rake
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
31
+ version: "0"
32
+ type: :development
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: rspec
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ type: :development
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: debugger
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
60
+ type: :development
61
+ version_requirements: *id003
16
62
  description: Ruby bindings to librsync which provides rdiff.
17
63
  email: ykabhinav@gmail.com
18
64
  executables: []
19
65
 
20
66
  extensions:
21
- - ext/extconf.rb
67
+ - ext/rrdiff/extconf.rb
22
68
  extra_rdoc_files: []
23
69
 
24
- files: []
25
-
26
- has_rdoc: true
70
+ files:
71
+ - .gitignore
72
+ - Gemfile
73
+ - LICENSE
74
+ - README
75
+ - Rakefile
76
+ - ext/rrdiff/extconf.rb
77
+ - ext/rrdiff/rrdiff.c
78
+ - lib/rrdiff.rb
79
+ - lib/rrdiff/file.rb
80
+ - rrdiff.gemspec
81
+ - spec/deltafile.correct
82
+ - spec/newfile
83
+ - spec/oldfile
84
+ - spec/rrdiff_spec.rb
85
+ - spec/sigfile.correct
27
86
  homepage: http://github.com/abhiyerra/rrdiff
28
87
  licenses: []
29
88
 
30
89
  post_install_message:
31
- rdoc_options:
32
- - --inline-source
33
- - --charset=UTF-8
90
+ rdoc_options: []
91
+
34
92
  require_paths:
35
93
  - lib
36
94
  required_ruby_version: !ruby/object:Gem::Requirement
95
+ none: false
37
96
  requirements:
38
97
  - - ">="
39
98
  - !ruby/object:Gem::Version
99
+ hash: 3
100
+ segments:
101
+ - 0
40
102
  version: "0"
41
- version:
42
103
  required_rubygems_version: !ruby/object:Gem::Requirement
104
+ none: false
43
105
  requirements:
44
106
  - - ">="
45
107
  - !ruby/object:Gem::Version
108
+ hash: 3
109
+ segments:
110
+ - 0
46
111
  version: "0"
47
- version:
48
112
  requirements: []
49
113
 
50
114
  rubyforge_project:
51
- rubygems_version: 1.3.5
115
+ rubygems_version: 1.8.24
52
116
  signing_key:
53
- specification_version: 2
117
+ specification_version: 3
54
118
  summary: Ruby bindings to librsync which provides rdiff.
55
- test_files: []
56
-
119
+ test_files:
120
+ - spec/deltafile.correct
121
+ - spec/newfile
122
+ - spec/oldfile
123
+ - spec/rrdiff_spec.rb
124
+ - spec/sigfile.correct
data/ext/extconf.rb DELETED
@@ -1,5 +0,0 @@
1
- require 'mkmf'
2
-
3
- fail unless have_library('rsync')
4
- create_header('rrdiff_config.h')
5
- create_makefile('RRDiff')