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.
- checksums.yaml +8 -8
- data/.rubocop.yml +1 -0
- data/.rubocop_todo.yml +16 -161
- data/.travis.yml +11 -4
- data/Gemfile +2 -2
- data/Rakefile +24 -32
- data/bin/lolcommits +62 -125
- data/features/bugs.feature +24 -9
- data/features/lolcommits.feature +136 -145
- data/features/plugins.feature +16 -33
- data/features/step_definitions/lolcommits_steps.rb +91 -71
- data/features/support/env.rb +18 -48
- data/features/support/path_helpers.rb +9 -8
- data/lib/lolcommits.rb +3 -10
- data/lib/lolcommits/capturer.rb +10 -2
- data/lib/lolcommits/capturer/capture_linux.rb +1 -1
- data/lib/lolcommits/capturer/capture_linux_animated.rb +12 -13
- data/lib/lolcommits/capturer/capture_mac_animated.rb +12 -13
- data/lib/lolcommits/cli/fatals.rb +77 -0
- data/lib/lolcommits/cli/launcher.rb +29 -0
- data/lib/lolcommits/cli/process_runner.rb +48 -0
- data/lib/lolcommits/cli/timelapse_gif.rb +45 -0
- data/lib/lolcommits/configuration.rb +30 -133
- data/lib/lolcommits/git_info.rb +58 -28
- data/lib/lolcommits/installation.rb +11 -21
- data/lib/lolcommits/platform.rb +134 -0
- data/lib/lolcommits/plugin.rb +2 -2
- data/lib/lolcommits/plugins/dot_com.rb +15 -15
- data/lib/lolcommits/plugins/lol_protonet.rb +68 -0
- data/lib/lolcommits/plugins/lol_twitter.rb +12 -15
- data/lib/lolcommits/plugins/lol_yammer.rb +4 -6
- data/lib/lolcommits/plugins/lolsrv.rb +8 -11
- data/lib/lolcommits/plugins/loltext.rb +7 -7
- data/lib/lolcommits/plugins/tranzlate.rb +70 -70
- data/lib/lolcommits/plugins/uploldz.rb +8 -8
- data/lib/lolcommits/runner.rb +36 -35
- data/lib/lolcommits/version.rb +1 -1
- data/lolcommits.gemspec +11 -10
- data/test/lolcommits_test.rb +35 -0
- data/test/plugins_test.rb +52 -0
- metadata +41 -20
- data/test/test_lolcommits.rb +0 -78
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
N2MyN2VjMGMzZDE5NjFlODNjOTQ1OWI4YmE4NjNiMWVlOGU3ZTBjYw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZjY5ZWYwYjVlZTY0OGU3OWVjMDBmYjNiOTc1Y2U0MjkxN2U0YzExNw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NGZjN2RhNGRhM2RkMDQ4ZWE1YTM0ZDY5ZmRiNzQxYzgzMjk3ZTJlZmJkNTdi
|
10
|
+
ZWFlOTM0NmE5OGFhM2QwZTE3Y2E0ZTVlMDU3YjkwMDc3NmVkNmQ4NGI5NThk
|
11
|
+
ODg4NjYwNTQyYWI0NmIzYmY4ZGIyOGFiNDJiMWE4YWI5NGM1MDg=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NmU3NjU0YWIwYzAzNDRjYjQzYzAxZmM1ZmQ2ODBlOTMwN2Q1M2MxNDZhMGUx
|
14
|
+
MzhkYTZlNjE5MjZhNWM5ZjQ3NGFjMzYxZGMwOTljZjI4OGI0NGE5YWM2OWQ1
|
15
|
+
ZGJlYjlkNDU0MjhmNmE1NDliODA3ODM1OWQzMTQ5YWJkZTdlZTE=
|
data/.rubocop.yml
CHANGED
data/.rubocop_todo.yml
CHANGED
@@ -1,202 +1,57 @@
|
|
1
1
|
# This configuration was generated by `rubocop --auto-gen-config`
|
2
|
-
# on
|
2
|
+
# on 2015-04-12 19:24:55 +0200 using RuboCop version 0.30.0.
|
3
3
|
# The point is for the user to remove these configuration records
|
4
4
|
# one by one as the offenses are removed from the code base.
|
5
5
|
# Note that changes in the inspected code, or installation of new
|
6
6
|
# versions of RuboCop, may require this file to be generated again.
|
7
7
|
|
8
|
-
# Offense count: 22
|
9
|
-
Lint/AmbiguousRegexpLiteral:
|
10
|
-
Enabled: false
|
11
|
-
|
12
|
-
# Offense count: 8
|
13
|
-
# Cop supports --auto-correct.
|
14
|
-
Lint/DeprecatedClassMethods:
|
15
|
-
Enabled: false
|
16
|
-
|
17
|
-
# Offense count: 2
|
18
|
-
# Cop supports --auto-correct.
|
19
|
-
Lint/StringConversionInInterpolation:
|
20
|
-
Enabled: false
|
21
|
-
|
22
|
-
# Offense count: 1
|
23
|
-
# Cop supports --auto-correct.
|
24
|
-
Lint/UnusedMethodArgument:
|
25
|
-
Enabled: false
|
26
|
-
|
27
|
-
# Offense count: 1
|
28
|
-
Lint/UselessAccessModifier:
|
29
|
-
Enabled: false
|
30
|
-
|
31
|
-
# Offense count: 2
|
32
|
-
Lint/UselessAssignment:
|
33
|
-
Enabled: false
|
34
|
-
|
35
8
|
# Offense count: 23
|
36
9
|
Metrics/AbcSize:
|
37
|
-
Max:
|
10
|
+
Max: 38
|
38
11
|
|
39
12
|
# Offense count: 2
|
40
13
|
# Configuration parameters: CountComments.
|
41
14
|
Metrics/ClassLength:
|
42
|
-
Max:
|
15
|
+
Max: 127
|
43
16
|
|
44
|
-
# Offense count:
|
17
|
+
# Offense count: 5
|
45
18
|
Metrics/CyclomaticComplexity:
|
46
|
-
Max:
|
19
|
+
Max: 9
|
47
20
|
|
48
|
-
# Offense count:
|
21
|
+
# Offense count: 92
|
49
22
|
# Configuration parameters: AllowURI, URISchemes.
|
50
23
|
Metrics/LineLength:
|
51
24
|
Max: 157
|
52
25
|
|
53
|
-
# Offense count:
|
26
|
+
# Offense count: 24
|
54
27
|
# Configuration parameters: CountComments.
|
55
28
|
Metrics/MethodLength:
|
56
|
-
Max:
|
29
|
+
Max: 31
|
57
30
|
|
58
|
-
# Offense count:
|
31
|
+
# Offense count: 4
|
59
32
|
Metrics/PerceivedComplexity:
|
60
33
|
Max: 11
|
61
34
|
|
62
|
-
# Offense count: 3
|
63
|
-
# Cop supports --auto-correct.
|
64
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
65
|
-
Style/BarePercentLiterals:
|
66
|
-
Enabled: false
|
67
|
-
|
68
|
-
# Offense count: 1
|
69
|
-
Style/CaseEquality:
|
70
|
-
Enabled: false
|
71
|
-
|
72
|
-
# Offense count: 1
|
73
|
-
# Configuration parameters: IndentWhenRelativeTo, SupportedStyles, IndentOneStep.
|
74
|
-
Style/CaseIndentation:
|
75
|
-
Enabled: false
|
76
|
-
|
77
|
-
# Offense count: 25
|
78
|
-
Style/Documentation:
|
79
|
-
Enabled: false
|
80
|
-
|
81
|
-
# Offense count: 1
|
82
|
-
Style/DoubleNegation:
|
83
|
-
Enabled: false
|
84
|
-
|
85
35
|
# Offense count: 1
|
86
36
|
# Cop supports --auto-correct.
|
87
|
-
|
88
|
-
Enabled: false
|
89
|
-
|
90
|
-
# Offense count: 1
|
91
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
92
|
-
Style/FormatString:
|
93
|
-
Enabled: false
|
94
|
-
|
95
|
-
# Offense count: 4
|
96
|
-
# Configuration parameters: AllowedVariables.
|
97
|
-
Style/GlobalVars:
|
98
|
-
Enabled: false
|
99
|
-
|
100
|
-
# Offense count: 10
|
101
|
-
# Configuration parameters: MinBodyLength.
|
102
|
-
Style/GuardClause:
|
37
|
+
Performance/Sample:
|
103
38
|
Enabled: false
|
104
39
|
|
105
40
|
# Offense count: 12
|
106
|
-
# Configuration parameters: MaxLineLength.
|
107
|
-
Style/IfUnlessModifier:
|
108
|
-
Enabled: false
|
109
|
-
|
110
|
-
# Offense count: 1
|
111
41
|
# Cop supports --auto-correct.
|
112
42
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
113
|
-
Style/
|
114
|
-
Enabled: true
|
115
|
-
|
116
|
-
# Offense count: 13
|
117
|
-
# Cop supports --auto-correct.
|
118
|
-
Style/LeadingCommentSpace:
|
119
|
-
Enabled: false
|
120
|
-
|
121
|
-
# Offense count: 7
|
122
|
-
# Cop supports --auto-correct.
|
123
|
-
Style/NegatedIf:
|
124
|
-
Enabled: false
|
125
|
-
|
126
|
-
# Offense count: 7
|
127
|
-
# Cop supports --auto-correct.
|
128
|
-
Style/Not:
|
129
|
-
Enabled: false
|
130
|
-
|
131
|
-
# Offense count: 1
|
132
|
-
Style/OneLineConditional:
|
133
|
-
Enabled: false
|
134
|
-
|
135
|
-
# Offense count: 79
|
136
|
-
# Cop supports --auto-correct.
|
137
|
-
# Configuration parameters: PreferredDelimiters.
|
138
|
-
Style/PercentLiteralDelimiters:
|
139
|
-
Enabled: false
|
140
|
-
|
141
|
-
# Offense count: 3
|
142
|
-
# Cop supports --auto-correct.
|
143
|
-
Style/Proc:
|
144
|
-
Enabled: false
|
145
|
-
|
146
|
-
# Offense count: 1
|
147
|
-
# Cop supports --auto-correct.
|
148
|
-
Style/RedundantBegin:
|
149
|
-
Enabled: false
|
150
|
-
|
151
|
-
# Offense count: 76
|
152
|
-
# Cop supports --auto-correct.
|
153
|
-
Style/RedundantSelf:
|
154
|
-
Enabled: false
|
155
|
-
|
156
|
-
# Offense count: 1
|
157
|
-
Style/RegexpLiteral:
|
158
|
-
MaxSlashes: 2
|
159
|
-
|
160
|
-
# Offense count: 1
|
161
|
-
# Cop supports --auto-correct.
|
162
|
-
Style/SingleSpaceBeforeFirstArg:
|
163
|
-
Enabled: false
|
164
|
-
|
165
|
-
# Offense count: 2
|
166
|
-
# Cop supports --auto-correct.
|
167
|
-
Style/SpaceAfterComma:
|
43
|
+
Style/BarePercentLiterals:
|
168
44
|
Enabled: false
|
169
45
|
|
170
46
|
# Offense count: 1
|
171
|
-
|
172
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
173
|
-
Style/SpaceBeforeBlockBraces:
|
174
|
-
Enabled: false
|
175
|
-
|
176
|
-
# Offense count: 5
|
177
|
-
# Cop supports --auto-correct.
|
178
|
-
Style/SpaceInsideParens:
|
47
|
+
Style/CaseEquality:
|
179
48
|
Enabled: false
|
180
49
|
|
181
50
|
# Offense count: 1
|
182
|
-
#
|
183
|
-
Style/
|
184
|
-
Enabled: false
|
185
|
-
|
186
|
-
# Offense count: 15
|
187
|
-
# Cop supports --auto-correct.
|
188
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
189
|
-
Style/StringLiterals:
|
51
|
+
# Configuration parameters: IndentWhenRelativeTo, SupportedStyles, IndentOneStep.
|
52
|
+
Style/CaseIndentation:
|
190
53
|
Enabled: false
|
191
54
|
|
192
|
-
# Offense count:
|
193
|
-
|
194
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
195
|
-
Style/StringLiteralsInInterpolation:
|
55
|
+
# Offense count: 28
|
56
|
+
Style/Documentation:
|
196
57
|
Enabled: false
|
197
|
-
|
198
|
-
# Offense count: 4
|
199
|
-
# Cop supports --auto-correct.
|
200
|
-
# Configuration parameters: WordRegex.
|
201
|
-
Style/WordArray:
|
202
|
-
MinSize: 3
|
data/.travis.yml
CHANGED
@@ -1,16 +1,21 @@
|
|
1
|
+
sudo: false
|
1
2
|
language: ruby
|
3
|
+
cache: bundler
|
2
4
|
rvm:
|
3
5
|
- 1.8.7
|
4
6
|
- 1.9.2
|
5
7
|
- 1.9.3
|
6
8
|
- 2.0.0
|
7
9
|
- 2.1.5
|
8
|
-
- 2.2.
|
10
|
+
- 2.2.1
|
9
11
|
- ruby-head
|
10
12
|
|
11
13
|
before_install:
|
12
|
-
|
13
|
-
-
|
14
|
+
# stub mplayer/ffmpeg so it looks like they are installed
|
15
|
+
- mkdir ~/bin
|
16
|
+
- touch ~/bin/mplayer ~/bin/ffmpeg
|
17
|
+
- chmod +x ~/bin/mplayer ~/bin/ffmpeg
|
18
|
+
- export PATH=~/bin:$PATH
|
14
19
|
|
15
20
|
matrix:
|
16
21
|
allow_failures:
|
@@ -21,7 +26,9 @@ branches:
|
|
21
26
|
- gh-pages
|
22
27
|
|
23
28
|
notifications:
|
24
|
-
irc:
|
29
|
+
irc: chat.freenode.net#lolcommits
|
30
|
+
slack:
|
31
|
+
secure: BkGsQOYMJqW55j94S1QwmR17BkwuTIULKVhwzRdnv37BvVcC17y9KLMo8NH+bcao36XZx9DukXcTyaDQc6tCSlFEbG/FcPUJM8bx9EWjHUoGVg1KdpVu/nVHu+GKosrB41lM3nfJWCnF0TOSnmTXU+bV8Pwkij+L5X+gNyAT2Ns=
|
25
32
|
|
26
33
|
deploy:
|
27
34
|
provider: rubygems
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -28,7 +28,7 @@ end
|
|
28
28
|
Rake::Task[:build].prerequisites.unshift :fix_permissions
|
29
29
|
|
30
30
|
Rake::TestTask.new do |t|
|
31
|
-
t.pattern = 'test
|
31
|
+
t.pattern = 'test/*_test.rb'
|
32
32
|
end
|
33
33
|
|
34
34
|
Rake::FileUtilsExt.verbose(false)
|
@@ -36,15 +36,15 @@ CUKE_RESULTS = 'results.html'
|
|
36
36
|
CLEAN << CUKE_RESULTS
|
37
37
|
Cucumber::Rake::Task.new(:features) do |t|
|
38
38
|
optstr = "features --format html -o #{CUKE_RESULTS} --format Fivemat -x"
|
39
|
-
optstr << " --tags @#{ENV[
|
40
|
-
optstr <<
|
39
|
+
optstr << " --tags @#{ENV['tag']}" unless ENV['tag'].nil?
|
40
|
+
optstr << ' --tags ~@unstable' if ENV['tag'].nil? # ignore unstable tests unless specifying something at CLI
|
41
41
|
t.cucumber_opts = optstr
|
42
42
|
t.fork = false
|
43
43
|
end
|
44
44
|
|
45
45
|
Rake::RDocTask.new do |rd|
|
46
|
-
rd.main =
|
47
|
-
rd.rdoc_files.include(
|
46
|
+
rd.main = 'README.rdoc'
|
47
|
+
rd.rdoc_files.include('README.rdoc', 'lib/**/*.rb', 'bin/**/*')
|
48
48
|
end
|
49
49
|
|
50
50
|
# only run rubocop on platforms where it is supported, sigh
|
@@ -56,32 +56,24 @@ else
|
|
56
56
|
task :default => [:test, :features]
|
57
57
|
end
|
58
58
|
|
59
|
-
|
60
|
-
desc "Migrate an existing local .lolcommits directory to Dropbox"
|
59
|
+
desc 'Migrate an existing local .lolcommits directory to Dropbox'
|
61
60
|
task :dropboxify do
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
#
|
73
|
-
if
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
end
|
81
|
-
|
82
|
-
#symlink dropbox to local
|
83
|
-
FileUtils.ln_s( dropbox_loldir, loldir )
|
84
|
-
|
85
|
-
#copy over existing files
|
86
|
-
FileUtils.cp_r( "#{backup_loldir}/.", loldir)
|
61
|
+
dropbox_loldir = "#{ENV['HOME']}/Dropbox/lolcommits"
|
62
|
+
loldir = "#{ENV['HOME']}/.lolcommits"
|
63
|
+
backup_loldir = "#{ENV['HOME']}/.lolcommits.old"
|
64
|
+
|
65
|
+
# check whether we've done this already
|
66
|
+
abort 'already dropboxified!' if File.symlink? loldir
|
67
|
+
|
68
|
+
# create dropbox folder
|
69
|
+
FileUtils.mkdir_p dropbox_loldir unless File.directory? dropbox_loldir
|
70
|
+
|
71
|
+
# backup existing loldir
|
72
|
+
FileUtils.mv(loldir, backup_loldir) if File.directory? loldir
|
73
|
+
|
74
|
+
# symlink dropbox to local
|
75
|
+
FileUtils.ln_s(dropbox_loldir, loldir)
|
76
|
+
|
77
|
+
# copy over existing files
|
78
|
+
FileUtils.cp_r("#{backup_loldir}/.", loldir)
|
87
79
|
end
|
data/bin/lolcommits
CHANGED
@@ -8,71 +8,32 @@ rescue LoadError
|
|
8
8
|
require 'lolcommits'
|
9
9
|
end
|
10
10
|
|
11
|
+
require 'lolcommits/cli/fatals'
|
12
|
+
require 'lolcommits/cli/launcher'
|
13
|
+
require 'lolcommits/cli/process_runner'
|
14
|
+
require 'lolcommits/cli/timelapse_gif'
|
15
|
+
|
11
16
|
include Lolcommits
|
12
|
-
|
13
|
-
require 'choice'
|
17
|
+
include Lolcommits::CLI
|
14
18
|
|
19
|
+
require 'choice'
|
15
20
|
require 'methadone'
|
16
21
|
include Methadone::CLILogging
|
17
22
|
|
18
|
-
#
|
19
|
-
# CHECK FOR FURTHER DEPENDENCIES
|
20
|
-
#
|
21
|
-
|
22
|
-
def die_on_fatal_conditions!
|
23
|
-
if Configuration.platform_mac?
|
24
|
-
%w(imagesnap videosnap).each do |executable|
|
25
|
-
unless File.executable? File.join(Configuration::LOLCOMMITS_ROOT, 'vendor', 'ext', executable, executable)
|
26
|
-
fatal "Couldn't properly execute #{executable} for some reason, please file a bug?!"
|
27
|
-
exit 1
|
28
|
-
end
|
29
|
-
end
|
30
|
-
elsif Configuration.platform_linux?
|
31
|
-
if not Configuration.command_which('mplayer')
|
32
|
-
fatal "Couldn't find mplayer in your PATH!"
|
33
|
-
exit 1
|
34
|
-
end
|
35
|
-
end
|
36
|
-
unless File.readable? File.join(Configuration::LOLCOMMITS_ROOT, 'vendor', 'fonts', 'Impact.ttf')
|
37
|
-
fatal "Couldn't properly read Impact font from gem package, please file a bug?!"
|
38
|
-
exit 1
|
39
|
-
end
|
40
|
-
if !Configuration.valid_ffmpeg_installed? && capture_animate
|
41
|
-
fatal 'FATAL: ffmpeg does not appear to be properly installed!'
|
42
|
-
exit 1
|
43
|
-
end
|
44
|
-
unless Configuration.valid_imagemagick_installed?
|
45
|
-
fatal 'FATAL: ImageMagick does not appear to be properly installed!'
|
46
|
-
exit 1
|
47
|
-
end
|
48
|
-
if Configuration.git_config_color_always?
|
49
|
-
fatal "Due to a bug in the ruby-git library, git config for color.ui cannot be set to 'always'."
|
50
|
-
fatal "Try setting it to 'auto' instead!"
|
51
|
-
exit 1
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def die_if_not_git_repo!
|
56
|
-
begin
|
57
|
-
debug 'Checking for valid git repo'
|
58
|
-
g = Git.open('.')
|
59
|
-
rescue ArgumentError
|
60
|
-
# ruby-git throws an argument error if path isnt for a valid git repo...
|
61
|
-
fatal "Erm? Can't do that since we're not in a valid git repository!"
|
62
|
-
exit 1
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
23
|
#
|
67
24
|
# NO ARGUMENTS SPECIFIED, HELP THE USER OUT
|
68
25
|
#
|
69
26
|
def do_noargs
|
70
|
-
# TODO: make this a contextual helper to know
|
27
|
+
# TODO: make this a contextual helper to know whether lolcommits is enabled
|
71
28
|
puts 'Do what exactly?'
|
72
29
|
puts 'Try: lolcommits --enable (when in a git repository)'
|
73
30
|
puts 'Or: lolcommits --help'
|
74
31
|
end
|
75
32
|
|
33
|
+
# Gets a configuration object. If running in test mode will override the
|
34
|
+
# LOLDIR for the configuration.
|
35
|
+
#
|
36
|
+
# @return [Lolcommits::Configuration]
|
76
37
|
def configuration
|
77
38
|
if Choice.choices[:test]
|
78
39
|
Configuration.new(:loldir => Configuration.loldir_for('test'))
|
@@ -81,18 +42,26 @@ def configuration
|
|
81
42
|
end
|
82
43
|
end
|
83
44
|
|
45
|
+
# Duration for animated capture.
|
46
|
+
#
|
47
|
+
# If animation is enabled, returns an integer representing seconds OR a string
|
48
|
+
# containing the char representation of an integer.
|
49
|
+
# If animation is disabled, or if the platform doesn't support animated capture,
|
50
|
+
# returns nil instead.
|
51
|
+
#
|
52
|
+
# FIXME: we really should standardize this to always return integer, and remove
|
53
|
+
# all the to_i calls elsewhere.
|
54
|
+
#
|
55
|
+
# @return [Integer, String, nil]
|
84
56
|
def capture_animate
|
85
|
-
|
86
|
-
|
87
|
-
end
|
57
|
+
return unless Platform.can_animate?
|
58
|
+
Choice.choices[:animate] || ENV['LOLCOMMITS_ANIMATE'] || nil
|
88
59
|
end
|
89
60
|
|
90
61
|
def default_device
|
91
62
|
result = Choice.choices[:device] || ENV['LOLCOMMITS_DEVICE']
|
92
63
|
|
93
|
-
if
|
94
|
-
result ||= Dir.glob('/dev/video*').first
|
95
|
-
end
|
64
|
+
result ||= Dir.glob('/dev/video*').first if Platform.platform_linux?
|
96
65
|
|
97
66
|
result
|
98
67
|
end
|
@@ -101,10 +70,10 @@ end
|
|
101
70
|
# IF --CAPTURE, DO CAPTURE
|
102
71
|
#
|
103
72
|
def do_capture
|
104
|
-
capture_delay = Choice.choices[:delay]
|
105
|
-
capture_stealth = Choice.choices[:stealth]
|
73
|
+
capture_delay = Choice.choices[:delay] || ENV['LOLCOMMITS_DELAY'] || 0
|
74
|
+
capture_stealth = Choice.choices[:stealth] || ENV['LOLCOMMITS_STEALTH'] || nil
|
75
|
+
capture_font = Choice.choices[:font] || ENV['LOLCOMMITS_FONT'] || nil
|
106
76
|
capture_device = default_device
|
107
|
-
capture_font = Choice.choices[:font] || ENV['LOLCOMMITS_FONT'] || nil
|
108
77
|
|
109
78
|
capture_options = {
|
110
79
|
:capture_delay => capture_delay,
|
@@ -115,7 +84,9 @@ def do_capture
|
|
115
84
|
:config => configuration
|
116
85
|
}
|
117
86
|
|
118
|
-
|
87
|
+
process_runner = ProcessRunner.new(configuration)
|
88
|
+
should_we_fork = Choice.choices[:fork] || ENV['LOLCOMMITS_FORK']
|
89
|
+
process_runner.fork_me?(should_we_fork) do
|
119
90
|
if Choice.choices[:test]
|
120
91
|
info '*** Capturing in test mode.'
|
121
92
|
|
@@ -125,11 +96,12 @@ def do_capture
|
|
125
96
|
:sha => Choice.choices[:sha]
|
126
97
|
}
|
127
98
|
|
99
|
+
# fire off runner with the overriden fake commit metadata
|
128
100
|
runner = Lolcommits::Runner.new(capture_options.merge override_text)
|
129
101
|
runner.run
|
130
102
|
|
131
|
-
# automatically open so
|
132
|
-
|
103
|
+
# automatically open so user can see the test image results immediately
|
104
|
+
Launcher.open_image(runner.main_image)
|
133
105
|
else
|
134
106
|
runner = Lolcommits::Runner.new(capture_options)
|
135
107
|
runner.run
|
@@ -137,69 +109,19 @@ def do_capture
|
|
137
109
|
end
|
138
110
|
end
|
139
111
|
|
140
|
-
def fork_me?(&block)
|
141
|
-
if Choice.choices[:fork] || ENV['LOLCOMMITS_FORK']
|
142
|
-
$stdout.sync = true
|
143
|
-
write_pid fork {
|
144
|
-
yield block
|
145
|
-
delete_pid
|
146
|
-
}
|
147
|
-
else
|
148
|
-
yield block
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
def write_pid(pid)
|
153
|
-
File.open(pid_file, 'w') { |f| f.write(pid) }
|
154
|
-
end
|
155
|
-
|
156
|
-
def delete_pid
|
157
|
-
File.delete(pid_file) if File.exist?(pid_file)
|
158
|
-
end
|
159
|
-
|
160
|
-
def pid_file
|
161
|
-
File.join(configuration.loldir, 'lolcommits.pid')
|
162
|
-
end
|
163
|
-
|
164
112
|
def do_configure
|
113
|
+
$stdout.sync = true
|
165
114
|
configuration.do_configure! Choice.choices[:plugin]
|
166
115
|
end
|
167
116
|
|
168
117
|
def do_last
|
169
|
-
die_if_not_git_repo!
|
118
|
+
Fatals.die_if_not_git_repo!
|
170
119
|
lolimage = configuration.most_recent
|
171
120
|
if lolimage.nil?
|
172
121
|
warn 'No lolcommits have been captured for this repository yet.'
|
173
122
|
exit 1
|
174
123
|
end
|
175
|
-
|
176
|
-
end
|
177
|
-
|
178
|
-
def do_gif
|
179
|
-
die_if_not_git_repo!
|
180
|
-
|
181
|
-
case Choice.choices[:gif]
|
182
|
-
when 'today'
|
183
|
-
lolimages = configuration.jpg_images_today
|
184
|
-
filename = "#{Date.today.to_s}.gif"
|
185
|
-
else
|
186
|
-
lolimages = configuration.jpg_images
|
187
|
-
filename = 'archive.gif'
|
188
|
-
end
|
189
|
-
|
190
|
-
if lolimages.empty?
|
191
|
-
warn 'No lolcommits have been captured for this time yet.'
|
192
|
-
exit 1
|
193
|
-
end
|
194
|
-
|
195
|
-
puts '*** Generating animated gif.'
|
196
|
-
|
197
|
-
gif = MiniMagick::Image.new File.join configuration.archivedir, filename
|
198
|
-
|
199
|
-
# This is for ruby 1.8.7, *lolimages just doesn't work with ruby 187
|
200
|
-
gif.run_command('convert', *['-delay', '50', '-loop', '0', lolimages, "#{gif.path}"].flatten)
|
201
|
-
|
202
|
-
puts "*** #{gif.path} generated."
|
124
|
+
Launcher.open_image(lolimage)
|
203
125
|
end
|
204
126
|
|
205
127
|
def print_version_and_exit
|
@@ -219,11 +141,18 @@ def change_dir_to_root_or_repo!
|
|
219
141
|
end
|
220
142
|
end
|
221
143
|
|
144
|
+
# FIXME: this should be moved out of the CLI, but to where?
|
145
|
+
def load_local_plugins!
|
146
|
+
plugins_dir = Configuration.loldir_for('.plugins')
|
147
|
+
Dir.glob("#{plugins_dir}/*.rb").each do |plugin|
|
148
|
+
load plugin
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
222
152
|
#
|
223
153
|
# Command line parsing fun
|
224
154
|
#
|
225
155
|
Choice.options do
|
226
|
-
|
227
156
|
option :version do
|
228
157
|
long '--version'
|
229
158
|
short '-v'
|
@@ -270,7 +199,7 @@ Choice.options do
|
|
270
199
|
|
271
200
|
option :show_config do
|
272
201
|
short '-sc'
|
273
|
-
long
|
202
|
+
long '--show-config'
|
274
203
|
desc 'display configuration file'
|
275
204
|
end
|
276
205
|
|
@@ -344,7 +273,7 @@ Choice.options do
|
|
344
273
|
desc 'generate animated timeline gif from captured images'
|
345
274
|
end
|
346
275
|
|
347
|
-
if
|
276
|
+
if Platform.can_animate?
|
348
277
|
option :animate do
|
349
278
|
long '--animate=SECONDS'
|
350
279
|
short '-a'
|
@@ -369,17 +298,23 @@ end
|
|
369
298
|
#
|
370
299
|
# check for fatal conditions before execution
|
371
300
|
#
|
372
|
-
|
301
|
+
Fatals.die_if_no_valid_ffmpeg_installed! if capture_animate
|
302
|
+
Fatals.die_on_fatal_platform_conditions!
|
373
303
|
|
374
304
|
#
|
375
305
|
# change working dir to either a repo or the fs root
|
376
306
|
#
|
377
307
|
change_dir_to_root_or_repo!
|
378
308
|
|
309
|
+
#
|
310
|
+
# load system local plugins
|
311
|
+
#
|
312
|
+
load_local_plugins!
|
313
|
+
|
379
314
|
#
|
380
315
|
# Handle actions manually since choice seems weird
|
381
316
|
#
|
382
|
-
if
|
317
|
+
if !Choice.choices[:enable] || !Choice.choices[:disable]
|
383
318
|
if Choice.choices[:capture]
|
384
319
|
do_capture
|
385
320
|
elsif Choice.choices[:configure]
|
@@ -389,14 +324,16 @@ if not (Choice.choices[:enable] || Choice.choices[:disable])
|
|
389
324
|
elsif Choice.choices[:plugins]
|
390
325
|
configuration.puts_plugins
|
391
326
|
elsif Choice.choices[:devices]
|
392
|
-
|
327
|
+
puts Platform.device_list
|
328
|
+
puts "Specify a device with --device=\"{device name}\" "\
|
329
|
+
'or set the LOLCOMMITS_DEVICE env variable'
|
393
330
|
elsif Choice.choices[:last]
|
394
331
|
do_last
|
395
332
|
elsif Choice.choices[:browse]
|
396
|
-
die_if_not_git_repo!
|
397
|
-
|
333
|
+
Fatals.die_if_not_git_repo!
|
334
|
+
Launcher.open_folder(configuration.loldir)
|
398
335
|
elsif Choice.choices[:gif]
|
399
|
-
|
336
|
+
TimelapseGif.new(configuration).run(Choice.choices[:gif])
|
400
337
|
else
|
401
338
|
do_noargs
|
402
339
|
end
|