git-ds 0.9.8.1 → 0.9.8.3
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.
- data/ChangeLog +8 -0
- data/lib/git-ds/database.rb +1 -1
- data/lib/git-ds/index.rb +33 -1
- data/lib/git-ds/repo.rb +8 -3
- metadata +4 -5
- data/lib/git-ds/t.rb +0 -44
data/ChangeLog
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
2011-08-03 : mkfs <mkfs@thoughtgang.org>
|
2
|
+
* Repo#path_to_object now searches Index if appropriate
|
3
|
+
* Index now has include? and path_to_object methods
|
4
|
+
|
5
|
+
2011-08-01 : mkfs <mkfs@thoughtgang.org>
|
6
|
+
* Added Index#force_sync method
|
7
|
+
* StageMemIndex#sync is now a no-op
|
8
|
+
|
1
9
|
2011-07-30 : mkfs <mkfs@thoughtgang.org>
|
2
10
|
* Model#batch is now a wrapper for Database#batch
|
3
11
|
* Transaction#perform now executes in batch mode
|
data/lib/git-ds/database.rb
CHANGED
data/lib/git-ds/index.rb
CHANGED
@@ -91,6 +91,30 @@ filesystem.
|
|
91
91
|
}
|
92
92
|
end
|
93
93
|
|
94
|
+
=begin rdoc
|
95
|
+
Return true if index includes path.
|
96
|
+
=end
|
97
|
+
def include?(path)
|
98
|
+
path_to_object(path) ? true : false
|
99
|
+
end
|
100
|
+
|
101
|
+
=begin rdoc
|
102
|
+
Return the data for the object at 'path'. This is required in order for
|
103
|
+
in-memory indexes to work properly.
|
104
|
+
=end
|
105
|
+
def path_to_object(path)
|
106
|
+
# Note: this algorithm is re-implemented from Grit::Index#add
|
107
|
+
arr = path.split('/')
|
108
|
+
fname = arr.pop
|
109
|
+
curr = self.tree
|
110
|
+
arr.each do |dir|
|
111
|
+
curr = curr[dir] if curr
|
112
|
+
end
|
113
|
+
|
114
|
+
#TODO: it would be nice to return a Grit::Blob or Grit::Tree here.
|
115
|
+
(curr && fname && curr[fname]) ? curr[fname] : nil
|
116
|
+
end
|
117
|
+
|
94
118
|
private
|
95
119
|
|
96
120
|
=begin rdoc
|
@@ -191,6 +215,8 @@ the index contents.
|
|
191
215
|
@repo.exec_in_git_dir { `git read-tree #{@sha}` }
|
192
216
|
end
|
193
217
|
|
218
|
+
alias :force_sync :sync
|
219
|
+
|
194
220
|
=begin rdoc
|
195
221
|
Read staging index from disk and create a StagingIndex object for it.
|
196
222
|
|
@@ -224,9 +250,15 @@ in-memory index with the on-disk index.
|
|
224
250
|
end
|
225
251
|
|
226
252
|
=begin rdoc
|
227
|
-
|
253
|
+
Replace standard sync with a no-op.
|
228
254
|
=end
|
229
255
|
def sync
|
256
|
+
end
|
257
|
+
|
258
|
+
=begin rdoc
|
259
|
+
Force a sync-to-disk. This is used by batch mode to ensure a sync.
|
260
|
+
=end
|
261
|
+
def force_sync
|
230
262
|
self.read_tree(self.write)
|
231
263
|
@repo.exec_in_git_dir { `git read-tree #{@sha}` }
|
232
264
|
end
|
data/lib/git-ds/repo.rb
CHANGED
@@ -339,10 +339,12 @@ Remove an object from the database. This can be a path to a Tree or a Blob.
|
|
339
339
|
=begin rdoc
|
340
340
|
Fetch the contents of a DB or FS object from the object database. This uses
|
341
341
|
the staging index.
|
342
|
+
Note: This returns nil if path is a Tree instead of a blob
|
342
343
|
=end
|
343
344
|
def object_data(path)
|
344
345
|
blob = path_to_object(path)
|
345
|
-
(blob
|
346
|
+
return nil if (not blob) || (blob.kind_of? Grit::Tree)
|
347
|
+
blob.kind_of?(Grit::Blob) ? blob.data : blob
|
346
348
|
end
|
347
349
|
|
348
350
|
# ----------------------------------------------------------------------
|
@@ -455,14 +457,17 @@ Fetch an object from the repo based on its path.
|
|
455
457
|
If a staging index exists, its tree will be used; otherwise, the tree
|
456
458
|
Repo#current_branch will be used.
|
457
459
|
|
458
|
-
The object returned will be a Grit::Blob, a Grit::Tree, or
|
460
|
+
The object returned will be a Grit::Blob, a Grit::Tree, or the raw data from
|
461
|
+
the staging index.
|
459
462
|
=end
|
460
463
|
def path_to_object(path)
|
461
464
|
treeish = (@staging_index ? staging.sha : @current_branch)
|
462
465
|
tree = self.tree(treeish, [path])
|
463
466
|
return tree.blobs.first if tree && (not tree.blobs.empty?)
|
464
467
|
return tree.trees.first if tree && (not tree.trees.empty?)
|
465
|
-
|
468
|
+
|
469
|
+
# check staging index in case object has not been written to object DB
|
470
|
+
staging? ? staging.path_to_object(path) : nil
|
466
471
|
end
|
467
472
|
|
468
473
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git-ds
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 33
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 9
|
9
9
|
- 8
|
10
|
-
-
|
11
|
-
version: 0.9.8.
|
10
|
+
- 3
|
11
|
+
version: 0.9.8.3
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- TG Community
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2011-
|
19
|
+
date: 2011-08-03 00:00:00 -04:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -72,7 +72,6 @@ extra_rdoc_files:
|
|
72
72
|
- README.rdoc
|
73
73
|
files:
|
74
74
|
- lib/git-ds.rb
|
75
|
-
- lib/git-ds/t.rb
|
76
75
|
- lib/git-ds/repo.rb
|
77
76
|
- lib/git-ds/config.rb
|
78
77
|
- lib/git-ds/transaction.rb
|
data/lib/git-ds/t.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
=begin rdoc
|
2
|
-
Subcribers that are notified when the model is changed. This is a Hash of
|
3
|
-
an ident (e.g. a classname, UUID, or symbol) to a 2-element array:
|
4
|
-
a callback method and an (optional) object to pass with that method.
|
5
|
-
=end
|
6
|
-
attr_reader :subscribers
|
7
|
-
|
8
|
-
@subscribers = {}
|
9
|
-
=begin rdoc
|
10
|
-
Subscribe to change notifications from the model. The provided callback will
|
11
|
-
be invoked whenever the model is modified (specifically, when an outer
|
12
|
-
Transaction or ExecCmd is completed).
|
13
|
-
|
14
|
-
A subscriber can use either block or argument syntax:
|
15
|
-
|
16
|
-
def func_cb(arg)
|
17
|
-
...
|
18
|
-
end
|
19
|
-
model.subscribe( self.ident, arg, func_cb )
|
20
|
-
|
21
|
-
# block callback
|
22
|
-
model.subscribe( self.ident ) { ... }
|
23
|
-
|
24
|
-
# block callback where arg is specified in advance
|
25
|
-
model.subscribe( self.ident, arg ) { |arg| ... }
|
26
|
-
=end
|
27
|
-
def subscribe(ident, obj=nil, func=nil, &block)
|
28
|
-
cb = (block_given?) ? block : func
|
29
|
-
@subscribers[ident] = [cb, obj]
|
30
|
-
end
|
31
|
-
|
32
|
-
=begin rdoc
|
33
|
-
Notify all subscribers that a change has occurred.
|
34
|
-
=end
|
35
|
-
def notify
|
36
|
-
@subscribers.each { |ident, (block,obj)} block.call(obj) }
|
37
|
-
end
|
38
|
-
|
39
|
-
=begin rdoc
|
40
|
-
Unsubscribe from change notification.
|
41
|
-
=end
|
42
|
-
def unsubscribe(ident)
|
43
|
-
@subscribers.delete(ident)
|
44
|
-
end
|