lolcommits 0.6.4 → 0.6.5

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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MTQ5MmRhOGIwMTQxNjczMTkwZmMxZWE1ZjdkNTJjNTc0OTcxNzM2Mg==
4
+ NDZhY2Q5NDc0OTVjMzA5ZDE4MmFkNzc3OTc4YTBkM2UxNGQzOTcyNQ==
5
5
  data.tar.gz: !binary |-
6
- ODNkMmIxMDYzYjlmNmUyYjZjOTI3OGI2MGNhOWRmZDM5ZTUwZTRkYQ==
6
+ M2EwYjliMDA0ZmFmYThhOWVhNDUyMjlkMGMyZTA0ODAzNDE0ZTk5Ng==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NDgxMTJlYWM3ZjEyOTBjZTEwZmExMTA0ZDZjMmU0MGM3MDk3ZTI1ZTc5NDkz
10
- ZDhiMzEzZTBjMmJlZjMzOGI0YTViYjI4MGY3ZWE0YTA4MDg3OTFkNzU2ZTg5
11
- Y2FhMmJmODhkN2U0OGVhNjY0MzcxODEyOWUxMDU1MzcxZWI1MWM=
9
+ NmYzMmU0YjJjYjlmNTk4ODFlNDM0MDVkZDlhOWQzODI3ZTE0ZGM4ZTg4NjY1
10
+ ZDBhODFlNWU0NDUyODA0Y2FjNTM5YzVkNzk5MDNlNzI0ODlmMTgwYjE5Njc5
11
+ ZWU2NjY0MmM0MTc5NzcwZjhkODU0ZDAyODFkMmM3ODU4YTcyY2M=
12
12
  data.tar.gz: !binary |-
13
- OWM3YTRkMzFkZGJiNmQ4MDM2OTUzZWEwZDA3MThiZDBkNTNlYmJlN2U4ZmFl
14
- MGQwNmQ4NWU0MzdlNTk4M2I4N2U5OGJiODNmMjg5MDc3ODk2Y2NiYzU3ZjVj
15
- NjcyZjA2YjZkZTZkMjg1ZDY1M2MwZTJiOGE4ZTg1NjQ4NDAzM2U=
13
+ YmQzZGVjYWE3YWU5ZjViOWZhNTZlYTFiOGMwNTE3OTA5MWEzMzFmZTFjYjc0
14
+ ODliNTdjOGVkNzJhMWFhODlhZTczZjk4NTdjNTQ3NDI1MTUxODMxYmZiNDI2
15
+ Njc1MThhMmVlZDBkYmI2NThjNDJiYjFmMTBjNDZkMWY0ZWUwYjE=
data/CHANGELOG.md CHANGED
@@ -3,6 +3,9 @@
3
3
  0.7.0 (WIP)
4
4
  * extract plugins to separate gems ...
5
5
 
6
+ 0.6.5 (12 April 2016)
7
+ * Add mercurial support (@tak #301 #302 #303)
8
+
6
9
  0.6.4 (15 March 2016)
7
10
  * Add quotes to correctly handle paths with spaces (@matthutchinson #298)
8
11
 
data/bin/lolcommits CHANGED
@@ -113,7 +113,7 @@ def do_configure
113
113
  end
114
114
 
115
115
  def do_last
116
- Fatals.die_if_not_git_repo!
116
+ Fatals.die_if_not_vcs_repo!
117
117
  lolimage = configuration.most_recent
118
118
  if lolimage.nil?
119
119
  warn 'No lolcommits have been captured for this repository yet.'
@@ -132,9 +132,11 @@ def change_dir_to_root_or_repo!
132
132
  loop do
133
133
  cur = File.expand_path('.')
134
134
  nxt = File.expand_path('..', cur)
135
- if File.directory?(File.expand_path('.git')) || nxt == cur
136
- return # found root or git dir
135
+ if nxt == cur
136
+ warn 'Repository root not found'
137
+ return
137
138
  end
139
+ return if VCSInfo.repo_root?
138
140
  Dir.chdir(nxt)
139
141
  end
140
142
  end
@@ -304,6 +306,8 @@ Fatals.die_on_fatal_platform_conditions!
304
306
  #
305
307
  change_dir_to_root_or_repo!
306
308
 
309
+ # TODO: Allow local backend definitions?
310
+
307
311
  #
308
312
  # load system local plugins
309
313
  #
@@ -326,7 +330,7 @@ elsif Choice.choices[:devices]
326
330
  elsif Choice.choices[:last]
327
331
  do_last
328
332
  elsif Choice.choices[:browse]
329
- Fatals.die_if_not_git_repo!
333
+ Fatals.die_if_not_vcs_repo!
330
334
  Launcher.open_folder(configuration.loldir)
331
335
  elsif Choice.choices[:gif]
332
336
  TimelapseGif.new(configuration).run(Choice.choices[:gif])
@@ -24,31 +24,31 @@ Feature: Basic UI functionality
24
24
  Given I am in a git repo
25
25
  When I successfully run `lolcommits --enable`
26
26
  Then the output should contain "installed lolcommit hook to:"
27
- And the lolcommits post-commit hook should be properly installed
27
+ And the lolcommits git post-commit hook should be properly installed
28
28
  And the exit status should be 0
29
29
 
30
- Scenario: Enable in a git repo that already has a post-commit hook
30
+ Scenario: Enable in a git repo that already has a git post-commit hook
31
31
  Given I am in a git repo
32
- And a post-commit hook with "#!/bin/sh\n\n/my/own/script"
32
+ And a git post-commit hook with "#!/bin/sh\n\n/my/own/script"
33
33
  When I successfully run `lolcommits --enable`
34
34
  Then the output should contain "installed lolcommit hook to:"
35
- And the lolcommits post-commit hook should be properly installed
36
- And the post-commit hook should contain "#!/bin/sh"
37
- And the post-commit hook should contain "/my/own/script"
35
+ And the lolcommits git post-commit hook should be properly installed
36
+ And the git post-commit hook should contain "#!/bin/sh"
37
+ And the git post-commit hook should contain "/my/own/script"
38
38
  And the exit status should be 0
39
39
 
40
- Scenario: Enable in a git repo that has post-commit hook with a bad shebang
40
+ Scenario: Enable in a git repo that has git post-commit hook with a bad shebang
41
41
  Given I am in a git repo
42
- And a post-commit hook with "#!/bin/ruby"
42
+ And a git post-commit hook with "#!/bin/ruby"
43
43
  And I run `lolcommits --enable`
44
44
  Then the output should contain "doesn't start with a good shebang"
45
- And the post-commit hook should not contain "lolcommits --capture"
45
+ And the git post-commit hook should not contain "lolcommits --capture"
46
46
  And the exit status should be 1
47
47
 
48
48
  Scenario: Enable in a git repo passing capture arguments
49
49
  Given I am in a git repo
50
50
  When I successfully run `lolcommits --enable -w 5 --fork`
51
- Then the post-commit hook should contain "lolcommits --capture -w 5 --fork"
51
+ Then the git post-commit hook should contain "lolcommits --capture -w 5 --fork"
52
52
  And the exit status should be 0
53
53
 
54
54
  Scenario: Disable in a enabled git repo
@@ -63,7 +63,7 @@ Feature: Basic UI functionality
63
63
  When I run `lolcommits --enable`
64
64
  Then the output should contain:
65
65
  """
66
- You don't appear to be in the base directory of a git project.
66
+ You don't appear to be in the base directory of a supported vcs project.
67
67
  """
68
68
  And the exit status should be 1
69
69
 
@@ -77,7 +77,7 @@ Feature: Basic UI functionality
77
77
  And a file named "~/.lolcommits/forked/tmp_snapshot.jpg" should not exist
78
78
  And there should be exactly 1 jpg in "~/.lolcommits/forked"
79
79
 
80
- Scenario: Commiting in an enabled repo triggers successful capture
80
+ Scenario: Commiting in an enabled git repo triggers successful capture
81
81
  Given I am in a git repo named "myrepo" with lolcommits enabled
82
82
  When I do a git commit
83
83
  Then the output should contain "*** Preserving this moment in history."
@@ -85,7 +85,7 @@ Feature: Basic UI functionality
85
85
  And a file named "~/.lolcommits/myrepo/tmp_snapshot.jpg" should not exist
86
86
  And there should be exactly 1 jpg in "~/.lolcommits/myrepo"
87
87
 
88
- Scenario: Commiting in enabled repo subdirectory triggers successful capture
88
+ Scenario: Commiting in enabled git repo subdirectory triggers successful capture
89
89
  Given I am in a git repo named "testcapture" with lolcommits enabled
90
90
  And a directory named "subdir"
91
91
  And an empty file named "subdir/FOOBAR"
@@ -158,7 +158,7 @@ Feature: Basic UI functionality
158
158
  When I successfully run `lolcommits --test --show-config`
159
159
  Then the output should match /loltext:\s+enabled: false/
160
160
 
161
- Scenario: test capture should work regardless of whether in a git repo
161
+ Scenario: test capture should work regardless of whether in a lolrepo
162
162
  Given I am in a directory named "nothingtoseehere"
163
163
  When I run `lolcommits --test --capture`
164
164
  Then the output should contain "*** Capturing in test mode."
@@ -171,13 +171,13 @@ Feature: Basic UI functionality
171
171
  Then a directory named "~/.lolcommits/test" should exist
172
172
  And a directory named "~/.lolcommits/randomgitrepo" should not exist
173
173
 
174
- Scenario: last command should work properly when in a lolrepo
174
+ Scenario: last command should work properly when in a git lolrepo
175
175
  Given I am in a git repo
176
176
  And its loldir has 2 lolimages
177
177
  When I run `lolcommits --last`
178
178
  Then the exit status should be 0
179
179
 
180
- Scenario: last command should work properly when in a lolrepo subdirectory
180
+ Scenario: last command should work properly when in a git lolrepo subdirectory
181
181
  Given I am in a git repo
182
182
  And its loldir has 2 lolimages
183
183
  And a directory named "randomdir"
@@ -185,7 +185,7 @@ Feature: Basic UI functionality
185
185
  When I run `lolcommits --last`
186
186
  Then the output should not contain:
187
187
  """
188
- Can't do that since we're not in a valid git repository!
188
+ Unknown VCS
189
189
  """
190
190
  And the exit status should be 0
191
191
 
@@ -195,7 +195,7 @@ Feature: Basic UI functionality
195
195
  When I run `lolcommits --last`
196
196
  Then the output should contain:
197
197
  """
198
- Can't do that since we're not in a valid git repository!
198
+ Unknown VCS
199
199
  """
200
200
  And the exit status should be 1
201
201
 
@@ -209,13 +209,13 @@ Feature: Basic UI functionality
209
209
  """
210
210
  Then the exit status should be 1
211
211
 
212
- Scenario: browse command should work properly when in a lolrepo
212
+ Scenario: browse command should work properly when in a git lolrepo
213
213
  Given I am in a git repo
214
214
  And its loldir has 2 lolimages
215
215
  When I run `lolcommits --browse`
216
216
  Then the exit status should be 0
217
217
 
218
- Scenario: browse command should work properly when in a lolrepo subdirectory
218
+ Scenario: browse command should work properly when in a git lolrepo subdirectory
219
219
  Given I am in a git repo
220
220
  And its loldir has 2 lolimages
221
221
  And a directory named "subdir"
@@ -223,7 +223,7 @@ Feature: Basic UI functionality
223
223
  When I run `lolcommits --browse`
224
224
  Then the output should not contain:
225
225
  """
226
- Can't do that since we're not in a valid git repository!
226
+ Unknown VCS
227
227
  """
228
228
  And the exit status should be 0
229
229
 
@@ -233,11 +233,11 @@ Feature: Basic UI functionality
233
233
  When I run `lolcommits --browse`
234
234
  Then the output should contain:
235
235
  """
236
- Can't do that since we're not in a valid git repository!
236
+ Unknown VCS
237
237
  """
238
238
  And the exit status should be 1
239
239
 
240
- Scenario: handle commit messages with quotation marks
240
+ Scenario: handle git commit messages with quotation marks
241
241
  Given I am in a git repo with lolcommits enabled
242
242
  When I successfully run `git commit --allow-empty -m 'no "air quotes" bae'`
243
243
  Then the exit status should be 0
@@ -278,9 +278,101 @@ Feature: Basic UI functionality
278
278
  """
279
279
  And the exit status should be 1
280
280
 
281
- Scenario: Enable on windows platform setting PATH in post-commit hook
281
+ Scenario: Enable on windows platform setting PATH in git post-commit hook
282
282
  Given I am using a "win32" platform
283
283
  And I am in a git repo
284
284
  When I successfully run `lolcommits --enable`
285
- Then the post-commit hook should contain "set path"
285
+ Then the git post-commit hook should contain "set path"
286
286
  And the exit status should be 0
287
+
288
+ Scenario: Enable in a naked mercurial repo
289
+ Given I am in a mercurial repo
290
+ When I successfully run `lolcommits --enable`
291
+ Then the output should contain "installed lolcommit hook to:"
292
+ And the lolcommits mercurial post-commit hook should be properly installed
293
+ And the exit status should be 0
294
+
295
+ Scenario: Enable in a mercurial repo that already has a mercurial post-commit hook
296
+ Given I am in a mercurial repo
297
+ And a mercurial post-commit hook with "[hooks]\npost-commit.mine = /my/own/script"
298
+ When I successfully run `lolcommits --enable`
299
+ Then the output should contain "installed lolcommit hook to:"
300
+ And the lolcommits mercurial post-commit hook should be properly installed
301
+ And the mercurial post-commit hook should contain "post-commit.mine = /my/own/script"
302
+ And the exit status should be 0
303
+
304
+ Scenario: Enable in a mercurial repo passing capture arguments
305
+ Given I am in a mercurial repo
306
+ When I successfully run `lolcommits --enable -w 5 --fork`
307
+ Then the mercurial post-commit hook should contain "lolcommits --capture -w 5 --fork"
308
+ And the exit status should be 0
309
+
310
+ Scenario: Disable in a enabled mercurial repo
311
+ Given I am in a mercurial repo with lolcommits enabled
312
+ When I successfully run `lolcommits --disable`
313
+ Then the output should contain "uninstalled"
314
+ And a file named ".hg/hgrc" should exist
315
+ And the exit status should be 0
316
+
317
+ Scenario: Commiting in an enabled mercurial repo triggers successful capture
318
+ Given I am in a mercurial repo named "myrepo" with lolcommits enabled
319
+ When I do a mercurial commit
320
+ Then the output should contain "*** Preserving this moment in history."
321
+ And a directory named "~/.lolcommits/myrepo" should exist
322
+ And a file named "~/.lolcommits/myrepo/tmp_snapshot.jpg" should not exist
323
+ And there should be exactly 1 jpg in "~/.lolcommits/myrepo"
324
+
325
+ Scenario: Commiting in enabled mercurial repo subdirectory triggers successful capture
326
+ Given I am in a mercurial repo named "testcapture" with lolcommits enabled
327
+ And a directory named "subdir"
328
+ And an empty file named "subdir/FOOBAR"
329
+ When I cd to "subdir/"
330
+ And I do a mercurial commit
331
+ Then the output should contain "*** Preserving this moment in history."
332
+ And a directory named "~/.lolcommits/testcapture" should exist
333
+ And a directory named "~/.lolcommits/subdir" should not exist
334
+ And there should be exactly 1 jpg in "~/.lolcommits/testcapture"
335
+
336
+ Scenario: last command should work properly when in a mercurial lolrepo
337
+ Given I am in a mercurial repo
338
+ And its loldir has 2 lolimages
339
+ When I run `lolcommits --last`
340
+ Then the exit status should be 0
341
+
342
+ Scenario: last command should work properly when in a mercurial lolrepo subdirectory
343
+ Given I am in a mercurial repo
344
+ And its loldir has 2 lolimages
345
+ And a directory named "randomdir"
346
+ And I cd to "randomdir"
347
+ When I run `lolcommits --last`
348
+ Then the output should not contain:
349
+ """
350
+ Unknown VCS
351
+ """
352
+ And the exit status should be 0
353
+
354
+ Scenario: browse command should work properly when in a mercurial lolrepo
355
+ Given I am in a mercurial repo
356
+ And its loldir has 2 lolimages
357
+ When I run `lolcommits --browse`
358
+ Then the exit status should be 0
359
+
360
+ Scenario: browse command should work properly when in a mercurial lolrepo subdirectory
361
+ Given I am in a mercurial repo
362
+ And its loldir has 2 lolimages
363
+ And a directory named "subdir"
364
+ And I cd to "subdir"
365
+ When I run `lolcommits --browse`
366
+ Then the output should not contain:
367
+ """
368
+ Unknown VCS
369
+ """
370
+ And the exit status should be 0
371
+
372
+ Scenario: handle mercurial commit messages with quotation marks
373
+ Given I am in a mercurial repo with lolcommits enabled
374
+ When I successfully run `touch meh`
375
+ And I successfully run `hg add meh`
376
+ And I successfully run `hg commit -m 'no "air quotes" bae'`
377
+ Then the exit status should be 0
378
+ And there should be exactly 1 jpg in its loldir
@@ -2,12 +2,16 @@
2
2
  require 'fileutils'
3
3
  require 'aruba/api'
4
4
 
5
- def postcommit_hook
5
+ def postcommit_hook_git
6
6
  '.git/hooks/post-commit'
7
7
  end
8
8
 
9
+ def postcommit_hook_mercurial
10
+ '.hg/hgrc'
11
+ end
12
+
9
13
  def default_repo
10
- 'mygit'
14
+ 'myrepo'
11
15
  end
12
16
 
13
17
  def default_loldir
@@ -53,24 +57,77 @@ Given(/^I am in a git repo with lolcommits enabled$/) do
53
57
  )
54
58
  end
55
59
 
56
- Given(/^a post\-commit hook with "(.*?)"$/) do |file_content|
60
+ Given(/^a git post\-commit hook with "(.*?)"$/) do |file_content|
57
61
  steps %(
58
- Given a file named "#{postcommit_hook}" with:
62
+ Given a file named "#{postcommit_hook_git}" with:
59
63
  """
60
64
  #{file_content}
61
65
  """
62
66
  )
63
67
  end
64
68
 
65
- Then(/^the lolcommits post\-commit hook should be properly installed$/) do
69
+ Then(/^the lolcommits git post\-commit hook should be properly installed$/) do
70
+ steps %(
71
+ Then the git post-commit hook should contain "lolcommits --capture"
72
+ )
73
+ end
74
+
75
+ Then(/^the git post\-commit hook (should|should not) contain "(.*?)"$/) do |should, content|
76
+ steps %(
77
+ Then the file "#{postcommit_hook_git}" #{should} contain "#{content}"
78
+ )
79
+ end
80
+
81
+ Given(/^a mercurial repo named "(.*?)"$/) do |repo_name|
82
+ steps %(
83
+ Given I successfully run `hg init "#{repo_name}"`
84
+ )
85
+ end
86
+
87
+ Given(/^I am in a mercurial repo named "(.*?)"$/) do |repo|
66
88
  steps %(
67
- Then the post-commit hook should contain "lolcommits --capture"
89
+ Given a mercurial repo named "#{repo}"
90
+ And I cd to "#{repo}"
91
+ )
92
+ end
93
+
94
+ Given(/^I am in a mercurial repo$/) do
95
+ steps %(
96
+ Given I am in a mercurial repo named "#{default_repo}"
97
+ )
98
+ end
99
+
100
+ Given(/^I am in a mercurial repo named "(.*?)" with lolcommits enabled$/) do |repo|
101
+ steps %(
102
+ Given I am in a mercurial repo named "#{repo}"
103
+ And I successfully run `lolcommits --enable`
68
104
  )
69
105
  end
70
106
 
71
- Then(/^the post\-commit hook (should|should not) contain "(.*?)"$/) do |should, content|
107
+ Given(/^I am in a mercurial repo with lolcommits enabled$/) do
72
108
  steps %(
73
- Then the file "#{postcommit_hook}" #{should} contain "#{content}"
109
+ Given I am in a mercurial repo named "#{default_repo}" with lolcommits enabled
110
+ )
111
+ end
112
+
113
+ Given(/^a mercurial post\-commit hook with "(.*?)"$/) do |file_content|
114
+ steps %(
115
+ Given a file named "#{postcommit_hook_mercurial}" with:
116
+ """
117
+ #{file_content}
118
+ """
119
+ )
120
+ end
121
+
122
+ Then(/^the lolcommits mercurial post\-commit hook should be properly installed$/) do
123
+ steps %(
124
+ Then the mercurial post-commit hook should contain "lolcommits --capture"
125
+ )
126
+ end
127
+
128
+ Then(/^the mercurial post\-commit hook (should|should not) contain "(.*?)"$/) do |should, content|
129
+ steps %(
130
+ Then the file "#{postcommit_hook_mercurial}" #{should} contain "#{content}"
74
131
  )
75
132
  end
76
133
 
@@ -132,6 +189,31 @@ Then(/^there should be (\d+) commit entries in the git log$/) do |n|
132
189
  expect(n.to_i).to eq `git shortlog | grep -E '^[ ]+\w+' | wc -l`.chomp.to_i
133
190
  end
134
191
 
192
+ When(/^I do a mercurial commit with commit message "(.*?)"$/) do |commit_msg|
193
+ filename = Faker::Lorem.words(1).first
194
+ steps %(
195
+ Given a 98 byte file named "#{filename}"
196
+ And I successfully run `hg add #{filename}`
197
+ And I successfully run `hg commit -m "#{commit_msg}"`
198
+ )
199
+ end
200
+
201
+ When(/^I do a mercurial commit$/) do
202
+ step %(I do a mercurial commit with commit message "#{Faker::Lorem.sentence}")
203
+ end
204
+
205
+ When(/^I do (\d+) mercurial commits$/) do |n|
206
+ n.to_i.times do
207
+ step %(I do a mercurial commit)
208
+ sleep 0.1
209
+ end
210
+ end
211
+
212
+ Then(/^there should be (\d+) commit entries in the mercurial log$/) do |n|
213
+ sleep 1 # let the file writing catch up
214
+ expect(n.to_i).to eq `hg log | grep '^changeset:' | wc -l`.chomp.to_i
215
+ end
216
+
135
217
  Given(/^I am using a "(.*?)" platform$/) do |host_os_name|
136
218
  set_env 'LOLCOMMITS_FAKE_HOST_OS', host_os_name
137
219
  end
@@ -0,0 +1,36 @@
1
+ # need to use popen3 on windows - popen4 always eventually calls fork
2
+ if Lolcommits::Platform.platform_windows?
3
+
4
+ module Mercurial
5
+ class Command
6
+ private
7
+
8
+ def execution_proc
9
+ proc do
10
+ debug(command)
11
+ result = ''
12
+ error = ''
13
+ status = nil
14
+ Open3.popen3(command) do |_stdin, stdout, stderr, wait_thread|
15
+ Timeout.timeout(timeout) do
16
+ while (tmp = stdout.read(102_400))
17
+ result += tmp
18
+ end
19
+ end
20
+
21
+ while (tmp = stderr.read(1024))
22
+ error += tmp
23
+ end
24
+ status = if RUBY_VERSION =~ /^1\.8/
25
+ error.empty? ? 0 : 1
26
+ else
27
+ wait_thread.value
28
+ end
29
+ end
30
+ raise_error_if_needed(status, error)
31
+ result
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,16 @@
1
+ # windows command line doesn't like single quotes
2
+ module Mercurial
3
+ class Shell
4
+ def self.interpolate_arguments(cmd_with_args)
5
+ cmd_with_args.shift.tap do |cmd|
6
+ cmd.gsub!(/\?/) do
7
+ if Lolcommits::Platform.platform_windows?
8
+ "\"#{cmd_with_args.shift}\""
9
+ else
10
+ cmd_with_args.shift.to_s.enclose_in_single_quotes
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,9 @@
1
+ # -*- encoding : utf-8 -*-
2
+ if RUBY_VERSION =~ /^1\.8/
3
+ class String
4
+ # used unconditionally by mercurial-ruby
5
+ def encode(str, _options)
6
+ str
7
+ end
8
+ end
9
+ end
data/lib/lolcommits.rb CHANGED
@@ -2,6 +2,7 @@
2
2
  $LOAD_PATH.unshift File.expand_path('.')
3
3
 
4
4
  require 'core_ext/class'
5
+ require 'core_ext/string'
5
6
  require 'mini_magick'
6
7
  require 'core_ext/mini_magick/utilities'
7
8
  require 'fileutils'
@@ -9,15 +10,26 @@ require 'git'
9
10
  require 'open3'
10
11
  require 'methadone'
11
12
  require 'date'
13
+ require 'mercurial-ruby'
14
+ require 'core_ext/mercurial-ruby/shell'
12
15
 
13
16
  require 'lolcommits/version'
14
17
  require 'lolcommits/configuration'
15
18
  require 'lolcommits/capturer'
16
- require 'lolcommits/git_info'
19
+ require 'lolcommits/vcs_info'
17
20
  require 'lolcommits/installation'
18
21
  require 'lolcommits/plugin'
19
22
  require 'lolcommits/platform'
20
23
 
24
+ # after lolcommits/platform, so that we can do platform-conditional override
25
+ require 'core_ext/mercurial-ruby/command'
26
+
27
+ # backends
28
+ require 'lolcommits/backends/installation_git'
29
+ require 'lolcommits/backends/installation_mercurial'
30
+ require 'lolcommits/backends/git_info'
31
+ require 'lolcommits/backends/mercurial_info'
32
+
21
33
  require 'lolcommits/plugins/loltext'
22
34
  require 'lolcommits/plugins/dot_com'
23
35
  require 'lolcommits/plugins/tranzlate'
@@ -1,12 +1,20 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module Lolcommits
3
- class GitInfo
3
+ class GitInfo < VCSInfo
4
4
  include Methadone::CLILogging
5
5
  attr_accessor :sha, :message, :repo_internal_path, :repo, :url,
6
6
  :author_name, :author_email, :branch
7
7
 
8
8
  GIT_URL_REGEX = %r{.*[:]([\/\w\-]*).git}
9
9
 
10
+ def self.repo_root?(path = '.')
11
+ File.directory?(File.join(path, '.git'))
12
+ end
13
+
14
+ def self.local_name(path = '.')
15
+ File.basename(Git.open(path).dir.to_s)
16
+ end
17
+
10
18
  def initialize
11
19
  debug 'GitInfo: parsed the following values from commit:'
12
20
  debug "GitInfo: \t#{message}"
@@ -0,0 +1,121 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module Lolcommits
3
+ #
4
+ # Methods to handle enabling and disabling of lolcommits
5
+ #
6
+ class InstallationGit
7
+ HOOK_PATH = File.join '.git', 'hooks', 'post-commit'
8
+ HOOK_DIR = File.join '.git', 'hooks'
9
+
10
+ #
11
+ # IF --ENABLE, DO ENABLE
12
+ #
13
+ def self.do_enable
14
+ unless File.directory?('.git')
15
+ fatal "You don't appear to be in the base directory of a git project."
16
+ exit 1
17
+ end
18
+
19
+ # its possible a hooks dir doesnt exist, so create it if so
20
+ Dir.mkdir(HOOK_DIR) unless File.directory?(HOOK_DIR)
21
+
22
+ # should add a shebang (or not) adding will rewrite hook file
23
+ add_shebang = false
24
+ if hook_file_exists?
25
+ # clear away any existing lolcommits hook
26
+ remove_existing_hook! if lolcommits_hook_exists?
27
+
28
+ # if file is empty we should add a shebang (and rewrite hook)
29
+ if File.read(HOOK_PATH).strip.empty?
30
+ add_shebang = true
31
+ elsif !good_shebang?
32
+ # look for good shebang in existing hook, abort if none found
33
+ warn "the existing hook (at #{HOOK_PATH}) doesn't start with a good shebang; like #!/bin/sh"
34
+ exit 1
35
+ end
36
+ else
37
+ add_shebang = true
38
+ end
39
+
40
+ File.open(HOOK_PATH, add_shebang ? 'w' : 'a') do |f|
41
+ f.write("#!/bin/sh\n") if add_shebang
42
+ f.write(hook_script)
43
+ end
44
+
45
+ FileUtils.chmod 0755, HOOK_PATH
46
+ HOOK_PATH
47
+ end
48
+
49
+ #
50
+ # IF --DISABLE, DO DISABLE
51
+ #
52
+ def self.do_disable
53
+ if lolcommits_hook_exists?
54
+ remove_existing_hook!
55
+ info "uninstalled lolcommits hook (from #{HOOK_PATH})"
56
+ elsif File.exist?(HOOK_PATH)
57
+ info "couldn't find an lolcommits hook (at #{HOOK_PATH})"
58
+ if File.read(HOOK_PATH) =~ /lolcommit/
59
+ info "warning: an older-style lolcommit hook may still exist, edit #{HOOK_PATH} to remove it manually"
60
+ end
61
+ else
62
+ info "no post commit hook found (at #{HOOK_PATH}), so there is nothing to uninstall"
63
+ end
64
+ end
65
+
66
+ def self.hook_script
67
+ ruby_path = Lolcommits::Platform.command_which('ruby', true)
68
+ imagick_path = Lolcommits::Platform.command_which('identify', true)
69
+
70
+ if Lolcommits::Platform.platform_windows?
71
+ hook_export = "set path \"#{ruby_path};#{imagick_path};%PATH%\"\n"
72
+ else
73
+ locale_export = "export LANG=\"#{ENV['LANG']}\"\n"
74
+ hook_export = "export PATH=\"#{ruby_path}:#{imagick_path}:$PATH\"\n"
75
+ end
76
+
77
+ capture_cmd = 'lolcommits --capture'
78
+ capture_args = " #{ARGV[1..-1].join(' ')}" if ARGV.length > 1
79
+
80
+ <<-EOS
81
+ ### lolcommits hook (begin) ###
82
+ if [ ! -d "$GIT_DIR/rebase-merge" ]; then
83
+ #{locale_export}#{hook_export}#{capture_cmd}#{capture_args}
84
+ fi
85
+ ### lolcommits hook (end) ###
86
+ EOS
87
+ end
88
+
89
+ # does a git hook exist at all?
90
+ def self.hook_file_exists?
91
+ File.exist?(HOOK_PATH)
92
+ end
93
+
94
+ # does a git hook exist with lolcommits commands?
95
+ def self.lolcommits_hook_exists?
96
+ hook_file_exists? &&
97
+ File.read(HOOK_PATH).to_s =~ /lolcommits.*\(begin\)(.*\n)*.*lolcommits.*\(end\)/
98
+ end
99
+
100
+ # does the git hook file have a good shebang?
101
+ def self.good_shebang?
102
+ File.read(HOOK_PATH).lines.first =~ %r{^\#\!\/bin\/.*sh}
103
+ end
104
+
105
+ def self.remove_existing_hook!
106
+ hook = File.read(HOOK_PATH)
107
+ out = File.open(HOOK_PATH, 'w')
108
+ skip = false
109
+
110
+ hook.lines.each do |line|
111
+ skip = true if !skip && (line =~ /lolcommits.*\(begin\)/)
112
+
113
+ out << line unless skip
114
+
115
+ skip = false if skip && (line =~ /lolcommits.*\(end\)/)
116
+ end
117
+
118
+ out.close
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,88 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module Lolcommits
3
+ #
4
+ # Methods to handle enabling and disabling of lolcommits
5
+ #
6
+ class InstallationMercurial
7
+ HOOK_SECTION = 'hooks'.freeze
8
+ HOOK_OPERATIONS = %w(commit record crecord).freeze
9
+
10
+ #
11
+ # IF --ENABLE, DO ENABLE
12
+ #
13
+ def self.do_enable
14
+ unless File.directory?('.hg')
15
+ fatal "You don't appear to be in the base directory of a mercurial project."
16
+ exit 1
17
+ end
18
+
19
+ if lolcommits_hook_exists?
20
+ # clear away any existing lolcommits hook
21
+ remove_existing_hook!
22
+ end
23
+
24
+ config = repository.config
25
+ HOOK_OPERATIONS.each do |op|
26
+ config.add_setting(HOOK_SECTION, "post-#{op}.lolcommits", hook_script)
27
+ end
28
+ config.path
29
+ end
30
+
31
+ #
32
+ # IF --DISABLE, DO DISABLE
33
+ #
34
+ def self.do_disable
35
+ config = repository.config
36
+ if lolcommits_hook_exists?
37
+ remove_existing_hook!
38
+ info "uninstalled lolcommits hook (from #{config.path})"
39
+ elsif config.exists?
40
+ info "couldn't find an lolcommits hook (at #{config.path})"
41
+ else
42
+ info "no post commit hook found (at #{config.path}), so there is nothing to uninstall"
43
+ end
44
+ end
45
+
46
+ def self.hook_script
47
+ ruby_path = Lolcommits::Platform.command_which('ruby', true)
48
+ imagick_path = Lolcommits::Platform.command_which('identify', true)
49
+ capture_cmd = 'lolcommits --capture'
50
+
51
+ if Lolcommits::Platform.platform_windows?
52
+ capture_cmd = "set path=#{ruby_path};#{imagick_path};%PATH%&&#{capture_cmd}"
53
+ else
54
+ locale_export = "LANG=\"#{ENV['LANG']}\""
55
+ hook_export = "PATH=\"#{ruby_path}:#{imagick_path}:$PATH\""
56
+ capture_cmd = "#{locale_export} #{hook_export} #{capture_cmd}"
57
+ end
58
+
59
+ capture_args = ARGV[1..-1].join(' ') if ARGV.length > 1
60
+ "#{capture_cmd} #{capture_args}"
61
+ end
62
+
63
+ def self.repository
64
+ Mercurial::Repository.open('.')
65
+ end
66
+
67
+ # does a mercurial hook exist with lolcommits commands?
68
+ def self.lolcommits_hook_exists?
69
+ config = repository.config
70
+ config.exists? && config.setting_exists?(HOOK_SECTION, 'post-commit.lolcommits')
71
+ end
72
+
73
+ # can we load the hgrc?
74
+ def self.valid_hgrc?
75
+ repository.config.exists?
76
+ end
77
+
78
+ def self.remove_existing_hook!
79
+ config = repository.config
80
+ HOOK_OPERATIONS.each do |op|
81
+ setting = "post-#{op}.lolcommits"
82
+ if config.setting_exists?(HOOK_SECTION, setting)
83
+ config.delete_setting!(HOOK_SECTION, setting)
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,81 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module Lolcommits
3
+ class MercurialInfo < VCSInfo
4
+ include Methadone::CLILogging
5
+ attr_accessor :sha, :message, :repo_internal_path, :repo, :url,
6
+ :author_name, :author_email, :branch
7
+
8
+ def self.repo_root?(path = '.')
9
+ File.directory?(File.join(path, '.hg'))
10
+ end
11
+
12
+ def self.local_name(path = '.')
13
+ File.basename(File.dirname(Mercurial::Repository.open(path).dothg_path))
14
+ end
15
+
16
+ def initialize
17
+ # mercurial sets HG_RESULT for post- hooks
18
+ if ENV.key?('HG_RESULT') && ENV['HG_RESULT'] != '0'
19
+ debug 'Aborting lolcommits hook from failed operation'
20
+ exit 1
21
+ end
22
+
23
+ Mercurial.configure do |conf|
24
+ conf.hg_binary_path = 'hg'
25
+ end
26
+ debug 'MercurialInfo: parsed the following values from commit:'
27
+ debug "MercurialInfo: \t#{message}"
28
+ debug "MercurialInfo: \t#{sha}"
29
+ debug "MercurialInfo: \t#{repo_internal_path}"
30
+ debug "MercurialInfo: \t#{repo}"
31
+ debug "MercurialInfo: \t#{branch}"
32
+ debug "MercurialInfo: \t#{author_name}" if author_name
33
+ debug "MercurialInfo: \t#{author_email}" if author_email
34
+ end
35
+
36
+ def branch
37
+ @branch ||= last_commit.branch_name
38
+ end
39
+
40
+ def message
41
+ @message ||= begin
42
+ message = last_commit.message || ''
43
+ message.split("\n").first
44
+ end
45
+ end
46
+
47
+ def sha
48
+ @sha ||= last_commit.id[0..10]
49
+ end
50
+
51
+ def repo_internal_path
52
+ @repo_internal_path ||= repository.dothg_path
53
+ end
54
+
55
+ def url
56
+ @url ||= repository.path
57
+ end
58
+
59
+ def repo
60
+ @repo ||= File.basename(File.dirname(repo_internal_path))
61
+ end
62
+
63
+ def author_name
64
+ @author_name ||= last_commit.author
65
+ end
66
+
67
+ def author_email
68
+ @author_email ||= last_commit.author_email
69
+ end
70
+
71
+ private
72
+
73
+ def repository(path = '.')
74
+ @repository ||= Mercurial::Repository.open(path)
75
+ end
76
+
77
+ def last_commit
78
+ @commit ||= repository.commits.parent
79
+ end
80
+ end
81
+ end
@@ -64,12 +64,16 @@ module Lolcommits
64
64
 
65
65
  # If we are not in a git repo, we can't do git related things!
66
66
  # Die with an informative error message in that case.
67
- def self.die_if_not_git_repo!
68
- debug 'Checking for valid git repo'
69
- Git.open('.') # FIXME: should be extracted to GitInfo class
70
- rescue ArgumentError
71
- # ruby-git throws an argument error if path isnt for a valid git repo.
72
- fatal "Erm? Can't do that since we're not in a valid git repository!"
67
+ def self.die_if_not_vcs_repo!
68
+ debug 'Checking for valid vcs repo'
69
+ current = File.expand_path('.')
70
+ parent = File.dirname(current)
71
+ while current != parent
72
+ return if VCSInfo.repo_root?(current)
73
+ current = parent
74
+ parent = File.dirname(current)
75
+ end
76
+ fatal 'Unknown VCS'
73
77
  exit 1
74
78
  end
75
79
  end
@@ -15,7 +15,7 @@ module Lolcommits
15
15
  # Runs the history timeline animator task thingy
16
16
  # param args [String] the arg passed to the gif command on CLI (optional)
17
17
  def run(args = nil)
18
- Fatals.die_if_not_git_repo!
18
+ Fatals.die_if_not_vcs_repo!
19
19
 
20
20
  case args
21
21
  when 'today'
@@ -23,7 +23,12 @@ module Lolcommits
23
23
 
24
24
  def loldir
25
25
  return @loldir if @loldir
26
- basename ||= File.basename(Git.open('.').dir.to_s).sub(/^\./, 'dot')
26
+ basename ||= if VCSInfo.repo_root?
27
+ VCSInfo.local_name
28
+ else
29
+ File.basename(Dir.getwd)
30
+ end
31
+ basename.sub!(/^\./, 'dot')
27
32
  basename.sub!(/ /, '-')
28
33
  @loldir = Configuration.loldir_for(basename)
29
34
  end
@@ -4,48 +4,25 @@ module Lolcommits
4
4
  # Methods to handle enabling and disabling of lolcommits
5
5
  #
6
6
  class Installation
7
- HOOK_PATH = File.join '.git', 'hooks', 'post-commit'
8
- HOOK_DIR = File.join '.git', 'hooks'
7
+ def self.backend
8
+ if GitInfo.repo_root?
9
+ InstallationGit
10
+ elsif MercurialInfo.repo_root?
11
+ InstallationMercurial
12
+ else
13
+ fatal "You don't appear to be in the base directory of a supported vcs project."
14
+ exit 1
15
+ end
16
+ end
9
17
 
10
18
  #
11
19
  # IF --ENABLE, DO ENABLE
12
20
  #
13
21
  def self.do_enable
14
- unless File.directory?('.git')
15
- fatal "You don't appear to be in the base directory of a git project."
16
- exit 1
17
- end
18
-
19
- # its possible a hooks dir doesnt exist, so create it if so
20
- Dir.mkdir(HOOK_DIR) unless File.directory?(HOOK_DIR)
21
-
22
- # should add a shebang (or not) adding will rewrite hook file
23
- add_shebang = false
24
- if hook_file_exists?
25
- # clear away any existing lolcommits hook
26
- remove_existing_hook! if lolcommits_hook_exists?
27
-
28
- # if file is empty we should add a shebang (and rewrite hook)
29
- if File.read(HOOK_PATH).strip.empty?
30
- add_shebang = true
31
- elsif !good_shebang?
32
- # look for good shebang in existing hook, abort if none found
33
- warn "the existing hook (at #{HOOK_PATH}) doesn't start with a good shebang; like #!/bin/sh"
34
- exit 1
35
- end
36
- else
37
- add_shebang = true
38
- end
39
-
40
- File.open(HOOK_PATH, add_shebang ? 'w' : 'a') do |f|
41
- f.write("#!/bin/sh\n") if add_shebang
42
- f.write(hook_script)
43
- end
44
-
45
- FileUtils.chmod 0755, HOOK_PATH
22
+ path = backend.do_enable
46
23
 
47
24
  info 'installed lolcommit hook to:'
48
- info " -> #{File.expand_path(HOOK_PATH)}"
25
+ info " -> #{File.expand_path(path)}"
49
26
  info '(to remove later, you can use: lolcommits --disable)'
50
27
  # we dont symlink, but rather install a small stub that calls the one from path
51
28
  # that way, as gem version changes, script updates even if new file thus breaking symlink
@@ -55,72 +32,7 @@ module Lolcommits
55
32
  # IF --DISABLE, DO DISABLE
56
33
  #
57
34
  def self.do_disable
58
- if lolcommits_hook_exists?
59
- remove_existing_hook!
60
- info "uninstalled lolcommits hook (from #{HOOK_PATH})"
61
- elsif File.exist?(HOOK_PATH)
62
- info "couldn't find an lolcommits hook (at #{HOOK_PATH})"
63
- if File.read(HOOK_PATH) =~ /lolcommit/
64
- info "warning: an older-style lolcommit hook may still exist, edit #{HOOK_PATH} to remove it manually"
65
- end
66
- else
67
- info "no post commit hook found (at #{HOOK_PATH}), so there is nothing to uninstall"
68
- end
69
- end
70
-
71
- def self.hook_script
72
- ruby_path = Lolcommits::Platform.command_which('ruby', true)
73
- imagick_path = Lolcommits::Platform.command_which('identify', true)
74
-
75
- if Lolcommits::Platform.platform_windows?
76
- hook_export = "set path \"#{ruby_path};#{imagick_path};%PATH%\"\n"
77
- else
78
- locale_export = "export LANG=\"#{ENV['LANG']}\"\n"
79
- hook_export = "export PATH=\"#{ruby_path}:#{imagick_path}:$PATH\"\n"
80
- end
81
-
82
- capture_cmd = 'lolcommits --capture'
83
- capture_args = " #{ARGV[1..-1].join(' ')}" if ARGV.length > 1
84
-
85
- <<-EOS
86
- ### lolcommits hook (begin) ###
87
- if [ ! -d "$GIT_DIR/rebase-merge" ]; then
88
- #{locale_export}#{hook_export}#{capture_cmd}#{capture_args}
89
- fi
90
- ### lolcommits hook (end) ###
91
- EOS
92
- end
93
-
94
- # does a git hook exist at all?
95
- def self.hook_file_exists?
96
- File.exist?(HOOK_PATH)
97
- end
98
-
99
- # does a git hook exist with lolcommits commands?
100
- def self.lolcommits_hook_exists?
101
- hook_file_exists? &&
102
- File.read(HOOK_PATH).to_s =~ /lolcommits.*\(begin\)(.*\n)*.*lolcommits.*\(end\)/
103
- end
104
-
105
- # does the git hook file have a good shebang?
106
- def self.good_shebang?
107
- File.read(HOOK_PATH).lines.first =~ %r{^\#\!\/bin\/.*sh}
108
- end
109
-
110
- def self.remove_existing_hook!
111
- hook = File.read(HOOK_PATH)
112
- out = File.open(HOOK_PATH, 'w')
113
- skip = false
114
-
115
- hook.lines.each do |line|
116
- skip = true if !skip && (line =~ /lolcommits.*\(begin\)/)
117
-
118
- out << line unless skip
119
-
120
- skip = false if skip && (line =~ /lolcommits.*\(end\)/)
121
- end
122
-
123
- out.close
35
+ backend.do_disable
124
36
  end
125
37
  end
126
38
  end
@@ -27,7 +27,7 @@ module Lolcommits
27
27
  end
28
28
 
29
29
  def message
30
- "commited some #{random_adjective} #{random_object} to #{runner.git_info.repo}@#{runner.sha} (#{runner.git_info.branch}) "
30
+ "commited some #{random_adjective} #{random_object} to #{runner.vcs_info.repo}@#{runner.sha} (#{runner.vcs_info.branch}) "
31
31
  end
32
32
 
33
33
  def random_object
@@ -52,7 +52,7 @@ module Lolcommits
52
52
  :token => configuration['access_token'],
53
53
  :filetype => 'jpg',
54
54
  :filename => runner.sha,
55
- :title => runner.message + "[#{runner.git_info.repo}]",
55
+ :title => runner.message + "[#{runner.vcs_info.repo}]",
56
56
  :channels => configuration['channels'])
57
57
 
58
58
  debug response
@@ -40,8 +40,8 @@ module Lolcommits
40
40
  def upload(file, sha)
41
41
  RestClient.post(configuration['server'] + '/uplol',
42
42
  :lol => File.new(file),
43
- :url => runner.git_info.url + sha,
44
- :repo => runner.git_info.repo,
43
+ :url => runner.vcs_info.url + sha,
44
+ :repo => runner.vcs_info.repo,
45
45
  :date => File.ctime(file),
46
46
  :sha => sha)
47
47
  rescue => e
@@ -21,7 +21,7 @@ module Lolcommits
21
21
  def run_postcapture
22
22
  return unless valid_configuration?
23
23
 
24
- if runner.git_info.repo.empty?
24
+ if runner.vcs_info.repo.empty?
25
25
  puts 'Repo is empty, skipping upload'
26
26
  else
27
27
  debug "Posting capture to #{configuration['endpoint']}"
@@ -29,9 +29,9 @@ module Lolcommits
29
29
  {
30
30
  :file => File.new(runner.main_image),
31
31
  :message => runner.message,
32
- :repo => runner.git_info.repo,
33
- :author_name => runner.git_info.author_name,
34
- :author_email => runner.git_info.author_email,
32
+ :repo => runner.vcs_info.repo,
33
+ :author_name => runner.vcs_info.author_name,
34
+ :author_email => runner.vcs_info.author_email,
35
35
  :sha => runner.sha,
36
36
  :key => configuration['optional_key']
37
37
  },
@@ -4,7 +4,7 @@ require 'lolcommits/platform'
4
4
  module Lolcommits
5
5
  class Runner
6
6
  attr_accessor :capture_delay, :capture_stealth, :capture_device, :message,
7
- :sha, :snapshot_loc, :main_image, :config, :git_info,
7
+ :sha, :snapshot_loc, :main_image, :config, :vcs_info,
8
8
  :capture_animate
9
9
 
10
10
  include Methadone::CLILogging
@@ -15,9 +15,16 @@ module Lolcommits
15
15
  end
16
16
 
17
17
  return unless sha.nil? || message.nil?
18
- self.git_info = GitInfo.new
19
- self.sha = git_info.sha if sha.nil?
20
- self.message = git_info.message if message.nil?
18
+ if GitInfo.repo_root?
19
+ self.vcs_info = GitInfo.new
20
+ elsif MercurialInfo.repo_root?
21
+ self.vcs_info = MercurialInfo.new
22
+ else
23
+ raise('Unknown VCS')
24
+ end
25
+
26
+ self.sha = vcs_info.sha if sha.nil?
27
+ self.message = vcs_info.message if message.nil?
21
28
  end
22
29
 
23
30
  # wrap run to handle things that should happen before and after
@@ -0,0 +1,63 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module Lolcommits
3
+ # base class ala plugin.rb
4
+ class VCSInfo
5
+ include Methadone::CLILogging
6
+ attr_accessor :sha, :message, :repo_internal_path, :repo, :url,
7
+ :author_name, :author_email, :branch
8
+
9
+ def self.repo_root?(path = '.')
10
+ GitInfo.repo_root?(path) || MercurialInfo.repo_root?(path)
11
+ end
12
+
13
+ def self.base_message(method)
14
+ raise NotImplementedError, "#{self.class.name} is a base class; implement '#{method}' in a subclass", caller
15
+ end
16
+
17
+ def self.local_name(path = '.')
18
+ if GitInfo.repo_root?(path)
19
+ GitInfo.local_name(path)
20
+ elsif MercurialInfo.repo_root?(path)
21
+ MercurialInfo.local_name(path)
22
+ else
23
+ raise "'#{File.expand_path(path)}' is not the root of a supported VCS"
24
+ end
25
+ end
26
+
27
+ def initialize
28
+ base_message(__method__)
29
+ end
30
+
31
+ def branch
32
+ base_message(__method__)
33
+ end
34
+
35
+ def message
36
+ base_message(__method__)
37
+ end
38
+
39
+ def sha
40
+ base_message(__method__)
41
+ end
42
+
43
+ def repo_internal_path
44
+ base_message(__method__)
45
+ end
46
+
47
+ def url
48
+ base_message(__method__)
49
+ end
50
+
51
+ def repo
52
+ base_message(__method__)
53
+ end
54
+
55
+ def author_name
56
+ base_message(__method__)
57
+ end
58
+
59
+ def author_email
60
+ base_message(__method__)
61
+ end
62
+ end
63
+ end
@@ -1,4 +1,4 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module Lolcommits
3
- VERSION = '0.6.4'.freeze
3
+ VERSION = '0.6.5'.freeze
4
4
  end
data/lolcommits.gemspec CHANGED
@@ -42,6 +42,7 @@ Gem::Specification.new do |s|
42
42
  s.add_runtime_dependency('launchy', '~> 2.4.3')
43
43
  s.add_runtime_dependency('methadone', '~> 1.8.0')
44
44
  s.add_runtime_dependency('open4', '~> 1.3.4')
45
+ s.add_runtime_dependency('mercurial-ruby', '~> 0')
45
46
 
46
47
  # plugin gems
47
48
  s.add_runtime_dependency('twitter', '~> 5.13.0') # twitter
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lolcommits
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.4
4
+ version: 0.6.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Rothenberg
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-03-15 00:00:00.000000000 Z
12
+ date: 2016-04-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
@@ -179,6 +179,20 @@ dependencies:
179
179
  - - ~>
180
180
  - !ruby/object:Gem::Version
181
181
  version: 1.3.4
182
+ - !ruby/object:Gem::Dependency
183
+ name: mercurial-ruby
184
+ requirement: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - ~>
187
+ - !ruby/object:Gem::Version
188
+ version: '0'
189
+ type: :runtime
190
+ prerelease: false
191
+ version_requirements: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - ~>
194
+ - !ruby/object:Gem::Version
195
+ version: '0'
182
196
  - !ruby/object:Gem::Dependency
183
197
  name: twitter
184
198
  requirement: !ruby/object:Gem::Requirement
@@ -423,8 +437,15 @@ files:
423
437
  - features/support/env.rb
424
438
  - features/support/path_helpers.rb
425
439
  - lib/core_ext/class.rb
440
+ - lib/core_ext/mercurial-ruby/command.rb
441
+ - lib/core_ext/mercurial-ruby/shell.rb
426
442
  - lib/core_ext/mini_magick/utilities.rb
443
+ - lib/core_ext/string.rb
427
444
  - lib/lolcommits.rb
445
+ - lib/lolcommits/backends/git_info.rb
446
+ - lib/lolcommits/backends/installation_git.rb
447
+ - lib/lolcommits/backends/installation_mercurial.rb
448
+ - lib/lolcommits/backends/mercurial_info.rb
428
449
  - lib/lolcommits/capturer.rb
429
450
  - lib/lolcommits/capturer/capture_cygwin.rb
430
451
  - lib/lolcommits/capturer/capture_fake.rb
@@ -438,7 +459,6 @@ files:
438
459
  - lib/lolcommits/cli/process_runner.rb
439
460
  - lib/lolcommits/cli/timelapse_gif.rb
440
461
  - lib/lolcommits/configuration.rb
441
- - lib/lolcommits/git_info.rb
442
462
  - lib/lolcommits/installation.rb
443
463
  - lib/lolcommits/platform.rb
444
464
  - lib/lolcommits/plugin.rb
@@ -453,6 +473,7 @@ files:
453
473
  - lib/lolcommits/plugins/tranzlate.rb
454
474
  - lib/lolcommits/plugins/uploldz.rb
455
475
  - lib/lolcommits/runner.rb
476
+ - lib/lolcommits/vcs_info.rb
456
477
  - lib/lolcommits/version.rb
457
478
  - lolcommits.gemspec
458
479
  - test/images/test_image.jpg