archive-ar 0.0.4 → 0.0.5

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: 9b8964d1e8fd25109ee84f91077e13c0f53ac20c
4
- data.tar.gz: df0475465b5f32e07c048219febe4aac0c853bbe
3
+ metadata.gz: b4ab04343b793ea9fa4b2854f52c36fe85cd16ca
4
+ data.tar.gz: bd6fbfb6bfc8b808c996cde44f082fbe51863bcb
5
5
  SHA512:
6
- metadata.gz: d80d25fd483e80d10d206b1f27cda4ef31e8b2b9b2e8c64b1d0fc209c76ae256eea20c3696d3351ee0ab27af354aff0c78609819ab4122981ac5f537c34dcc76
7
- data.tar.gz: c20d3d7785c83f452a91acbccc89bf024eefa3bf0a6023b9a0f07c1e6db50759dd1078018a7b81c4c40172a988b0f6db42159d37fe44110fe82af2cf014f6052
6
+ metadata.gz: b811768447f57e58020a1cb8b26193d04c6324351295210d81fb7e89ca6db0deb3e34c2e03bcedbcac54ebe9c160bf2435b96dc4a29e555b8be2fb169e1f3648
7
+ data.tar.gz: 8a82fffa32cce8e4386d7d33888731309642cbe4b453b1e8f6d20ad18eb0feb65425769b8da6925447ecb82ec68390e92b91c092e3d02d5928b0f45596554b9a
@@ -0,0 +1,24 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard :rspec do
5
+ watch(%r{^spec/.+_spec\.rb$})
6
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
7
+ watch('spec/spec_helper.rb') { "spec" }
8
+
9
+ # Rails example
10
+ watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
11
+ watch(%r{^app/(.*)(\.erb|\.haml|\.slim)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
12
+ watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
13
+ watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
14
+ watch('config/routes.rb') { "spec/routing" }
15
+ watch('app/controllers/application_controller.rb') { "spec/controllers" }
16
+
17
+ # Capybara features specs
18
+ watch(%r{^app/views/(.+)/.*\.(erb|haml|slim)$}) { |m| "spec/features/#{m[1]}_spec.rb" }
19
+
20
+ # Turnip features and steps
21
+ watch(%r{^spec/acceptance/(.+)\.feature$})
22
+ watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
23
+ end
24
+
@@ -0,0 +1,101 @@
1
+ #!/usr/bin/env ruby
2
+ require 'archive/ar'
3
+ require 'optparse'
4
+
5
+ ######## HACK ALERT #################
6
+ # TODO: Make this a gem or something
7
+ #####################################
8
+ def short_mode(value)
9
+ str = "---"
10
+ str[0] = "r" if value & 4 == 4
11
+ str[1] = "w" if value & 2 == 2
12
+ str[2] = "x" if value & 1 == 1
13
+ str
14
+ end
15
+
16
+ def mode(value)
17
+ r = ""
18
+ everyone = short_mode(value)
19
+ value = value >> 3
20
+ group = short_mode(value)
21
+ value = value >> 3
22
+ owner = short_mode(value)
23
+ "#{owner}#{group}#{everyone}"
24
+ end
25
+ #####################################
26
+
27
+ options = {}
28
+ OptionParser.new do |opts|
29
+ opts.banner = "Usage: archive-ar [options]"
30
+
31
+ opts.on("-t", "display contents of archive") do |v|
32
+ options[:t] = v
33
+ end
34
+
35
+ opts.on("-x", "extract file(s) from the archive") do |v|
36
+ options[:x] = v
37
+ end
38
+
39
+ opts.on("-p", "print file(s) found in the archive") do |v|
40
+ options[:p] = v
41
+ end
42
+
43
+ opts.on("-v", "be verbose") do |v|
44
+ options[:verbose] = v
45
+ end
46
+
47
+ opts.on("-r", "replace existing or insert new file(s) into the archive") do |v|
48
+ options[:r] = v
49
+ end
50
+ end.parse!
51
+
52
+ if options[:r]
53
+ raise "two different operation options specified" if options[:t]
54
+ raise "two different operation options specified" if options[:x]
55
+ raise "two different operation options specified" if options[:p]
56
+
57
+ elsif options[:p]
58
+ raise "illegal option combination for -p" if options[:t]
59
+ raise "illegal option combination for -p" if options[:x]
60
+
61
+ Archive::Ar.traverse(ARGV[0]) do |header, data|
62
+ if options[:verbose]
63
+ puts
64
+ puts "<#{header[:name]}>"
65
+ puts
66
+ end
67
+ puts data
68
+ end
69
+ elsif options[:t]
70
+ raise "illegal option combination for -t" if options[:x]
71
+
72
+ Archive::Ar.traverse(ARGV[0]) do |header, data|
73
+ if options[:verbose]
74
+ print mode(header[:mode])
75
+ print " "
76
+ og = "#{header[:owner]}/#{header[:group]}"
77
+ print "%10s" % og
78
+ print " "
79
+ print "%12s" % header[:size]
80
+ print " "
81
+ print header[:modified].strftime("%b %e %R %Y")
82
+ print " "
83
+ print header[:name]
84
+ puts
85
+ else
86
+ puts header[:name]
87
+ end
88
+ end
89
+ elsif options[:x]
90
+ if options[:verbose]
91
+ Archive::Ar.traverse(ARGV[0]) do |header, data|
92
+ puts "x - #{header[:name]}"
93
+ Archive::Ar::Format.extract_file(Dir.pwd, header, data)
94
+ end
95
+ else
96
+ Archive::Ar.extract(ARGV[0], Dir.pwd)
97
+ end
98
+ end
99
+
100
+ #p options
101
+ #p ARGV
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ AR_COMMAND = 'ar'
3
+ ARCHIVE_AR_COMMAND = 'bundle exec ../bin/ar.rb'
4
+
5
+ def run_test(cmd)
6
+ puts "Testing `ar #{cmd}`"
7
+ out_ar = `#{AR_COMMAND} #{cmd} 2>&1`
8
+ out_archive_ar = `#{ARCHIVE_AR_COMMAND} #{cmd} 2>&1`
9
+
10
+ if out_ar != out_archive_ar
11
+ puts " Error #{cmd}"
12
+ puts " Expected:"
13
+ out_ar.split("\n").each {|l| puts " | #{l}"}
14
+ puts " Got:"
15
+ out_archive_ar.split("\n").each {|l| puts " | #{l}"}
16
+ false
17
+ else
18
+ true
19
+ end
20
+ end
21
+
22
+ #run_test("-r test.ar myfile")
23
+ run_test("-t test.ar")
24
+ run_test("-tv test.ar")
25
+ run_test("-p test.ar")
26
+ run_test("-pv test.ar")
27
+ run_test("-x test.ar")
28
+ run_test("-xv test.ar")
29
+ run_test("-r test.ar myfile")
@@ -0,0 +1,35 @@
1
+ blahblahblahblahblahblah
2
+ blahblahblahblahblahblah
3
+ blahblahblahblahblahblah
4
+ blahblahblahblahblahblah
5
+ blahblahblahblahblahblah
6
+ blahblahblahblahblahblah
7
+ blahblahblahblahblahblah
8
+ blahblahblahblahblahblah
9
+ blahblahblahblahblahblah
10
+ blahblahblahblahblahblah
11
+ blahblahblahblahblahblah
12
+ blahblahblahblahblahblah
13
+ blahblahblahblahblahblah
14
+ blahblahblahblahblahblah
15
+ blahblahblahblahblahblah
16
+ blahblahblahblahblahblah
17
+ blahblahblahblahblahblah
18
+ blahblahblahblahblahblah
19
+ blahblahblahblahblahblah
20
+ blahblahblahblahblahblah
21
+ blahblahblahblahblahblah
22
+ blahblahblahblahblahblah
23
+ blahblahblahblahblahblah
24
+ blahblahblahblahblahblah
25
+ blahblahblahblahblahblah
26
+ blahblahblahblahblahblah
27
+ blahblahblahblahblahblah
28
+ blahblahblahblahblahblah
29
+ blahblahblahblahblahblah
30
+ blahblahblahblahblahblah
31
+ blahblahblahblahblahblah
32
+ blahblahblahblahblahblah
33
+ blahblahblahblahblahblah
34
+ blahblahblahblahblahblah
35
+ blahblahblahblahblahblah
@@ -0,0 +1,38 @@
1
+ !<arch>
2
+ myfile 1399173274 501 20 100644 875 `
3
+ blahblahblahblahblahblah
4
+ blahblahblahblahblahblah
5
+ blahblahblahblahblahblah
6
+ blahblahblahblahblahblah
7
+ blahblahblahblahblahblah
8
+ blahblahblahblahblahblah
9
+ blahblahblahblahblahblah
10
+ blahblahblahblahblahblah
11
+ blahblahblahblahblahblah
12
+ blahblahblahblahblahblah
13
+ blahblahblahblahblahblah
14
+ blahblahblahblahblahblah
15
+ blahblahblahblahblahblah
16
+ blahblahblahblahblahblah
17
+ blahblahblahblahblahblah
18
+ blahblahblahblahblahblah
19
+ blahblahblahblahblahblah
20
+ blahblahblahblahblahblah
21
+ blahblahblahblahblahblah
22
+ blahblahblahblahblahblah
23
+ blahblahblahblahblahblah
24
+ blahblahblahblahblahblah
25
+ blahblahblahblahblahblah
26
+ blahblahblahblahblahblah
27
+ blahblahblahblahblahblah
28
+ blahblahblahblahblahblah
29
+ blahblahblahblahblahblah
30
+ blahblahblahblahblahblah
31
+ blahblahblahblahblahblah
32
+ blahblahblahblahblahblah
33
+ blahblahblahblahblahblah
34
+ blahblahblahblahblahblah
35
+ blahblahblahblahblahblah
36
+ blahblahblahblahblahblah
37
+ blahblahblahblahblahblah
38
+
@@ -8,6 +8,28 @@ module Archive
8
8
  end
9
9
  end
10
10
 
11
+ def build_header(file)
12
+ header = {
13
+ :name => File.basename(file),
14
+ :modified => File.mtime(file).to_i,
15
+ :owner => File.stat(file).uid,
16
+ :group => File.stat(file).gid,
17
+ :mode => File.stat(file).mode,
18
+ :size => File.size(file),
19
+ :magic => "`\n"
20
+ }
21
+
22
+ data = ""
23
+ data += "%-16s" % header[:name]
24
+ data += "%-12s" % header[:modified]
25
+ data += "%-6s" % header[:owner]
26
+ data += "%-6s" % header[:group]
27
+ data += "%-8s" % header[:mode].to_s(8)
28
+ data += "%-10s" % header[:size]
29
+ data += "%2s" % header[:magic]
30
+ data
31
+ end
32
+
11
33
  def parse_header(data)
12
34
  h = data.unpack("A16 Z12 a6 a6 A8 Z10 Z2")
13
35
  {
@@ -44,6 +66,8 @@ module Archive
44
66
 
45
67
  File.chmod(header[:mode], file)
46
68
  #FileUtils.chown(header[:owner], header[:group], file)
69
+
70
+ true
47
71
  end
48
72
  end
49
73
  end
@@ -1,5 +1,5 @@
1
1
  module Archive
2
2
  module Ar
3
- VERSION = "0.0.4"
3
+ VERSION = "0.0.5"
4
4
  end
5
5
  end
@@ -5,7 +5,24 @@ module Archive
5
5
  @filenames = filenames
6
6
  end
7
7
 
8
- def write(dest_file, options)
8
+ def build_ar_entry(file)
9
+ header = Archive::Ar::Format.build_header(file)
10
+ data = File.read(file)
11
+ [header, data].join
12
+ end
13
+
14
+ def build_ar
15
+ @filenames.collect do |f|
16
+ build_ar_entry(f)
17
+ end
18
+ end
19
+
20
+ def write(dest_file, options = {})
21
+ File.open(dest_file, 'w') do |f|
22
+ data = build_ar.join("")
23
+ f.write(Archive::Ar::MAGIC)
24
+ f.write(data)
25
+ end
9
26
  end
10
27
  end
11
28
  end
@@ -0,0 +1,2 @@
1
+ !<arch>
2
+ file/ 1399574923 1001 1001 100664 0 `
File without changes
@@ -0,0 +1 @@
1
+ test
@@ -20,22 +20,63 @@ describe Archive::Ar::Format do
20
20
  end
21
21
  end
22
22
 
23
+ describe "build_header" do
24
+ let(:file) { "spec/fixtures/file" }
25
+ let(:timestamp) { "%-12s" % File.mtime(file).to_i }
26
+ let(:owner) { "%-6s" % File.stat(file).uid }
27
+ let(:group) { "%-6s" % File.stat(file).gid }
28
+ let(:subject) { Archive::Ar::Format.build_header(file) }
29
+
30
+ it { should == "file #{timestamp}#{owner}#{group}100664 5 `\n" }
31
+ end
32
+
23
33
  describe "read_header" do
24
34
  let(:read_header) { Archive::Ar::Format.read_header(io) }
25
- let(:io) { StringIO.new("Filename 1399095295 1234 5678 100644 95 `\n") }
35
+ let(:io) { StringIO.new(payload) }
26
36
  subject { read_header }
27
37
 
28
- it {
29
- subject.should == {
30
- :name=>"Filename",
31
- :modified=>Time.parse("2014-05-02 22:34:55 -0700"),
32
- :owner=>1234,
33
- :group=>5678,
34
- :mode=>"100644".to_i(8),
35
- :start=>60,
36
- :size=>95,
37
- :magic=>"`\n"
38
+ context "normal" do
39
+ let(:payload) { "#1/8 1399095295 1234 5678 100644 95 `\nFilename" }
40
+
41
+ it {
42
+ subject.should == {
43
+ :name=>"Filename",
44
+ :modified=>Time.parse("2014-05-02 22:34:55 -0700"),
45
+ :owner=>1234,
46
+ :group=>5678,
47
+ :mode=>"100644".to_i(8),
48
+ :start=>68,
49
+ :size=>95,
50
+ :magic=>"`\n"
51
+ }
52
+ }
53
+ end
54
+
55
+ context "long filename" do
56
+ let(:payload) { "Filename 1399095295 1234 5678 100644 95 `\n" }
57
+
58
+ it {
59
+ subject.should == {
60
+ :name=>"Filename",
61
+ :modified=>Time.parse("2014-05-02 22:34:55 -0700"),
62
+ :owner=>1234,
63
+ :group=>5678,
64
+ :mode=>"100644".to_i(8),
65
+ :start=>60,
66
+ :size=>95,
67
+ :magic=>"`\n"
68
+ }
38
69
  }
39
- }
70
+ end
71
+ end
72
+
73
+ describe "extract_file" do
74
+ let(:dest_dir) { "tmp/" }
75
+ let(:header) { { :name => "file", :mode => 0100644 } }
76
+ let(:data) { "test" }
77
+ let(:options) { {} }
78
+ subject { Archive::Ar::Format.extract_file(dest_dir, header, data, options) }
79
+
80
+ it { should == true }
40
81
  end
41
82
  end
@@ -1,13 +1,42 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Archive::Ar::Reader do
4
- let(:source) { File.open("spec/fixtures/test.ar") }
5
- let(:reader) { Archive::Ar::Reader.new(source, {}) }
4
+ let(:options) { {} }
5
+ let(:source) { io }
6
+ let(:io) { File.open("spec/fixtures/archive.ar") }
7
+ let(:reader) { Archive::Ar::Reader.new(source, options) }
6
8
 
7
- describe "parse" do
8
- let(:source) { io }
9
+ describe "extract" do
10
+ let(:dest_dir) { "tmp/" }
9
11
  let(:options) { {} }
10
- let(:reader) { Archive::Ar::Reader.new(source, options) }
12
+ subject { reader.extract(dest_dir, options) }
13
+
14
+ it { should == ["file"] }
15
+ end
16
+
17
+ describe "each" do
18
+ context "using IO" do
19
+ let(:io) { File.open("spec/fixtures/archive.ar") }
20
+
21
+ it "yields anything once" do
22
+ expect {|b|
23
+ reader.each(&b)
24
+ }.to yield_successive_args(anything)
25
+ end
26
+ end
27
+
28
+ context "using String" do
29
+ let(:io) { "spec/fixtures/archive.ar" }
30
+
31
+ it "yields anything once" do
32
+ expect {|b|
33
+ reader.each(&b)
34
+ }.to yield_successive_args(anything)
35
+ end
36
+ end
37
+ end
38
+
39
+ describe "parse" do
11
40
  subject { reader.parse(io) }
12
41
 
13
42
  context "empty" do
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe Archive::Ar::Writer do
4
+ let(:filenames) { [] }
5
+ let(:dest_file) { "tmp/test.ar" }
6
+ let(:writer) { Archive::Ar::Writer.new(filenames) }
7
+
8
+ describe "write" do
9
+ context "no files" do
10
+ it "works" do
11
+ writer.write(dest_file)
12
+ end
13
+ end
14
+
15
+ context "one file" do
16
+ let(:filenames) { ["spec/fixtures/file"] }
17
+ let(:dest_file) { "tmp/test-one.ar" }
18
+
19
+ it "works" do
20
+ writer.write(dest_file)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ describe Archive::Ar do
4
+ let(:options) { {} }
5
+
6
+ describe "create" do
7
+ let(:dest_file) { "tmp/create.ar" }
8
+ let(:filenames) { ["spec/fixtures/file"] }
9
+ subject { Archive::Ar.create(dest_file, filenames, options) }
10
+
11
+ it { should == 65 }
12
+ end
13
+
14
+ describe "extract" do
15
+ let(:dest_dir) { "tmp/" }
16
+ subject { Archive::Ar.extract(source_file, dest_dir, options) }
17
+
18
+ context "archive.ar" do
19
+ let(:source_file) { "spec/fixtures/archive.ar" }
20
+
21
+ it { should == ["file"] }
22
+ end
23
+ end
24
+
25
+ describe "traverse" do
26
+ subject { Archive::Ar.traverse(source_file, options) }
27
+
28
+ context "archive.ar" do
29
+ let(:source_file) { "spec/fixtures/archive.ar" }
30
+
31
+ it "yields the file" do
32
+ expect {|b|
33
+ Archive::Ar.traverse(source_file, options, &b)
34
+ }.to yield_successive_args(anything)
35
+ end
36
+ end
37
+ end
38
+ end
metadata CHANGED
@@ -1,85 +1,92 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: archive-ar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joshua B. Bussdieker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-04 00:00:00.000000000 Z
11
+ date: 2014-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.5'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.5'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  description:
56
56
  email:
57
57
  - jbussdieker@gmail.com
58
58
  executables:
59
- - archive-ar
59
+ - ar.rb
60
60
  extensions: []
61
61
  extra_rdoc_files: []
62
62
  files:
63
- - .gitignore
64
- - .rspec
65
- - .travis.yml
63
+ - ".gitignore"
64
+ - ".rspec"
65
+ - ".travis.yml"
66
66
  - Gemfile
67
+ - Guardfile
67
68
  - LICENSE.txt
68
69
  - README.md
69
70
  - Rakefile
70
71
  - archive-ar.gemspec
71
- - bin/archive-ar
72
+ - bin/ar.rb
73
+ - ext/integration.rb
74
+ - ext/myfile
75
+ - ext/test.ar
72
76
  - lib/archive/ar.rb
73
77
  - lib/archive/ar/format.rb
74
78
  - lib/archive/ar/reader.rb
75
79
  - lib/archive/ar/version.rb
76
80
  - lib/archive/ar/writer.rb
77
- - spec/fixtures/test-long.ar
78
- - spec/fixtures/test.ar
81
+ - spec/fixtures/archive.ar
82
+ - spec/fixtures/emptyfile
83
+ - spec/fixtures/file
79
84
  - spec/lib/archive/ar/format_spec.rb
80
85
  - spec/lib/archive/ar/reader_spec.rb
86
+ - spec/lib/archive/ar/writer_spec.rb
81
87
  - spec/lib/archive/ar_spec.rb
82
88
  - spec/spec_helper.rb
89
+ - tmp/.gitkeep
83
90
  homepage: ''
84
91
  licenses:
85
92
  - MIT
@@ -90,24 +97,27 @@ require_paths:
90
97
  - lib
91
98
  required_ruby_version: !ruby/object:Gem::Requirement
92
99
  requirements:
93
- - - '>='
100
+ - - ">="
94
101
  - !ruby/object:Gem::Version
95
102
  version: '0'
96
103
  required_rubygems_version: !ruby/object:Gem::Requirement
97
104
  requirements:
98
- - - '>='
105
+ - - ">="
99
106
  - !ruby/object:Gem::Version
100
107
  version: '0'
101
108
  requirements: []
102
109
  rubyforge_project:
103
- rubygems_version: 2.1.11
110
+ rubygems_version: 2.2.2
104
111
  signing_key:
105
112
  specification_version: 4
106
113
  summary: Simple AR file functions
107
114
  test_files:
108
- - spec/fixtures/test-long.ar
109
- - spec/fixtures/test.ar
115
+ - spec/fixtures/archive.ar
116
+ - spec/fixtures/emptyfile
117
+ - spec/fixtures/file
110
118
  - spec/lib/archive/ar/format_spec.rb
111
119
  - spec/lib/archive/ar/reader_spec.rb
120
+ - spec/lib/archive/ar/writer_spec.rb
112
121
  - spec/lib/archive/ar_spec.rb
113
122
  - spec/spec_helper.rb
123
+ has_rdoc:
@@ -1,82 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'archive/ar'
3
- require 'optparse'
4
-
5
- options = {}
6
- OptionParser.new do |opts|
7
- opts.banner = "Usage: archive-ar [options]"
8
-
9
- opts.on("-t", "List the specified files in the order in which they appear in the archive, each on a
10
- separate line. If no files are specified, all files in the archive are listed.") do |v|
11
- options[:t] = v
12
- end
13
-
14
- opts.on("-x", "Extract the specified archive members into the files named by the command line argu-
15
- ments. If no members are specified, all the members of the archive are extracted into
16
- the current directory.
17
-
18
- If the file does not exist, it is created; if it does exist, the owner and group will
19
- be unchanged. The file access and modification times are the time of the extraction
20
- (but see the -o option). The file permissions will be set to those of the file when
21
- it was entered into the archive; this will fail if the user is not the owner of the
22
- extracted file or the super-user.") do |v|
23
- options[:x] = v
24
- end
25
-
26
- opts.on("-p", "Write the contents of the specified archive files to the standard output. If no files
27
- are specified, the contents of all the files in the archive are written in the order
28
- they appear in the archive.") do |v|
29
- options[:p] = v
30
- end
31
-
32
- opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
33
- options[:verbose] = v
34
- end
35
- end.parse!
36
-
37
- if options[:p]
38
- raise "illegal option combination for -p" if options[:t]
39
- raise "illegal option combination for -p" if options[:x]
40
-
41
- Archive::Ar.traverse(ARGV[0]) do |header, data|
42
- if options[:verbose]
43
- puts
44
- puts "<#{header[:name]}>"
45
- puts
46
- end
47
- puts data
48
- end
49
- elsif options[:t]
50
- raise "illegal option combination for -t" if options[:x]
51
-
52
- Archive::Ar.traverse(ARGV[0]) do |header, data|
53
- if options[:verbose]
54
- print header[:mode].to_s(8)
55
- print "\t"
56
- print header[:owner]
57
- print "/"
58
- print header[:group]
59
- print "\t"
60
- print header[:size]
61
- print "\t"
62
- print header[:modified]
63
- print "\t"
64
- print header[:name]
65
- puts
66
- else
67
- puts header[:name]
68
- end
69
- end
70
- elsif options[:x]
71
- if options[:verbose]
72
- Archive::Ar.traverse(ARGV[0]) do |header, data|
73
- puts "x - #{header[:name]}"
74
- Archive::Ar::Format.extract_file(Dir.pwd, header, data)
75
- end
76
- else
77
- Archive::Ar.extract(ARGV[0], Dir.pwd)
78
- end
79
- end
80
-
81
- #p options
82
- #p ARGV
@@ -1,4 +0,0 @@
1
- !<arch>
2
- #1/32 1399147683 501 20 100644 43 `
3
- aaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbtestin1234
4
-
@@ -1,13 +0,0 @@
1
- !<arch>
2
- Pjjjjjj 1399095295 501 20 100755 95 `
3
- source 'https://rubygems.org'
4
-
5
- ( Specify your gem's dependencies in archive-ar.gemspec
6
- gemspec
7
-
8
- Sjjjjjj 1399095295 502 20 100750 95 `
9
- source 'https://rubygems.org'
10
-
11
- # Specify your gem's dependencies in archive-ar.gemspec
12
- gemspec
13
-