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
Boxiang Sun
gitlab-ce
Commits
149adcd1
Commit
149adcd1
authored
Aug 24, 2017
by
James Lopez
Committed by
Rémy Coutable
Oct 05, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fetch and map refs/pull to refs/merge-requests in the GH import
update MR diff
parent
b7dda44e
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
34 additions
and
31 deletions
+34
-31
app/models/concerns/repository_mirroring.rb
app/models/concerns/repository_mirroring.rb
+21
-2
app/models/merge_request_diff.rb
app/models/merge_request_diff.rb
+2
-1
lib/github/import.rb
lib/github/import.rb
+2
-4
lib/github/representation/pull_request.rb
lib/github/representation/pull_request.rb
+9
-24
No files found.
app/models/concerns/repository_mirroring.rb
View file @
149adcd1
module
RepositoryMirroring
module
RepositoryMirroring
def
set_remote_as_mirror
(
name
)
IMPORT_REFS
=
%w[+refs/pull/*/head:refs/merge-requests/*/head +refs/heads/*:refs/heads/* +refs/tags/*:refs/tags/*]
.
freeze
config
=
raw_repository
.
rugged
.
config
def
set_remote_as_mirror
(
name
)
# This is used to define repository as equivalent as "git clone --mirror"
# This is used to define repository as equivalent as "git clone --mirror"
config
[
"remote.
#{
name
}
.fetch"
]
=
'refs/*:refs/*'
config
[
"remote.
#{
name
}
.fetch"
]
=
'refs/*:refs/*'
config
[
"remote.
#{
name
}
.mirror"
]
=
true
config
[
"remote.
#{
name
}
.mirror"
]
=
true
config
[
"remote.
#{
name
}
.prune"
]
=
true
config
[
"remote.
#{
name
}
.prune"
]
=
true
end
end
def
set_import_remote_as_mirror
(
name
)
# Add first fetch with Rugged so it does not create its own.
config
[
"remote.
#{
name
}
.fetch"
]
=
IMPORT_REFS
.
first
IMPORT_REFS
.
drop
(
1
).
each
do
|
ref
|
run_git
(
%W[config --add remote.
#{
name
}
.fetch
#{
ref
}
]
)
end
config
[
"remote.
#{
name
}
.mirror"
]
=
true
config
[
"remote.
#{
name
}
.prune"
]
=
true
rescue
Rugged
::
ConfigError
# Ignore multivar errors when the config already exist
# TODO: refactor/fix this
end
def
fetch_mirror
(
remote
,
url
)
def
fetch_mirror
(
remote
,
url
)
add_remote
(
remote
,
url
)
add_remote
(
remote
,
url
)
set_remote_as_mirror
(
remote
)
set_remote_as_mirror
(
remote
)
fetch_remote
(
remote
,
forced:
true
)
fetch_remote
(
remote
,
forced:
true
)
remove_remote
(
remote
)
remove_remote
(
remote
)
end
end
def
config
raw_repository
.
rugged
.
config
end
end
end
app/models/merge_request_diff.rb
View file @
149adcd1
...
@@ -55,7 +55,8 @@ class MergeRequestDiff < ActiveRecord::Base
...
@@ -55,7 +55,8 @@ class MergeRequestDiff < ActiveRecord::Base
end
end
def
ensure_commit_shas
def
ensure_commit_shas
merge_request
.
fetch_ref
merge_request
.
fetch_ref
unless
merge_request
.
source_branch_head
self
.
start_commit_sha
||=
merge_request
.
target_branch_sha
self
.
start_commit_sha
||=
merge_request
.
target_branch_sha
self
.
head_commit_sha
||=
merge_request
.
source_branch_sha
self
.
head_commit_sha
||=
merge_request
.
source_branch_sha
self
.
base_commit_sha
||=
find_base_sha
self
.
base_commit_sha
||=
find_base_sha
...
...
lib/github/import.rb
View file @
149adcd1
...
@@ -56,7 +56,7 @@ module Github
...
@@ -56,7 +56,7 @@ module Github
begin
begin
project
.
ensure_repository
project
.
ensure_repository
project
.
repository
.
add_remote
(
'github'
,
repo_url
)
project
.
repository
.
add_remote
(
'github'
,
repo_url
)
project
.
repository
.
set_remote_as_mirror
(
'github'
)
project
.
repository
.
set_
import_
remote_as_mirror
(
'github'
)
project
.
repository
.
fetch_remote
(
'github'
,
forced:
true
)
project
.
repository
.
fetch_remote
(
'github'
,
forced:
true
)
rescue
Gitlab
::
Git
::
Repository
::
NoRepository
,
Gitlab
::
Shell
::
Error
=>
e
rescue
Gitlab
::
Git
::
Repository
::
NoRepository
,
Gitlab
::
Shell
::
Error
=>
e
error
(
:project
,
repo_url
,
e
.
message
)
error
(
:project
,
repo_url
,
e
.
message
)
...
@@ -140,7 +140,7 @@ module Github
...
@@ -140,7 +140,7 @@ module Github
response
.
body
.
each
do
|
raw
|
response
.
body
.
each
do
|
raw
|
pull_request
=
Github
::
Representation
::
PullRequest
.
new
(
raw
,
options
.
merge
(
project:
project
))
pull_request
=
Github
::
Representation
::
PullRequest
.
new
(
raw
,
options
.
merge
(
project:
project
))
merge_request
=
MergeRequest
.
find_or_initialize_by
(
iid:
pull_request
.
iid
,
source_project_id:
project
.
id
)
merge_request
=
MergeRequest
.
find_or_initialize_by
(
iid:
pull_request
.
iid
,
source_project_id:
project
.
id
)
next
unless
merge_request
.
new_record?
&&
pull_request
.
valid?
next
unless
merge_request
.
new_record?
&&
pull_request
.
valid?
&&
merge_request
.
source_branch_head
begin
begin
pull_request
.
restore_branches!
pull_request
.
restore_branches!
...
@@ -173,8 +173,6 @@ module Github
...
@@ -173,8 +173,6 @@ module Github
fetch_comments
(
merge_request
,
:review_comment
,
review_comments_url
,
LegacyDiffNote
)
fetch_comments
(
merge_request
,
:review_comment
,
review_comments_url
,
LegacyDiffNote
)
rescue
=>
e
rescue
=>
e
error
(
:pull_request
,
pull_request
.
url
,
e
.
message
)
error
(
:pull_request
,
pull_request
.
url
,
e
.
message
)
ensure
pull_request
.
remove_restored_branches!
end
end
end
end
...
...
lib/github/representation/pull_request.rb
View file @
149adcd1
...
@@ -10,7 +10,9 @@ module Github
...
@@ -10,7 +10,9 @@ module Github
def
source_branch_name
def
source_branch_name
@source_branch_name
||=
@source_branch_name
||=
if
cross_project?
||
!
source_branch_exists?
if
opened?
&&
project
.
repository
.
branch_exists?
(
source_branch
.
ref
)
source_branch
.
ref
elsif
cross_project?
&&
opened?
source_branch_name_prefixed
source_branch_name_prefixed
else
else
source_branch_ref
source_branch_ref
...
@@ -20,7 +22,7 @@ module Github
...
@@ -20,7 +22,7 @@ module Github
def
source_branch_exists?
def
source_branch_exists?
return
@source_branch_exists
if
defined?
(
@source_branch_exists
)
return
@source_branch_exists
if
defined?
(
@source_branch_exists
)
@source_branch_exists
=
!
cross_project?
&&
source_branch
.
exists?
@source_branch_exists
=
project
.
repository
.
branch_exists?
(
source_branch_name
)
end
end
def
target_project
def
target_project
...
@@ -55,13 +57,6 @@ module Github
...
@@ -55,13 +57,6 @@ module Github
restore_target_branch!
restore_target_branch!
end
end
def
remove_restored_branches!
return
if
opened?
remove_source_branch!
remove_target_branch!
end
private
private
def
project
def
project
...
@@ -72,8 +67,12 @@ module Github
...
@@ -72,8 +67,12 @@ module Github
@source_branch
||=
Representation
::
Branch
.
new
(
raw
[
'head'
],
repository:
project
.
repository
)
@source_branch
||=
Representation
::
Branch
.
new
(
raw
[
'head'
],
repository:
project
.
repository
)
end
end
def
source_branch_ref
"refs/merge-requests/
#{
iid
}
/head"
end
def
source_branch_name_prefixed
def
source_branch_name_prefixed
"gh-
#{
target_branch_short_sha
}
/
#{
iid
}
/
#{
source_branch_user
}
/
#{
source_branch
_
ref
}
"
"gh-
#{
target_branch_short_sha
}
/
#{
iid
}
/
#{
source_branch_user
}
/
#{
source_branch
.
ref
}
"
end
end
def
target_branch
def
target_branch
...
@@ -101,20 +100,6 @@ module Github
...
@@ -101,20 +100,6 @@ module Github
target_branch
.
restore!
(
target_branch_name
)
target_branch
.
restore!
(
target_branch_name
)
end
end
def
remove_source_branch!
# We should remove the source/target branches only if they were
# restored. Otherwise, we'll remove branches like 'master' that
# target_branch_exists? returns true. In other words, we need
# to clean up only the restored branches that (source|target)_branch_exists?
# returns false for the first time it has been called, because of
# this that is important to memoize these values.
source_branch
.
remove!
(
source_branch_name
)
unless
source_branch_exists?
end
def
remove_target_branch!
target_branch
.
remove!
(
target_branch_name
)
unless
target_branch_exists?
end
end
end
end
end
end
end
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