minitar-cli 0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b7e1a33ed236a1c4df613b9176391edfa14b61eb
4
+ data.tar.gz: 1e961009d5987fe7bbfcb53a1d7fd681ee382a98
5
+ SHA512:
6
+ metadata.gz: b3748531f8787423e3d116d1b15a86d3e50781b7645c3b7c22fbf13eea27320608b52d2b6f44d3ff1ca59be380422e4e7198e6608ba1e5d4401e03dc4a0ef9bf
7
+ data.tar.gz: 24917476a4030a12b6af70d498b9ea2fcb70f9624a75504ce5902ea45833bb315c5653e1b296e78358ce691f438c448903b87db5731cfa846bc415a212d1c0aa
@@ -0,0 +1,71 @@
1
+ ## Contributing
2
+
3
+ I value any contribution to minitar-cli you can provide: a bug report, a
4
+ feature request, or code contributions. There are a few guidelines for
5
+ contributing to minitar:
6
+
7
+ * Code changes *will not* be accepted without tests. The test suite is
8
+ written with [Minitest][].
9
+ * Match my coding style.
10
+ * Use a thoughtfully-named topic branch that contains your change. Rebase
11
+ your commits into logical chunks as necessary.
12
+ * Use [quality commit messages][].
13
+ * Do not change the version number; when your patch is accepted and a release
14
+ is made, the version will be updated at that point.
15
+ * Submit a GitHub pull request with your changes.
16
+ * New or changed behaviours require appropriate documentation.
17
+
18
+ ### Test Dependencies
19
+
20
+ minitar-cli uses Ryan Davis’s [Hoe][] to manage the release process, and it
21
+ adds a number of rake tasks. You will mostly be interested in:
22
+
23
+ $ rake
24
+
25
+ which runs the tests the same way that:
26
+
27
+ $ rake test
28
+ $ rake travis
29
+
30
+ will do.
31
+
32
+ To assist with the installation of the development dependencies for
33
+ minitar-cli, I have provided the simplest possible Gemfile pointing to the
34
+ (generated) `minitar-cli.gemspec` file. This will permit you to do:
35
+
36
+ $ bundle install
37
+
38
+ to get the development dependencies. If you aleady have `hoe` installed, you
39
+ can accomplish the same thing with:
40
+
41
+ $ rake newb
42
+
43
+ This task will install any missing dependencies, run the tests/specs, and
44
+ generate the RDoc.
45
+
46
+ You can run tests with code coverage analysis by running:
47
+
48
+ $ rake test:coverage
49
+
50
+ ### Workflow
51
+
52
+ Here's the most direct way to get your work merged into the project:
53
+
54
+ * Fork the project.
55
+ * Clone down your fork (`git clone git://github.com/<username>/minitar-cli.git`).
56
+ * Create a topic branch to contain your change (`git checkout -b
57
+ my_awesome_feature`).
58
+ * Hack away, add tests. Not necessarily in that order.
59
+ * Make sure everything still passes by running `rake`.
60
+ * If necessary, rebase your commits into logical chunks, without errors.
61
+ * Push the branch up (`git push origin my_awesome_feature`).
62
+ * Create a pull request against halostatue/minitar-cli and describe what your
63
+ change does and the why you think it should be merged.
64
+
65
+ ### Contributors
66
+
67
+ * Austin Ziegler created minitar-cli, extracted from Archive::Tar::Minitar.
68
+
69
+ [Minitest]: https://github.com/seattlerb/minitest
70
+ [quality commit messages]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
71
+ [Hoe]: https://github.com/seattlerb/hoe
@@ -0,0 +1,25 @@
1
+ ## 0.6 / 2017-02-07
2
+
3
+ * Hello, minitar-cli. This is a new gem containing code originally from
4
+ archive-tar-minitar.
5
+
6
+ * Enhancements:
7
+
8
+ * Extracted `bin/minitar` from [minitar][].
9
+ * Replaced Satoru Takabayashi’s [Ruby Progress Bar][] with
10
+ [busyloop/powerbar][].
11
+ * Added filename filtering to `minitar list`.
12
+
13
+ * Bugs:
14
+
15
+ * Fixed a problem where `bin/minitar create` would not include dotfiles
16
+ on Unix systems.
17
+
18
+ * Development:
19
+
20
+ * Modernized minitar tooling around Hoe.
21
+ * Added travis and coveralls.
22
+
23
+ [minitar]: https://github.com/halostatue/minitar
24
+ [Ruby Progress Bar]: https://namazu.org/~satoru/ruby-progressbar/
25
+ [busyloop/powerbar]: https://github.com/busyloop/powerbar
@@ -0,0 +1,15 @@
1
+ ## Licence
2
+
3
+ minitar-cli is free software that may be redistributed and/or modified under
4
+ the terms of Ruby’s licence or the Simplified BSD licence.
5
+
6
+ * Copyright 2004–2017 Austin Ziegler.
7
+ * Portions copyright 2004 Mauricio Julio Fernández Pradier.
8
+
9
+ ### Simplified BSD Licence
10
+
11
+ See the file docs/bsdl.txt in the main distribution.
12
+
13
+ ### Ruby’s Licence
14
+
15
+ See the file docs/ruby.txt in the main distribution.
@@ -0,0 +1,22 @@
1
+ Contributing.md
2
+ History.md
3
+ Licence.md
4
+ Manifest.txt
5
+ README.rdoc
6
+ Rakefile
7
+ bin/minitar
8
+ docs/bsdl.txt
9
+ docs/ruby.txt
10
+ lib/minitar/cli.rb
11
+ lib/minitar/cli/command.rb
12
+ lib/minitar/cli/command/create.rb
13
+ lib/minitar/cli/command/extract.rb
14
+ lib/minitar/cli/command/help.rb
15
+ lib/minitar/cli/command/list.rb
16
+ lib/minitar/cli/commander.rb
17
+ test/fixtures/bad-dir.tar.gz
18
+ test/fixtures/spaces.tar.gz
19
+ test/minitest_helper.rb
20
+ test/support/minitar_cli_test_helper.rb
21
+ test/test_cli_help.rb
22
+ test/test_cli_list.rb
@@ -0,0 +1,105 @@
1
+ = minitar-cli
2
+
3
+ home :: https://github.com/halostatue/minitar-cli/
4
+ code :: https://github.com/halostatue/minitar-cli/
5
+ bugs :: https://github.com/halostatue/minitar-cli/issues
6
+ rdoc :: http://rdoc.info/gems/minitar-cli/
7
+ continuous integration :: {<img src="https://travis-ci.org/halostatue/minitar-cli.svg" />}[https://travis-ci.org/halostatue/minitar-cli]
8
+ {<img src="https://ci.appveyor.com/api/projects/status/bj4gqn3gp3gu45sa?svg=true" />}[https://ci.appveyor.com/project/halostatue/minitar-cli]
9
+ test coverage :: {<img src="https://coveralls.io/repos/halostatue/minitar-cli/badge.svg" alt="Coverage Status" />}[https://coveralls.io/r/halostatue/minitar-cli]
10
+
11
+ == Description
12
+
13
+ <tt>minitar-cli</tt> is a pure-Ruby command-line tool that uses
14
+ {minitar}[https://github.com/halostatue/minitar] to provide a command-line
15
+ tool, +minitar+, for working with POSIX tar(1) archive files.
16
+
17
+ This is release 0.6, extracted from {minitar}[https://halostatue.ca/minitar],
18
+ with modernizations.
19
+
20
+ == Synopsis
21
+
22
+ Using <tt>minitar-cli</tt> is easy; its functionality is provided through
23
+ <tt>bin/minitar</tt> (installed as +miniitar+). It supports three basic
24
+ commands: +create+, +extract+, and +list+.
25
+
26
+ All +minitar+ commands support two common options, +verbose+ and +progress+.
27
+ These are mutually exclusive and +progress+ has a higher priority than
28
+ +verbose+.
29
+
30
+ +verbose+:: <tt>--verbose</tt> (<tt>-V</tt>), puts the requested command in
31
+ verbose mode.
32
+ +progress+:: <tt>--progress</tt> (<tt>-P</tt>), shows a progress bar (if
33
+ appropriate) or puts the requested command in verbose mode.
34
+
35
+ === +minitar create+
36
+
37
+ minitar create [OPTIONS] <tarfile|-> <file|directory|-->+
38
+
39
+ Creates a new tarfile. If the tarfile is named .tar.gz or .tgz, then it will be
40
+ compressed automatically. If the tarfile is "-", then it will be output to
41
+ standard output (stdout) so that minitar may be piped.
42
+
43
+ The files or directories that will be packed into the tarfile are
44
+ specified after the name of the tarfile itself. Directories will be
45
+ processed recursively. If the token "--" is found in the list of files
46
+ to be packed, additional filenames will be read from standard input
47
+ (stdin). If any file is not found, the packaging will be halted.
48
+
49
+ +create+ also supports the +compress+ option.
50
+
51
+ +compress+:: <tt>--compress</tt> (<tt>-z</tt>), compresses the tarfile with
52
+ gzip.
53
+
54
+ === +minitar extract+
55
+
56
+ minitar extract [OPTIONS] <tarfile|-> [<file>+]
57
+
58
+ Extracts files from an existing tarfile. If the tarfile is named .tar.gz or
59
+ .tgz, then it will be uncompressed automatically. If the tarfile is "-", then
60
+ it will be read from standard input (stdin) so that minitar may be piped.
61
+
62
+ The files or directories that will be extracted from the tarfile are specified
63
+ after the name of the tarfile itself. Directories will be processed
64
+ recursively. Files must be specified in full. A file "foo/bar/baz.txt" cannot
65
+ simply be specified by specifying "baz.txt". Any file not found will simply be
66
+ skipped and an error will be reported.
67
+
68
+ +extract+ also supports the +uncompress+, +pipe+, and +output+ options.
69
+
70
+ +uncompress+:: <tt>--uncompress</tt> (<tt>-z</tt>), uncompresses the tarfile
71
+ with gzip.
72
+ +pipe+:: <tt>--pipe</tt>, emits the extracted files to STDOUT for piping.
73
+ +output+:: <tt>--output</tt> (<tt>-o</tt>), extracts the files to the specified
74
+ directory.
75
+
76
+ === +minitar list+
77
+
78
+ minitar list [OPTIONS] <tarfile|-> [<file>+]
79
+
80
+ Lists files in an existing tarfile. If the tarfile is named .tar.gz or .tgz,
81
+ then it will be uncompressed automatically. If the tarfile is "-", then it will
82
+ be read from standard input (stdin) so that minitar may be piped.
83
+
84
+ The files or directories to be filtered are specified after the name of the
85
+ tarfile itself.
86
+
87
+ Both +verbose+ and +progress+ act as a file detail view, similar to <tt>ls
88
+ -l</tt>.
89
+
90
+ +list+ also supports the +uncompress+, +sort+, +reverse+, and +l+ options.
91
+
92
+ +uncompress+:: <tt>--uncompress</tt> <tt>-z</tt>, uncompresses the tarfile with
93
+ gzip.
94
+ +sort+:: <tt>--sort</tt> (<tt>-S</tt>), sorts the list of files by the
95
+ specified field. Supported sort fields are +name+ (the default),
96
+ +mtime+, and +size+.
97
+ +reverse+:: Reverses the sort.
98
+ +l+:: Lists the files in detail (like +verbose+).
99
+
100
+ == minitar-cli Semantic Versioning
101
+
102
+ The minitar-cli tool uses a {Semantic Versioning}[http://semver.org/] scheme
103
+ with one change:
104
+
105
+ * When PATCH is zero (+0+), it will be omitted from version references.
@@ -0,0 +1,47 @@
1
+ # -*- ruby encoding: utf-8 -*-
2
+
3
+ require 'rubygems'
4
+ require 'hoe'
5
+ require 'rake/clean'
6
+
7
+ Hoe.plugin :doofus
8
+ Hoe.plugin :gemspec2
9
+ Hoe.plugin :git
10
+ Hoe.plugin :minitest
11
+ Hoe.plugin :travis
12
+ Hoe.plugin :email unless ENV['CI'] or ENV['TRAVIS']
13
+
14
+ spec = Hoe.spec 'minitar-cli' do
15
+ developer('Austin Ziegler', 'halostatue@gmail.com')
16
+
17
+ require_ruby_version '>= 1.8'
18
+
19
+ self.history_file = 'History.md'
20
+ self.readme_file = 'README.rdoc'
21
+ self.licenses = ['Ruby', 'BSD-2-Clause']
22
+
23
+ extra_deps << ['minitar', '~> 0.6.0']
24
+ extra_deps << ['powerbar', '~> 1.0']
25
+
26
+ extra_dev_deps << ['hoe-doofus', '~> 1.0']
27
+ extra_dev_deps << ['hoe-gemspec2', '~> 1.1']
28
+ extra_dev_deps << ['hoe-git', '~> 1.6']
29
+ extra_dev_deps << ['hoe-rubygems', '~> 1.0']
30
+ extra_dev_deps << ['hoe-travis', '~> 1.2']
31
+ extra_dev_deps << ['minitest', '~> 5.3']
32
+ extra_dev_deps << ['minitest-autotest', ['>= 1.0', '<2']]
33
+ extra_dev_deps << ['rake', '>= 10.0', '< 12']
34
+ extra_dev_deps << ['rdoc', '>= 0.0']
35
+ end
36
+
37
+ if RUBY_VERSION >= '2.0' && RUBY_ENGINE == 'ruby'
38
+ namespace :test do
39
+ desc 'Run test coverage'
40
+ task :coverage do
41
+ spec.test_prelude = 'load ".simplecov-prelude.rb"'
42
+ Rake::Task['test'].execute
43
+ end
44
+ end
45
+
46
+ Rake::Task['travis'].prerequisites.replace(%w(test:coverage))
47
+ end
@@ -0,0 +1,11 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ git_path = File.expand_path('../../.git', __FILE__)
5
+ if File.exist?(git_path)
6
+ $LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
7
+ end
8
+
9
+ require 'minitar/cli'
10
+
11
+ exit Minitar::CLI.run(ARGV)
@@ -0,0 +1,19 @@
1
+ Redistribution and use in source and binary forms, with or without
2
+ modification, are permitted provided that the following conditions are met:
3
+
4
+ 1. Redistributions of source code must retain the above copyright notice, this
5
+ list of conditions and the following disclaimer.
6
+ 2. Redistributions in binary form must reproduce the above copyright notice,
7
+ this list of conditions and the following disclaimer in the documentation
8
+ and/or other materials provided with the distribution.
9
+
10
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY
11
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
12
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
13
+ DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY
14
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
15
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
16
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
17
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
18
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
19
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,56 @@
1
+ Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.jp>.
2
+ You can redistribute it and/or modify it under either the terms of the
3
+ 2-clause BSDL (see the file BSDL), or the conditions below:
4
+
5
+ 1. You may make and give away verbatim copies of the source form of the
6
+ software without restriction, provided that you duplicate all of the
7
+ original copyright notices and associated disclaimers.
8
+
9
+ 2. You may modify your copy of the software in any way, provided that
10
+ you do at least ONE of the following:
11
+
12
+ a) place your modifications in the Public Domain or otherwise
13
+ make them Freely Available, such as by posting said
14
+ modifications to Usenet or an equivalent medium, or by allowing
15
+ the author to include your modifications in the software.
16
+
17
+ b) use the modified software only within your corporation or
18
+ organization.
19
+
20
+ c) give non-standard binaries non-standard names, with
21
+ instructions on where to get the original software distribution.
22
+
23
+ d) make other distribution arrangements with the author.
24
+
25
+ 3. You may distribute the software in object code or binary form,
26
+ provided that you do at least ONE of the following:
27
+
28
+ a) distribute the binaries and library files of the software,
29
+ together with instructions (in the manual page or equivalent)
30
+ on where to get the original distribution.
31
+
32
+ b) accompany the distribution with the machine-readable source of
33
+ the software.
34
+
35
+ c) give non-standard binaries non-standard names, with
36
+ instructions on where to get the original software distribution.
37
+
38
+ d) make other distribution arrangements with the author.
39
+
40
+ 4. You may modify and include the part of the software into any other
41
+ software (possibly commercial). But some files in the distribution
42
+ are not written by the author, so that they are not under these terms.
43
+
44
+ For the list of those files and their copying conditions, see the
45
+ file LEGAL.
46
+
47
+ 5. The scripts and library files supplied as input to or produced as
48
+ output from the software do not automatically fall under the
49
+ copyright of the software, but belong to whomever generated them,
50
+ and may be sold commercially, and may be aggregated with this
51
+ software.
52
+
53
+ 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
54
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
55
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
56
+ PURPOSE.
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'minitar'
4
+
5
+ # The Minitar command-line application.
6
+ class Minitar::CLI
7
+ VERSION = '0.6'.freeze #:nodoc:
8
+
9
+ # rubocop:disable Lint/InheritException
10
+ class AbstractCommandError < Exception; end
11
+ # rubocop:enable Lint/InheritException
12
+ class UnknownCommandError < StandardError; end
13
+ class CommandAlreadyExists < StandardError; end
14
+
15
+ def self.run(argv, input = $stdin, output = $stdout, error = $stderr)
16
+ new(input, output, error).run(argv)
17
+ end
18
+
19
+ attr_reader :commander
20
+ attr_reader :ioe
21
+
22
+ def initialize(input = $stdin, output = $stdout, error = $stderr)
23
+ @ioe = {
24
+ :input => input,
25
+ :output => output,
26
+ :error => error
27
+ }
28
+ @commander = Minitar::CLI::Commander.new(ioe)
29
+ Minitar::CLI::Command.children.each do |command|
30
+ commander.register(command)
31
+ end
32
+ commander.default_command = 'help'
33
+ end
34
+
35
+ def run(argv)
36
+ opts = {}
37
+
38
+ output << "minitar #{VERSION}\n" if argv.include?('--version')
39
+
40
+ if argv.include?('--verbose') or argv.include?('-V')
41
+ opts[:verbose] = true
42
+ argv.delete('--verbose')
43
+ argv.delete('-V')
44
+ end
45
+
46
+ if argv.include?('--progress') or argv.include?('-P')
47
+ opts[:progress] = true
48
+ opts[:verbose] = false
49
+ argv.delete('--progress')
50
+ argv.delete('-P')
51
+ end
52
+
53
+ command = commander[(argv.shift or '').downcase]
54
+ command ||= commander['help']
55
+ command.call(argv, opts)
56
+ end
57
+ end
58
+
59
+ require 'minitar/cli/command'
60
+ require 'minitar/cli/commander'
61
+ require 'minitar/cli/command/help'
62
+ require 'minitar/cli/command/create'
63
+ require 'minitar/cli/command/extract'
64
+ require 'minitar/cli/command/list'