lolcommits 0.5.7 → 0.5.8.pre1

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.
Files changed (42) hide show
  1. checksums.yaml +8 -8
  2. data/.rubocop.yml +1 -0
  3. data/.rubocop_todo.yml +16 -161
  4. data/.travis.yml +11 -4
  5. data/Gemfile +2 -2
  6. data/Rakefile +24 -32
  7. data/bin/lolcommits +62 -125
  8. data/features/bugs.feature +24 -9
  9. data/features/lolcommits.feature +136 -145
  10. data/features/plugins.feature +16 -33
  11. data/features/step_definitions/lolcommits_steps.rb +91 -71
  12. data/features/support/env.rb +18 -48
  13. data/features/support/path_helpers.rb +9 -8
  14. data/lib/lolcommits.rb +3 -10
  15. data/lib/lolcommits/capturer.rb +10 -2
  16. data/lib/lolcommits/capturer/capture_linux.rb +1 -1
  17. data/lib/lolcommits/capturer/capture_linux_animated.rb +12 -13
  18. data/lib/lolcommits/capturer/capture_mac_animated.rb +12 -13
  19. data/lib/lolcommits/cli/fatals.rb +77 -0
  20. data/lib/lolcommits/cli/launcher.rb +29 -0
  21. data/lib/lolcommits/cli/process_runner.rb +48 -0
  22. data/lib/lolcommits/cli/timelapse_gif.rb +45 -0
  23. data/lib/lolcommits/configuration.rb +30 -133
  24. data/lib/lolcommits/git_info.rb +58 -28
  25. data/lib/lolcommits/installation.rb +11 -21
  26. data/lib/lolcommits/platform.rb +134 -0
  27. data/lib/lolcommits/plugin.rb +2 -2
  28. data/lib/lolcommits/plugins/dot_com.rb +15 -15
  29. data/lib/lolcommits/plugins/lol_protonet.rb +68 -0
  30. data/lib/lolcommits/plugins/lol_twitter.rb +12 -15
  31. data/lib/lolcommits/plugins/lol_yammer.rb +4 -6
  32. data/lib/lolcommits/plugins/lolsrv.rb +8 -11
  33. data/lib/lolcommits/plugins/loltext.rb +7 -7
  34. data/lib/lolcommits/plugins/tranzlate.rb +70 -70
  35. data/lib/lolcommits/plugins/uploldz.rb +8 -8
  36. data/lib/lolcommits/runner.rb +36 -35
  37. data/lib/lolcommits/version.rb +1 -1
  38. data/lolcommits.gemspec +11 -10
  39. data/test/lolcommits_test.rb +35 -0
  40. data/test/plugins_test.rb +52 -0
  41. metadata +41 -20
  42. data/test/test_lolcommits.rb +0 -78
@@ -1,37 +1,20 @@
1
1
  Feature: Plugins Work
2
2
 
3
+ Background:
4
+ Given a mocked home directory
5
+
3
6
  @slow_process @unstable
4
7
  Scenario: Lolcommits.com integration works
5
- Given I am in a git repository named "dot_com" with lolcommits enabled
6
- When I run `lolcommits --config` and wait for output
7
- And I enter "dot_com" for "Plugin Name"
8
- And I enter "true" for "enabled"
9
- And I enter "b2a70ac0b64e012fa61522000a8c42dc" for "api_key"
10
- And I enter "b2a720b0b64e012fa61522000a8c42dc" for "api_secret"
11
- And I enter "c4aed530b64e012fa61522000a8c42dc" for "repo_id"
12
- Then I should be presented "Successfully configured plugin: dot_com"
13
- When I do a git commit
14
- Then the output should contain "*** Preserving this moment in history."
15
- And there should be exactly 1 jpg in "../.lolcommits/dot_com"
16
-
17
- Scenario: Disable loltext
18
- Given I am in a git repository named "loltext" with lolcommits enabled
19
- And I run `lolcommits --config` and wait for output
20
- And I enter "loltext" for "Plugin Name"
21
- And I enter "false" for "enabled"
22
- Then I should be presented "Successfully configured plugin: loltext"
23
- When I do a git commit
24
- Then the output should contain "*** Preserving this moment in history."
25
- And there should be exactly 1 jpg in "../.lolcommits/loltext"
26
-
27
- Scenario: lolsrv integration works
28
- Given I am in a git repository named "lolsrv" with lolcommits enabled
29
- When I run `lolcommits --config` and wait for output
30
- And I enter "lolsrv" for "Plugin Name"
31
- And I enter "true" for "enabled"
32
- And I enter "http://localhost" for "server"
33
- Then I should be presented "Successfully configured plugin: lolsrv"
34
- When I do a git commit
35
- Then the output should contain "*** Preserving this moment in history."
36
- And there should be exactly 1 jpg in "../.lolcommits/lolsrv"
37
-
8
+ Given I am in a git repo named "dot_com" with lolcommits enabled
9
+ When I run `lolcommits --config` interactively
10
+ And I wait for output to contain "Name of plugin to configure:"
11
+ Then I type "dot_com"
12
+ And I wait for output to contain "enabled:"
13
+ Then I type "true"
14
+ And I wait for output to contain "api_key:"
15
+ Then I type "b2a70ac0b64e012fa61522000a8c42dc"
16
+ And I wait for output to contain "api_secret:"
17
+ Then I type "b2a70ac0b64e012fa61522000a8c42dc"
18
+ And I wait for output to contain "repo_id:"
19
+ Then I type "b2a70ac0b64e012fa61522000a8c42dc"
20
+ Then the output should contain "Successfully configured plugin: dot_com"
@@ -1,122 +1,142 @@
1
1
  # -*- encoding : utf-8 -*-
2
- include FileUtils
2
+ require 'fileutils'
3
+ require 'aruba/api'
3
4
 
4
- Given /^I am in a directory named "(.*?)"$/ do |dir_name|
5
- steps %Q{
5
+ def postcommit_hook
6
+ '.git/hooks/post-commit'
7
+ end
8
+
9
+ def default_repo
10
+ 'mygit'
11
+ end
12
+
13
+ def default_loldir
14
+ absolute_path("~/.lolcommits/#{default_repo}")
15
+ end
16
+
17
+ Given(/^I am in a directory named "(.*?)"$/) do |dir_name|
18
+ steps %(
6
19
  Given a directory named "#{dir_name}"
7
20
  And I cd to "#{dir_name}"
8
- }
21
+ )
9
22
  end
10
23
 
11
- Given /^a git repository named "(.*?)"$/ do |repo_name|
12
- repo_dir = File.join current_dir, repo_name
13
- mkdir_p repo_dir
14
- Dir.chdir repo_dir do
15
- system 'git init --quiet .'
16
- system "git config user.name 'Testy McTesterson'"
17
- system "git config user.email 'testy@tester.com'"
18
- end
24
+ Given(/^a git repo named "(.*?)"$/) do |repo_name|
25
+ steps %(
26
+ Given I successfully run `git init --quiet "#{repo_name}"`
27
+ )
19
28
  end
20
29
 
21
- Given /^the git repository named "(.*?)" has no "(.*?)" hook$/ do |repo_name, hook_name|
22
- hook_file = File.join current_dir, repo_name, '.git', 'hooks', hook_name
23
- delete(hook_file) if File.exists? hook_file
30
+ Given(/^I am in a git repo named "(.*?)"$/) do |repo|
31
+ steps %(
32
+ Given a git repo named "#{repo}"
33
+ And I cd to "#{repo}"
34
+ )
24
35
  end
25
36
 
26
- Given /^the git repository named "(.*?)" has a "(.*?)" hook$/ do |repo_name, hook_name|
27
- hook_file = File.join current_dir, repo_name, '.git', 'hooks', hook_name
28
- touch(hook_file) if not File.exists? hook_file
37
+ Given(/^I am in a git repo$/) do
38
+ steps %(
39
+ Given I am in a git repo named "#{default_repo}"
40
+ )
29
41
  end
30
42
 
31
- Given /^the "(.*?)" repository "(.*?)" hook has content "(.*?)"$/ do |repo_name, hook_name, hook_content|
32
- step %{the git repository named "#{repo_name}" has a "#{hook_name}" hook}
33
- hook_file = File.join current_dir, repo_name, '.git', 'hooks', hook_name
34
- File.open(hook_file, 'w') { |f| f.write(hook_content) }
43
+ Given(/^I am in a git repo named "(.*?)" with lolcommits enabled$/) do |repo|
44
+ steps %(
45
+ Given I am in a git repo named "#{repo}"
46
+ And I successfully run `lolcommits --enable`
47
+ )
35
48
  end
36
49
 
37
- Given /^a git repository named "(.*?)" with (a|no) "(.*?)" hook$/ do |repo_name, yesno_modifier, hook_name|
38
- step %{a git repository named "#{repo_name}"}
39
- step %{the git repository named "#{repo_name}" has #{yesno_modifier} "#{hook_name}" hook}
50
+ Given(/^I am in a git repo with lolcommits enabled$/) do
51
+ steps %(
52
+ Given I am in a git repo named "#{default_repo}" with lolcommits enabled
53
+ )
40
54
  end
41
55
 
42
- Given /^I am in a git repository named "(.*?)"$/ do |repo_name|
43
- steps %Q{
44
- Given a git repository named "#{repo_name}"
45
- And I cd to "#{repo_name}"
46
- }
56
+ Given(/^a post\-commit hook with "(.*?)"$/) do |file_content|
57
+ steps %(
58
+ Given a file named "#{postcommit_hook}" with:
59
+ """
60
+ #{file_content}
61
+ """
62
+ )
47
63
  end
48
64
 
49
- Given /^I am in a git repository named "(.*?)" with lolcommits enabled$/ do |repo_name|
50
- steps %Q{
51
- Given I am in a git repository named "#{repo_name}"
52
- And I successfully run `lolcommits --enable`
53
- }
65
+ Then(/^the lolcommits post\-commit hook should be properly installed$/) do
66
+ steps %(
67
+ Then the post-commit hook should contain "lolcommits --capture"
68
+ )
69
+ end
70
+
71
+ Then(/^the post\-commit hook (should|should not) contain "(.*?)"$/) do |should, content|
72
+ steps %(
73
+ Then the file "#{postcommit_hook}" #{should} contain "#{content}"
74
+ )
54
75
  end
55
76
 
56
- Given /^I have environment variable (.*?) set to (.*?)$/ do |var, value|
77
+ Given(/^I have environment variable (.*?) set to (.*?)$/) do |var, value|
57
78
  set_env var, value
58
79
  end
59
80
 
60
- When /^I run `(.*?)` and wait for output$/ do |command|
61
- command = "cd #{current_dir} && #{command}"
62
- @stdin, @stdout, @stderr = Open3.popen3(command)
63
- @fields = Hash.new
81
+ Given(/^its loldir has (\d+) lolimages$/) do |num_images|
82
+ steps %(
83
+ Given a loldir named "#{default_repo}" with #{num_images} lolimages
84
+ )
64
85
  end
65
86
 
66
- Given /^a loldir named "(.*?)" with (\d+) lolimages$/ do |repo_name, num_images|
67
- loldir = "tmp/aruba/.lolcommits/#{repo_name}"
68
- mkdir_p loldir
87
+ Given(/^a loldir named "(.*?)" with (\d+) lolimages$/) do |repo, num_images|
88
+ loldir = absolute_path("~/.lolcommits/#{repo}")
89
+ FileUtils.mkdir_p loldir
69
90
  num_images.to_i.times do
70
- random_hex = '%011x' % (rand * 0xfffffffffff)
71
- cp 'test/images/test_image.jpg', File.join(loldir, "#{random_hex}.jpg")
91
+ hex = "#{format '%011x', (rand * 0xfffffffffff)}"
92
+ FileUtils.cp 'test/images/test_image.jpg', File.join(loldir, "#{hex}.jpg")
72
93
  end
73
94
  end
74
95
 
75
- Then /^I should be (prompted for|presented) "(.*?)"$/ do |_, prompt|
76
- assert @stdout.read.to_s.include?(prompt)
77
- end
78
-
79
- When /^I enter "(.*?)" for "(.*?)"$/ do |input, field|
80
- @fields[field] = input
81
- @stdin.puts input
96
+ Then(/^there should be exactly (.*?) (jpg|gif|pid)s? in its loldir$/) do |n, type|
97
+ steps %(
98
+ Then there should be exactly #{n} #{type} in "#{default_loldir}"
99
+ )
82
100
  end
83
101
 
84
- Then /^there should be (?:exactly|only) (.*?) (jpg|gif|pid)(?:s?) in "(.*?)"$/ do |n, type, folder|
85
- assert_equal n.to_i, Dir["#{current_dir}/#{folder}/*.#{type}"].count
102
+ Then(/^there should be exactly (.*?) (jpg|gif|pid)s? in "(.*?)"$/) do |n, type, folder|
103
+ expect(Dir[absolute_path(folder, "*.#{type}")].count).to eq(n.to_i)
86
104
  end
87
105
 
88
- Then /^the output should contain a list of plugins$/ do
89
- step %{the output should contain "Available plugins: "}
106
+ Then(/^the output should contain a list of plugins$/) do
107
+ step %(the output should contain "Available plugins: ")
90
108
  end
91
109
 
92
- When /^I do a git commit with commit message "(.*?)"$/ do |commit_msg|
110
+ When(/^I do a git commit with commit message "(.*?)"$/) do |commit_msg|
93
111
  filename = Faker::Lorem.words(1).first
94
- step %{a 98 byte file named "#{filename}"}
95
- step %{I successfully run `git add #{filename}`}
96
- step %{I successfully run `git commit -m "#{commit_msg}"`}
112
+ steps %(
113
+ Given a 98 byte file named "#{filename}"
114
+ And I successfully run `git add #{filename}`
115
+ And I successfully run `git commit -m "#{commit_msg}"`
116
+ )
97
117
  end
98
118
 
99
- When /^I do a git commit$/ do
100
- commit_msg = Faker::Lorem.sentence
101
- step %{I do a git commit with commit message "#{commit_msg}"}
119
+ When(/^I do a git commit$/) do
120
+ step %(I do a git commit with commit message "#{Faker::Lorem.sentence}")
102
121
  end
103
122
 
104
- When /^I do (\d+) git commits$/ do |n|
123
+ When(/^I do (\d+) git commits$/) do |n|
105
124
  n.to_i.times do
106
- step %{I do a git commit}
125
+ step %(I do a git commit)
107
126
  sleep 0.1
108
127
  end
109
128
  end
110
129
 
111
- Then /^there should be (\d+) commit entries in the git log$/ do |n|
130
+ Then(/^there should be (\d+) commit entries in the git log$/) do |n|
112
131
  sleep 1 # let the file writing catch up
113
- assert_equal n.to_i, `git shortlog | grep -E '^[ ]+\w+' | wc -l`.chomp.to_i
132
+ expect(n.to_i).to eq `git shortlog | grep -E '^[ ]+\w+' | wc -l`.chomp.to_i
114
133
  end
115
134
 
116
- Given /^I am using a "(.*?)" platform$/ do |platform_name|
117
- ENV['LOLCOMMITS_FAKEPLATFORM'] = platform_name
135
+ Given(/^I am using a "(.*?)" platform$/) do |platform_name|
136
+ set_env 'LOLCOMMITS_FAKEPLATFORM', platform_name
118
137
  end
119
138
 
120
- When /^I wait for the child process to exit in "(.*?)"$/ do |repo_name|
121
- sleep 0.1 while File.exist?("tmp/aruba/.lolcommits/#{repo_name}/lolcommits.pid")
139
+ When(/^I wait for the child process to exit in "(.*?)"$/) do |repo_name|
140
+ pid_loc = absolute_path("~/.lolcommits/#{repo_name}/lolcommits.pid")
141
+ sleep 0.1 while File.exist?(pid_loc)
122
142
  end
@@ -2,16 +2,12 @@
2
2
  require 'aruba/cucumber'
3
3
  require 'methadone/cucumber'
4
4
  require 'open3'
5
- require 'test/unit/assertions'
6
- include Test::Unit::Assertions
7
5
  require 'ffaker'
8
- require 'lolcommits/configuration'
6
+ require 'fileutils'
7
+
9
8
  require File.join(File.expand_path(File.dirname(__FILE__)), 'path_helpers')
10
9
  include Lolcommits
11
10
 
12
- ENV['PATH'] = "#{File.expand_path(File.dirname(__FILE__) + '/../../bin')}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
13
- LIB_DIR = File.join(File.expand_path(File.dirname(__FILE__)), '..', '..', 'lib')
14
-
15
11
  World(PathHelpers)
16
12
 
17
13
  Before do
@@ -19,70 +15,44 @@ Before do
19
15
  @puts = true
20
16
  @aruba_timeout_seconds = 20
21
17
 
22
- @original_rubylib = ENV['RUBYLIB']
23
- ENV['RUBYLIB'] = LIB_DIR + File::PATH_SEPARATOR + ENV['RUBYLIB'].to_s
24
-
25
- @original_fakecapture = ENV['LOLCOMMITS_FAKECAPTURE']
26
- ENV['LOLCOMMITS_FAKECAPTURE'] = '1'
27
-
28
- # @original_loldir = ENV['LOLCOMMITS_DIR']
29
- # ENV['LOLCOMMITS_DIR'] = File.expand_path( File.join(current_dir, ".lolcommits") )
30
-
31
- @original_home = ENV['HOME']
32
- ENV['HOME'] = File.expand_path(current_dir)
33
-
34
- ENV['LAUNCHY_DRY_RUN'] = 'true'
35
- end
36
-
37
- After do
38
- ENV['RUBYLIB'] = @original_rubylib
39
- ENV['LOLCOMMITS_FAKECAPTURE'] = @original_fakecapture
40
- # ENV['LOLCOMMITS_DIR'] = @original_loldir
41
- ENV['HOME'] = @original_home
42
- ENV['LAUNCHY_DRY_RUN'] = nil
43
- ENV['LOLCOMMITS_FAKEPLATFORM'] = nil
44
- end
45
-
46
- Before('@fake-interactive-rebase') do
47
- # in order to fake an interactive rebase,
48
- # we replace the editor with a script that simply squashes a few random commits
49
- @original_git_editor = ENV['GIT_EDITOR']
50
- # ENV['GIT_EDITOR'] = "sed -i -e 'n;s/pick/squash/g'" #every other commit
51
- ENV['GIT_EDITOR'] = "sed -i -e '3,5 s/pick/squash/g'" # lines 3-5
52
- end
18
+ set_env 'LOLCOMMITS_FAKECAPTURE', '1'
19
+ set_env 'LAUNCHY_DRY_RUN', 'true'
53
20
 
54
- After('@fake-interactive-rebase') do
55
- ENV['GIT_EDITOR'] = @original_git_editor
21
+ author_name = 'Testy McTesterson'
22
+ author_email = 'testy@tester.com'
23
+ set_env 'GIT_AUTHOR_NAME', author_name
24
+ set_env 'GIT_COMMITTER_NAME', author_name
25
+ set_env 'GIT_AUTHOR_EMAIL', author_email
26
+ set_env 'GIT_COMMITTER_EMAIL', author_email
56
27
  end
57
28
 
29
+ # for tasks that may take an insanely long time (e.g. network related)
30
+ # we should strive to not have any of these in our scenarios, naturally.
58
31
  Before('@slow_process') do
59
32
  @aruba_io_wait_seconds = 5
60
33
  @aruba_timeout_seconds = 60
61
34
  end
62
35
 
36
+ # in order to fake an interactive rebase, we replace the editor with a script
37
+ # to simply squash a few random commits. in this case, using lines 3-5.
38
+ Before('@fake-interactive-rebase') do
39
+ set_env 'GIT_EDITOR', "sed -i -e '3,5 s/pick/squash/g'"
40
+ end
41
+
63
42
  # adjust the path so tests dont see a global imagemagick install
64
43
  Before('@fake-no-imagemagick') do
65
44
  reject_paths_with_cmd('mogrify')
66
45
  end
67
46
 
68
- After('@fake-no-imagemagick') do
69
- reset_path
70
- end
71
-
72
47
  # adjust the path so tests dont see a global ffmpeg install
73
48
  Before('@fake-no-ffmpeg') do
74
49
  reject_paths_with_cmd('ffmpeg')
75
50
  end
76
51
 
77
- After('@fake-no-ffmpeg') do
78
- reset_path
79
- end
80
-
81
52
  # do test in temporary directory so our own git repo-ness doesn't affect it
82
53
  Before('@in-tempdir') do
83
54
  @dirs = [Dir.mktmpdir]
84
55
  end
85
-
86
56
  After('@in-tempdir') do
87
57
  FileUtils.rm_rf(@dirs.first)
88
58
  end
@@ -1,12 +1,15 @@
1
1
  # -*- encoding : utf-8 -*-
2
+ require 'fileutils'
3
+ require 'aruba/api'
4
+ require 'lolcommits/platform'
5
+
2
6
  module PathHelpers
3
7
  def reject_paths_with_cmd(cmd)
4
- @original_path = ENV['PATH']
5
8
  # make a new subdir that still contains cmds
6
9
  tmpbindir = File.expand_path(File.join @dirs, 'bin')
7
10
  FileUtils.mkdir_p tmpbindir
8
11
 
9
- preseve_cmds_in_path(['git', 'mplayer'], tmpbindir)
12
+ preseve_cmds_in_path(%w(git mplayer), tmpbindir)
10
13
 
11
14
  exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
12
15
  newpaths = ENV['PATH'].split(File::PATH_SEPARATOR).reject do |path|
@@ -20,19 +23,17 @@ module PathHelpers
20
23
 
21
24
  # add the temporary directory with git in it back into the path
22
25
  newpaths << tmpbindir
23
- ENV['PATH'] = newpaths.join(File::PATH_SEPARATOR)
26
+
27
+ # use aruba/api set_env to set PATH, which will be automaticaly restored
28
+ set_env 'PATH', newpaths.join(File::PATH_SEPARATOR)
24
29
  end
25
30
 
26
31
  def preseve_cmds_in_path(cmds, tmpbindir)
27
32
  cmds.each do |cmd|
28
- whichcmd = Lolcommits::Configuration.command_which(cmd)
33
+ whichcmd = Lolcommits::Platform.command_which(cmd)
29
34
  unless whichcmd.nil?
30
35
  FileUtils.ln_s whichcmd, File.join(tmpbindir, File.basename(whichcmd))
31
36
  end
32
37
  end
33
38
  end
34
-
35
- def reset_path
36
- ENV['PATH'] = @original_path
37
- end
38
39
  end
data/lib/lolcommits.rb CHANGED
@@ -11,20 +11,12 @@ require 'date'
11
11
 
12
12
  require 'lolcommits/version'
13
13
  require 'lolcommits/configuration'
14
-
15
14
  require 'lolcommits/capturer'
16
- require 'lolcommits/capturer/capture_mac'
17
- require 'lolcommits/capturer/capture_mac_animated'
18
- require 'lolcommits/capturer/capture_linux'
19
- require 'lolcommits/capturer/capture_linux_animated'
20
- require 'lolcommits/capturer/capture_windows'
21
- require 'lolcommits/capturer/capture_cygwin'
22
- require 'lolcommits/capturer/capture_fake'
23
-
24
15
  require 'lolcommits/git_info'
25
16
  require 'lolcommits/installation'
26
-
27
17
  require 'lolcommits/plugin'
18
+ require 'lolcommits/platform'
19
+
28
20
  require 'lolcommits/plugins/loltext'
29
21
  require 'lolcommits/plugins/dot_com'
30
22
  require 'lolcommits/plugins/tranzlate'
@@ -32,6 +24,7 @@ require 'lolcommits/plugins/lol_twitter'
32
24
  require 'lolcommits/plugins/uploldz'
33
25
  require 'lolcommits/plugins/lolsrv'
34
26
  require 'lolcommits/plugins/lol_yammer'
27
+ require 'lolcommits/plugins/lol_protonet'
35
28
 
36
29
  # require runner after all the plugins have been required
37
30
  require 'lolcommits/runner'
@@ -8,9 +8,17 @@ module Lolcommits
8
8
 
9
9
  def initialize(attributes = {})
10
10
  attributes.each do |attr, val|
11
- self.send("#{attr}=", val)
11
+ send("#{attr}=", val)
12
12
  end
13
- debug 'Capturer: initializing new instance ' + self.to_s
13
+ debug 'Capturer: initializing new instance ' + to_s
14
14
  end
15
15
  end
16
16
  end
17
+
18
+ require 'lolcommits/capturer/capture_mac'
19
+ require 'lolcommits/capturer/capture_mac_animated'
20
+ require 'lolcommits/capturer/capture_linux'
21
+ require 'lolcommits/capturer/capture_linux_animated'
22
+ require 'lolcommits/capturer/capture_windows'
23
+ require 'lolcommits/capturer/capture_cygwin'
24
+ require 'lolcommits/capturer/capture_fake'