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
Léo-Paul Géneau
gitlab-ce
Commits
dad4c0b6
Commit
dad4c0b6
authored
Dec 04, 2017
by
Kim "BKC" Carlbäcker
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move Repository#write_ref to Git::Repository#write_ref
parent
2a181d68
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
35 additions
and
16 deletions
+35
-16
app/models/project.rb
app/models/project.rb
+1
-1
app/models/repository.rb
app/models/repository.rb
+6
-10
lib/gitlab/git/repository.rb
lib/gitlab/git/repository.rb
+8
-3
spec/models/project_spec.rb
spec/models/project_spec.rb
+3
-2
spec/models/repository_spec.rb
spec/models/repository_spec.rb
+17
-0
No files found.
app/models/project.rb
View file @
dad4c0b6
...
...
@@ -1147,7 +1147,7 @@ class Project < ActiveRecord::Base
def
change_head
(
branch
)
if
repository
.
branch_exists?
(
branch
)
repository
.
before_change_head
repository
.
write_ref
(
'HEAD'
,
"refs/heads/
#{
branch
}
"
)
repository
.
write_ref
(
'HEAD'
,
"refs/heads/
#{
branch
}
"
,
force:
true
)
repository
.
copy_gitattributes
(
branch
)
repository
.
after_change_head
reload_default_branch
...
...
app/models/repository.rb
View file @
dad4c0b6
...
...
@@ -19,6 +19,7 @@ class Repository
attr_accessor
:full_path
,
:disk_path
,
:project
,
:is_wiki
delegate
:ref_name_for_sha
,
to: :raw_repository
delegate
:write_ref
,
to: :raw_repository
CreateTreeError
=
Class
.
new
(
StandardError
)
...
...
@@ -237,11 +238,10 @@ class Repository
# This will still fail if the file is corrupted (e.g. 0 bytes)
begin
write_ref
(
keep_around_ref_name
(
sha
),
sha
)
rescue
Rugged
::
ReferenceError
=>
ex
Rails
.
logger
.
error
"Unable to create
#{
REF_KEEP_AROUND
}
reference for repository
#{
path
}
:
#{
ex
}
"
rescue
Rugged
::
OSError
=>
ex
raise
unless
ex
.
message
=~
/Failed to create locked file/
&&
ex
.
message
=~
/File exists/
write_ref
(
keep_around_ref_name
(
sha
),
sha
,
force:
true
)
rescue
Gitlab
::
Git
::
Repository
::
GitError
=>
ex
# Necessary because https://gitlab.com/gitlab-org/gitlab-ce/issues/20156
return
true
if
ex
.
message
=~
/Failed to create locked file/
&&
ex
.
message
=~
/File exists/
Rails
.
logger
.
error
"Unable to create
#{
REF_KEEP_AROUND
}
reference for repository
#{
path
}
:
#{
ex
}
"
end
...
...
@@ -251,10 +251,6 @@ class Repository
ref_exists?
(
keep_around_ref_name
(
sha
))
end
def
write_ref
(
ref_path
,
sha
)
rugged
.
references
.
create
(
ref_path
,
sha
,
force:
true
)
end
def
diverging_commit_counts
(
branch
)
root_ref_hash
=
raw_repository
.
commit
(
root_ref
).
id
cache
.
fetch
(
:"diverging_commit_counts_
#{
branch
.
name
}
"
)
do
...
...
@@ -995,7 +991,7 @@ class Repository
end
def
create_ref
(
ref
,
ref_path
)
raw_repository
.
write_ref
(
ref_path
,
ref
)
write_ref
(
ref_path
,
ref
)
end
def
ls_files
(
ref
)
...
...
lib/gitlab/git/repository.rb
View file @
dad4c0b6
...
...
@@ -1069,12 +1069,17 @@ module Gitlab
end
end
def
write_ref
(
ref_path
,
ref
)
def
write_ref
(
ref_path
,
ref
,
force:
false
)
raise
ArgumentError
,
"invalid ref_path
#{
ref_path
.
inspect
}
"
if
ref_path
.
include?
(
' '
)
raise
ArgumentError
,
"invalid ref
#{
ref
.
inspect
}
"
if
ref
.
include?
(
"
\x00
"
)
input
=
"update
#{
ref_path
}
\x00
#{
ref
}
\x00\x00
"
run_git!
(
%w[update-ref --stdin -z]
)
{
|
stdin
|
stdin
.
write
(
input
)
}
ref
=
"refs/heads/
#{
ref
}
"
unless
ref
.
start_with?
(
"refs"
)
||
ref
=~
/\A[a-f0-9]+\z/i
rugged
.
references
.
create
(
ref_path
,
ref
,
force:
force
)
rescue
Rugged
::
ReferenceError
=>
ex
raise
GitError
,
"could not create ref
#{
ref_path
}
:
#{
ex
}
"
rescue
Rugged
::
OSError
=>
ex
raise
GitError
,
"could not create ref
#{
ref_path
}
:
#{
ex
}
"
end
def
fetch_ref
(
source_repository
,
source_ref
:,
target_ref
:)
...
...
spec/models/project_spec.rb
View file @
dad4c0b6
...
...
@@ -1863,10 +1863,11 @@ describe Project do
project
.
change_head
(
project
.
default_branch
)
end
it
'creates the new reference
with rugged
'
do
expect
(
project
.
repository
.
r
ugged
.
references
).
to
receive
(
:create
).
with
(
'HEAD'
,
it
'creates the new reference'
do
expect
(
project
.
repository
.
r
aw_repository
).
to
receive
(
:write_ref
).
with
(
'HEAD'
,
"refs/heads/
#{
project
.
default_branch
}
"
,
force:
true
)
project
.
change_head
(
project
.
default_branch
)
end
...
...
spec/models/repository_spec.rb
View file @
dad4c0b6
...
...
@@ -1916,6 +1916,23 @@ describe Repository do
File
.
delete
(
path
)
end
it
"attempting to call keep_around when exists a lock does not fail"
do
ref
=
repository
.
send
(
:keep_around_ref_name
,
sample_commit
.
id
)
path
=
File
.
join
(
repository
.
path
,
ref
)
lock_path
=
"
#{
path
}
.lock"
FileUtils
.
mkdir_p
(
File
.
dirname
(
path
))
File
.
open
(
lock_path
,
'w'
)
{
|
f
|
f
.
write
(
''
)
}
begin
expect
{
repository
.
keep_around
(
sample_commit
.
id
)
}.
not_to
raise_error
(
Gitlab
::
Git
::
Repository
::
GitError
)
expect
(
File
.
exist?
(
lock_path
)).
to
be_falsey
ensure
File
.
delete
(
path
)
end
end
end
describe
'#update_ref'
do
...
...
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