treet 0.13.1 → 0.14.0

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/lib/treet/gitrepo.rb CHANGED
@@ -25,19 +25,25 @@ class Treet::Gitrepo < Treet::Repo
25
25
  gitrepo.refs(/tags/)
26
26
  end
27
27
 
28
- def tag(tagname)
28
+ def tag(tagname, opts = {})
29
29
  refname = "refs/tags/#{tagname}"
30
- begin
31
- if tag_ref = Rugged::Reference.lookup(gitrepo, refname)
32
- # move an existing tag
33
- tag_ref.target = head.target
34
- else
35
- # new tag
36
- Rugged::Reference.create(gitrepo, refname, head.target)
37
- end
38
- rescue Rugged::ReferenceError
39
- # invalid string for source, e.g. blank or illegal punctuation (colons)
40
- raise ArgumentError, "invalid source string '#{tagname}' for repository tagging"
30
+ commit = opts[:commit] || head.target
31
+ if tag_ref = Rugged::Reference.lookup(gitrepo, refname)
32
+ # move an existing tag
33
+ tag_ref.target = commit
34
+ else
35
+ # new tag
36
+ Rugged::Reference.create(gitrepo, refname, commit)
37
+ end
38
+ rescue Rugged::ReferenceError, Rugged::InvalidError => e
39
+ # invalid string for source, e.g. blank or illegal punctuation (colons)
40
+ # or opts[:commit] is invalid
41
+ raise ArgumentError, "unable to tag '#{tagname}' on repo: #{e.message}"
42
+ end
43
+
44
+ def detag(tagname)
45
+ if tag_ref = Rugged::Reference.lookup(gitrepo, "refs/tags/#{tagname}")
46
+ tag_ref.delete!
41
47
  end
42
48
  end
43
49
 
data/lib/treet/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Treet
2
- VERSION = "0.13.1"
2
+ VERSION = "0.14.0"
3
3
  end
@@ -8,7 +8,7 @@ require "test_helper"
8
8
  # patch a gitrepo (with commit) - verify commit structure
9
9
  # pulling past snapshots
10
10
 
11
- describe Treet::Gitrepo do
11
+ class GitrepoTests < MiniTest::Spec
12
12
  def self.make_gitrepo(filename, opts = {})
13
13
  thash = Treet::Hash.new(load_json(filename))
14
14
  trepo = thash.to_repo(Dir.mktmpdir('repo', $topdir))
@@ -123,8 +123,8 @@ describe Treet::Gitrepo do
123
123
 
124
124
 
125
125
  describe "a patched gitrepo" do
126
- def self.patch_johnb
127
- @memo ||= begin
126
+ def repo
127
+ @@repo_patch ||= begin
128
128
  data = {
129
129
  "name" => {
130
130
  "full" => "John Bigbooté"
@@ -133,18 +133,17 @@ describe Treet::Gitrepo do
133
133
  thash = Treet::Hash.new(data)
134
134
  trepo = thash.to_repo(Dir.mktmpdir('repo', $topdir))
135
135
  r = Treet::Gitrepo.new(trepo.root, :author => {:name => 'Bob', :email => 'bob@example.com'})
136
- r.patch([
137
- [
138
- "+",
139
- "org.name",
140
- "Bigcorp"
141
- ]
142
- ])
136
+ @@v1 = r.version
137
+ r.patch([["+", "org.name", "Bigcorp"]])
138
+ @@v2 = r.version
139
+ r.patch([["+", "name.first", "John"], ["+", "name.last", "Bigbooté"]])
140
+ @@v3 = r.version
141
+ r.patch([["+", "name.last", "Bigbritches"]])
143
142
  r
144
143
  end
145
144
  end
146
145
 
147
- let(:repo) { self.class.patch_johnb }
146
+ # let(:repo) { self.class.patch_johnb }
148
147
 
149
148
  it "should have correct git index" do
150
149
  repo.index.count.must_equal 2
@@ -153,26 +152,35 @@ describe Treet::Gitrepo do
153
152
  end
154
153
 
155
154
  it "should hashify correctly" do
156
- expectation = load_json('one').merge({'org' => {'name' => 'Bigcorp'}})
155
+ expectation = {
156
+ 'name' => {'full' => 'John Bigbooté', 'first' => 'John', 'last' => 'Bigbritches'},
157
+ 'org' => {'name' => 'Bigcorp'}
158
+ }
157
159
  repo.to_hash.must_equal expectation
158
160
  end
159
161
 
160
162
  it "should have 2 commits" do
161
163
  r = Rugged::Repository.new(repo.root)
162
164
  latest_commit = r.head.target
163
- r.lookup(latest_commit).parents.count.must_equal 1
164
- previous_commit = r.lookup(latest_commit).parents.first
165
- previous_commit.parents.must_be_empty
165
+ walker = Rugged::Walker.new(r)
166
+ walker.push(latest_commit)
167
+ walker.count.must_equal 4
166
168
  end
167
169
 
168
170
  it "should have no tags" do
169
171
  repo.tags.must_be_empty
170
172
  end
171
173
 
172
- # it "should be able to reverse-engineer the patch from the git history" do
173
- # skip
174
- # # rugged has a `Rugged::Commit#diff-tree` on the roadmap (see `USAGE.rb`), not yet implemented
175
- # end
174
+ it "should be able to attach tags to commits" do
175
+ repo.tag('foo')
176
+ repo.version(:tag => 'foo').must_equal repo.version
177
+ repo.tag('foo', :commit => @@v1)
178
+ repo.version(:tag => 'foo').must_equal @@v1
179
+ repo.version(:tag => 'foo').wont_equal repo.version
180
+ ->{repo.tag('foo', :commit => 'junk')}.must_raise ArgumentError
181
+ ->{repo.tag('foo', :commit => @@v2.reverse)}.must_raise ArgumentError
182
+ repo.detag('foo')
183
+ end
176
184
  end
177
185
 
178
186
  describe "patched with a delete" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: treet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.1
4
+ version: 0.14.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-19 00:00:00.000000000 Z
12
+ date: 2013-04-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
@@ -206,7 +206,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
206
206
  version: '0'
207
207
  segments:
208
208
  - 0
209
- hash: 1191802132244638868
209
+ hash: 3982221712391638709
210
210
  required_rubygems_version: !ruby/object:Gem::Requirement
211
211
  none: false
212
212
  requirements:
@@ -215,7 +215,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
215
215
  version: '0'
216
216
  segments:
217
217
  - 0
218
- hash: 1191802132244638868
218
+ hash: 3982221712391638709
219
219
  requirements: []
220
220
  rubyforge_project:
221
221
  rubygems_version: 1.8.24