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
a1aa0d78
Commit
a1aa0d78
authored
Dec 22, 2016
by
Yorick Peterse
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'cache-last-commit-sha-for-path' into 'master'
Cache last commit id for path See merge request !8098
parents
6e2a6fd0
1a59766d
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
31 additions
and
3 deletions
+31
-3
app/models/repository.rb
app/models/repository.rb
+10
-2
changelogs/unreleased/cache-last-commit-sha-for-path.yml
changelogs/unreleased/cache-last-commit-sha-for-path.yml
+4
-0
lib/api/files.rb
lib/api/files.rb
+1
-1
spec/models/repository_spec.rb
spec/models/repository_spec.rb
+16
-0
No files found.
app/models/repository.rb
View file @
a1aa0d78
...
@@ -654,11 +654,19 @@ class Repository
...
@@ -654,11 +654,19 @@ class Repository
end
end
def
last_commit_for_path
(
sha
,
path
)
def
last_commit_for_path
(
sha
,
path
)
args
=
%W(
#{
Gitlab
.
config
.
git
.
bin_path
}
rev-list --max-count=1
#{
sha
}
--
#{
path
}
)
sha
=
last_commit_id_for_path
(
sha
,
path
)
sha
=
Gitlab
::
Popen
.
popen
(
args
,
path_to_repo
).
first
.
strip
commit
(
sha
)
commit
(
sha
)
end
end
def
last_commit_id_for_path
(
sha
,
path
)
key
=
path
.
blank?
?
"last_commit_id_for_path:
#{
sha
}
"
:
"last_commit_id_for_path:
#{
sha
}
:
#{
Digest
::
SHA1
.
hexdigest
(
path
)
}
"
cache
.
fetch
(
key
)
do
args
=
%W(
#{
Gitlab
.
config
.
git
.
bin_path
}
rev-list --max-count=1
#{
sha
}
--
#{
path
}
)
Gitlab
::
Popen
.
popen
(
args
,
path_to_repo
).
first
.
strip
end
end
def
next_branch
(
name
,
opts
=
{})
def
next_branch
(
name
,
opts
=
{})
branch_ids
=
self
.
branch_names
.
map
do
|
n
|
branch_ids
=
self
.
branch_names
.
map
do
|
n
|
next
1
if
n
==
name
next
1
if
n
==
name
...
...
changelogs/unreleased/cache-last-commit-sha-for-path.yml
0 → 100644
View file @
a1aa0d78
---
title
:
Cache last commit id for path
merge_request
:
8098
author
:
Hiroyuki Sato
lib/api/files.rb
View file @
a1aa0d78
...
@@ -68,7 +68,7 @@ module API
...
@@ -68,7 +68,7 @@ module API
ref:
params
[
:ref
],
ref:
params
[
:ref
],
blob_id:
blob
.
id
,
blob_id:
blob
.
id
,
commit_id:
commit
.
id
,
commit_id:
commit
.
id
,
last_commit_id:
repo
.
last_commit_
for_path
(
commit
.
sha
,
params
[
:file_path
]).
id
last_commit_id:
repo
.
last_commit_
id_for_path
(
commit
.
sha
,
params
[
:file_path
])
}
}
end
end
...
...
spec/models/repository_spec.rb
View file @
a1aa0d78
...
@@ -139,6 +139,22 @@ describe Repository, models: true do
...
@@ -139,6 +139,22 @@ describe Repository, models: true do
it
{
is_expected
.
to
eq
(
'c1acaa58bbcbc3eafe538cb8274ba387047b69f8'
)
}
it
{
is_expected
.
to
eq
(
'c1acaa58bbcbc3eafe538cb8274ba387047b69f8'
)
}
end
end
describe
'#last_commit_id_for_path'
do
subject
{
repository
.
last_commit_id_for_path
(
sample_commit
.
id
,
'.gitignore'
)
}
it
"returns last commit id for a given path"
do
is_expected
.
to
eq
(
'c1acaa58bbcbc3eafe538cb8274ba387047b69f8'
)
end
it
"caches last commit id for a given path"
do
cache
=
repository
.
send
(
:cache
)
key
=
"last_commit_id_for_path:
#{
sample_commit
.
id
}
:
#{
Digest
::
SHA1
.
hexdigest
(
'.gitignore'
)
}
"
expect
(
cache
).
to
receive
(
:fetch
).
with
(
key
).
and_return
(
'c1acaa5'
)
is_expected
.
to
eq
(
'c1acaa5'
)
end
end
describe
'#find_commits_by_message'
do
describe
'#find_commits_by_message'
do
it
'returns commits with messages containing a given string'
do
it
'returns commits with messages containing a given string'
do
commit_ids
=
repository
.
find_commits_by_message
(
'submodule'
).
map
(
&
:id
)
commit_ids
=
repository
.
find_commits_by_message
(
'submodule'
).
map
(
&
:id
)
...
...
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