Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Jérome Perrin
gitlab-ce
Commits
25b01b4c
Commit
25b01b4c
authored
Jun 23, 2017
by
Alejandro Rodríguez
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Incorporate Gitaly's Commits#between RPC
parent
90f8feae
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
63 additions
and
17 deletions
+63
-17
lib/gitlab/git/commit.rb
lib/gitlab/git/commit.rb
+10
-4
lib/gitlab/git/repository.rb
lib/gitlab/git/repository.rb
+8
-8
lib/gitlab/gitaly_client/commit_service.rb
lib/gitlab/gitaly_client/commit_service.rb
+15
-0
spec/lib/gitlab/git/commit_spec.rb
spec/lib/gitlab/git/commit_spec.rb
+13
-2
spec/lib/gitlab/gitaly_client/commit_service_spec.rb
spec/lib/gitlab/gitaly_client/commit_service_spec.rb
+15
-1
spec/services/git_push_service_spec.rb
spec/services/git_push_service_spec.rb
+2
-2
No files found.
lib/gitlab/git/commit.rb
View file @
25b01b4c
...
...
@@ -98,7 +98,15 @@ module Gitlab
# Commit.between(repo, '29eda46b', 'master')
#
def
between
(
repo
,
base
,
head
)
repo
.
commits_between
(
base
,
head
).
map
do
|
commit
|
commits
=
Gitlab
::
GitalyClient
.
migrate
(
:commits_between
)
do
|
is_enabled
|
if
is_enabled
repo
.
gitaly_commit_client
.
between
(
base
,
head
)
else
repo
.
commits_between
(
base
,
head
)
end
end
commits
.
map
do
|
commit
|
decorate
(
commit
)
end
rescue
Rugged
::
ReferenceError
...
...
@@ -376,12 +384,10 @@ module Gitlab
def
init_from_gitaly
(
commit
)
@raw_commit
=
commit
@id
=
commit
.
id
# NOTE: For ease of parsing in Gitaly, we have only the subject of
# the commit and not the full message.
# TODO: Once gitaly "takes over" Rugged consider separating the
# subject from the message to make it clearer when there's one
# available but not the other.
@message
=
commit
.
subject
.
dup
@message
=
(
commit
.
body
.
presence
||
commit
.
subject
)
.
dup
@authored_date
=
Time
.
at
(
commit
.
author
.
date
.
seconds
)
@author_name
=
commit
.
author
.
name
.
dup
@author_email
=
commit
.
author
.
email
.
dup
...
...
lib/gitlab/git/repository.rb
View file @
25b01b4c
...
...
@@ -807,6 +807,14 @@ module Gitlab
Gitlab
::
GitalyClient
::
Util
.
repository
(
@storage
,
@relative_path
)
end
def
gitaly_ref_client
@gitaly_ref_client
||=
Gitlab
::
GitalyClient
::
RefService
.
new
(
self
)
end
def
gitaly_commit_client
@gitaly_commit_client
||=
Gitlab
::
GitalyClient
::
CommitService
.
new
(
self
)
end
private
# Gitaly note: JV: Trying to get rid of the 'filter' option so we can implement this with 'git'.
...
...
@@ -1105,14 +1113,6 @@ module Gitlab
end
end
def
gitaly_ref_client
@gitaly_ref_client
||=
Gitlab
::
GitalyClient
::
RefService
.
new
(
self
)
end
def
gitaly_commit_client
@gitaly_commit_client
||=
Gitlab
::
GitalyClient
::
CommitService
.
new
(
self
)
end
def
gitaly_migrate
(
method
,
&
block
)
Gitlab
::
GitalyClient
.
migrate
(
method
,
&
block
)
rescue
GRPC
::
NotFound
=>
e
...
...
lib/gitlab/gitaly_client/commit_service.rb
View file @
25b01b4c
...
...
@@ -65,6 +65,17 @@ module Gitlab
GitalyClient
.
call
(
@repository
.
storage
,
:commit_service
,
:count_commits
,
request
).
count
end
def
between
(
from
,
to
)
request
=
Gitaly
::
CommitsBetweenRequest
.
new
(
repository:
@gitaly_repo
,
from:
from
,
to:
to
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:commit_service
,
:commits_between
,
request
)
consume_commits_response
(
response
)
end
private
def
commit_diff_request_params
(
commit
,
options
=
{})
...
...
@@ -77,6 +88,10 @@ module Gitlab
paths:
options
.
fetch
(
:paths
,
[])
}
end
def
consume_commits_response
(
response
)
response
.
flat_map
{
|
r
|
r
.
commits
}
end
end
end
end
spec/lib/gitlab/git/commit_spec.rb
View file @
25b01b4c
...
...
@@ -67,6 +67,7 @@ describe Gitlab::Git::Commit, seed_helper: true do
describe
"Commit info from gitaly commit"
do
let
(
:id
)
{
'f00'
}
let
(
:subject
)
{
"My commit"
.
force_encoding
(
'ASCII-8BIT'
)
}
let
(
:body
)
{
subject
+
"My body"
.
force_encoding
(
'ASCII-8BIT'
)
}
let
(
:committer
)
do
Gitaly
::
CommitAuthor
.
new
(
name:
generate
(
:name
),
...
...
@@ -83,7 +84,11 @@ describe Gitlab::Git::Commit, seed_helper: true do
end
let
(
:gitaly_commit
)
do
Gitaly
::
GitCommit
.
new
(
id:
id
,
subject:
subject
,
author:
author
,
committer:
committer
id:
id
,
subject:
subject
,
body:
body
,
author:
author
,
committer:
committer
)
end
let
(
:commit
)
{
described_class
.
new
(
gitaly_commit
)
}
...
...
@@ -91,12 +96,18 @@ describe Gitlab::Git::Commit, seed_helper: true do
it
{
expect
(
commit
.
short_id
).
to
eq
(
id
[
0
..
10
])
}
it
{
expect
(
commit
.
id
).
to
eq
(
id
)
}
it
{
expect
(
commit
.
sha
).
to
eq
(
id
)
}
it
{
expect
(
commit
.
safe_message
).
to
eq
(
subject
)
}
it
{
expect
(
commit
.
safe_message
).
to
eq
(
body
)
}
it
{
expect
(
commit
.
created_at
).
to
eq
(
Time
.
at
(
committer
.
date
.
seconds
))
}
it
{
expect
(
commit
.
author_email
).
to
eq
(
author
.
email
)
}
it
{
expect
(
commit
.
author_name
).
to
eq
(
author
.
name
)
}
it
{
expect
(
commit
.
committer_name
).
to
eq
(
committer
.
name
)
}
it
{
expect
(
commit
.
committer_email
).
to
eq
(
committer
.
email
)
}
context
'no body'
do
let
(
:body
)
{
""
.
force_encoding
(
'ASCII-8BIT'
)
}
it
{
expect
(
commit
.
safe_message
).
to
eq
(
subject
)
}
end
end
context
'Class methods'
do
...
...
spec/lib/gitlab/gitaly_client/commit_service_spec.rb
View file @
25b01b4c
require
'spec_helper'
describe
Gitlab
::
GitalyClient
::
CommitService
do
let
(
:diff_stub
)
{
double
(
'Gitaly::DiffService::Stub'
)
}
let
(
:project
)
{
create
(
:project
,
:repository
)
}
let
(
:repository
)
{
project
.
repository
}
let
(
:repository_message
)
{
repository
.
gitaly_repository
}
...
...
@@ -82,4 +81,19 @@ describe Gitlab::GitalyClient::CommitService do
end
end
end
describe
'#between'
do
let
(
:from
)
{
'master'
}
let
(
:to
)
{
'4b825dc642cb6eb9a060e54bf8d69288fbee4904'
}
it
'sends an RPC request'
do
request
=
Gitaly
::
CommitsBetweenRequest
.
new
(
repository:
repository_message
,
from:
from
,
to:
to
)
expect_any_instance_of
(
Gitaly
::
CommitService
::
Stub
).
to
receive
(
:commits_between
)
.
with
(
request
,
kind_of
(
Hash
)).
and_return
([])
described_class
.
new
(
repository
).
between
(
from
,
to
)
end
end
end
spec/services/git_push_service_spec.rb
View file @
25b01b4c
...
...
@@ -108,7 +108,7 @@ describe GitPushService, services: true do
it
{
is_expected
.
to
include
(
id:
@commit
.
id
)
}
it
{
is_expected
.
to
include
(
message:
@commit
.
safe_message
)
}
it
{
is_expected
.
to
include
(
timestamp:
@commit
.
date
.
xmlschema
)
}
it
{
expect
(
subject
[
:timestamp
].
in_time_zone
).
to
eq
(
@commit
.
date
.
in_time_zone
)
}
it
do
is_expected
.
to
include
(
url:
[
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment