git_cleanser 0.0.1 → 0.0.2

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: 548e9a6536c08e66ebab5e762d74537b111f9405
4
- data.tar.gz: 7acb5377a907af8b7939ebb174d33588361f534b
3
+ metadata.gz: 2ae5b34a095ef77959d687f118ae624562f8c1b1
4
+ data.tar.gz: c9bad03944efe7f819f1874608bab11cf521a20a
5
5
  SHA512:
6
- metadata.gz: 869ddbc9957efdff769deb5bd3cb26a32ac1577b81c5e5d7a3a1868dcd12d8101febd729467a6e391b4fcf7f29e08d076e502861456f037bebb305c6950b2210
7
- data.tar.gz: d7c600693312d658c3053d4fc28c52873f7054d1db1c8264fdb11574c7ecccfce51fabe29ee31800146b169a1531c88f4245e77c658ee397394f61865587edac
6
+ metadata.gz: 1762aab44dccae1af7f15ea993fe9ff84c0e7765db6f25acf8c2fd68b494b99b272b95cc3dc7daf961c36d6eba2a496d4a49cebfb7139f753b1d83efe4e929bd
7
+ data.tar.gz: e46f767cf51469c1732b55bafd0a2edf15a93810c39a6b3fe84137de8fc6ab50492d2efca2ba856cd861c96e7b90cfd32414eda31ed9f769a0ce8443ce518d6f
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/README.md CHANGED
@@ -1,6 +1,20 @@
1
1
  # GitCleanser
2
2
 
3
- TODO: Write a gem description
3
+ It's not ideal, but we've all worked with repositories containing compiled
4
+ files and their source code. When there are 5 files and they follow a naming
5
+ convention, it's easily fixable. When there are 1,000 files and they are all
6
+ named differently, fixing it seems insurmountable. This tool helps iteratively
7
+ remove these files from your repository in the later case.
8
+
9
+ ## Todo
10
+
11
+ - [x] Add an option for human readable or YAML output
12
+ - [ ] Set up CI
13
+ - [ ] Put some examples in the README
14
+ - [x] Check that things added to .gitignore are also `git rm`ed
15
+ - [ ] Add a filter for files so that you can specify *.css or *.js or what have you
16
+ - [ ] Handle checked in library files
17
+ - [ ] The exit code returns an error if any files are yet to be dealth with (for CI)
4
18
 
5
19
  ## Installation
6
20
 
data/Rakefile CHANGED
@@ -1,2 +1,14 @@
1
1
  require "bundler/gem_tasks"
2
+ require "cucumber/rake/task"
2
3
 
4
+ Cucumber::Rake::Task.new do |t|
5
+ t.cucumber_opts = %w{--format pretty}
6
+ end
7
+
8
+ begin
9
+ require 'rspec/core/rake_task'
10
+ RSpec::Core::RakeTask.new(:spec)
11
+ rescue LoadError
12
+ end
13
+
14
+ task default: ['spec', 'cucumber']
data/bin/git_cleanser ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
4
+ require 'git_cleanser'
5
+ GitCleanser::CLI.new(ARGV.dup).execute!
@@ -0,0 +1,29 @@
1
+ Feature: Detecting compiled files
2
+ When a file is compiled but not git ignored, let the user know.
3
+
4
+ Scenario:
5
+ Given a file named "git_cleanser.yml" with:
6
+ """
7
+ ---
8
+ compiled_files_command: echo ignored_and_generated.o committed.o
9
+ """
10
+ And a file named ".gitignore" with:
11
+ """
12
+ ignored_and_generated.o
13
+ ignored_not_generated.o
14
+ """
15
+ And an empty file named "ignored_and_generated.o"
16
+ And an empty file named "ignored_not_generated.o"
17
+ And an empty, tracked file named "committed.o"
18
+ When I run `git_cleanser --format=yaml`
19
+ Then the exit status should be 0
20
+
21
+ And its output for "generated_but_not_ignored" should contain "committed.o"
22
+ And its output for "generated_but_not_ignored" should not contain "ignored_and_generated.o"
23
+ And its output for "generated_but_not_ignored" should not contain "ignored_not_generated.o"
24
+
25
+ And its output for "ignored_but_not_generated" should contain "ignored_not_generated.o"
26
+ And its output for "ignored_but_not_generated" should not contain "ignored_and_generated.o"
27
+ And its output for "ignored_but_not_generated" should not contain "committed.o"
28
+
29
+ And its output for "ignored_but_tracked" should be empty
@@ -0,0 +1,29 @@
1
+ Feature: Detecting ignored but tracked files
2
+ When a file is is in the git ignore but also tracked, let the user know.
3
+
4
+ Scenario:
5
+ Given a file named "git_cleanser.yml" with:
6
+ """
7
+ ---
8
+ compiled_files_command: echo ignored.o ignored.tracked.o tracked.o
9
+ """
10
+ And a file named ".gitignore" with:
11
+ """
12
+ ignored.o
13
+ ignored.tracked.o
14
+ """
15
+ And an empty file named "ignored.o"
16
+ And an empty, tracked file named "tracked.o"
17
+ And an empty, tracked file named "ignored.tracked.o"
18
+ When I run `git_cleanser --format=yaml`
19
+ Then the exit status should be 0
20
+
21
+ And its output for "ignored_but_tracked" should contain "ignored.tracked.o"
22
+ And its output for "ignored_but_tracked" should not contain "tracked.o"
23
+ And its output for "ignored_but_tracked" should not contain "ignored.o"
24
+
25
+ And its output for "generated_but_not_ignored" should contain "ignored.tracked.o"
26
+ And its output for "generated_but_not_ignored" should contain "tracked.o"
27
+ And its output for "generated_but_not_ignored" should not contain "ignored.o"
28
+
29
+ And its output for "ignored_but_not_generated" should be empty
@@ -0,0 +1,25 @@
1
+ Feature: Detecting uncompiled files
2
+ When a file is not compiled, but is tracked, let the user know.
3
+ So that they can make it automatically compiled.
4
+
5
+ Scenario:
6
+ Given a file named "git_cleanser.yml" with:
7
+ """
8
+ ---
9
+ compiled_files_command: echo generated.js
10
+ """
11
+ And an empty file named ".gitignore"
12
+ And an empty, tracked file named "generated.js"
13
+ And an empty, tracked file named "spontaneous-generation.js"
14
+ When I run `git_cleanser --format=yaml`
15
+ Then the exit status should be 0
16
+
17
+ And its output for "generated_but_not_ignored" should contain "generated.js"
18
+ And its output for "generated_but_not_ignored" should not contain "spontaneous-generation.js"
19
+
20
+ And its output for "ignored_but_not_generated" should be empty
21
+
22
+ And its output for "ignored_but_tracked" should be empty
23
+
24
+ And its output for "uncompiled" should contain "spontaneous-generation.js"
25
+ And its output for "uncompiled" should not contain "generated.js"
@@ -0,0 +1,31 @@
1
+ Feature: Output formats
2
+ Both computers and humans can parse this output
3
+
4
+ Scenario: Default is human readable
5
+ Given a file named "git_cleanser.yml" with:
6
+ """
7
+ ---
8
+ compiled_files_command: echo style.css
9
+ """
10
+ And an empty file named "style.css"
11
+ When I run `git_cleanser`
12
+ Then the output should contain:
13
+ """
14
+ These files are ignored, but not compiled (maybe they should be added to the compiled files list?):
15
+ (no files)
16
+ """
17
+ And the output should contain:
18
+ """
19
+ These files are compiled but not ignored (maybe they should be added to .gitignore?):
20
+ style.css
21
+ """
22
+
23
+ Scenario: YAML is available with an option
24
+ Given a file named "git_cleanser.yml" with:
25
+ """
26
+ ---
27
+ compiled_files_command: echo style.css
28
+ """
29
+ And an empty file named "style.css"
30
+ When I run `git_cleanser --format=yaml`
31
+ Then its output is YAML
@@ -0,0 +1,22 @@
1
+ require 'aruba/api'
2
+ require 'aruba/cucumber/hooks'
3
+ require 'aruba/reporting'
4
+
5
+ require 'yaml'
6
+
7
+ World(Aruba::Api)
8
+
9
+ Then(/^its output for "(.*?)" should not contain "(.*?)"$/) do |key, value|
10
+ output = YAML.load(unescape(all_output))
11
+ expect(output[key]).not_to include(value)
12
+ end
13
+
14
+ Then(/^its output for "(.*?)" should contain "(.*?)"$/) do |key, value|
15
+ output = YAML.load(unescape(all_output))
16
+ expect(output[key]).to include(value)
17
+ end
18
+
19
+ Then(/^its output for "(.*?)" should be empty$/) do |key|
20
+ output = YAML.load(unescape(all_output))
21
+ expect(output[key]).to be_empty
22
+ end
@@ -0,0 +1,8 @@
1
+ World(Aruba::Api)
2
+
3
+ Given(/^an empty, tracked file named "(.*?)"$/) do |file_name|
4
+ write_file(file_name, "")
5
+ in_current_dir do
6
+ `git add -f "#{file_name}"`
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ Then(/^its output is YAML$/) do
2
+ output = YAML.load(unescape(all_output))
3
+ expect(output).to be_instance_of(Hash)
4
+
5
+ GitCleanser::Formatter::YAML::KEYS.each do |key|
6
+ expect(output).to have_key(key)
7
+ end
8
+ end
@@ -0,0 +1,20 @@
1
+ require 'aruba'
2
+ require 'aruba/cucumber'
3
+ require 'aruba/in_process'
4
+
5
+ require 'git_cleanser'
6
+
7
+ Aruba::InProcess.main_class = GitCleanser::CLI
8
+ Aruba.process = Aruba::InProcess
9
+
10
+ # Around does not work in this case, so store the temp directory
11
+ # in a global variable to clean it up later.
12
+ Before do
13
+ $tmp_dir = Dir.mktmpdir("git_cleanser_test")
14
+ system "git init -q", chdir: $tmp_dir
15
+ @dirs = [$tmp_dir]
16
+ end
17
+
18
+ After '~@no-clobber' do
19
+ FileUtils.rm_r($tmp_dir, secure: true)
20
+ end
data/git_cleanser.gemspec CHANGED
@@ -16,6 +16,11 @@ Gem::Specification.new do |spec|
16
16
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
17
  spec.require_paths = ["lib"]
18
18
 
19
+ spec.add_dependency "paint", "~> 1.0.0"
20
+ spec.add_dependency "slop", "~> 4.0.0"
19
21
  spec.add_development_dependency "bundler", "~> 1.7"
20
22
  spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency "cucumber", "~> 1.3.19"
24
+ spec.add_development_dependency "rspec", "~> 3.2.0"
25
+ spec.add_development_dependency "aruba", "~> 0.6.2"
21
26
  end
data/lib/git_cleanser.rb CHANGED
@@ -1,5 +1,6 @@
1
- require "git_cleanser/version"
1
+ Dir[File.join(__dir__, "**", "*.rb")].each do |file|
2
+ require file
3
+ end
2
4
 
3
5
  module GitCleanser
4
- # Your code goes here...
5
6
  end
@@ -0,0 +1,27 @@
1
+ require 'slop'
2
+
3
+ module GitCleanser
4
+ class CLI
5
+ def initialize(argv, stdin=STDIN, stdout=STDOUT, stderr=STDERR, kernel=Kernel, config_loader=ConfigLoader.new)
6
+ @argv, @stdin, @stdout, @stderr, @kernel = argv, stdin, stdout, stderr, kernel
7
+ @config = config_loader.config
8
+ end
9
+
10
+ def execute!
11
+ smart_thing = SmartThing.new(@config)
12
+
13
+ opts = Slop.parse @argv do |o|
14
+ o.string '-f', '--format', 'output format'
15
+ end
16
+
17
+ formatter = case opts[:format]
18
+ when 'yaml'
19
+ Formatter::YAML
20
+ else
21
+ Formatter::Human
22
+ end
23
+
24
+ @stdout.puts formatter.new.format(smart_thing)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,9 @@
1
+ require 'yaml'
2
+
3
+ module GitCleanser
4
+ class ConfigLoader
5
+ def config
6
+ @config ||= YAML.load(File.read("git_cleanser.yml"))
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,4 @@
1
+ module GitCleanser
2
+ module Formatter
3
+ end
4
+ end
@@ -0,0 +1,34 @@
1
+ require 'paint'
2
+
3
+ module GitCleanser
4
+ module Formatter
5
+ class Human
6
+ KEYS = {
7
+ "generated_but_not_ignored" => "These files are compiled but not ignored (maybe they should be added to .gitignore?):",
8
+ "ignored_but_not_generated" => "These files are ignored, but not compiled (maybe they should be added to the compiled files list?):",
9
+ "ignored_but_tracked" => "These files are ignored, but also tracked (maybe they should be removed from the repo or not ignored?):",
10
+ "uncompiled" => "These files look like compilation results, but aren't yet automatically compiled (maybe they should be added to your compiler?):"
11
+ }
12
+
13
+ def format(smart_thing)
14
+ KEYS.map do |(key, message)|
15
+ format_message(message) + "\n" + format_list(smart_thing.public_send(key))
16
+ end.join("\n\n")
17
+ end
18
+
19
+ private
20
+
21
+ def format_message message
22
+ Paint[message, :magenta]
23
+ end
24
+
25
+ def format_list list
26
+ if list.any?
27
+ list.map { |file| Paint[" #{file}", :red] }.join("\n")
28
+ else
29
+ Paint[" (no files)", :green]
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,12 @@
1
+ module GitCleanser
2
+ module Formatter
3
+ class YAML
4
+ KEYS = ["generated_but_not_ignored", "ignored_but_not_generated", "ignored_but_tracked", "uncompiled"]
5
+
6
+ def format(smart_thing)
7
+ output = KEYS.inject({}) { |memo, this| memo[this] = smart_thing.public_send(this); memo }
8
+ ::YAML.dump(output).strip
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,42 @@
1
+ module GitCleanser
2
+ class SmartThing
3
+ def initialize(config)
4
+ @config = config
5
+ @compiled_files = sh(@config['compiled_files_command']).split
6
+ @ignored_and_untracked_files = git_ls_files(:ignored, :other)
7
+ @ignored_but_tracked_files = git_ls_files(:ignored)
8
+ @all_files = Dir['**/*']
9
+ end
10
+
11
+ def generated_but_not_ignored
12
+ @compiled_files - @ignored_and_untracked_files
13
+ end
14
+
15
+ def ignored_but_not_generated
16
+ @ignored_and_untracked_files - @compiled_files
17
+ end
18
+
19
+ def ignored_but_tracked
20
+ @ignored_but_tracked_files
21
+ end
22
+
23
+ def uncompiled
24
+ @all_files - @compiled_files
25
+ end
26
+
27
+ private
28
+
29
+ def git_ls_files *ruby_opts
30
+ shell_opts = ruby_opts.map { |opt| "--#{opt}" }.join(" ")
31
+ sh("git ls-files -z --exclude-standard #{shell_opts}").split("\0")
32
+ end
33
+
34
+ def sh(cmd)
35
+ `#{cmd}`.tap do
36
+ if $?.exitstatus > 0
37
+ raise "Shell command failed: " + cmd
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -1,3 +1,3 @@
1
1
  module GitCleanser
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1,58 @@
1
+ require 'yaml'
2
+
3
+ module GitCleanser
4
+ RSpec.describe CLI do
5
+ let(:stdin) { StringIO.new }
6
+ let(:stdout) { StringIO.new }
7
+ let(:stderr) { StringIO.new }
8
+ let(:config) { double("config") }
9
+ let(:config_loader) { instance_double("ConfigLoader", config: config) }
10
+ let(:smart_thing) { instance_double("SmartThing").as_null_object }
11
+ let(:formatter) { double("Formatter") }
12
+ let(:argv) { [] }
13
+ subject { CLI.new(argv, stdin, stdout, stderr, Kernel, config_loader) }
14
+
15
+ describe "output formats" do
16
+ before do
17
+ allow(SmartThing).to receive(:new).and_return(smart_thing)
18
+ end
19
+
20
+ context "when fomat is YAML" do
21
+ let(:argv) { ["--format=yaml"] }
22
+ it "prints YAML output" do
23
+ allow(Formatter::YAML).to receive(:new).and_return(formatter)
24
+ allow(formatter).to receive(:format).and_return("--- yaml")
25
+
26
+ subject.execute!
27
+ stdout.rewind
28
+ output = stdout.read
29
+
30
+ expect(output).to eq("--- yaml\n")
31
+ expect(formatter).to have_received(:format).with(smart_thing)
32
+ end
33
+ end
34
+
35
+ context "when no format is passed" do
36
+ it "prints human readable output" do
37
+ allow(Formatter::Human).to receive(:new).and_return(formatter)
38
+ allow(formatter).to receive(:format).and_return("Anglais")
39
+
40
+ subject.execute!
41
+ stdout.rewind
42
+ output = stdout.read
43
+
44
+ expect(output).to eq("Anglais\n")
45
+ expect(formatter).to have_received(:format).with(smart_thing)
46
+ end
47
+ end
48
+ end
49
+
50
+ it "passes the config to the SmartThing" do
51
+ allow(SmartThing).to receive(:new).and_return(smart_thing)
52
+
53
+ subject.execute!
54
+
55
+ expect(SmartThing).to have_received(:new).with(config)
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,9 @@
1
+ module GitCleanser
2
+ module Formatter
3
+ describe Human do
4
+ it "produces equivalent output to the YAML formatter" do
5
+ expect(Human::KEYS.keys).to eq YAML::KEYS
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,30 @@
1
+ module GitCleanser
2
+ module Formatter
3
+ describe YAML do
4
+ describe "#format" do
5
+ let(:smart_thing) { instance_double("SmartThing") }
6
+ subject { YAML.new.format(smart_thing) }
7
+
8
+ before do
9
+ allow(smart_thing).to receive(:generated_but_not_ignored).and_return(["file1", "file2"])
10
+ allow(smart_thing).to receive(:ignored_but_not_generated).and_return(["file3", "file4"])
11
+ allow(smart_thing).to receive(:ignored_but_tracked).and_return(["file5", "file6"])
12
+ allow(smart_thing).to receive(:uncompiled).and_return(["file7", "file8"])
13
+ end
14
+
15
+ it "returns output as YAML" do
16
+ output = ::YAML.load(subject)
17
+
18
+ expect(output["generated_but_not_ignored"]).to eq ["file1", "file2"]
19
+ expect(output["ignored_but_not_generated"]).to eq ["file3", "file4"]
20
+ expect(output["ignored_but_tracked"]).to eq ["file5", "file6"]
21
+ expect(output["uncompiled"]).to eq ["file7", "file8"]
22
+ end
23
+
24
+ it "removes trailing newlines because we add one in CLI" do
25
+ expect(subject).not_to end_with("\n")
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,24 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+
4
+ require 'git_cleanser'
5
+
6
+ RSpec.configure do |config|
7
+ config.expect_with :rspec do |expectations|
8
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
9
+ end
10
+
11
+ config.mock_with :rspec do |mocks|
12
+ mocks.verify_partial_doubles = true
13
+ end
14
+
15
+ config.filter_run :focus
16
+ config.run_all_when_everything_filtered = true
17
+
18
+ # This setting enables warnings. It's recommended, but in some cases may
19
+ # be too noisy due to issues in dependencies.
20
+ config.warnings = true
21
+
22
+ config.order = :random
23
+ Kernel.srand config.seed
24
+ end
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git_cleanser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Finnie
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-14 00:00:00.000000000 Z
11
+ date: 2015-05-04 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: paint
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: slop
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 4.0.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 4.0.0
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: bundler
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -38,21 +66,84 @@ dependencies:
38
66
  - - "~>"
39
67
  - !ruby/object:Gem::Version
40
68
  version: '10.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: cucumber
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 1.3.19
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 1.3.19
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 3.2.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 3.2.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: aruba
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.6.2
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.6.2
41
111
  description:
42
112
  email:
43
113
  - dan@danfinnie.com
44
- executables: []
114
+ executables:
115
+ - git_cleanser
45
116
  extensions: []
46
117
  extra_rdoc_files: []
47
118
  files:
48
119
  - ".gitignore"
120
+ - ".rspec"
49
121
  - Gemfile
50
122
  - LICENSE.txt
51
123
  - README.md
52
124
  - Rakefile
125
+ - bin/git_cleanser
126
+ - features/detecting_compiled_files.feature
127
+ - features/detecting_ignored_but_tracked_files.feature
128
+ - features/detecting_uncompiled_files.feature
129
+ - features/output_formats.feature
130
+ - features/step_definitions/detecting_compiled_files_steps.rb
131
+ - features/step_definitions/git_files_step_definitions.rb
132
+ - features/step_definitions/output_formats_step_defintions.rb
133
+ - features/support/env.rb
53
134
  - git_cleanser.gemspec
54
135
  - lib/git_cleanser.rb
136
+ - lib/git_cleanser/cli.rb
137
+ - lib/git_cleanser/config_loader.rb
138
+ - lib/git_cleanser/formatter.rb
139
+ - lib/git_cleanser/formatter/human.rb
140
+ - lib/git_cleanser/formatter/yaml.rb
141
+ - lib/git_cleanser/smart_thing.rb
55
142
  - lib/git_cleanser/version.rb
143
+ - spec/lib/cli_spec.rb
144
+ - spec/lib/formatter/human_spec.rb
145
+ - spec/lib/formatter/yaml_spec.rb
146
+ - spec/spec_helper.rb
56
147
  homepage:
57
148
  licenses:
58
149
  - MIT
@@ -77,5 +168,17 @@ rubygems_version: 2.0.14
77
168
  signing_key:
78
169
  specification_version: 4
79
170
  summary: Iteratively remove compiled files from your git repository
80
- test_files: []
171
+ test_files:
172
+ - features/detecting_compiled_files.feature
173
+ - features/detecting_ignored_but_tracked_files.feature
174
+ - features/detecting_uncompiled_files.feature
175
+ - features/output_formats.feature
176
+ - features/step_definitions/detecting_compiled_files_steps.rb
177
+ - features/step_definitions/git_files_step_definitions.rb
178
+ - features/step_definitions/output_formats_step_defintions.rb
179
+ - features/support/env.rb
180
+ - spec/lib/cli_spec.rb
181
+ - spec/lib/formatter/human_spec.rb
182
+ - spec/lib/formatter/yaml_spec.rb
183
+ - spec/spec_helper.rb
81
184
  has_rdoc: