git-ds 0.9.5.2 → 0.9.6

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 CHANGED
@@ -1,3 +1,9 @@
1
+ 2011-05-20 : mkfs <mkfs@thoughtgang.org>
2
+ * Fixed default-commmit bug in Database and Repo classes.
3
+
4
+ 2011-04-19 : mkfs <mkfs@thoughtgang.org>
5
+ * Added proxy_property alias for ModelItem.link_property
6
+
1
7
  2011-04-18 : mkfs <mkfs@thoughtgang.org>
2
8
  * Bumped gem version to 0.9.5
3
9
  * Added ModelItem.exist? class member
@@ -97,10 +97,10 @@ NOTE: This does not create a commit! Ony the staging index changes.
97
97
  def close(save=true)
98
98
  raise InvalidDbError if @stale
99
99
 
100
- if save && self.staging?
100
+ if save && staging?
101
101
  self.staging.write
102
102
  end
103
- self.staging = nil
103
+ unstage
104
104
  @stale = true
105
105
 
106
106
  # TODO: remove all locks etc
@@ -160,7 +160,7 @@ See ExecCmd.
160
160
  exec_in_staging(false, &block)
161
161
  self.staging.write
162
162
  ensure
163
- self.staging = nil
163
+ self.unstage
164
164
  end
165
165
 
166
166
  end
@@ -179,7 +179,7 @@ See Transaction.
179
179
  self.staging
180
180
  transaction_in_staging(false, &block)
181
181
  ensure
182
- self.staging = nil
182
+ self.unstage
183
183
  end
184
184
  end
185
185
 
@@ -234,7 +234,7 @@ Wrapper for Grit::Repo#tree that checks if Database has been closed.
234
234
  Generate a tag object for the most recent commit.
235
235
  =end
236
236
  def mark(msg)
237
- tag_object(msg, commits.first.id)
237
+ tag_object(msg, commits.last.id)
238
238
  end
239
239
 
240
240
  =begin rdoc
@@ -247,21 +247,22 @@ See Database#transaction .
247
247
  def branch_and_merge(name=next_branch_tag(), actor=nil, &block)
248
248
  raise InvalidDbError if @stale
249
249
 
250
+ # Force a commit before the merge
251
+ # TODO: determine if this is really necessary
252
+ staging.sync
253
+ staging.commit('auto-commit before branch-and-merge', self.actor)
254
+
255
+ # ensure staging index is nil [in case branch name was re-used]
256
+ unstage
250
257
 
251
258
  # save old actor
252
259
  old_actor = self.actor
253
260
  self.actor = actor if actor
254
261
 
255
- # save old staging
256
- saved_stage = (self.staging?) ? self.staging : nil
257
-
258
- sha = commits.first ? commits.first.id : nil
262
+ sha = commits.last ? commits.last.id : nil
259
263
  tag = create_branch(name, sha)
260
264
  set_branch(tag, self.actor)
261
265
 
262
- # ensure staging index is nil [in case branch name was re-used]
263
- unstage
264
-
265
266
  # execute block in a transaction
266
267
  rv = true
267
268
  begin
data/lib/git-ds/index.rb CHANGED
@@ -155,6 +155,7 @@ Index object for the Git staging index.
155
155
  @parent_commit = @repo.commit(sha)
156
156
  # read tree back into index
157
157
  read_tree(@parent_commit.tree.id)
158
+ sync
158
159
  end
159
160
  sha
160
161
  end
@@ -109,7 +109,7 @@ List all children of the ModelItem class inside parent_path.
109
109
  end
110
110
 
111
111
  =begin rdoc
112
- Generate an ident from a Hash of arguments.
112
+ Generate an ident (String) from a Hash of arguments.
113
113
 
114
114
  To be overridden by a modelitem class.
115
115
  =end
@@ -270,6 +270,7 @@ ModelItems, use a ModelItem List of ProxyModelItemClass objects.
270
270
  add_property ProxyProperty.new(name, cls, false, &block)
271
271
  end
272
272
 
273
+ alias :proxy_property :link_property
273
274
 
274
275
  =begin rdoc
275
276
  Hash of properties associated with this MOdelItem class.
@@ -307,7 +308,7 @@ The GitDS::Model that contains the object.
307
308
  def initialize_item(model, path)
308
309
  @model = model
309
310
  @path = path
310
- @ident = ::File.basename(path)
311
+ @ident = File.basename(path)
311
312
  end
312
313
 
313
314
  =begin rdoc
data/lib/git-ds/repo.rb CHANGED
@@ -134,7 +134,7 @@ The canonical name of the tag is returned.
134
134
  =end
135
135
  def create_branch( tag=next_branch_tag(), sha=nil )
136
136
  if not sha
137
- sha = commits.first.id
137
+ sha = commits.last.id
138
138
  #sha = branches.first.commit.id if not sha
139
139
  end
140
140
  name = clean_tag(tag)
@@ -147,20 +147,20 @@ Sets the current branch to the specified tag. This changes the default
147
147
  branch for all repo activity and sets HEAD.
148
148
  =end
149
149
  def set_branch( tag, actor=nil )
150
- # allow creating of new branches
150
+ # allow creating of new branches via -b if they do not exist
151
151
  opt = (is_head? tag) ? '' : '-b'
152
152
 
153
153
  # Save staging index for current branch
154
- @saved_stages[@current_branch] = self.staging if self.staging?
154
+ @saved_stages[@current_branch] = self.staging if staging?
155
155
 
156
156
  exec_git_cmd( "git checkout -q -m #{opt} '#{tag}'", actor )
157
157
 
158
158
  # Synchronize staging index (required before merge)
159
159
  unstage
160
- self.staging.sync
161
160
 
162
161
  # Update current_branch info and restore staging for branch
163
162
  self.staging = @saved_stages[tag]
163
+ self.staging.sync if staging?
164
164
  @current_branch = tag
165
165
  end
166
166
 
@@ -210,7 +210,7 @@ Return the staging index for the repo.
210
210
  =end
211
211
  def staging
212
212
  # TODO: mutex
213
- @staging_index ||= StageIndex.new(self)
213
+ @staging_index ||= StageIndex.read(self)
214
214
  end
215
215
 
216
216
  =begin rdoc
@@ -227,7 +227,7 @@ Close staging index.
227
227
  This discards all (non-committed) changes in the staging index.
228
228
  =end
229
229
  def unstage
230
- self.staging=(nil)
230
+ self.staging=(nil) # yes, the self is required. not sure why.
231
231
  end
232
232
 
233
233
  =begin rdoc
@@ -261,7 +261,7 @@ Returns SHA of commit.
261
261
  =end
262
262
  def stage_and_commit(msg, actor=nil, &block)
263
263
  stage(&block)
264
- sha = self.staging.commit(msg, actor)
264
+ sha = staging.commit(msg, actor)
265
265
  unstage
266
266
  sha
267
267
  end
@@ -401,7 +401,7 @@ Uses the staging index if it is active.
401
401
  return @staging_index.sha
402
402
  end
403
403
 
404
- (self.commits.count > 0) ? self.commits.first.tree.id : nil
404
+ (self.commits.count > 0) ? self.commits.last.tree.id : nil
405
405
  end
406
406
 
407
407
  =begin rdoc
data/tests/ut_database.rb CHANGED
@@ -279,6 +279,8 @@ class TC_GitDatabaseTest < Test::Unit::TestCase
279
279
  blob = index.current_tree./(name2)
280
280
  assert_not_nil(blob, "nested db.exec did not create '#{name2}' in staging")
281
281
  assert_equal(data2, blob.data, "BLOB data for '#{name2}' does not match")
282
+
283
+ @db.staging = nil
282
284
  end
283
285
 
284
286
  def test_branch
data/tests/ut_model.rb CHANGED
@@ -342,8 +342,24 @@ class TC_GitModelTest < Test::Unit::TestCase
342
342
  }
343
343
  end
344
344
 
345
+ def model_save(tag, &block)
346
+ opts = { :name => tag, :msg => tag }
347
+
348
+ if block_given?
349
+ tag = @model.db.clean_tag(tag)
350
+ @model.branched_transaction(tag, &block)
351
+ # @model.branch = tag # set current branch to tag
352
+ @model.db.merge_branch(tag)
353
+ end
354
+
355
+ sha = @model.db.staging.commit(opts[:msg])
356
+ @model.db.tag_object(opts[:name], sha)
357
+ @model.db.unstage
358
+ end
359
+
345
360
  def test_branch
346
361
  num = @model.db.heads.count
362
+ @model.db.staging = nil
347
363
  @model.branched_transaction {
348
364
  index.add('tmp/1', '1')
349
365
  }
@@ -358,6 +374,22 @@ class TC_GitModelTest < Test::Unit::TestCase
358
374
  assert_equal(1,
359
375
  @model.db.heads.select{|h| h.name == @model.db.clean_tag(name)}.count,
360
376
  'Named BranchTransaction not present.')
377
+
378
+ # Model#save test
379
+ index = @model.db.staging
380
+ index.add('.stuff/canary', 'abcdef', false)
381
+ index.commit('done')
382
+ @model.db.unstage
383
+
384
+ model = @model
385
+ model_save('v1') do |opts|
386
+ model.db.stage.add('tmp/save_1', '1', true)
387
+ end
388
+
389
+ model_save('v2') do |opts|
390
+ model.db.stage.add('tmp/save_2', '2', true)
391
+ end
392
+
361
393
  end
362
394
 
363
395
  end
@@ -307,7 +307,7 @@ class TC_GitUserGroupModelTest < Test::Unit::TestCase
307
307
  user_defs.each { |u| u[:obj].delete }
308
308
 
309
309
  g.delete
310
- assert( (not @model.exist? path) )
310
+ assert( (not @model.exist? path), 'path not deleted!' )
311
311
  assert_equal(0, GroupModelItem.list(@model.root).count, '>0 Groups exist')
312
312
 
313
313
  assert_raises(GitDS::InvalidModelItemError, 'Deleted item still usable') {
metadata CHANGED
@@ -1,33 +1,46 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: git-ds
3
- version: !ruby/object:Gem::Version
4
- version: 0.9.5.2
3
+ version: !ruby/object:Gem::Version
4
+ hash: 55
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 9
9
+ - 6
10
+ version: 0.9.6
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - TG Community
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2011-04-18 00:00:00.000000000 -04:00
17
+
18
+ date: 2011-05-20 00:00:00 -04:00
13
19
  default_executable:
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
16
22
  name: grit
17
- requirement: &20831860 !ruby/object:Gem::Requirement
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
18
25
  none: false
19
- requirements:
20
- - - ! '>='
21
- - !ruby/object:Gem::Version
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 7
30
+ segments:
31
+ - 2
32
+ - 2
33
+ - 0
22
34
  version: 2.2.0
23
35
  type: :runtime
24
- prerelease: false
25
- version_requirements: *20831860
36
+ version_requirements: *id001
26
37
  description: A hierarchical datastore based on Git.
27
38
  email: community@thoughtgang.org
28
39
  executables: []
40
+
29
41
  extensions: []
30
- extra_rdoc_files:
42
+
43
+ extra_rdoc_files:
31
44
  - doc/Examples.rdoc
32
45
  - doc/examples/key_value/kv_get.rb
33
46
  - doc/examples/key_value/kv_list.rb
@@ -56,7 +69,7 @@ extra_rdoc_files:
56
69
  - doc/examples/test_suite/ts_add_bug.rb
57
70
  - doc/examples/test_suite/ts_add_module_to_test.rb
58
71
  - README.rdoc
59
- files:
72
+ files:
60
73
  - lib/git-ds.rb
61
74
  - lib/git-ds/model.rb
62
75
  - lib/git-ds/exec_cmd.rb
@@ -112,31 +125,41 @@ files:
112
125
  - README.rdoc
113
126
  has_rdoc: true
114
127
  homepage: http://www.thoughtgang.org
115
- licenses:
128
+ licenses:
116
129
  - GPLv3
117
130
  post_install_message:
118
131
  rdoc_options: []
119
- require_paths:
132
+
133
+ require_paths:
120
134
  - lib
121
- required_ruby_version: !ruby/object:Gem::Requirement
135
+ required_ruby_version: !ruby/object:Gem::Requirement
122
136
  none: false
123
- requirements:
124
- - - ! '>='
125
- - !ruby/object:Gem::Version
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ hash: 57
141
+ segments:
142
+ - 1
143
+ - 8
144
+ - 7
126
145
  version: 1.8.7
127
- required_rubygems_version: !ruby/object:Gem::Requirement
146
+ required_rubygems_version: !ruby/object:Gem::Requirement
128
147
  none: false
129
- requirements:
130
- - - ! '>='
131
- - !ruby/object:Gem::Version
132
- version: '0'
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ hash: 3
152
+ segments:
153
+ - 0
154
+ version: "0"
133
155
  requirements: []
156
+
134
157
  rubyforge_project: git-db
135
- rubygems_version: 1.6.2
158
+ rubygems_version: 1.4.1
136
159
  signing_key:
137
160
  specification_version: 3
138
161
  summary: Git-DS
139
- test_files:
162
+ test_files:
140
163
  - tests/ut_git_grit_equiv.rb
141
164
  - tests/ut_user_group_model.rb
142
165
  - tests/ut_model.rb