treet 0.13.1 → 0.14.0

Sign up to get free protection for your applications and to get access to all the features.
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