git-trac 0.0.20071106 → 0.0.20071107
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/Rakefile +1 -1
- data/lib/git/trac/attachment.rb +17 -4
- data/lib/git/trac/repository.rb +16 -10
- data/lib/git/trac/runner.rb +18 -3
- data/lib/git/trac/ticket.rb +4 -4
- data/test/execution_test.rb +9 -0
- metadata +2 -3
- data/test/execution_test.rb~ +0 -40
data/Rakefile
CHANGED
@@ -70,7 +70,7 @@ spec = Gem::Specification.new do |s|
|
|
70
70
|
|
71
71
|
s.files = [ "Rakefile", "README", "setup.rb" ]
|
72
72
|
s.files = s.files + Dir.glob( "lib/**/*.rb" )
|
73
|
-
s.files = s.files + Dir.glob( "test/**/*" ).reject { |item| item.include?( "\.svn" ) }
|
73
|
+
s.files = s.files + Dir.glob( "test/**/*" ).reject { |item| item[-1] == ?~ || item.include?( "\.svn" ) }
|
74
74
|
end
|
75
75
|
|
76
76
|
Rake::GemPackageTask.new(spec) do |p|
|
data/lib/git/trac/attachment.rb
CHANGED
@@ -13,7 +13,7 @@ module Git
|
|
13
13
|
def self.from_hpricot(ticket, html)
|
14
14
|
collection = []
|
15
15
|
return collection unless html
|
16
|
-
|
16
|
+
html.children.each do |element|
|
17
17
|
if !element.elem?
|
18
18
|
elsif element.name == "dd"
|
19
19
|
str = ""
|
@@ -22,7 +22,7 @@ module Git
|
|
22
22
|
elsif element.name = "dt"
|
23
23
|
texts = []
|
24
24
|
element.traverse_text {|x| texts << x.to_s}
|
25
|
-
if texts.first =~ /\A(\w*)(\.\d+)?\.(diff|patch)\Z/
|
25
|
+
if texts.first =~ /\A([\w-]*)(\.\d+)?\.(diff|patch)\Z/
|
26
26
|
time = Time.parse("#{texts[3]} +0000").utc
|
27
27
|
collection << new(ticket, texts[0], texts[2], time)
|
28
28
|
end
|
@@ -89,9 +89,22 @@ module Git
|
|
89
89
|
ticket.repository
|
90
90
|
end
|
91
91
|
|
92
|
-
def
|
92
|
+
def patch_with_root(root = nil)
|
93
|
+
if root && !root.empty? && p_value.zero?
|
94
|
+
patch = ""
|
95
|
+
body.each_line do |line|
|
96
|
+
line.sub!(/^([+-]{3} |Index: )([^\/].*)$/) { $1 + File.join(root, $2) }
|
97
|
+
patch << line
|
98
|
+
end
|
99
|
+
patch
|
100
|
+
else
|
101
|
+
body
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def apply(options = {})
|
93
106
|
repository.popen3("git-apply", "-p#{p_level}", :cached => true, :whitespace => "nowarn") do |inn,out,err|
|
94
|
-
inn.puts
|
107
|
+
inn.puts patch_with_root(options[:root])
|
95
108
|
inn.close
|
96
109
|
err.read.empty?
|
97
110
|
end
|
data/lib/git/trac/repository.rb
CHANGED
@@ -11,18 +11,21 @@ module Git
|
|
11
11
|
options, dir = dir, nil if dir.kind_of?(Hash)
|
12
12
|
dir ||= ENV["GIT_DIR"]
|
13
13
|
dir ||= Dir.getwd
|
14
|
-
|
15
|
-
Open3.popen3("git","rev-parse","--git-dir") do |i,o,e|
|
14
|
+
Dir.chdir(dir) do
|
15
|
+
@git_dir = Open3.popen3("git","rev-parse","--git-dir") do |i,o,e|
|
16
16
|
e.read.empty? ? o.read.chomp("\n") : nil
|
17
17
|
end
|
18
|
+
raise Git::Trac::Error, "Not a git repository" unless @git_dir
|
19
|
+
@git_dir = File.join(".",@git_dir) if @git_dir[0] == ?~
|
20
|
+
@git_dir = File.expand_path(@git_dir)
|
18
21
|
end
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
@options = options
|
23
|
+
reload
|
24
|
+
end
|
25
|
+
|
26
|
+
def reload #:nodoc:
|
27
|
+
@config = nil
|
28
|
+
@options = (config("trac")||{}).merge(@options)
|
26
29
|
end
|
27
30
|
|
28
31
|
def inspect
|
@@ -150,6 +153,9 @@ module Git
|
|
150
153
|
|
151
154
|
def agent
|
152
155
|
unless defined?(@agent)
|
156
|
+
unless url
|
157
|
+
raise Git::Trac::Error, "missing trac url: consider `git config trac.url http://tracurl`"
|
158
|
+
end
|
153
159
|
require 'mechanize'
|
154
160
|
@agent = WWW::Mechanize.new {|a| a.log = nil}
|
155
161
|
url = "#{url()}/login"
|
@@ -206,7 +212,7 @@ module Git
|
|
206
212
|
return number.to_i
|
207
213
|
else
|
208
214
|
hash = generated_commits
|
209
|
-
exec("git-rev-list", "HEAD", :
|
215
|
+
exec("git-rev-list", "HEAD", :max_count => 25) do |line|
|
210
216
|
number = hash[line.chomp] and return number
|
211
217
|
end
|
212
218
|
nil
|
data/lib/git/trac/runner.rb
CHANGED
@@ -142,7 +142,7 @@ directory.
|
|
142
142
|
def add_options(opts)
|
143
143
|
require_ticket_number
|
144
144
|
opts.separator("Options:")
|
145
|
-
opts.on("--filter PATTERN","only download
|
145
|
+
opts.on("--filter PATTERN","only download filenames matching PATTERN") do |pattern|
|
146
146
|
options[:filter] = pattern
|
147
147
|
end
|
148
148
|
end
|
@@ -152,7 +152,7 @@ directory.
|
|
152
152
|
@repository.ticket(number).attachments.each do |attach|
|
153
153
|
next if options[:filter] && attach.filename !~ /#{options[:filter]}/
|
154
154
|
File.open(attach.filename, "w") do |f|
|
155
|
-
f.puts attach.
|
155
|
+
f.puts attach.patch_with_root(options[:root])
|
156
156
|
end
|
157
157
|
end
|
158
158
|
end
|
@@ -173,6 +173,9 @@ Show a crude ticket summary.
|
|
173
173
|
|
174
174
|
def add_options(opts)
|
175
175
|
require_ticket_number
|
176
|
+
opts.on("--root DIR","apply patches relative to DIR") do |dir|
|
177
|
+
options[:root] = dir
|
178
|
+
end
|
176
179
|
end
|
177
180
|
|
178
181
|
def run
|
@@ -210,11 +213,20 @@ potentially remove conflicted branches first.
|
|
210
213
|
|
211
214
|
def add_options(opts)
|
212
215
|
require_ticket_number
|
216
|
+
opts.on("--branch BRANCH","apply against branch BRANCH") do |b|
|
217
|
+
options[:branch] = b
|
218
|
+
end
|
219
|
+
opts.on("--filter PATTERN","only fetch filenames matching PATTERN") do |pattern|
|
220
|
+
options[:filter] = pattern
|
221
|
+
end
|
222
|
+
opts.on("--root DIR","apply patches relative to DIR") do |dir|
|
223
|
+
options[:root] = dir
|
224
|
+
end
|
213
225
|
end
|
214
226
|
|
215
227
|
def run
|
216
228
|
number = get_ticket_number
|
217
|
-
@repository.ticket(number).fetch do |attachment, branch|
|
229
|
+
@repository.ticket(number).fetch(options) do |attachment, branch|
|
218
230
|
if branch
|
219
231
|
puts "#{attachment.filename}: #{branch}"
|
220
232
|
else
|
@@ -285,6 +297,9 @@ it against a production trac server.
|
|
285
297
|
opts.on("--branch BRANCH", "git diff BRANCH (default trunk)") do |b|
|
286
298
|
options[:branch] = b
|
287
299
|
end
|
300
|
+
opts.on("--description TEXT", "use TEXT as description") do |text|
|
301
|
+
options[:description] = text
|
302
|
+
end
|
288
303
|
end
|
289
304
|
|
290
305
|
def run
|
data/lib/git/trac/ticket.rb
CHANGED
@@ -97,9 +97,7 @@ module Git
|
|
97
97
|
attachment = form.file_uploads.name("attachment").first
|
98
98
|
attachment.file_name = filename
|
99
99
|
attachment.file_data = body
|
100
|
-
p form.fields
|
101
100
|
submission = form.submit
|
102
|
-
puts submission.instance_variable_get(:@body)
|
103
101
|
submission.instance_variable_get(:@uri)
|
104
102
|
end
|
105
103
|
|
@@ -139,10 +137,12 @@ module Git
|
|
139
137
|
seen = {}
|
140
138
|
repository.with_index("tracindex#{$$}") do
|
141
139
|
FileUtils.mkdir_p(trac_dir)
|
142
|
-
attachments.
|
140
|
+
attachments.select do |attachment|
|
141
|
+
attachment.filename =~ /#{options[:filter]}/
|
142
|
+
end.map do |attachment|
|
143
143
|
parent = repository.exec("git-rev-list","--max-count=1","--before=#{attachment.timestamp}",options[:branch] || 'trunk').chomp
|
144
144
|
repository.exec("git-read-tree",parent)
|
145
|
-
unless attachment.apply
|
145
|
+
unless attachment.apply(options)
|
146
146
|
yield attachment, false if block_given?
|
147
147
|
next
|
148
148
|
end
|
data/test/execution_test.rb
CHANGED
@@ -37,4 +37,13 @@ class ExecutionTest < Test::Unit::TestCase
|
|
37
37
|
assert_nothing_raised { @repo.exec("git-diff","HEAD") }
|
38
38
|
assert_raise(Git::Trac::ExecutionError) { @repo.exec("git-diff","TAIL") }
|
39
39
|
end
|
40
|
+
|
41
|
+
def test_should_determine_url
|
42
|
+
@repo.exec("git-config","svn-remote.svn.url","http://dev.rubyonrails.org/svn/rails")
|
43
|
+
@repo.reload
|
44
|
+
assert_equal "http://dev.rubyonrails.org", @repo.url
|
45
|
+
@repo.exec("git-config","trac.url","http://foo/trac.cgi")
|
46
|
+
@repo.reload
|
47
|
+
assert_equal "http://foo/trac.cgi", @repo.url
|
48
|
+
end
|
40
49
|
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
|
|
3
3
|
specification_version: 1
|
4
4
|
name: git-trac
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
7
|
-
date: 2007-11-
|
6
|
+
version: 0.0.20071107
|
7
|
+
date: 2007-11-07 00:00:00 -06:00
|
8
8
|
summary: Interact with trac from a git repository pulled from svn
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -39,7 +39,6 @@ files:
|
|
39
39
|
- lib/git/trac/runner.rb
|
40
40
|
- lib/git/trac/ticket.rb
|
41
41
|
- test/execution_test.rb
|
42
|
-
- test/execution_test.rb~
|
43
42
|
test_files: []
|
44
43
|
|
45
44
|
rdoc_options: []
|
data/test/execution_test.rb~
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'fileutils'
|
2
|
-
require 'tempfile'
|
3
|
-
require 'test/unit'
|
4
|
-
|
5
|
-
$: << File.join(File.dirname(File.dirname(__FILE__)),'lib')
|
6
|
-
require 'git/trac'
|
7
|
-
|
8
|
-
class ExecutionTest < Test::Unit::TestCase
|
9
|
-
|
10
|
-
def create_empty_repository(directory = nil)
|
11
|
-
if directory.nil?
|
12
|
-
file = Tempfile.new("git-trac-test")
|
13
|
-
directory = file.path
|
14
|
-
file.unlink
|
15
|
-
end
|
16
|
-
at_exit { FileUtils.rm_rf(directory) }
|
17
|
-
FileUtils.mkdir_p(directory)
|
18
|
-
Dir.chdir(directory) do
|
19
|
-
`git-init`
|
20
|
-
end
|
21
|
-
FileUtils.touch(File.join(directory,".gitignore"))
|
22
|
-
repo = Git::Trac::Repository.new(directory)
|
23
|
-
repo.exec("git-add",".gitignore")
|
24
|
-
repo.exec("git-commit","-m","Initial revision")
|
25
|
-
repo
|
26
|
-
end
|
27
|
-
|
28
|
-
def setup
|
29
|
-
@repo = create_empty_repository
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_rev_parse
|
33
|
-
assert_match(/^[0-9a-f]{40}$/, @repo.rev_parse("HEAD"))
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_stderr_should_raise
|
37
|
-
assert_nothing_raised {@repo.exec("git-diff","HEAD")}
|
38
|
-
assert_raise(Git::Trac::ExecutionError) {@repo.exec("git-diff","TAIL")}
|
39
|
-
end
|
40
|
-
end
|