Commit 660e23c4 authored by Gabriel Mazetto's avatar Gabriel Mazetto

Synced repository will behave as a "git clone --mirror".

Will git fetch with "--prune"
parent 8bb550ae
...@@ -181,6 +181,13 @@ class Repository ...@@ -181,6 +181,13 @@ class Repository
raw_repository.remote_update(name, url: url) raw_repository.remote_update(name, url: url)
end end
def set_remote_as_mirror(name)
# This is used by Gitlab Geo to define repository as equivalent as "git clone --mirror"
raw_repository.rugged.config["remote.#{name}.fetch"]='refs/*:refs/*'
raw_repository.rugged.config["remote.#{name}.mirror"]=true
raw_repository.rugged.config["remote.#{name}.prune"]=true
end
def fetch_remote(remote) def fetch_remote(remote)
gitlab_shell.fetch_remote(path_with_namespace, remote) gitlab_shell.fetch_remote(path_with_namespace, remote)
end end
...@@ -742,6 +749,12 @@ class Repository ...@@ -742,6 +749,12 @@ class Repository
fetch_remote(Repository::MIRROR_REMOTE) fetch_remote(Repository::MIRROR_REMOTE)
end end
def fetch_geo_mirror(url)
add_remote(Repository::MIRROR_REMOTE, url)
set_remote_as_mirror(Repository::MIRROR_REMOTE)
fetch_remote(Repository::MIRROR_REMOTE)
end
def upstream_branches def upstream_branches
rugged.references.each("refs/remotes/#{Repository::MIRROR_REMOTE}/*").map do |ref| rugged.references.each("refs/remotes/#{Repository::MIRROR_REMOTE}/*").map do |ref|
name = ref.name.sub(/\Arefs\/remotes\/#{Repository::MIRROR_REMOTE}\//, "") name = ref.name.sub(/\Arefs\/remotes\/#{Repository::MIRROR_REMOTE}\//, "")
......
...@@ -10,13 +10,11 @@ class GeoRepositoryUpdateWorker ...@@ -10,13 +10,11 @@ class GeoRepositoryUpdateWorker
@project = Project.find(project_id) @project = Project.find(project_id)
fetch_repository(@project.repository, @project.url_to_repo) fetch_repository(@project.repository, @project.url_to_repo)
# @current_user = @project.mirror_user || @project.creator
# Projects::UpdateMirrorService.new(@project, @current_user).execute
end end
private private
def fetch_repository(repository, remote_url) def fetch_repository(repository, remote_url)
repository.fetch_upstream(remote_url) repository.fetch_geo_mirror(remote_url)
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment