right_develop 1.2.2 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.ruby-version +1 -0
- data/CHANGELOG.rdoc +6 -1
- data/Rakefile +5 -3
- data/VERSION +1 -1
- data/lib/right_develop/ci/java_spec_formatter.rb +1 -1
- data/lib/right_develop/commands/git.rb +28 -2
- data/lib/right_develop/git/rake_task.rb +102 -0
- data/lib/right_develop/git.rb +27 -19
- data/lib/right_develop/parsers/sax_parser.rb +22 -5
- data/lib/right_develop/parsers/xml_post_parser.rb +11 -2
- data/lib/right_develop/parsers.rb +1 -1
- data/lib/right_develop/s3/interface.rb +298 -0
- data/lib/right_develop/s3/rake_task.rb +168 -0
- data/lib/right_develop/s3.rb +31 -0
- data/lib/right_develop/utility/git.rb +364 -0
- data/lib/right_develop/utility/shell.rb +131 -0
- data/lib/right_develop/utility/versioning.rb +183 -0
- data/lib/right_develop/utility.rb +32 -0
- data/lib/right_develop.rb +3 -1
- data/right_develop.gemspec +25 -298
- data/right_develop.rconf +3 -3
- metadata +184 -1729
- data/lib/right_develop/git/branch.rb +0 -74
- data/lib/right_develop/git/branch_collection.rb +0 -72
- data/lib/right_develop/git/commit.rb +0 -30
- data/lib/right_develop/git/repository.rb +0 -57
@@ -1,74 +0,0 @@
|
|
1
|
-
module RightDevelop::Git
|
2
|
-
# A branch in a Git repository. Has some proxy methods that make it act a bit like
|
3
|
-
# a string, whose value is the name of the branch. This allows branches to be sorted,
|
4
|
-
# matched against Regexp, and certain other string-y operations.
|
5
|
-
class Branch
|
6
|
-
BRANCH_NAME = '[#A-Za-z0-9._\/-]+'
|
7
|
-
BRANCH_INFO = /(\* | )?(#{BRANCH_NAME})( -> )?(#{BRANCH_NAME})?/
|
8
|
-
BRANCH_FULLNAME = /(remotes\/)?(#{BRANCH_NAME})/
|
9
|
-
|
10
|
-
def initialize(repo, line)
|
11
|
-
match = BRANCH_INFO.match(line)
|
12
|
-
if match && (fullname = match[2])
|
13
|
-
match = BRANCH_FULLNAME.match(fullname)
|
14
|
-
if match
|
15
|
-
@fullname = match[2]
|
16
|
-
@remote = !!match[1]
|
17
|
-
@repo = repo
|
18
|
-
else
|
19
|
-
raise FormatError, "Unrecognized branch name '#{line}'"
|
20
|
-
end
|
21
|
-
else
|
22
|
-
raise FormatError, "Unrecognized branch info '#{line}'"
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def to_s
|
27
|
-
@fullname
|
28
|
-
end
|
29
|
-
alias inspect to_s
|
30
|
-
|
31
|
-
def =~(other)
|
32
|
-
@fullname =~ other
|
33
|
-
end
|
34
|
-
|
35
|
-
def ==(other)
|
36
|
-
self.to_s == other.to_s
|
37
|
-
end
|
38
|
-
|
39
|
-
def <=>(other)
|
40
|
-
self.to_s <=> other.to_s
|
41
|
-
end
|
42
|
-
|
43
|
-
def remote?
|
44
|
-
@remote
|
45
|
-
end
|
46
|
-
|
47
|
-
def name
|
48
|
-
if remote?
|
49
|
-
#remove the initial remote-name in the branch (origin/master --> master)
|
50
|
-
bits = @fullname.split('/')
|
51
|
-
bits.shift
|
52
|
-
bits.join('/')
|
53
|
-
else
|
54
|
-
@fullname
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
def display(width=40)
|
59
|
-
if @fullname.length >= width
|
60
|
-
(@fullname[0..(width-5)] + "...").ljust(width)
|
61
|
-
else
|
62
|
-
@fullname.ljust(width)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def delete
|
67
|
-
if self.remote?
|
68
|
-
@repo.shell("git push origin :#{self.name}")
|
69
|
-
else
|
70
|
-
@repo.shell("git branch -D #{@fullname}")
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
@@ -1,72 +0,0 @@
|
|
1
|
-
module RightDevelop::Git
|
2
|
-
# A collection of Git branches. Acts a bit like an Array, allowing it to be mapped,
|
3
|
-
# sorted and compared as such.
|
4
|
-
class BranchCollection
|
5
|
-
def initialize(repo, *args)
|
6
|
-
@repo = repo
|
7
|
-
@branches = args
|
8
|
-
end
|
9
|
-
|
10
|
-
def to_s
|
11
|
-
@branches.inspect
|
12
|
-
end
|
13
|
-
alias inspect to_s
|
14
|
-
|
15
|
-
def local
|
16
|
-
local = BranchCollection.new(@repo)
|
17
|
-
@branches.each do |branch|
|
18
|
-
local << branch unless branch.remote?
|
19
|
-
end
|
20
|
-
local
|
21
|
-
end
|
22
|
-
|
23
|
-
def remote
|
24
|
-
remote = BranchCollection.new(@repo)
|
25
|
-
@branches.each do |branch|
|
26
|
-
remote << branch if branch.remote?
|
27
|
-
end
|
28
|
-
remote
|
29
|
-
end
|
30
|
-
|
31
|
-
def merged(target)
|
32
|
-
merged = BranchCollection.new(@repo)
|
33
|
-
|
34
|
-
all_merged = shell("git branch -r --merged #{target}").map do |line|
|
35
|
-
Branch.new(@repo, line)
|
36
|
-
end
|
37
|
-
|
38
|
-
@branches.each do |candidate|
|
39
|
-
# For some reason Set#include? does not play nice with our overridden comparison operators
|
40
|
-
# for branches, so we need to do this the hard way :(
|
41
|
-
merged << candidate if all_merged.detect { |b| candidate == b }
|
42
|
-
end
|
43
|
-
|
44
|
-
merged
|
45
|
-
end
|
46
|
-
|
47
|
-
# Accessor that acts like either a Hash or Array accessor
|
48
|
-
def [](argument)
|
49
|
-
case argument
|
50
|
-
when String
|
51
|
-
target = Branch.new(@repo, argument)
|
52
|
-
@branches.detect { |b| b == target }
|
53
|
-
else
|
54
|
-
@branches.__send__(:[], argument)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
def method_missing(meth, *args, &block)
|
59
|
-
result = @branches.__send__(meth, *args, &block)
|
60
|
-
|
61
|
-
if result.is_a?(Array)
|
62
|
-
BranchCollection.new(@repo, *result)
|
63
|
-
else
|
64
|
-
result
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def shell(cmd, *args)
|
69
|
-
@repo.shell(cmd, *args)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
module RightDevelop::Git
|
2
|
-
# A commit within a Git repository.
|
3
|
-
class Commit
|
4
|
-
COMMIT_INFO = /([0-9A-Fa-f]+) ([0-9]+) (.*)/
|
5
|
-
|
6
|
-
def initialize(repo, line)
|
7
|
-
@repo = repo
|
8
|
-
match = COMMIT_INFO.match(line)
|
9
|
-
raise FormatError, "Unrecognized commit summary '#{line}'" unless match && match.length >= 3
|
10
|
-
@info = [ match[1], match[2], match[3] ]
|
11
|
-
end
|
12
|
-
|
13
|
-
def to_s
|
14
|
-
@info.join(' ')
|
15
|
-
end
|
16
|
-
|
17
|
-
def hash
|
18
|
-
# This overrides String#hash on purpose
|
19
|
-
@info[0]
|
20
|
-
end
|
21
|
-
|
22
|
-
def timestamp
|
23
|
-
Time.at(@info[1].to_i)
|
24
|
-
end
|
25
|
-
|
26
|
-
def author
|
27
|
-
@info[2]
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,57 +0,0 @@
|
|
1
|
-
module RightDevelop::Git
|
2
|
-
# An entire Git repository. Mostly acts as a factory for Branch,
|
3
|
-
# BranchCollection and Commit objects.
|
4
|
-
class Repository
|
5
|
-
DEFAULT_LOG_OPTIONS = {
|
6
|
-
:tail=>1_000
|
7
|
-
}
|
8
|
-
|
9
|
-
def initialize(dir)
|
10
|
-
@dir = dir
|
11
|
-
end
|
12
|
-
|
13
|
-
def fetch
|
14
|
-
shell('git fetch -q')
|
15
|
-
end
|
16
|
-
|
17
|
-
def branches()
|
18
|
-
lines = shell('git branch -a')
|
19
|
-
branches = BranchCollection.new(self)
|
20
|
-
lines.each do |line|
|
21
|
-
branch = Branch.new(self, line)
|
22
|
-
branches << branch if branch
|
23
|
-
end
|
24
|
-
branches
|
25
|
-
end
|
26
|
-
|
27
|
-
def log(branch_spec='master', options={})
|
28
|
-
options = DEFAULT_LOG_OPTIONS.merge(options)
|
29
|
-
|
30
|
-
args = [
|
31
|
-
"-n#{options[:tail]}",
|
32
|
-
"--format='%h %at %aE'"
|
33
|
-
]
|
34
|
-
if options[:no_merges]
|
35
|
-
args << "--no-merges"
|
36
|
-
end
|
37
|
-
|
38
|
-
lines = shell("git log #{args.join(' ')} #{branch_spec}")
|
39
|
-
lines.map do |line|
|
40
|
-
Commit.new(self, line)
|
41
|
-
end.compact
|
42
|
-
end
|
43
|
-
|
44
|
-
def shell(cmd, *args)
|
45
|
-
Dir.chdir(@dir) do
|
46
|
-
|
47
|
-
full_cmd="#{cmd} #{args.join ' '}"
|
48
|
-
output = `#{full_cmd}`
|
49
|
-
if $?.success?
|
50
|
-
return output.split("\n").map { |l| l.strip }
|
51
|
-
else
|
52
|
-
raise CommandError, "#{full_cmd} --> #{output}"
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|