gitdocs 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +6 -14
- data/.codeclimate.yml +26 -0
- data/.rubocop.yml +8 -2
- data/.travis.yml +8 -0
- data/CHANGELOG +13 -0
- data/Gemfile +1 -1
- data/README.md +7 -6
- data/Rakefile +31 -5
- data/bin/gitdocs +1 -0
- data/config.ru +6 -4
- data/gitdocs.gemspec +22 -19
- data/lib/gitdocs.rb +54 -16
- data/lib/gitdocs/browser_app.rb +34 -41
- data/lib/gitdocs/cli.rb +41 -32
- data/lib/gitdocs/configuration.rb +40 -101
- data/lib/gitdocs/git_notifier.rb +111 -0
- data/lib/gitdocs/initializer.rb +83 -0
- data/lib/gitdocs/manager.rb +90 -60
- data/lib/gitdocs/migration/004_add_index_for_path.rb +1 -1
- data/lib/gitdocs/notifier.rb +70 -104
- data/lib/gitdocs/rendering_helper.rb +3 -0
- data/lib/gitdocs/repository.rb +324 -307
- data/lib/gitdocs/repository/committer.rb +77 -0
- data/lib/gitdocs/repository/path.rb +157 -140
- data/lib/gitdocs/search.rb +40 -25
- data/lib/gitdocs/settings_app.rb +5 -3
- data/lib/gitdocs/share.rb +64 -0
- data/lib/gitdocs/synchronizer.rb +40 -0
- data/lib/gitdocs/version.rb +1 -1
- data/lib/gitdocs/views/_header.haml +2 -2
- data/lib/gitdocs/views/dir.haml +3 -3
- data/lib/gitdocs/views/edit.haml +1 -1
- data/lib/gitdocs/views/file.haml +1 -1
- data/lib/gitdocs/views/home.haml +3 -3
- data/lib/gitdocs/views/layout.haml +13 -13
- data/lib/gitdocs/views/revisions.haml +3 -3
- data/lib/gitdocs/views/search.haml +1 -1
- data/lib/gitdocs/views/settings.haml +6 -6
- data/test/integration/cli/full_sync_test.rb +83 -0
- data/test/integration/cli/share_management_test.rb +29 -0
- data/test/integration/cli/status_test.rb +14 -0
- data/test/integration/test_helper.rb +185 -151
- data/test/integration/{browse_test.rb → web/browse_test.rb} +11 -29
- data/test/integration/web/share_management_test.rb +46 -0
- data/test/support/git_factory.rb +276 -0
- data/test/unit/browser_app_test.rb +346 -0
- data/test/unit/configuration_test.rb +8 -70
- data/test/unit/git_notifier_test.rb +116 -0
- data/test/unit/gitdocs_test.rb +90 -0
- data/test/unit/manager_test.rb +36 -0
- data/test/unit/notifier_test.rb +60 -124
- data/test/unit/repository_committer_test.rb +111 -0
- data/test/unit/repository_path_test.rb +92 -76
- data/test/unit/repository_test.rb +243 -356
- data/test/unit/search_test.rb +15 -0
- data/test/unit/settings_app_test.rb +80 -0
- data/test/unit/share_test.rb +97 -0
- data/test/unit/test_helper.rb +17 -3
- metadata +114 -108
- data/lib/gitdocs/runner.rb +0 -108
- data/lib/gitdocs/server.rb +0 -62
- data/test/integration/full_sync_test.rb +0 -66
- data/test/integration/share_management_test.rb +0 -95
- data/test/integration/status_test.rb +0 -21
- data/test/unit/runner_test.rb +0 -122
@@ -0,0 +1,111 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require File.expand_path('../test_helper', __FILE__)
|
3
|
+
|
4
|
+
describe Gitdocs::Repository::Committer do
|
5
|
+
before do
|
6
|
+
FileUtils.rm_rf('tmp/unit')
|
7
|
+
GitFactory.init(:local)
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:root_dirname) { GitFactory.expand_path(:local) }
|
11
|
+
let(:committer) { Gitdocs::Repository::Committer.new(root_dirname) }
|
12
|
+
|
13
|
+
describe 'initialize' do
|
14
|
+
subject { committer }
|
15
|
+
|
16
|
+
describe 'when directory missing' do
|
17
|
+
let(:root_dirname) { GitFactory.expand_path(:missing) }
|
18
|
+
it { assert_raises(Gitdocs::Repository::InvalidError) { subject } }
|
19
|
+
end
|
20
|
+
|
21
|
+
describe 'when not a repository' do
|
22
|
+
let(:root_dirname) { GitFactory.expand_path(:not_a_repo) }
|
23
|
+
before { FileUtils.mkdir_p(root_dirname) }
|
24
|
+
it { assert_raises(Gitdocs::Repository::InvalidError) { subject } }
|
25
|
+
end
|
26
|
+
|
27
|
+
describe 'when valid repository' do
|
28
|
+
it { subject.must_be_kind_of Gitdocs::Repository::Committer }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '#commit' do
|
33
|
+
subject { committer.commit }
|
34
|
+
|
35
|
+
before { Gitdocs.stubs(:log_debug) }
|
36
|
+
|
37
|
+
# TODO: should test the paths which use the message file
|
38
|
+
|
39
|
+
describe 'no previous commits' do
|
40
|
+
describe 'nothing to commit' do
|
41
|
+
it { subject.must_equal false }
|
42
|
+
end
|
43
|
+
|
44
|
+
describe 'changes to commit' do
|
45
|
+
before do
|
46
|
+
GitFactory.write(:local, 'file1', 'foobar')
|
47
|
+
GitFactory.mkdir(:local, 'directory')
|
48
|
+
end
|
49
|
+
it { subject.must_equal true }
|
50
|
+
|
51
|
+
describe 'side effects' do
|
52
|
+
before { subject }
|
53
|
+
it { GitInspector.file_exist?(:local, 'directory/.gitignore').must_equal true }
|
54
|
+
it { GitInspector.commit_count(:local).must_equal 1 }
|
55
|
+
it { GitInspector.last_message(:local).must_equal "Auto-commit from gitdocs\n" }
|
56
|
+
it { GitInspector.clean?(:local).must_equal true }
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe 'previous commits' do
|
62
|
+
before do
|
63
|
+
GitFactory.commit(:local, 'file1', 'foobar')
|
64
|
+
GitFactory.commit(:local, 'file2', 'deadbeef')
|
65
|
+
end
|
66
|
+
|
67
|
+
describe 'nothing to commit' do
|
68
|
+
it { subject.must_equal false }
|
69
|
+
end
|
70
|
+
|
71
|
+
describe 'changes to commit' do
|
72
|
+
before do
|
73
|
+
GitFactory.write(:local, 'file1', 'foobar')
|
74
|
+
GitFactory.rm(:local, 'file2')
|
75
|
+
GitFactory.write(:local, 'file3', 'foobar')
|
76
|
+
GitFactory.mkdir(:local, 'directory')
|
77
|
+
end
|
78
|
+
it { subject.must_equal true }
|
79
|
+
|
80
|
+
describe 'side effects' do
|
81
|
+
before { subject }
|
82
|
+
it { GitInspector.file_exist?(:local, 'directory/.gitignore').must_equal true }
|
83
|
+
it { GitInspector.commit_count(:local).must_equal 3 }
|
84
|
+
it { GitInspector.last_message(:local).must_equal "Auto-commit from gitdocs\n" }
|
85
|
+
it { GitInspector.clean?(:local).must_equal true }
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe '#write_commit_message' do
|
92
|
+
subject { committer.write_commit_message(commit_message) }
|
93
|
+
|
94
|
+
before { subject }
|
95
|
+
|
96
|
+
describe 'with no message' do
|
97
|
+
let(:commit_message) { nil }
|
98
|
+
it { GitInspector.file_exist?(:local, '.gitmessage~').must_equal(false) }
|
99
|
+
end
|
100
|
+
|
101
|
+
describe 'with empty message' do
|
102
|
+
let(:commit_message) { '' }
|
103
|
+
it { GitInspector.file_exist?(:local, '.gitmessage~').must_equal(false) }
|
104
|
+
end
|
105
|
+
|
106
|
+
describe 'with message' do
|
107
|
+
let(:commit_message) { 'foobar' }
|
108
|
+
it { GitInspector.file_content(:local, '.gitmessage~').must_equal('foobar') }
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
@@ -2,46 +2,63 @@
|
|
2
2
|
require File.expand_path('../test_helper', __FILE__)
|
3
3
|
|
4
4
|
describe Gitdocs::Repository::Path do
|
5
|
-
let(:path) { Gitdocs::Repository::Path.new(repository, relative_path) }
|
6
|
-
let(:repository) { stub(root:
|
7
|
-
let(:local_repo_path) { 'tmp/unit/local' }
|
8
|
-
|
5
|
+
let(:path) { Gitdocs::Repository::Path.new(repository, "/#{relative_path}") }
|
6
|
+
let(:repository) { stub(root: GitFactory.expand_path(:local)) }
|
9
7
|
let(:relative_path) { 'directory/file' }
|
10
8
|
|
11
9
|
before do
|
12
10
|
FileUtils.rm_rf('tmp/unit')
|
11
|
+
GitFactory.init(:local)
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#relative_dirname' do
|
15
|
+
subject { path.relative_dirname }
|
16
|
+
|
17
|
+
describe 'root' do
|
18
|
+
let(:relative_path) { '' }
|
19
|
+
it { subject.must_equal('') }
|
20
|
+
end
|
21
|
+
|
22
|
+
describe 'root filename' do
|
23
|
+
let(:relative_path) { 'directory' }
|
24
|
+
it { subject.must_equal('') }
|
25
|
+
end
|
26
|
+
|
27
|
+
describe 'non-root filename' do
|
28
|
+
let(:relative_path) { 'directory1/directory2/file' }
|
29
|
+
it { subject.must_equal('directory1/directory2') }
|
30
|
+
end
|
13
31
|
end
|
14
32
|
|
15
33
|
describe '#join' do
|
16
34
|
subject { path.join('new_file') }
|
17
35
|
before { subject }
|
18
|
-
it { path.relative_path.must_equal('
|
19
|
-
it { path.absolute_path.must_equal(
|
36
|
+
it { path.relative_path.must_equal(File.join(relative_path, 'new_file')) }
|
37
|
+
it { path.absolute_path.must_equal(GitFactory.expand_path(:local, relative_path, 'new_file')) }
|
20
38
|
end
|
21
39
|
|
22
40
|
describe '#write' do
|
23
|
-
subject { path.write('foobar'
|
24
|
-
before { repository.expects(:write_commit_message).with(:message) }
|
41
|
+
subject { path.write('foobar') }
|
25
42
|
|
26
43
|
describe 'directory missing' do
|
27
44
|
before { subject }
|
28
|
-
it {
|
45
|
+
it { GitInspector.file_content(:local, relative_path).must_equal "foobar\n" }
|
29
46
|
end
|
30
47
|
|
31
48
|
describe 'directory exists' do
|
32
49
|
before do
|
33
|
-
mkdir(
|
50
|
+
mkdir(File.dirname(relative_path))
|
34
51
|
subject
|
35
52
|
end
|
36
|
-
it {
|
53
|
+
it { GitInspector.file_content(:local, relative_path).must_equal "foobar\n" }
|
37
54
|
end
|
38
55
|
|
39
56
|
describe 'file exists' do
|
40
57
|
before do
|
41
|
-
write(
|
58
|
+
write(relative_path, 'deadbeef')
|
42
59
|
subject
|
43
60
|
end
|
44
|
-
it {
|
61
|
+
it { GitInspector.file_content(:local, relative_path).must_equal "foobar\n" }
|
45
62
|
end
|
46
63
|
end
|
47
64
|
|
@@ -50,23 +67,23 @@ describe Gitdocs::Repository::Path do
|
|
50
67
|
|
51
68
|
describe 'when directory does not exist' do
|
52
69
|
before { subject }
|
53
|
-
it {
|
70
|
+
it { GitInspector.file_content(:local, relative_path).must_equal '' }
|
54
71
|
end
|
55
72
|
|
56
73
|
describe 'when directory already exists' do
|
57
74
|
before do
|
58
|
-
mkdir(
|
75
|
+
mkdir(File.dirname(relative_path))
|
59
76
|
subject
|
60
77
|
end
|
61
|
-
it {
|
78
|
+
it { GitInspector.file_content(:local, relative_path).must_equal '' }
|
62
79
|
end
|
63
80
|
|
64
81
|
describe 'when file already exists' do
|
65
82
|
before do
|
66
|
-
write(
|
83
|
+
write(relative_path, 'test')
|
67
84
|
subject
|
68
85
|
end
|
69
|
-
it {
|
86
|
+
it { GitInspector.file_content(:local, relative_path).must_equal 'test' }
|
70
87
|
end
|
71
88
|
end
|
72
89
|
|
@@ -75,23 +92,35 @@ describe Gitdocs::Repository::Path do
|
|
75
92
|
|
76
93
|
describe 'directory does not exist' do
|
77
94
|
before { subject }
|
78
|
-
it { File.directory?(
|
95
|
+
it { File.directory?(GitFactory.expand_path(:local, relative_path)) }
|
79
96
|
end
|
80
97
|
|
81
98
|
describe 'directory does exist' do
|
82
99
|
before do
|
83
|
-
mkdir(
|
100
|
+
mkdir(relative_path)
|
84
101
|
subject
|
85
102
|
end
|
86
|
-
it { File.directory?(
|
103
|
+
it { File.directory?(GitFactory.expand_path(:local, relative_path)) }
|
87
104
|
end
|
88
105
|
|
89
106
|
describe 'already exists as a file' do
|
90
|
-
before { write(
|
107
|
+
before { write(relative_path, 'foobar') }
|
91
108
|
it { assert_raises(Errno::EEXIST) { subject } }
|
92
109
|
end
|
93
110
|
end
|
94
111
|
|
112
|
+
describe '#mv' do
|
113
|
+
subject { path.mv(source_filename) }
|
114
|
+
let(:source_filename) { File.join(GitFactory.working_directory, 'move_me') }
|
115
|
+
before do
|
116
|
+
FileUtils.mkdir_p(File.dirname(source_filename))
|
117
|
+
File.write(source_filename, 'foobar')
|
118
|
+
|
119
|
+
subject
|
120
|
+
end
|
121
|
+
it { GitInspector.file_content(:local, relative_path).must_equal('foobar') }
|
122
|
+
end
|
123
|
+
|
95
124
|
describe '#remove' do
|
96
125
|
subject { path.remove }
|
97
126
|
|
@@ -100,16 +129,16 @@ describe Gitdocs::Repository::Path do
|
|
100
129
|
end
|
101
130
|
|
102
131
|
describe 'directory' do
|
103
|
-
before { mkdir(
|
132
|
+
before { mkdir(relative_path) }
|
104
133
|
it { subject.must_be_nil }
|
105
134
|
end
|
106
135
|
|
107
136
|
describe 'file' do
|
108
137
|
before do
|
109
|
-
write(
|
138
|
+
write(relative_path, 'foobar')
|
110
139
|
subject
|
111
140
|
end
|
112
|
-
it {
|
141
|
+
it { GitInspector.file_exist?(:local, relative_path).must_equal false }
|
113
142
|
end
|
114
143
|
end
|
115
144
|
|
@@ -121,22 +150,22 @@ describe Gitdocs::Repository::Path do
|
|
121
150
|
end
|
122
151
|
|
123
152
|
describe 'directory' do
|
124
|
-
before { mkdir(
|
153
|
+
before { mkdir(relative_path) }
|
125
154
|
it { subject.must_equal false }
|
126
155
|
end
|
127
156
|
|
128
157
|
describe 'not a text file' do
|
129
|
-
let(:relative_path) { '
|
158
|
+
let(:relative_path) { 'file.png' }
|
130
159
|
it { subject.must_equal false }
|
131
160
|
end
|
132
161
|
|
133
162
|
describe 'empty file' do
|
134
|
-
before { write(
|
163
|
+
before { write(relative_path, '') }
|
135
164
|
it { subject.must_equal true }
|
136
165
|
end
|
137
166
|
|
138
167
|
describe 'text file' do
|
139
|
-
before { write(
|
168
|
+
before { write(relative_path, 'foobar') }
|
140
169
|
it { subject.must_equal true }
|
141
170
|
end
|
142
171
|
end
|
@@ -148,27 +177,27 @@ describe Gitdocs::Repository::Path do
|
|
148
177
|
end
|
149
178
|
|
150
179
|
describe 'when missing' do
|
151
|
-
let(:commit)
|
180
|
+
let(:commit) { nil }
|
152
181
|
it { assert_raises(RuntimeError) { subject } }
|
153
182
|
end
|
154
183
|
|
155
|
-
describe 'on a 'do
|
184
|
+
describe 'on a ' do
|
156
185
|
let(:commit) { stub(author: { name: :name, time: :time }) }
|
157
186
|
before do
|
158
|
-
write(
|
159
|
-
write(
|
160
|
-
write(
|
187
|
+
write(File.join(%w(directory0 file0)), '')
|
188
|
+
write(File.join(%w(directory file1)), 'foo')
|
189
|
+
write(File.join(%w(directory file2)), 'bar')
|
161
190
|
end
|
162
191
|
|
163
192
|
describe 'file size 0' do
|
164
|
-
let(:relative_path) {
|
193
|
+
let(:relative_path) { File.join(%w(directory0 file0)) }
|
165
194
|
it { subject[:author].must_equal :name }
|
166
195
|
it { subject[:size].must_equal(-1) }
|
167
196
|
it { subject[:modified].must_equal :time }
|
168
197
|
end
|
169
198
|
|
170
199
|
describe 'file non-zero size' do
|
171
|
-
let(:relative_path) {
|
200
|
+
let(:relative_path) { File.join(%w(directory file1)) }
|
172
201
|
it { subject[:author].must_equal :name }
|
173
202
|
it { subject[:size].must_equal(3) }
|
174
203
|
it { subject[:modified].must_equal :time }
|
@@ -198,12 +227,12 @@ describe Gitdocs::Repository::Path do
|
|
198
227
|
end
|
199
228
|
|
200
229
|
describe 'directory' do
|
201
|
-
before { mkdir(
|
230
|
+
before { mkdir(relative_path) }
|
202
231
|
it { subject.must_equal true }
|
203
232
|
end
|
204
233
|
|
205
234
|
describe 'file' do
|
206
|
-
before { write(
|
235
|
+
before { write(relative_path, 'foobar') }
|
207
236
|
it { subject.must_equal true }
|
208
237
|
end
|
209
238
|
end
|
@@ -216,12 +245,12 @@ describe Gitdocs::Repository::Path do
|
|
216
245
|
end
|
217
246
|
|
218
247
|
describe 'directory' do
|
219
|
-
before { mkdir(
|
248
|
+
before { mkdir(relative_path) }
|
220
249
|
it { subject.must_equal true }
|
221
250
|
end
|
222
251
|
|
223
252
|
describe 'file' do
|
224
|
-
before { write(
|
253
|
+
before { write(relative_path, 'foobar') }
|
225
254
|
it { subject.must_equal false }
|
226
255
|
end
|
227
256
|
end
|
@@ -231,7 +260,7 @@ describe Gitdocs::Repository::Path do
|
|
231
260
|
|
232
261
|
describe 'no revision' do
|
233
262
|
let(:ref) { nil }
|
234
|
-
it { subject.must_equal
|
263
|
+
it { subject.must_equal GitFactory.expand_path(:local, relative_path) }
|
235
264
|
end
|
236
265
|
|
237
266
|
describe 'with revision' do
|
@@ -258,13 +287,13 @@ describe Gitdocs::Repository::Path do
|
|
258
287
|
end
|
259
288
|
|
260
289
|
describe 'no README' do
|
261
|
-
before { mkdir(
|
290
|
+
before { mkdir(relative_path) }
|
262
291
|
it { subject.must_be_nil }
|
263
292
|
end
|
264
293
|
|
265
294
|
describe 'with README.md' do
|
266
|
-
before { write('
|
267
|
-
it { subject.must_equal
|
295
|
+
before { write(File.join(relative_path, 'README.md'), 'foobar') }
|
296
|
+
it { subject.must_equal GitFactory.expand_path(:local, relative_path, 'README.md') }
|
268
297
|
end
|
269
298
|
end
|
270
299
|
|
@@ -276,21 +305,20 @@ describe Gitdocs::Repository::Path do
|
|
276
305
|
end
|
277
306
|
|
278
307
|
describe 'file' do
|
279
|
-
before { write(
|
308
|
+
before { write(relative_path, 'foobar') }
|
280
309
|
it { subject.must_be_nil }
|
281
310
|
end
|
282
311
|
|
283
312
|
describe 'directory' do
|
284
313
|
before do
|
285
|
-
write('
|
286
|
-
mkdir('
|
287
|
-
write('
|
288
|
-
write('
|
314
|
+
write(File.join(relative_path, '.hidden'), 'beef')
|
315
|
+
mkdir(File.join(relative_path, 'dir1'))
|
316
|
+
write(File.join(relative_path, 'file1'), 'foo')
|
317
|
+
write(File.join(relative_path, 'file2'), 'bar')
|
289
318
|
|
290
319
|
# Paths which should not be included
|
291
|
-
write('
|
292
|
-
write('
|
293
|
-
write('directory/file/.gitmessage~', 'test')
|
320
|
+
write(File.join(relative_path, '.gitignore'), 'test')
|
321
|
+
write(File.join(relative_path, '.gitmessage~'), 'test')
|
294
322
|
end
|
295
323
|
|
296
324
|
it { subject.size.must_equal 4 }
|
@@ -307,12 +335,12 @@ describe Gitdocs::Repository::Path do
|
|
307
335
|
end
|
308
336
|
|
309
337
|
describe 'directory' do
|
310
|
-
before { mkdir(
|
338
|
+
before { mkdir(relative_path) }
|
311
339
|
it { subject.must_be_nil }
|
312
340
|
end
|
313
341
|
|
314
342
|
describe 'file' do
|
315
|
-
before { write(
|
343
|
+
before { write(relative_path, 'foobar') }
|
316
344
|
it { subject.must_equal 'foobar' }
|
317
345
|
end
|
318
346
|
end
|
@@ -321,10 +349,12 @@ describe Gitdocs::Repository::Path do
|
|
321
349
|
subject { path.revisions }
|
322
350
|
|
323
351
|
before do
|
324
|
-
repository.stubs(:commits_for).returns(
|
325
|
-
|
326
|
-
|
327
|
-
|
352
|
+
repository.stubs(:commits_for).returns(
|
353
|
+
[
|
354
|
+
stub(oid: '1234567890', message: "short1\nlong", author: { name: :name1, time: :time1 }),
|
355
|
+
stub(oid: '0987654321', message: "short2\nlong", author: { name: :name2, time: :time2 })
|
356
|
+
]
|
357
|
+
)
|
328
358
|
end
|
329
359
|
it { subject.size.must_equal(2) }
|
330
360
|
it { subject[0].must_equal(commit: '1234567', subject: 'short1', author: :name1, date: :time1) }
|
@@ -342,7 +372,7 @@ describe Gitdocs::Repository::Path do
|
|
342
372
|
|
343
373
|
describe 'blob present' do
|
344
374
|
let(:blob) { stub(text: 'deadbeef') }
|
345
|
-
before { path.expects(:write).with('deadbeef'
|
375
|
+
before { path.expects(:write).with('deadbeef') }
|
346
376
|
it { subject }
|
347
377
|
end
|
348
378
|
end
|
@@ -352,24 +382,10 @@ describe Gitdocs::Repository::Path do
|
|
352
382
|
private
|
353
383
|
|
354
384
|
def write(filename, content)
|
355
|
-
|
356
|
-
File.write(File.join(local_repo_path, filename), content)
|
357
|
-
end
|
358
|
-
|
359
|
-
def mkdir(*path)
|
360
|
-
FileUtils.mkdir_p(File.join(local_repo_path, *path))
|
361
|
-
end
|
362
|
-
|
363
|
-
def local_file_exist?
|
364
|
-
File.exist?(File.join(local_repo_path, relative_path))
|
365
|
-
end
|
366
|
-
|
367
|
-
def local_file_content
|
368
|
-
return nil unless local_file_exist?
|
369
|
-
File.read(File.join(local_repo_path, relative_path))
|
385
|
+
GitFactory.write(:local, filename, content)
|
370
386
|
end
|
371
387
|
|
372
|
-
def
|
373
|
-
|
388
|
+
def mkdir(path)
|
389
|
+
GitFactory.mkdir(:local, path)
|
374
390
|
end
|
375
391
|
end
|