multi_git 0.0.1.rc1 → 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/multi_git.rb +4 -4
- data/lib/multi_git/backend.rb +7 -0
- data/lib/multi_git/blob.rb +22 -3
- data/lib/multi_git/commit.rb +32 -10
- data/lib/multi_git/directory.rb +24 -21
- data/lib/multi_git/error.rb +9 -1
- data/lib/multi_git/file.rb +4 -4
- data/lib/multi_git/git_backend.rb +4 -0
- data/lib/multi_git/jgit_backend.rb +4 -0
- data/lib/multi_git/jgit_backend/commit.rb +6 -2
- data/lib/multi_git/jgit_backend/object.rb +1 -3
- data/lib/multi_git/jgit_backend/ref.rb +3 -3
- data/lib/multi_git/jgit_backend/rewindeable_io.rb +22 -10
- data/lib/multi_git/object.rb +1 -0
- data/lib/multi_git/ref.rb +19 -7
- data/lib/multi_git/repository.rb +60 -21
- data/lib/multi_git/rugged_backend.rb +4 -0
- data/lib/multi_git/symlink.rb +4 -5
- data/lib/multi_git/tree.rb +29 -14
- data/lib/multi_git/tree/builder.rb +60 -12
- data/lib/multi_git/tree_entry.rb +21 -6
- data/lib/multi_git/version.rb +1 -1
- metadata +45 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ea6b7b8a649a9690089663d09a517b3be10a73e6
|
4
|
+
data.tar.gz: 54172a19b99fec2efe32e090d4f26f7625afd38f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a31a18773445a3a64ff24b5bcccde2925af8b104911cc182c81b087c7e3ea83fbab63a5ba3df6133b64ca7ecb6f9dfe144de1339e750a397cb4f98dc2bfca5e8
|
7
|
+
data.tar.gz: e0b1465cc4df5b5e356f5b7304bd3ea0abcd678dc3f7964ee88a006a600a376ee6b5e9bdc4af4a9110c57c0226beea41939ef7381536ebe1eb490710d688a5af
|
data/lib/multi_git.rb
CHANGED
@@ -37,11 +37,11 @@ public
|
|
37
37
|
# # teardown:
|
38
38
|
# `rm -rf #{dir}`
|
39
39
|
#
|
40
|
-
#
|
40
|
+
# @param [String] directory
|
41
|
+
# @param [Hash] options
|
42
|
+
# @option options [Boolean] :init if true the repository is automatically created (defaults to: false)
|
43
|
+
# @option options [Boolean] :bare if true the repository is expected to be bare
|
41
44
|
# @return [Repository]
|
42
|
-
#
|
43
|
-
# @see Backend
|
44
|
-
#
|
45
45
|
delegate :open => 'best'
|
46
46
|
|
47
47
|
end
|
data/lib/multi_git/backend.rb
CHANGED
@@ -2,8 +2,10 @@ require 'multi_git/utils'
|
|
2
2
|
require 'multi_git/error'
|
3
3
|
module MultiGit
|
4
4
|
|
5
|
+
# Backend is an abstract base class for all other Backends.
|
5
6
|
module Backend
|
6
7
|
|
8
|
+
#@!visibility private
|
7
9
|
attr :failed, :exception
|
8
10
|
|
9
11
|
def check(description, &check)
|
@@ -28,6 +30,7 @@ module MultiGit
|
|
28
30
|
|
29
31
|
private :check, :check!
|
30
32
|
|
33
|
+
# @api developer
|
31
34
|
# @abstract
|
32
35
|
#
|
33
36
|
# This method implements loading the backend files.
|
@@ -37,6 +40,10 @@ module MultiGit
|
|
37
40
|
|
38
41
|
# Opens a git repository.
|
39
42
|
#
|
43
|
+
# @param [String] directory
|
44
|
+
# @param [Hash] options
|
45
|
+
# @option options [Boolean] :init if true the repository is automatically created (defaults to: false)
|
46
|
+
# @option options [Boolean] :bare if true the repository is expected to be bare
|
40
47
|
# @return [Repository]
|
41
48
|
def open(directory, options = {})
|
42
49
|
load!
|
data/lib/multi_git/blob.rb
CHANGED
@@ -10,15 +10,18 @@ module MultiGit
|
|
10
10
|
:blob
|
11
11
|
end
|
12
12
|
|
13
|
+
# @visibility private
|
13
14
|
def ==(other)
|
14
15
|
return false unless other.respond_to? :oid
|
15
16
|
return oid == other.oid
|
16
17
|
end
|
17
18
|
|
19
|
+
# @visibility private
|
18
20
|
def inspect
|
19
21
|
['<',self.class,' ',oid,'>'].join
|
20
22
|
end
|
21
23
|
|
24
|
+
# @visibility private
|
22
25
|
alias to_s inspect
|
23
26
|
end
|
24
27
|
|
@@ -39,9 +42,7 @@ module MultiGit
|
|
39
42
|
end
|
40
43
|
end
|
41
44
|
|
42
|
-
|
43
|
-
string
|
44
|
-
end
|
45
|
+
alias content string
|
45
46
|
|
46
47
|
def content=(value)
|
47
48
|
self.string = value.dup
|
@@ -58,14 +59,32 @@ module MultiGit
|
|
58
59
|
dig << content
|
59
60
|
return dig.hexdigest
|
60
61
|
end
|
62
|
+
|
63
|
+
# Turns the blob into a file using the given parent and filename.
|
64
|
+
# @param [Object] parent
|
65
|
+
# @param [String] name
|
66
|
+
# @return [File::Builder]
|
67
|
+
def with_parent(parent, name)
|
68
|
+
File::Builder.new(parent, name, self)
|
69
|
+
end
|
61
70
|
end
|
62
71
|
|
63
72
|
include Object
|
64
73
|
include Base
|
65
74
|
|
75
|
+
# @return [Builder]
|
66
76
|
def to_builder
|
67
77
|
Builder.new(self)
|
68
78
|
end
|
69
79
|
|
80
|
+
# Turns the blob into a file using the given parent and filename.
|
81
|
+
# @param [Object] parent
|
82
|
+
# @param [String] name
|
83
|
+
# @return [File]
|
84
|
+
def with_parent(parent, name)
|
85
|
+
File.new(parent, name, self)
|
86
|
+
end
|
87
|
+
|
70
88
|
end
|
71
89
|
end
|
90
|
+
require 'multi_git/file'
|
data/lib/multi_git/commit.rb
CHANGED
@@ -2,6 +2,7 @@ require 'forwardable'
|
|
2
2
|
require 'multi_git/utils'
|
3
3
|
require 'multi_git/handle'
|
4
4
|
require 'multi_git/builder'
|
5
|
+
require 'multi_git/object'
|
5
6
|
module MultiGit
|
6
7
|
|
7
8
|
module Commit
|
@@ -10,26 +11,41 @@ module MultiGit
|
|
10
11
|
extend Utils::AbstractMethods
|
11
12
|
extend Forwardable
|
12
13
|
|
13
|
-
#
|
14
|
+
# @!attribute message
|
15
|
+
# @return [String]
|
14
16
|
abstract :message
|
15
17
|
|
16
|
-
#
|
18
|
+
# @!attribute tree
|
19
|
+
# @return [Tree]
|
17
20
|
abstract :tree
|
18
21
|
|
19
|
-
#
|
22
|
+
# @!attribute parents
|
23
|
+
# @return [Array<Commit>]
|
20
24
|
abstract :parents
|
21
25
|
|
22
|
-
#
|
26
|
+
# @!attribute time
|
27
|
+
# @return [Time]
|
23
28
|
abstract :time
|
24
|
-
|
29
|
+
|
30
|
+
# @!attribute author
|
31
|
+
# @return [Handle]
|
25
32
|
abstract :author
|
26
33
|
|
27
|
-
#
|
34
|
+
# @!attribute commit_time
|
35
|
+
# @return [Time]
|
28
36
|
abstract :commit_time
|
29
|
-
|
37
|
+
|
38
|
+
# @!attribute committer
|
39
|
+
# @return [Handle]
|
30
40
|
abstract :committer
|
31
41
|
|
32
|
-
|
42
|
+
# @!method [](path)
|
43
|
+
# @see (MultiGit::Tree#[])
|
44
|
+
delegate :[] => :tree
|
45
|
+
|
46
|
+
# @!parse alias / []
|
47
|
+
delegate :/ => :tree
|
48
|
+
|
33
49
|
|
34
50
|
def type
|
35
51
|
:commit
|
@@ -49,11 +65,11 @@ module MultiGit
|
|
49
65
|
# builder = MultiGit::Commit::Builder.new
|
50
66
|
# builder.message = "My first commit"
|
51
67
|
# builder.by "me@example.com"
|
52
|
-
# builder
|
68
|
+
# builder["a_file"] = "some content"
|
53
69
|
# # builder is now ready to be inserted
|
54
70
|
# repository = MultiGit.open(dir, init: true)
|
55
71
|
# commit = repository << builder #=> be_a MultiGit::Commit
|
56
|
-
# commit
|
72
|
+
# commit['a_file'].content #=> eql "some content"
|
57
73
|
# # teardown:
|
58
74
|
# `rm -rf #{dir}`
|
59
75
|
class Builder
|
@@ -128,6 +144,11 @@ module MultiGit
|
|
128
144
|
return self
|
129
145
|
end
|
130
146
|
|
147
|
+
extend Forwardable
|
148
|
+
# @!method []=(path, content)
|
149
|
+
# @see (MultiGit::TreeBuilder#[]=)
|
150
|
+
delegate :[]= => :tree
|
151
|
+
|
131
152
|
def initialize(from = nil, &block)
|
132
153
|
@parents = []
|
133
154
|
if from.kind_of? Tree
|
@@ -178,6 +199,7 @@ module MultiGit
|
|
178
199
|
|
179
200
|
end
|
180
201
|
|
202
|
+
include Object
|
181
203
|
include Base
|
182
204
|
|
183
205
|
end
|
data/lib/multi_git/directory.rb
CHANGED
@@ -10,14 +10,12 @@ module MultiGit
|
|
10
10
|
Utils::MODE_DIRECTORY
|
11
11
|
end
|
12
12
|
|
13
|
-
def parent?
|
14
|
-
!@parent.nil?
|
15
|
-
end
|
16
|
-
|
17
13
|
def size
|
18
14
|
object.size
|
19
15
|
end
|
20
16
|
|
17
|
+
# @param [String] key
|
18
|
+
# @return [TreeEntry, nil]
|
21
19
|
def entry(key)
|
22
20
|
e = object.entry(key)
|
23
21
|
e.with_parent(self) if e
|
@@ -52,23 +50,7 @@ module MultiGit
|
|
52
50
|
include Tree::Builder::DSL
|
53
51
|
include Base
|
54
52
|
|
55
|
-
|
56
|
-
if args.any?
|
57
|
-
if args[0].kind_of?(Tree::Builder)
|
58
|
-
return args[0]
|
59
|
-
elsif args[0].kind_of?(Directory)
|
60
|
-
return args[0].object.to_builder
|
61
|
-
elsif args[0].kind_of?(Tree)
|
62
|
-
return args[0].to_builder
|
63
|
-
end
|
64
|
-
end
|
65
|
-
Tree::Builder.new(*args)
|
66
|
-
end
|
67
|
-
|
68
|
-
def entry_set(key, value)
|
69
|
-
object.entry_set(key, make_entry(key, value))
|
70
|
-
end
|
71
|
-
|
53
|
+
# @return [Hash<String, TreeEntry::Builder>]
|
72
54
|
def entries
|
73
55
|
Hash[
|
74
56
|
object.map{|entry| [entry.name, entry.with_parent(self) ] }
|
@@ -79,12 +61,32 @@ module MultiGit
|
|
79
61
|
|
80
62
|
delegate (Tree::Builder.instance_methods - self.instance_methods) => :object
|
81
63
|
|
64
|
+
# @return [TreeEntry, nil]
|
82
65
|
def from
|
83
66
|
defined?(@from) ? @from : @from = make_from
|
84
67
|
end
|
85
68
|
|
69
|
+
# @visibility private
|
70
|
+
# @api private
|
71
|
+
def entry_set(key, value)
|
72
|
+
object.entry_set(key, make_entry(key, value))
|
73
|
+
end
|
74
|
+
|
86
75
|
private
|
87
76
|
|
77
|
+
def make_inner(*args)
|
78
|
+
if args.any?
|
79
|
+
if args[0].kind_of?(Tree::Builder)
|
80
|
+
return args[0]
|
81
|
+
elsif args[0].kind_of?(Directory)
|
82
|
+
return args[0].object.to_builder
|
83
|
+
elsif args[0].kind_of?(Tree)
|
84
|
+
return args[0].to_builder
|
85
|
+
end
|
86
|
+
end
|
87
|
+
Tree::Builder.new(*args)
|
88
|
+
end
|
89
|
+
|
88
90
|
def make_from
|
89
91
|
if object.from.nil?
|
90
92
|
nil
|
@@ -96,6 +98,7 @@ module MultiGit
|
|
96
98
|
|
97
99
|
include Base
|
98
100
|
|
101
|
+
# @return [Hash<String, TreeEntry>]
|
99
102
|
def entries
|
100
103
|
@entries ||= Hash[
|
101
104
|
object.map{|entry| [entry.name, entry.with_parent(self) ] }
|
data/lib/multi_git/error.rb
CHANGED
@@ -67,11 +67,19 @@ module MultiGit
|
|
67
67
|
|
68
68
|
def initialize
|
69
69
|
super 'Another process has updated the ref you are currently updating.
|
70
|
-
This is unlikely
|
70
|
+
This is unlikely a problem, no data got lost. You may simply retry the update.
|
71
71
|
If this happens frequently, you may have want to run "git gc" to remove clobber.'
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
|
+
class InvalidReferenceTarget < ArgumentError
|
76
|
+
include Error
|
77
|
+
|
78
|
+
def initialize(supplied_value)
|
79
|
+
super "References can only point to instances of MultiGit::Ref, MultiGit::Object, MultiGit::Builder or nil. You supplied: #{supplied_value.inspect}"
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
75
83
|
class DuplicateConfigKey < Exception
|
76
84
|
include Error
|
77
85
|
end
|
data/lib/multi_git/file.rb
CHANGED
@@ -13,7 +13,11 @@ module MultiGit
|
|
13
13
|
|
14
14
|
class Builder < TreeEntry::Builder
|
15
15
|
include Base
|
16
|
+
extend Forwardable
|
17
|
+
|
18
|
+
delegate (Blob::Builder.instance_methods - self.instance_methods) => :object
|
16
19
|
|
20
|
+
private
|
17
21
|
def make_inner(*args)
|
18
22
|
if args.any?
|
19
23
|
if args[0].kind_of? Blob::Builder
|
@@ -24,10 +28,6 @@ module MultiGit
|
|
24
28
|
end
|
25
29
|
Blob::Builder.new(*args)
|
26
30
|
end
|
27
|
-
|
28
|
-
extend Forwardable
|
29
|
-
|
30
|
-
delegate (Blob::Builder.instance_methods - self.instance_methods) => :object
|
31
31
|
end
|
32
32
|
|
33
33
|
include Base
|
@@ -20,11 +20,11 @@ module MultiGit
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def time
|
23
|
-
@time ||= java_commit.author_ident.when
|
23
|
+
@time ||= date_to_ruby(java_commit.author_ident.when).freeze
|
24
24
|
end
|
25
25
|
|
26
26
|
def commit_time
|
27
|
-
@time ||= java_commit.committer_ident.when
|
27
|
+
@time ||= date_to_ruby(java_commit.committer_ident.when).freeze
|
28
28
|
end
|
29
29
|
|
30
30
|
def author
|
@@ -36,6 +36,10 @@ module MultiGit
|
|
36
36
|
end
|
37
37
|
private
|
38
38
|
|
39
|
+
def date_to_ruby( date )
|
40
|
+
Java::OrgJruby::RubyTime.newTime(JRuby.runtime,Java::OrgJodaTime::DateTime.new(date))
|
41
|
+
end
|
42
|
+
|
39
43
|
def java_commit
|
40
44
|
@java_commit ||= repository.use_reader{|rd| RevWalk.new(rd).parseCommit(java_oid) }
|
41
45
|
end
|
@@ -5,10 +5,10 @@ module MultiGit
|
|
5
5
|
|
6
6
|
include MultiGit::Ref
|
7
7
|
|
8
|
-
# HACK!
|
9
|
-
# @api private
|
10
|
-
# @visibility private
|
11
8
|
if defined? Java::OrgEclipseJgitStorageFile::RefDirectoryUpdate
|
9
|
+
# HACK!
|
10
|
+
# @api private
|
11
|
+
# @visibility private
|
12
12
|
class Java::OrgEclipseJgitStorageFile::RefDirectoryUpdate
|
13
13
|
public :tryLock, :unlock, :doUpdate, :doDelete
|
14
14
|
end
|
@@ -10,17 +10,29 @@ class MultiGit::JGitBackend::RewindeableIO < IO
|
|
10
10
|
import "org.jruby.util.io.ChannelStream"
|
11
11
|
import "org.jruby.util.io.ChannelDescriptor"
|
12
12
|
import "java.nio.channels.Channels"
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
13
|
+
|
14
|
+
class JavaRewindeableIO < RubyIO
|
15
|
+
private
|
16
|
+
field_reader :openFile
|
17
|
+
field_writer :openFile
|
18
|
+
|
19
|
+
def initialize(inputStream)
|
20
|
+
super(JRuby.runtime, MultiGit::JGitBackend::RewindeableIO)
|
21
|
+
self.openFile = OpenFile.new
|
22
|
+
openFile.setMainStream(
|
23
|
+
ChannelStream.open(
|
24
|
+
JRuby.runtime,
|
25
|
+
ChannelDescriptor.new(
|
26
|
+
Channels.newChannel(inputStream)
|
27
|
+
)
|
20
28
|
)
|
21
|
-
|
22
|
-
|
23
|
-
|
29
|
+
)
|
30
|
+
openFile.setMode(OpenFile::READABLE)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.new(inputStream)
|
35
|
+
jruby_io = JavaRewindeableIO.new(inputStream)
|
24
36
|
io = JRuby.dereference(jruby_io)
|
25
37
|
io.instance_variable_set(:@backend, inputStream)
|
26
38
|
return io
|
data/lib/multi_git/object.rb
CHANGED
data/lib/multi_git/ref.rb
CHANGED
@@ -53,7 +53,7 @@ module MultiGit
|
|
53
53
|
nx = case new
|
54
54
|
when Ref, nil then new
|
55
55
|
when Object, Builder then repository.write(new)
|
56
|
-
else raise
|
56
|
+
else raise Error::InvalidReferenceTarget, new
|
57
57
|
end
|
58
58
|
@target = nx
|
59
59
|
return nx
|
@@ -224,8 +224,18 @@ module MultiGit
|
|
224
224
|
end
|
225
225
|
|
226
226
|
class RecklessUpdater < Updater
|
227
|
+
class << self
|
228
|
+
attr :updater
|
229
|
+
end
|
230
|
+
|
231
|
+
SUBCLASSES = Hash.new{|hsh,key|
|
232
|
+
hsh[key] = Class.new(self) do
|
233
|
+
@updater = key
|
234
|
+
end
|
235
|
+
}
|
236
|
+
|
227
237
|
def update( new )
|
228
|
-
pu =
|
238
|
+
pu = self.class.updater.new( ref )
|
229
239
|
begin
|
230
240
|
pu.update( new )
|
231
241
|
ensure
|
@@ -266,10 +276,10 @@ module MultiGit
|
|
266
276
|
#
|
267
277
|
# @return [MultGit::Ref]
|
268
278
|
def resolve
|
269
|
-
@leaf
|
279
|
+
@leaf ||= begin
|
270
280
|
ref = self
|
271
281
|
loop do
|
272
|
-
break ref unless ref.
|
282
|
+
break ref unless ref.target.kind_of? MultiGit::Ref
|
273
283
|
ref = ref.target
|
274
284
|
end
|
275
285
|
end
|
@@ -333,12 +343,12 @@ module MultiGit
|
|
333
343
|
# @param lock [:reckless, :optimistic, :pessimistic]
|
334
344
|
# @yield [current_target] Yields the current target and expects the block to return the new target
|
335
345
|
# @yieldparam current_target [MultiGit::Ref, MultiGit::Object, nil] current target
|
336
|
-
# @yieldreturn [MultiGit::Ref, MultiGit::Object, nil] new target
|
346
|
+
# @yieldreturn [MultiGit::Ref, MultiGit::Object, MultiGit::Builder, nil] new target
|
337
347
|
# @return [MultiGit::Ref] The altered ref
|
338
348
|
#
|
339
349
|
# @overload update( value )
|
340
350
|
#
|
341
|
-
# @param value [Commit, Ref, nil] new target for this ref
|
351
|
+
# @param value [MultiGit::Commit, MultiGit::Ref, MultiGit::Builder, nil] new target for this ref
|
342
352
|
# @return [MultiGit::Ref] The altered ref
|
343
353
|
#
|
344
354
|
# @example
|
@@ -436,7 +446,7 @@ module MultiGit
|
|
436
446
|
end
|
437
447
|
|
438
448
|
def reckless_updater
|
439
|
-
RecklessUpdater
|
449
|
+
RecklessUpdater::SUBCLASSES[pessimistic_updater]
|
440
450
|
end
|
441
451
|
|
442
452
|
def updater_class( block_given, lock )
|
@@ -445,6 +455,8 @@ module MultiGit
|
|
445
455
|
when :optimistic then optimistic_updater
|
446
456
|
when :pessimistic then pessimistic_updater
|
447
457
|
when :reckless then reckless_updater
|
458
|
+
else
|
459
|
+
raise ArgumentError, "Locking method must be either :optimistic, :pessimistic or :reckless. You supplied: #{lock.inspect}"
|
448
460
|
end
|
449
461
|
else
|
450
462
|
pessimistic_updater
|
data/lib/multi_git/repository.rb
CHANGED
@@ -10,6 +10,22 @@ require 'multi_git/executeable'
|
|
10
10
|
require 'multi_git/submodule'
|
11
11
|
|
12
12
|
# Abstract base class for all repository implementations.
|
13
|
+
#
|
14
|
+
# @example Creating a new repository
|
15
|
+
# # setup:
|
16
|
+
# dir = `mktemp -d`
|
17
|
+
# # example:
|
18
|
+
# repo = MultiGit.open(dir, init: true) #=> be_a MultiGit::Repository
|
19
|
+
# repo.bare? #=> eql false
|
20
|
+
# repo.git_dir #=> eql dir + '/.git'
|
21
|
+
# repo.git_work_tree #=> eql dir
|
22
|
+
# # creating a first commit:
|
23
|
+
# repo.branch('master').commit do
|
24
|
+
# tree['file'] = 'content'
|
25
|
+
# end
|
26
|
+
# # teardown:
|
27
|
+
# `rm -rf #{dir}`
|
28
|
+
#
|
13
29
|
# @abstract
|
14
30
|
class MultiGit::Repository
|
15
31
|
|
@@ -29,29 +45,33 @@ public
|
|
29
45
|
|
30
46
|
# @!method git_dir
|
31
47
|
# @abstract
|
32
|
-
#
|
48
|
+
# Returns the repository directory (the place where the internal stuff is stored)
|
33
49
|
# @return [String]
|
34
50
|
abstract :git_dir
|
35
51
|
|
52
|
+
# @!method git_work_tree
|
53
|
+
# @abstract
|
54
|
+
# Returns the working directory (the place where your files are)
|
55
|
+
# @return [String]
|
56
|
+
abstract :git_work_tree
|
57
|
+
|
36
58
|
# @!method bare?
|
37
59
|
# @abstract
|
38
60
|
# Is this repository bare?
|
39
61
|
abstract :bare?
|
40
62
|
|
41
|
-
# @!
|
42
|
-
# @param directory [String] a directory
|
43
|
-
# @option options [Boolean] :init init the repository if it doesn't exist
|
44
|
-
# @option options [Boolean] :bare open/init the repository bare
|
63
|
+
# @!group Object interface
|
45
64
|
|
46
|
-
# @!method read(
|
47
|
-
# Reads
|
65
|
+
# @!method read(expression)
|
66
|
+
# Reads an object from the database.
|
48
67
|
#
|
68
|
+
# @see http://git-scm.com/docs/git-rev-parse#_specifying_revisions Revision expression syntax
|
49
69
|
# @abstract
|
50
70
|
#
|
51
71
|
# @raise [MultiGit::Error::InvalidReference] if ref is not a valid reference
|
52
72
|
# @raise [MultiGit::Error::AmbiguousReference] if ref refers to multiple objects
|
53
73
|
# @raise [MultiGit::Error::BadRevisionSyntax] if ref does not contain a valid ref-syntax
|
54
|
-
# @param [String]
|
74
|
+
# @param [String] expression
|
55
75
|
# @return [MultiGit::Object] object
|
56
76
|
abstract :read
|
57
77
|
|
@@ -62,10 +82,12 @@ public
|
|
62
82
|
# @return [Boolean]
|
63
83
|
abstract :include?
|
64
84
|
|
65
|
-
# @!method parse(
|
66
|
-
# Resolves
|
85
|
+
# @!method parse(expression)
|
86
|
+
# Resolves an expression into an oid.
|
67
87
|
# @abstract
|
68
|
-
#
|
88
|
+
#
|
89
|
+
# @see http://git-scm.com/docs/git-rev-parse#_specifying_revisions Revision expression syntax
|
90
|
+
# @param [String] expression
|
69
91
|
# @raise [MultiGit::Error::InvalidReference] if ref is not a valid reference
|
70
92
|
# @raise [MultiGit::Error::AmbiguousReference] if ref refers to multiple objects
|
71
93
|
# @raise [MultiGit::Error::BadRevisionSyntax] if ref does not contain a valid ref-syntax
|
@@ -78,10 +100,10 @@ public
|
|
78
100
|
# If called with a String or an IO, this method creates a {MultiGit::Blob} with the
|
79
101
|
# given content. This is the easiest way to create blobs.
|
80
102
|
#
|
81
|
-
# If called with a {MultiGit::Object}, this method determines if the object does already exist
|
103
|
+
# If called with a {MultiGit::Object}, this method determines if the object does already exist
|
82
104
|
# and writes it otherwise.
|
83
105
|
#
|
84
|
-
# If called with a {MultiGit::Builder}, this method inserts the content of the builder to the
|
106
|
+
# If called with a {MultiGit::Builder}, this method inserts the content of the builder to the
|
85
107
|
# repository. This is the easiest way to create trees/commits.
|
86
108
|
#
|
87
109
|
# @abstract
|
@@ -89,6 +111,14 @@ public
|
|
89
111
|
# @return [MultiGit::Object] the resulting object
|
90
112
|
abstract :write
|
91
113
|
|
114
|
+
# @!parse alias_method :<<, :write
|
115
|
+
def <<(*args,&block)
|
116
|
+
write(*args,&block)
|
117
|
+
end
|
118
|
+
|
119
|
+
# @!endgroup
|
120
|
+
# @!group References interface
|
121
|
+
|
92
122
|
# @!method ref(name)
|
93
123
|
# Opens a reference. A reference is usually known as branch or tag.
|
94
124
|
#
|
@@ -107,7 +137,7 @@ public
|
|
107
137
|
# @return [MultiGit::Ref] ref
|
108
138
|
abstract :ref
|
109
139
|
|
110
|
-
# Gets the ref
|
140
|
+
# Gets the HEAD ref.
|
111
141
|
# @return [Ref] head
|
112
142
|
def head
|
113
143
|
return ref('HEAD')
|
@@ -115,6 +145,18 @@ public
|
|
115
145
|
|
116
146
|
# Opens a branch
|
117
147
|
#
|
148
|
+
# @example
|
149
|
+
# # setup:
|
150
|
+
# dir = `mktemp -d`
|
151
|
+
# # example:
|
152
|
+
# repository = MultiGit.open(dir, init: true)
|
153
|
+
# # getting a local branch
|
154
|
+
# repository.branch('master') #=> be_a MultiGit::Ref
|
155
|
+
# # getting a remote branch
|
156
|
+
# repository.branch('origin/master') #=> be_a MultiGit::Ref
|
157
|
+
# # teardown:
|
158
|
+
# `rm -rf #{dir}`
|
159
|
+
#
|
118
160
|
# @param name [String] branch name
|
119
161
|
# @return [Ref]
|
120
162
|
def branch(name)
|
@@ -134,8 +176,8 @@ public
|
|
134
176
|
end
|
135
177
|
|
136
178
|
# @method each_branch( filter = :all )
|
137
|
-
# Yields either all, local or remote branches. If called
|
138
|
-
# with a regular expression it will be used to filter the
|
179
|
+
# Yields either all, local or remote branches. If called
|
180
|
+
# with a regular expression it will be used to filter the
|
139
181
|
# branches by name.
|
140
182
|
#
|
141
183
|
# @param filter [:all, :local, :remote, Regexp]
|
@@ -145,7 +187,6 @@ public
|
|
145
187
|
#
|
146
188
|
abstract :each_branch
|
147
189
|
|
148
|
-
|
149
190
|
# @method each_tag
|
150
191
|
# Yields all tags.
|
151
192
|
#
|
@@ -160,10 +201,7 @@ public
|
|
160
201
|
ref(name)
|
161
202
|
end
|
162
203
|
|
163
|
-
#
|
164
|
-
def <<(*args,&block)
|
165
|
-
write(*args,&block)
|
166
|
-
end
|
204
|
+
# !@endgroup
|
167
205
|
|
168
206
|
# @visibility private
|
169
207
|
def inspect
|
@@ -254,3 +292,4 @@ protected
|
|
254
292
|
end
|
255
293
|
|
256
294
|
end
|
295
|
+
|
data/lib/multi_git/symlink.rb
CHANGED
@@ -18,6 +18,10 @@ module MultiGit
|
|
18
18
|
|
19
19
|
include Base
|
20
20
|
|
21
|
+
def target=(t)
|
22
|
+
object.content = t
|
23
|
+
end
|
24
|
+
private
|
21
25
|
def make_inner(*args)
|
22
26
|
if args.any?
|
23
27
|
if args[0].kind_of? Blob::Builder
|
@@ -28,11 +32,6 @@ module MultiGit
|
|
28
32
|
end
|
29
33
|
Blob::Builder.new(*args)
|
30
34
|
end
|
31
|
-
|
32
|
-
def target=(t)
|
33
|
-
object.content = t
|
34
|
-
end
|
35
|
-
|
36
35
|
end
|
37
36
|
|
38
37
|
include Base
|
data/lib/multi_git/tree.rb
CHANGED
@@ -16,10 +16,6 @@ module MultiGit
|
|
16
16
|
:tree
|
17
17
|
end
|
18
18
|
|
19
|
-
def parent?
|
20
|
-
false
|
21
|
-
end
|
22
|
-
|
23
19
|
def key?(key)
|
24
20
|
if key.kind_of? String
|
25
21
|
return entries.key?(key)
|
@@ -52,10 +48,10 @@ module MultiGit
|
|
52
48
|
while parts.any?
|
53
49
|
part = parts.pop
|
54
50
|
if part == '..'
|
55
|
-
unless current.parent
|
51
|
+
unless current.respond_to?(:parent) && p = current.parent
|
56
52
|
raise MultiGit::Error::InvalidTraversal, "Can't traverse to parent of #{current.inspect} since I don't know where it is."
|
57
53
|
end
|
58
|
-
current =
|
54
|
+
current = p
|
59
55
|
elsif part == '.' || part == ''
|
60
56
|
# do nothing
|
61
57
|
else
|
@@ -130,10 +126,16 @@ module MultiGit
|
|
130
126
|
return self
|
131
127
|
end
|
132
128
|
|
133
|
-
|
129
|
+
|
130
|
+
# @overload each(&block)
|
131
|
+
# @yield [entry]
|
132
|
+
# @yieldparam entry [MultiGit::TreeEntry]
|
133
|
+
#
|
134
|
+
# @overload each
|
135
|
+
# @return [Enumerable]
|
134
136
|
def each
|
135
137
|
return to_enum unless block_given?
|
136
|
-
entries.each do |
|
138
|
+
entries.each do |_, entry|
|
137
139
|
yield entry
|
138
140
|
end
|
139
141
|
return self
|
@@ -170,31 +172,44 @@ module MultiGit
|
|
170
172
|
entries.keys
|
171
173
|
end
|
172
174
|
|
175
|
+
# @api private
|
173
176
|
def ==( other )
|
174
177
|
return false unless other.respond_to? :entries
|
175
178
|
entries == other.entries
|
176
179
|
end
|
177
180
|
|
181
|
+
# @api private
|
182
|
+
alias eql? ==
|
183
|
+
|
184
|
+
# @api private
|
185
|
+
def hash
|
186
|
+
entries.hash
|
187
|
+
end
|
188
|
+
|
189
|
+
# @return [Hash<String, MultiGit::TreeEntry>]
|
190
|
+
def entries
|
191
|
+
@entries ||= Hash[ raw_entries.map{|name, mode, oid| [name, make_entry(name, mode, oid) ] } ]
|
192
|
+
end
|
178
193
|
end
|
179
194
|
|
180
195
|
include Base
|
181
196
|
include Object
|
182
197
|
|
198
|
+
# @return [Builder]
|
183
199
|
def to_builder
|
184
200
|
Builder.new(self)
|
185
201
|
end
|
186
202
|
|
203
|
+
# @return [Directory]
|
204
|
+
def with_parent(parent, name)
|
205
|
+
Directory.new(parent, name, self)
|
206
|
+
end
|
207
|
+
|
187
208
|
# @visibility private
|
188
209
|
def inspect
|
189
210
|
['#<',self.class.name,' ',oid,' repository:', repository.inspect,'>'].join
|
190
211
|
end
|
191
|
-
|
192
212
|
protected
|
193
|
-
# @return [Hash<String, MultiGit::TreeEntry>]
|
194
|
-
def entries
|
195
|
-
@entries ||= Hash[ raw_entries.map{|name, mode, oid| [name, make_entry(name, mode, oid) ] } ]
|
196
|
-
end
|
197
|
-
|
198
213
|
def raw_entries
|
199
214
|
raise Error::NotYetImplemented, "#{self.class}#each_entry"
|
200
215
|
end
|
@@ -10,28 +10,40 @@ module MultiGit
|
|
10
10
|
include MultiGit::Builder
|
11
11
|
include Tree::Base
|
12
12
|
|
13
|
-
|
13
|
+
# @return [Hash<String,MultiGit::TreeEntry::Base>]
|
14
|
+
attr :dirty_entries
|
15
|
+
private :dirty_entries
|
16
|
+
|
17
|
+
# @return [MultiGit::Tree::Base, nil]
|
14
18
|
attr :from
|
15
19
|
|
16
20
|
def initialize(from = nil, &block)
|
17
|
-
@
|
21
|
+
@dirty_entries = {}
|
18
22
|
@from = from
|
19
23
|
instance_eval(&block) if block
|
20
24
|
end
|
21
25
|
|
26
|
+
# @param [String] key
|
27
|
+
# @return [TreeEntry::Builder, nil]
|
22
28
|
def entry(key)
|
23
29
|
if @from
|
24
|
-
|
30
|
+
dirty_entries.fetch(key) do
|
25
31
|
e = @from.entry(key)
|
26
32
|
if e
|
27
|
-
|
33
|
+
dirty_entries[key] = e.to_builder.with_parent(self)
|
28
34
|
end
|
29
35
|
end
|
30
36
|
else
|
31
|
-
|
37
|
+
dirty_entries[key]
|
32
38
|
end
|
33
39
|
end
|
34
40
|
|
41
|
+
# @overload each(&block)
|
42
|
+
# @yield [entry]
|
43
|
+
# @yieldparam entry [MultiGit::TreeEntry]
|
44
|
+
#
|
45
|
+
# @overload each
|
46
|
+
# @return [Enumerable]
|
35
47
|
def each
|
36
48
|
return to_enum unless block_given?
|
37
49
|
names.each do |name|
|
@@ -42,7 +54,7 @@ module MultiGit
|
|
42
54
|
# TODO: cache
|
43
55
|
def names
|
44
56
|
names = @from ? @from.names.dup : []
|
45
|
-
|
57
|
+
dirty_entries.each do |k,v|
|
46
58
|
if v
|
47
59
|
unless names.include? k
|
48
60
|
names << k
|
@@ -54,13 +66,18 @@ module MultiGit
|
|
54
66
|
return names
|
55
67
|
end
|
56
68
|
|
69
|
+
# @return [Hash<String,MultiGit::TreeEntry::Builder>]
|
70
|
+
def entries
|
71
|
+
Hash[names.map do |n| [n, entry(n)] end ]
|
72
|
+
end
|
73
|
+
|
57
74
|
def size
|
58
75
|
names.size
|
59
76
|
end
|
60
77
|
|
61
78
|
def >>(repository)
|
62
79
|
ent = []
|
63
|
-
|
80
|
+
dirty_entries.each do |name, entry|
|
64
81
|
if entry
|
65
82
|
object = repository.write(entry)
|
66
83
|
ent << [name, object.mode, object.oid]
|
@@ -68,7 +85,7 @@ module MultiGit
|
|
68
85
|
end
|
69
86
|
if @from
|
70
87
|
@from.each do |entry|
|
71
|
-
unless
|
88
|
+
unless dirty_entries.key? entry.name
|
72
89
|
ent << [entry.name, entry.mode, entry.oid]
|
73
90
|
end
|
74
91
|
end
|
@@ -76,8 +93,27 @@ module MultiGit
|
|
76
93
|
return repository.make_tree(ent)
|
77
94
|
end
|
78
95
|
|
96
|
+
# @param (see Object#with_parent)
|
97
|
+
# @return [Directory::Builder]
|
98
|
+
def with_parent(parent, name)
|
99
|
+
Directory::Builder.new(parent, name, self)
|
100
|
+
end
|
101
|
+
|
79
102
|
module DSL
|
80
103
|
|
104
|
+
# @overload set(path, options = {:create => true }, &block)
|
105
|
+
# @param [String] path
|
106
|
+
# @param [Hash] options
|
107
|
+
# @yield [parent, name]
|
108
|
+
# @yieldparam parent [MultiGit::Tree, nil]
|
109
|
+
# @yieldparam name [String]
|
110
|
+
# @yieldreturn [#with_parent, nil]
|
111
|
+
#
|
112
|
+
# @overload set(path, options = {:create => true }, value)
|
113
|
+
# @param [String] path
|
114
|
+
# @param [Hash] options
|
115
|
+
# @param [#with_parent, nil] value
|
116
|
+
#
|
81
117
|
def set(key, *args, &block)
|
82
118
|
options = {}
|
83
119
|
case(args.size)
|
@@ -108,8 +144,9 @@ module MultiGit
|
|
108
144
|
|
109
145
|
alias []= set
|
110
146
|
|
147
|
+
# @api private
|
111
148
|
def entry_set(key, value)
|
112
|
-
|
149
|
+
dirty_entries[key] = make_entry(key, value)
|
113
150
|
end
|
114
151
|
|
115
152
|
def make_entry(key, value)
|
@@ -120,12 +157,13 @@ module MultiGit
|
|
120
157
|
return value
|
121
158
|
elsif value.kind_of? String
|
122
159
|
return MultiGit::File::Builder.new(self, key, value)
|
123
|
-
elsif value.
|
124
|
-
return value.with_parent(self)
|
160
|
+
elsif value.respond_to? :with_parent
|
161
|
+
return value.with_parent(self, key)
|
125
162
|
else
|
126
163
|
raise ArgumentError, "No idea what to do with #{value.inspect}"
|
127
164
|
end
|
128
165
|
end
|
166
|
+
private :make_entry
|
129
167
|
|
130
168
|
def traverse_set(current, parts, value, create)
|
131
169
|
if parts.none?
|
@@ -157,6 +195,7 @@ module MultiGit
|
|
157
195
|
current.entry_set(part, traverse_set(entry, rest, value, create))
|
158
196
|
return current
|
159
197
|
end
|
198
|
+
private :traverse_set
|
160
199
|
|
161
200
|
def file(name, content = nil, &block)
|
162
201
|
set(name){|parent, name|
|
@@ -186,6 +225,14 @@ module MultiGit
|
|
186
225
|
set(name){ nil }
|
187
226
|
end
|
188
227
|
|
228
|
+
def clear
|
229
|
+
names.each do |name|
|
230
|
+
delete(name)
|
231
|
+
end
|
232
|
+
return nil
|
233
|
+
end
|
234
|
+
|
235
|
+
# @return [self]
|
189
236
|
def to_builder
|
190
237
|
self
|
191
238
|
end
|
@@ -199,7 +246,8 @@ module MultiGit
|
|
199
246
|
# builder.file('a_file','some content')
|
200
247
|
# builder.changed? 'a_file' #=> eq true
|
201
248
|
# builder.changed? 'another_file' #=> eq false
|
202
|
-
|
249
|
+
# builder.changed? #=> eq true
|
250
|
+
def changed?( path = '.' )
|
203
251
|
begin
|
204
252
|
new = traverse(path)
|
205
253
|
rescue Error::EntryDoesNotExist
|
data/lib/multi_git/tree_entry.rb
CHANGED
@@ -3,8 +3,10 @@ require 'multi_git/object'
|
|
3
3
|
require 'multi_git/builder'
|
4
4
|
require 'multi_git/walkable'
|
5
5
|
module MultiGit
|
6
|
-
# A tree entry is
|
7
|
-
#
|
6
|
+
# A tree entry is a {MultiGit::Object} or a {MultiGit::Builder} that
|
7
|
+
# knows its parent tree and therefore supports several additional operations.
|
8
|
+
#
|
9
|
+
# @abstract
|
8
10
|
class TreeEntry
|
9
11
|
|
10
12
|
module Base
|
@@ -13,7 +15,7 @@ module MultiGit
|
|
13
15
|
|
14
16
|
# @return [String]
|
15
17
|
attr :name
|
16
|
-
# @return [MultiGit::Tree::Base]
|
18
|
+
# @return [MultiGit::Tree::Base, nil]
|
17
19
|
attr :parent
|
18
20
|
|
19
21
|
extend MultiGit::Utils::AbstractMethods
|
@@ -36,6 +38,17 @@ module MultiGit
|
|
36
38
|
self.class.new(parent, name, @object)
|
37
39
|
end
|
38
40
|
|
41
|
+
# Returns the full path to this entry.
|
42
|
+
#
|
43
|
+
# @example
|
44
|
+
# tree = MultiGit::Tree::Builder.new do
|
45
|
+
# directory "a" do
|
46
|
+
# file "b", "content"
|
47
|
+
# end
|
48
|
+
# end
|
49
|
+
# tree['a/b'].path #=> eql 'a/b'
|
50
|
+
#
|
51
|
+
# @return [String]
|
39
52
|
def path
|
40
53
|
@path ||= begin
|
41
54
|
if parent.respond_to? :path
|
@@ -46,17 +59,20 @@ module MultiGit
|
|
46
59
|
end
|
47
60
|
end
|
48
61
|
|
62
|
+
# @visibility private
|
49
63
|
def ==(other)
|
50
64
|
return false unless other.respond_to?(:path) && other.respond_to?(:object) && other.respond_to?(:mode)
|
51
65
|
return (path == other.path) && (object == other.object) && (mode == other.mode)
|
52
66
|
end
|
53
67
|
|
68
|
+
# @visibility private
|
54
69
|
def inspect
|
55
70
|
['#<', self.class.name,'@',path,' ', object.inspect, '>'].join
|
56
71
|
end
|
57
|
-
|
72
|
+
end
|
58
73
|
|
59
|
-
|
74
|
+
# @abstract
|
75
|
+
class Builder
|
60
76
|
|
61
77
|
include MultiGit::Builder
|
62
78
|
include Base
|
@@ -93,7 +109,6 @@ module MultiGit
|
|
93
109
|
self.class::Builder.new(parent, name, object)
|
94
110
|
end
|
95
111
|
|
96
|
-
|
97
112
|
end
|
98
113
|
|
99
114
|
end
|
data/lib/multi_git/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: multi_git
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.1
|
4
|
+
version: 0.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hannes Georg
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-10-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -100,62 +100,62 @@ executables: []
|
|
100
100
|
extensions: []
|
101
101
|
extra_rdoc_files: []
|
102
102
|
files:
|
103
|
-
- lib/multi_git
|
104
|
-
- lib/multi_git/
|
105
|
-
- lib/multi_git/
|
106
|
-
- lib/multi_git/executeable.rb
|
107
|
-
- lib/multi_git/tree/builder.rb
|
108
|
-
- lib/multi_git/submodule.rb
|
103
|
+
- lib/multi_git.rb
|
104
|
+
- lib/multi_git/backend.rb
|
105
|
+
- lib/multi_git/backend_set.rb
|
109
106
|
- lib/multi_git/blob.rb
|
110
|
-
- lib/multi_git/
|
107
|
+
- lib/multi_git/builder.rb
|
108
|
+
- lib/multi_git/commit.rb
|
109
|
+
- lib/multi_git/config.rb
|
110
|
+
- lib/multi_git/config/default_schema.rb
|
111
|
+
- lib/multi_git/config/schema.rb
|
111
112
|
- lib/multi_git/directory.rb
|
112
|
-
- lib/multi_git/jgit_backend.rb
|
113
|
-
- lib/multi_git/version.rb
|
114
|
-
- lib/multi_git/file.rb
|
115
113
|
- lib/multi_git/error.rb
|
116
|
-
- lib/multi_git/
|
117
|
-
- lib/multi_git/
|
118
|
-
- lib/multi_git/
|
119
|
-
- lib/multi_git/config.rb
|
120
|
-
- lib/multi_git/ref.rb
|
121
|
-
- lib/multi_git/builder.rb
|
122
|
-
- lib/multi_git/remote.rb
|
123
|
-
- lib/multi_git/git_backend/commit.rb
|
114
|
+
- lib/multi_git/executeable.rb
|
115
|
+
- lib/multi_git/file.rb
|
116
|
+
- lib/multi_git/git_backend.rb
|
124
117
|
- lib/multi_git/git_backend/blob.rb
|
125
|
-
- lib/multi_git/git_backend/object.rb
|
126
118
|
- lib/multi_git/git_backend/cmd.rb
|
127
|
-
- lib/multi_git/git_backend/
|
119
|
+
- lib/multi_git/git_backend/commit.rb
|
128
120
|
- lib/multi_git/git_backend/config.rb
|
121
|
+
- lib/multi_git/git_backend/object.rb
|
129
122
|
- lib/multi_git/git_backend/ref.rb
|
130
123
|
- lib/multi_git/git_backend/remote.rb
|
131
124
|
- lib/multi_git/git_backend/repository.rb
|
132
|
-
- lib/multi_git/
|
125
|
+
- lib/multi_git/git_backend/tree.rb
|
126
|
+
- lib/multi_git/handle.rb
|
127
|
+
- lib/multi_git/jgit_backend.rb
|
128
|
+
- lib/multi_git/jgit_backend/blob.rb
|
129
|
+
- lib/multi_git/jgit_backend/commit.rb
|
130
|
+
- lib/multi_git/jgit_backend/config.rb
|
131
|
+
- lib/multi_git/jgit_backend/object.rb
|
132
|
+
- lib/multi_git/jgit_backend/ref.rb
|
133
|
+
- lib/multi_git/jgit_backend/remote.rb
|
134
|
+
- lib/multi_git/jgit_backend/repository.rb
|
135
|
+
- lib/multi_git/jgit_backend/rewindeable_io.rb
|
136
|
+
- lib/multi_git/jgit_backend/tree.rb
|
137
|
+
- lib/multi_git/object.rb
|
138
|
+
- lib/multi_git/ref.rb
|
139
|
+
- lib/multi_git/refspec.rb
|
140
|
+
- lib/multi_git/remote.rb
|
133
141
|
- lib/multi_git/repository.rb
|
134
|
-
- lib/multi_git/git_backend.rb
|
135
|
-
- lib/multi_git/config/default_schema.rb
|
136
|
-
- lib/multi_git/config/schema.rb
|
137
142
|
- lib/multi_git/rugged_backend.rb
|
138
|
-
- lib/multi_git/utils.rb
|
139
|
-
- lib/multi_git/tree_entry.rb
|
140
|
-
- lib/multi_git/backend_set.rb
|
141
|
-
- lib/multi_git/rugged_backend/commit.rb
|
142
143
|
- lib/multi_git/rugged_backend/blob.rb
|
143
|
-
- lib/multi_git/rugged_backend/
|
144
|
-
- lib/multi_git/rugged_backend/tree.rb
|
144
|
+
- lib/multi_git/rugged_backend/commit.rb
|
145
145
|
- lib/multi_git/rugged_backend/config.rb
|
146
|
+
- lib/multi_git/rugged_backend/object.rb
|
146
147
|
- lib/multi_git/rugged_backend/ref.rb
|
147
148
|
- lib/multi_git/rugged_backend/remote.rb
|
148
149
|
- lib/multi_git/rugged_backend/repository.rb
|
149
|
-
- lib/multi_git/
|
150
|
-
- lib/multi_git/
|
151
|
-
- lib/multi_git/
|
152
|
-
- lib/multi_git/
|
153
|
-
- lib/multi_git/
|
154
|
-
- lib/multi_git/
|
155
|
-
- lib/multi_git/
|
156
|
-
- lib/multi_git/
|
157
|
-
- lib/multi_git/
|
158
|
-
- lib/multi_git.rb
|
150
|
+
- lib/multi_git/rugged_backend/tree.rb
|
151
|
+
- lib/multi_git/submodule.rb
|
152
|
+
- lib/multi_git/symlink.rb
|
153
|
+
- lib/multi_git/tree.rb
|
154
|
+
- lib/multi_git/tree/builder.rb
|
155
|
+
- lib/multi_git/tree_entry.rb
|
156
|
+
- lib/multi_git/utils.rb
|
157
|
+
- lib/multi_git/version.rb
|
158
|
+
- lib/multi_git/walkable.rb
|
159
159
|
homepage: https://github.com/hannesg/multi_git
|
160
160
|
licenses:
|
161
161
|
- GPL-3
|
@@ -171,13 +171,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
171
171
|
version: '0'
|
172
172
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
173
173
|
requirements:
|
174
|
-
- - '
|
174
|
+
- - '>='
|
175
175
|
- !ruby/object:Gem::Version
|
176
|
-
version:
|
176
|
+
version: '0'
|
177
177
|
requirements:
|
178
178
|
- jar 'org.eclipse.jgit:org.eclipse.jgit'
|
179
179
|
rubyforge_project:
|
180
|
-
rubygems_version: 2.
|
180
|
+
rubygems_version: 2.2.0
|
181
181
|
signing_key:
|
182
182
|
specification_version: 4
|
183
183
|
summary: Use all the git
|