graal 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +1 -1
- data/lib/graal.rb +6 -2
- data/lib/graal/actor.rb +16 -0
- data/lib/graal/blob.rb +1 -1
- data/lib/graal/commit.rb +35 -0
- data/lib/graal/exe/backend.rb +1 -0
- data/lib/graal/exe/git.rb +39 -12
- data/lib/graal/exe/git_ruby.rb +41 -0
- data/lib/graal/log.rb +60 -0
- data/lib/graal/tree.rb +19 -24
- data/lib/graal/tree_blob.rb +22 -4
- data/lib/graal/version.rb +1 -1
- metadata +5 -34
data/README.md
CHANGED
data/lib/graal.rb
CHANGED
data/lib/graal/actor.rb
ADDED
data/lib/graal/blob.rb
CHANGED
data/lib/graal/commit.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'graal/tree'
|
2
2
|
require 'graal/blob'
|
3
|
+
require 'graal/actor'
|
3
4
|
|
4
5
|
module Graal
|
5
6
|
|
@@ -8,5 +9,39 @@ module Graal
|
|
8
9
|
def initialize(backend, revision)
|
9
10
|
super(backend, revision, '')
|
10
11
|
end
|
12
|
+
|
13
|
+
def parent
|
14
|
+
Commit.new(@backend, info[0])
|
15
|
+
end
|
16
|
+
|
17
|
+
def author
|
18
|
+
@author ||= Actor.new(info[1], info[2])
|
19
|
+
end
|
20
|
+
|
21
|
+
def author_date
|
22
|
+
@author_date ||= Time.at(info[3].to_i)
|
23
|
+
end
|
24
|
+
|
25
|
+
def committer
|
26
|
+
@committer ||= Actor.new(info[4], info[5])
|
27
|
+
end
|
28
|
+
|
29
|
+
def committer_date
|
30
|
+
@committer_date ||= Time.at(info[6].to_i)
|
31
|
+
end
|
32
|
+
|
33
|
+
def subject
|
34
|
+
@subject ||= info[7]
|
35
|
+
end
|
36
|
+
|
37
|
+
def body
|
38
|
+
@body ||= info.length > 8 ? info[8] : ''
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def info
|
44
|
+
@info ||= @backend.commit_info(@revision)
|
45
|
+
end
|
11
46
|
end
|
12
47
|
end
|
data/lib/graal/exe/backend.rb
CHANGED
data/lib/graal/exe/git.rb
CHANGED
@@ -4,6 +4,13 @@ module Graal::Backend::Exe
|
|
4
4
|
|
5
5
|
class Git
|
6
6
|
|
7
|
+
COMMIT_SHOW_FORMAT = '--pretty=format:' + [
|
8
|
+
'%P',
|
9
|
+
'%an', '%ae', '%at',
|
10
|
+
'%cn', '%ce', '%ct',
|
11
|
+
'%s', '%-b'
|
12
|
+
] * '%n'
|
13
|
+
|
7
14
|
class Result
|
8
15
|
|
9
16
|
attr_reader :exit_code, :output, :error
|
@@ -31,7 +38,7 @@ module Graal::Backend::Exe
|
|
31
38
|
|
32
39
|
def run_with_pathspec(cmd, *args, pathspec)
|
33
40
|
command_line = ['git', cmd, *args]
|
34
|
-
unless pathspec.nil?
|
41
|
+
unless pathspec.nil? or pathspec.empty?
|
35
42
|
command_line << '--'
|
36
43
|
command_line << pathspec
|
37
44
|
end
|
@@ -48,7 +55,7 @@ module Graal::Backend::Exe
|
|
48
55
|
result.output.split("\n")
|
49
56
|
end
|
50
57
|
|
51
|
-
def
|
58
|
+
def gitid_for(revision, path)
|
52
59
|
if path.empty?
|
53
60
|
result = run('rev-parse', revision).output.chomp
|
54
61
|
else
|
@@ -57,27 +64,47 @@ module Graal::Backend::Exe
|
|
57
64
|
end
|
58
65
|
end
|
59
66
|
|
60
|
-
def
|
61
|
-
result = run('
|
67
|
+
def commit_info(revision)
|
68
|
+
result = run('show', '--quiet', COMMIT_SHOW_FORMAT, revision)
|
69
|
+
ary = result.output.split("\n")
|
70
|
+
ary[8] = ary[8..-1] * "\n" if ary.size > 9
|
71
|
+
ary
|
72
|
+
end
|
73
|
+
|
74
|
+
def log(revision, path, raw_opts = {})
|
75
|
+
opts = parse_opts(raw_opts)
|
76
|
+
result = run_with_pathspec('rev-list', *opts, revision, path)
|
77
|
+
result.output.split("\n")
|
78
|
+
end
|
79
|
+
|
80
|
+
def child(gitid, fullpath)
|
81
|
+
result = run('ls-tree', gitid, fullpath)
|
62
82
|
return result.output.split(" ")[1..2]
|
63
83
|
end
|
64
84
|
|
65
|
-
def children(
|
66
|
-
|
67
|
-
|
68
|
-
result
|
69
|
-
return result.output.split("\n").map do |line|
|
85
|
+
def children(gitid, path, filter = nil)
|
86
|
+
result = run('ls-tree', gitid, path)
|
87
|
+
children = []
|
88
|
+
result.output.split("\n").each do |line|
|
70
89
|
splitted = line.split(" ")
|
71
|
-
|
90
|
+
next unless filter.nil? or splitted[1] == filter
|
91
|
+
children << [splitted[1], splitted[3], splitted[2]]
|
72
92
|
end
|
93
|
+
children
|
73
94
|
end
|
74
95
|
|
75
|
-
def blob_contents(
|
76
|
-
run('cat-file', '-p',
|
96
|
+
def blob_contents(gitid)
|
97
|
+
run('cat-file', '-p', gitid).output
|
77
98
|
end
|
78
99
|
|
79
100
|
private
|
80
101
|
|
102
|
+
def parse_opts(opts)
|
103
|
+
opts.each_with_object([]) do |opt, array|
|
104
|
+
array << '--' + (opt[1] == true ? opt[0] : opt * '=')
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
81
108
|
def do_run(command_line)
|
82
109
|
process = ChildProcess.build(*command_line)
|
83
110
|
process.cwd = @repository
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Graal::Backend::Exe
|
2
|
+
|
3
|
+
class Git
|
4
|
+
|
5
|
+
def heads
|
6
|
+
refs('heads')
|
7
|
+
end
|
8
|
+
|
9
|
+
def tags
|
10
|
+
refs('tags')
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def git_directory
|
16
|
+
live = File.join(@repository, '.git')
|
17
|
+
return live if File.exists? live
|
18
|
+
return @repository
|
19
|
+
end
|
20
|
+
|
21
|
+
def refs(type)
|
22
|
+
refs = []
|
23
|
+
git_dir = git_directory
|
24
|
+
|
25
|
+
refs_dir = File.join(git_dir, 'refs', type)
|
26
|
+
if File.exists? refs_dir
|
27
|
+
Dir.chdir refs_dir do
|
28
|
+
Dir['*'].each { |ref| refs << ref if File.file?(ref) }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
packed = File.join(git_dir, 'packed-refs')
|
33
|
+
if File.exists? packed
|
34
|
+
pattern = %r{ refs/#{type}/(.+)$}
|
35
|
+
File.read(packed).scan(pattern).each { |m| refs << m.first }
|
36
|
+
end
|
37
|
+
|
38
|
+
refs
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/graal/log.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
module Graal
|
2
|
+
|
3
|
+
class Log < Enumerator
|
4
|
+
|
5
|
+
def initialize(backend, revision, path, opts = {})
|
6
|
+
super() do |yielder|
|
7
|
+
commits_id = @backend.log(revision, path, opts)
|
8
|
+
commits_id.each { |cid| yielder << Commit.new(@backend, cid) }
|
9
|
+
end
|
10
|
+
|
11
|
+
@backend = backend
|
12
|
+
@revision = revision
|
13
|
+
@path = path
|
14
|
+
@opts = opts
|
15
|
+
end
|
16
|
+
|
17
|
+
def number(n)
|
18
|
+
push_opt('max-count', n)
|
19
|
+
end
|
20
|
+
alias n number
|
21
|
+
alias max_count number
|
22
|
+
|
23
|
+
def skip(n)
|
24
|
+
push_opt('skip', n)
|
25
|
+
end
|
26
|
+
|
27
|
+
def since(time)
|
28
|
+
push_opt('since', time_pattern_for(time))
|
29
|
+
end
|
30
|
+
alias after since
|
31
|
+
|
32
|
+
def until(time)
|
33
|
+
push_opt('until', time_pattern_for(time))
|
34
|
+
end
|
35
|
+
alias before until
|
36
|
+
|
37
|
+
def author(actor)
|
38
|
+
push_opt('author', actor_pattern_for(actor))
|
39
|
+
end
|
40
|
+
|
41
|
+
def committer(actor)
|
42
|
+
push_opt('committer', actor_pattern_for(actor))
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def push_opt(name, value = true)
|
48
|
+
Log.new(@backend, @revision, @path, @opts.merge(name => value))
|
49
|
+
end
|
50
|
+
|
51
|
+
def time_pattern_for(time_or_pattern)
|
52
|
+
return time_or_pattern.to_i if time_or_pattern.is_a? Time
|
53
|
+
end
|
54
|
+
|
55
|
+
def actor_pattern_for(actor_or_pattern)
|
56
|
+
return actor_or_pattern.header_line if actor_or_pattern.is_a? Actor
|
57
|
+
actor_or_pattern
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
data/lib/graal/tree.rb
CHANGED
@@ -8,49 +8,44 @@ module Graal
|
|
8
8
|
fullpath = File.join(@path, child_path)
|
9
9
|
fullpath[ 0] = '' if fullpath[ 0] == ?/
|
10
10
|
fullpath[-1] = '' if fullpath[-1] == ?/
|
11
|
-
type,
|
12
|
-
child_for(type, fullpath,
|
11
|
+
type, child_gitid = @backend.child(gitid, fullpath)
|
12
|
+
child_for(type, fullpath, child_gitid)
|
13
13
|
end
|
14
14
|
alias [] child
|
15
15
|
alias / child
|
16
16
|
|
17
|
-
def children
|
18
|
-
|
19
|
-
@backend.children(hash, @path).each { |data| yield child_for(*data) }
|
20
|
-
nil
|
17
|
+
def children(&block)
|
18
|
+
enum_children(:children, &block)
|
21
19
|
end
|
22
20
|
alias each_child children
|
23
21
|
alias list children
|
24
22
|
alias ls children
|
25
23
|
|
26
|
-
def trees
|
27
|
-
|
28
|
-
children = @backend.children(hash, @path).each do |data|
|
29
|
-
yield child_for(*data) if data[0] == 'tree'
|
30
|
-
end
|
31
|
-
nil
|
24
|
+
def trees(&block)
|
25
|
+
enum_children(:trees, 'tree', &block)
|
32
26
|
end
|
33
27
|
alias each_tree trees
|
34
28
|
alias list_trees trees
|
35
29
|
|
36
|
-
def blobs
|
37
|
-
|
38
|
-
@backend.children(hash, @path).each do |data|
|
39
|
-
yield child_for(*data) if data[0] == 'blob'
|
40
|
-
end
|
41
|
-
nil
|
30
|
+
def blobs(&block)
|
31
|
+
enum_children(:blobs, 'blob', &block)
|
42
32
|
end
|
43
33
|
alias each_blob blobs
|
44
34
|
alias list_blobs blobs
|
45
35
|
|
46
36
|
private
|
47
37
|
|
48
|
-
def
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
38
|
+
def enum_children(method, filter = nil)
|
39
|
+
dirpath = @path.empty? ? path : path + '/'
|
40
|
+
@backend.children(gitid, dirpath, filter).each do |data|
|
41
|
+
yield child_for(*data)
|
42
|
+
end if block_given?
|
43
|
+
Enumerator.new(self, method)
|
44
|
+
end
|
45
|
+
|
46
|
+
def child_for(type, fullpath, gitid)
|
47
|
+
return Blob.new(@backend, @revision, fullpath, gitid) if type == 'blob'
|
48
|
+
Tree.new(@backend, @revision, fullpath, gitid)
|
54
49
|
end
|
55
50
|
end
|
56
51
|
end
|
data/lib/graal/tree_blob.rb
CHANGED
@@ -1,18 +1,25 @@
|
|
1
|
+
require 'graal/log'
|
2
|
+
|
1
3
|
module Graal
|
2
4
|
|
3
5
|
class TreeBlob
|
4
6
|
|
5
7
|
attr_reader :revision, :path
|
6
8
|
|
7
|
-
def initialize(backend, revision, path,
|
9
|
+
def initialize(backend, revision, path, gitid = nil)
|
8
10
|
@backend = backend
|
9
11
|
@revision = revision || 'master'
|
10
12
|
@path = path || ''
|
11
|
-
@
|
13
|
+
@gitid = gitid
|
14
|
+
end
|
15
|
+
|
16
|
+
def gitid
|
17
|
+
@gitid ||= @backend.gitid_for(@revision, @path)
|
12
18
|
end
|
19
|
+
alias git_hash gitid
|
13
20
|
|
14
|
-
def
|
15
|
-
|
21
|
+
def abbrev(n = 8)
|
22
|
+
gitid[0...n]
|
16
23
|
end
|
17
24
|
|
18
25
|
def tree?
|
@@ -22,5 +29,16 @@ module Graal
|
|
22
29
|
def blob?
|
23
30
|
is_a? Blob
|
24
31
|
end
|
32
|
+
|
33
|
+
def log
|
34
|
+
Log.new(@backend, @revision, @path)
|
35
|
+
end
|
36
|
+
|
37
|
+
def history(n = nil, skip = nil)
|
38
|
+
history = log
|
39
|
+
history = log.number(n) unless n.nil?
|
40
|
+
history = log.skip(skip) unless skip.nil?
|
41
|
+
history.to_a
|
42
|
+
end
|
25
43
|
end
|
26
44
|
end
|
data/lib/graal/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
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: 2012-11-
|
12
|
+
date: 2012-11-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: childprocess
|
@@ -27,38 +27,6 @@ dependencies:
|
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: 0.3.6
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
name: rake
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
|
-
requirements:
|
35
|
-
- - ~>
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: 10.0.2
|
38
|
-
type: :development
|
39
|
-
prerelease: false
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: 10.0.2
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: pry
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
|
-
requirements:
|
51
|
-
- - ~>
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: 0.9.10
|
54
|
-
type: :development
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 0.9.10
|
62
30
|
description: ! " Simple, read-only (for now), abstraction layer to access git
|
63
31
|
repository\n aiming to support different platforms/backends.\n"
|
64
32
|
email: contact@aumgn.fr
|
@@ -68,11 +36,14 @@ extra_rdoc_files: []
|
|
68
36
|
files:
|
69
37
|
- README.md
|
70
38
|
- LICENSE
|
39
|
+
- lib/graal/actor.rb
|
71
40
|
- lib/graal/backend.rb
|
72
41
|
- lib/graal/blob.rb
|
73
42
|
- lib/graal/commit.rb
|
74
43
|
- lib/graal/exe/backend.rb
|
75
44
|
- lib/graal/exe/git.rb
|
45
|
+
- lib/graal/exe/git_ruby.rb
|
46
|
+
- lib/graal/log.rb
|
76
47
|
- lib/graal/repository.rb
|
77
48
|
- lib/graal/tree.rb
|
78
49
|
- lib/graal/tree_blob.rb
|