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
1
Merge Requests
1
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
nexedi
gitlab-ce
Commits
3286dd7a
Commit
3286dd7a
authored
Jul 03, 2016
by
Douwe Maan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Don't garbage collect commits that have related DB records like comments
parent
0ccdc631
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
84 additions
and
7 deletions
+84
-7
CHANGELOG
CHANGELOG
+1
-0
app/models/ci/pipeline.rb
app/models/ci/pipeline.rb
+6
-0
app/models/ci/trigger_request.rb
app/models/ci/trigger_request.rb
+1
-1
app/models/merge_request.rb
app/models/merge_request.rb
+9
-3
app/models/merge_request_diff.rb
app/models/merge_request_diff.rb
+10
-1
app/models/note.rb
app/models/note.rb
+7
-0
app/models/repository.rb
app/models/repository.rb
+20
-0
app/models/sent_notification.rb
app/models/sent_notification.rb
+8
-0
app/models/todo.rb
app/models/todo.rb
+8
-0
spec/models/merge_request_spec.rb
spec/models/merge_request_spec.rb
+2
-2
spec/models/note_spec.rb
spec/models/note_spec.rb
+4
-0
spec/models/repository_spec.rb
spec/models/repository_spec.rb
+8
-0
No files found.
CHANGELOG
View file @
3286dd7a
...
...
@@ -31,6 +31,7 @@ v 8.10.0 (unreleased)
- Metrics for Rouge::Plugins::Redcarpet and Rouge::Formatters::HTMLGitlab
- Allow [ci skip] to be in any case and allow [skip ci]. !4785 (simon_w)
- Add basic system information like memory and disk usage to the admin panel
- Don't garbage collect commits that have related DB records like comments
v 8.9.5 (unreleased)
- Improve the request / withdraw access button. !4860
...
...
app/models/ci/pipeline.rb
View file @
3286dd7a
...
...
@@ -16,6 +16,7 @@ module Ci
# Invalidate object and save if when touched
after_touch
:update_state
after_save
:keep_around_commits
def
self
.
truncate_sha
(
sha
)
sha
[
0
...
8
]
...
...
@@ -212,5 +213,10 @@ module Ci
self
.
duration
=
statuses
.
latest
.
duration
save
end
def
keep_around_commits
project
.
repository
.
keep_around
(
self
.
sha
)
project
.
repository
.
keep_around
(
self
.
before_sha
)
end
end
end
app/models/ci/trigger_request.rb
View file @
3286dd7a
module
Ci
class
TriggerRequest
<
ActiveRecord
::
Base
extend
Ci
::
Model
belongs_to
:trigger
,
class_name:
'Ci::Trigger'
belongs_to
:pipeline
,
class_name:
'Ci::Pipeline'
,
foreign_key: :commit_id
has_many
:builds
,
class_name:
'Ci::Build'
...
...
app/models/merge_request.rb
View file @
3286dd7a
...
...
@@ -117,6 +117,8 @@ class MergeRequest < ActiveRecord::Base
scope
:join_project
,
->
{
joins
(
:target_project
)
}
scope
:references_project
,
->
{
references
(
:target_project
)
}
after_save
:keep_around_commit
def
self
.
reference_prefix
'!'
end
...
...
@@ -536,12 +538,12 @@ class MergeRequest < ActiveRecord::Base
"refs/merge-requests/
#{
iid
}
/head"
end
def
ref_
is_
fetched?
File
.
exist?
(
File
.
join
(
project
.
repository
.
path_to_repo
,
ref_path
)
)
def
ref_fetched?
project
.
repository
.
ref_exists?
(
ref_path
)
end
def
ensure_ref_fetched
fetch_ref
unless
ref_
is_
fetched?
fetch_ref
unless
ref_fetched?
end
def
in_locked_state
...
...
@@ -600,4 +602,8 @@ class MergeRequest < ActiveRecord::Base
def
can_be_cherry_picked?
merge_commit
end
def
keep_around_commit
project
.
repository
.
keep_around
(
self
.
merge_commit_sha
)
end
end
app/models/merge_request_diff.rb
View file @
3286dd7a
...
...
@@ -24,6 +24,7 @@ class MergeRequestDiff < ActiveRecord::Base
serialize
:st_diffs
after_create
:reload_content
,
unless: :importing?
after_save
:keep_around_commit
def
reload_content
reload_commits
...
...
@@ -145,7 +146,11 @@ class MergeRequestDiff < ActiveRecord::Base
end
new_attributes
[
:st_diffs
]
=
new_diffs
new_attributes
[
:base_commit_sha
]
=
self
.
repository
.
merge_base
(
self
.
head
,
self
.
base
)
base_commit_sha
=
self
.
repository
.
merge_base
(
self
.
head
,
self
.
base
)
new_attributes
[
:base_commit_sha
]
=
base_commit_sha
self
.
repository
.
keep_around
(
base_commit_sha
)
update_columns_serialized
(
new_attributes
)
end
...
...
@@ -217,4 +222,8 @@ class MergeRequestDiff < ActiveRecord::Base
update_columns
(
new_attributes
.
merge
(
updated_at:
current_time_from_proper_timezone
))
reload
end
def
keep_around_commit
self
.
repository
.
keep_around
(
self
.
base_commit_sha
)
end
end
app/models/note.rb
View file @
3286dd7a
...
...
@@ -66,6 +66,7 @@ class Note < ActiveRecord::Base
end
before_validation
:clear_blank_line_code!
after_save
:keep_around_commit
class
<<
self
def
model_name
...
...
@@ -215,4 +216,10 @@ class Note < ActiveRecord::Base
original_name
=
note
.
match
(
Banzai
::
Filter
::
EmojiFilter
.
emoji_pattern
)[
1
]
Gitlab
::
AwardEmoji
.
normalize_emoji_name
(
original_name
)
end
private
def
keep_around_commit
project
.
repository
.
keep_around
(
self
.
commit_id
)
end
end
app/models/repository.rb
View file @
3286dd7a
...
...
@@ -203,6 +203,26 @@ class Repository
branch_names
.
include?
(
branch_name
)
end
def
ref_exists?
(
ref
)
rugged
.
references
.
exist?
(
ref
)
end
def
keep_around
(
sha
)
return
unless
sha
&&
commit
(
sha
)
return
if
kept_around?
(
sha
)
rugged
.
references
.
create
(
keep_around_ref_name
(
sha
),
sha
)
end
def
kept_around?
(
sha
)
ref_exists?
(
keep_around_ref_name
(
sha
))
end
def
keep_around_ref_name
(
sha
)
"refs/keep-around/
#{
sha
}
"
end
def
tag_names
cache
.
fetch
(
:tag_names
)
{
raw_repository
.
tag_names
}
end
...
...
app/models/sent_notification.rb
View file @
3286dd7a
...
...
@@ -9,6 +9,8 @@ class SentNotification < ActiveRecord::Base
validates
:commit_id
,
presence:
true
,
if: :for_commit?
validates
:line_code
,
line_code:
true
,
allow_blank:
true
after_save
:keep_around_commit
class
<<
self
def
reply_key
SecureRandom
.
hex
(
16
)
...
...
@@ -67,4 +69,10 @@ class SentNotification < ActiveRecord::Base
def
to_param
self
.
reply_key
end
private
def
keep_around_commit
project
.
repository
.
keep_around
(
self
.
commit_id
)
end
end
app/models/todo.rb
View file @
3286dd7a
...
...
@@ -37,6 +37,8 @@ class Todo < ActiveRecord::Base
state
:done
end
after_save
:keep_around_commit
def
build_failed?
action
==
BUILD_FAILED
end
...
...
@@ -73,4 +75,10 @@ class Todo < ActiveRecord::Base
target
.
to_reference
end
end
private
def
keep_around_commit
project
.
repository
.
keep_around
(
self
.
commit_id
)
end
end
spec/models/merge_request_spec.rb
View file @
3286dd7a
...
...
@@ -464,7 +464,7 @@ describe MergeRequest, models: true do
context
'when it is not broken and has no conflicts'
do
it
'is marked as mergeable'
do
allow
(
subject
).
to
receive
(
:broken?
)
{
false
}
allow
(
project
).
to
receive_message_chain
(
:repository
,
:can_be_merged?
)
{
true
}
allow
(
project
.
repository
).
to
receive
(
:can_be_merged?
)
{
true
}
expect
{
subject
.
check_if_can_be_merged
}.
to
change
{
subject
.
merge_status
}.
to
(
'can_be_merged'
)
end
...
...
@@ -481,7 +481,7 @@ describe MergeRequest, models: true do
context
'when it has conflicts'
do
before
do
allow
(
subject
).
to
receive
(
:broken?
)
{
false
}
allow
(
project
).
to
receive_message_chain
(
:repository
,
:can_be_merged?
)
{
false
}
allow
(
project
.
repository
).
to
receive
(
:can_be_merged?
)
{
false
}
end
it
'becomes unmergeable'
do
...
...
spec/models/note_spec.rb
View file @
3286dd7a
...
...
@@ -70,6 +70,10 @@ describe Note, models: true do
it
"should be recognized by #for_commit?"
do
expect
(
note
).
to
be_for_commit
end
it
"keeps the commit around"
do
expect
(
note
.
project
.
repository
.
kept_around?
(
commit
.
id
)).
to
be_truthy
end
end
describe
'authorization'
do
...
...
spec/models/repository_spec.rb
View file @
3286dd7a
...
...
@@ -1117,6 +1117,14 @@ describe Repository, models: true do
end
end
describe
"#keep_around"
do
it
"stores a reference to the specified commit sha so it isn't garbage collected"
do
repository
.
keep_around
(
sample_commit
.
id
)
expect
(
repository
.
kept_around?
(
sample_commit
.
id
)).
to
be_truthy
end
end
def
create_remote_branch
(
remote_name
,
branch_name
,
target
)
rugged
=
repository
.
rugged
rugged
.
references
.
create
(
"refs/remotes/
#{
remote_name
}
/
#{
branch_name
}
"
,
target
)
...
...
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