Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
GitLab
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
projects.thm.de
GitLab
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 @@ class Pipeline < ActiveRecord::Base
# 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 @@ def update_state
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 @@ def ref_path
"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 @@ def can_be_reverted?(current_user = nil)
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 @@ def reload_diffs
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 @@ def update_columns_serialized(new_attributes)
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 @@ def award_emoji_name
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 @@ def branch_exists?(branch_name)
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 @@ def noteable
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 @@ def target_reference
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 @@
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 @@
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 @@
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 @@
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