Support monitor repos in upstream-repos/ansible-repos/dockerfile-repos/pkgbuild-repos, they are just like upstream-repos.
And which to monitor can be configured in file upstream-config.
Signed-off-by: Li Yuanchao lyc163mail@163.com --- lib/git_mirror.rb | 55 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 15 deletions(-)
diff --git a/lib/git_mirror.rb b/lib/git_mirror.rb index 22c4e07..4652921 100644 --- a/lib/git_mirror.rb +++ b/lib/git_mirror.rb @@ -81,7 +81,7 @@ class GitMirror
def mirror_sync fork_info = @queue.pop - mirror_dir = "/srv/git/#{fork_info['git_repo']}" + mirror_dir = "/srv/git/#{fork_info['belong']}/#{fork_info['git_repo']}" mirror_dir = "#{mirror_dir}.git" unless fork_info['is_submodule'] possible_new_refs = git_repo_download(fork_info['url'], mirror_dir) feedback(fork_info['git_repo'], possible_new_refs) @@ -107,6 +107,7 @@ class MirrorMain @defaults = {} @git_queue = Queue.new @es_client = Elasticsearch::Client.new(url: "http://#%7BES_HOST%7D:#%7BES_PORT%7D") + clone_upstream_repo load_fork_info connection_init handle_webhook @@ -124,35 +125,37 @@ class MirrorMain @fork_stat[git_repo] = get_fork_stat(git_repo) end
- def load_defaults(repodir) + def load_defaults(repodir, belong) defaults_file = "#{repodir}/DEFAULTS" return unless File.exist?(defaults_file)
- defaults_key = repodir == REPO_DIR ? 'default' : repodir.delete_prefix("#{REPO_DIR}/") + defaults_key = repodir == "#{REPO_DIR}/#{belong}" ? belong : repodir.delete_prefix("#{REPO_DIR}/#{belong}/") @defaults[defaults_key] = YAML.safe_load(File.open(defaults_file)) - @defaults[defaults_key] = merge_defaults(defaults_key, @defaults[defaults_key]) + @defaults[defaults_key] = merge_defaults(defaults_key, @defaults[defaults_key], belong) end
- def traverse_repodir(repodir) + def traverse_repodir(repodir, belong) if File.directory? repodir - load_defaults(repodir) + load_defaults(repodir, belong) entry_list = Dir.children(repodir) - ['DEFAULTS'] entry_list.each do |entry| next if entry.start_with? '.'
- traverse_repodir("#{repodir}/#{entry}") + traverse_repodir("#{repodir}/#{entry}", belong) end else return if File.dirname(repodir) == REPO_DIR
- project = File.dirname(repodir).delete_prefix("#{REPO_DIR}/") + project = File.dirname(repodir).delete_prefix("#{REPO_DIR}/#{belong}/") fork_name = File.basename(repodir) - load_repo_file(repodir, project, fork_name) + load_repo_file(repodir, project, fork_name, belong) end end
def load_fork_info - traverse_repodir(REPO_DIR) + @upstreams['upstreams'].each do |repo| + traverse_repodir("#{REPO_DIR}/#{repo['location']}", repo['location']) + end end
def create_workers @@ -221,14 +224,16 @@ end
# main thread class MirrorMain - def load_repo_file(repodir, project, fork_name) + def load_repo_file(repodir, project, fork_name, belong) git_repo = "#{project}/#{fork_name}" git_info = YAML.safe_load(File.open(repodir)) return if git_info.nil? || git_info['url'].nil?
@git_info[git_repo] = git_info @git_info[git_repo]['git_repo'] = git_repo - @git_info[git_repo] = merge_defaults(git_repo, @git_info[git_repo]) + @git_info[git_repo]['belong'] = belong + @git_info[git_repo] = merge_defaults(git_repo, @git_info[git_repo], belong) + fork_stat_init(git_repo) @priority_queue.push git_repo, @priority @priority += 1 @@ -453,8 +458,8 @@ end
# main thread class MirrorMain - def merge_defaults(object_key, object) - return object if object_key == 'default' + def merge_defaults(object_key, object, belong) + return object if object_key == belong
defaults_key = File.dirname(object_key) while defaults_key != '.' @@ -462,8 +467,28 @@ class MirrorMain
defaults_key = File.dirname(defaults_key) end - return @defaults['default'].merge(object) if @defaults['default'] + return @defaults[belong].merge(object) if @defaults[belong]
return object end + + def clone_upstream_repo + if File.exist?("#{ENV['CCI_SRC']}/sbin/upstream-config") + @upstreams = YAML.safe_load(File.open('../sbin/upstream-config')) + @upstreams['upstreams'].each do |repo| + url = get_url(repo['url']) + %x(git clone #{url} #{REPO_DIR}/#{repo['location']} 2>&1) + end + else + puts 'ERROR: No upstream-config file' + return -1 + end + end + + def get_url(url) + if url.include?('gitee.com/') && File.exist?("/srv/git/#{url.delete_prefix('https://%27)%7D") + url = "/srv/git/#{url.delete_prefix('https://%27)%7D" + end + return url + end end
Would you give a bit comment/example on the newly introduced 'belong' field? It looks not obvious enough to me.
Thanks, Fengguang
On Fri, Feb 26, 2021 at 05:33:42PM +0800, Li Yuanchao wrote:
Support monitor repos in upstream-repos/ansible-repos/dockerfile-repos/pkgbuild-repos, they are just like upstream-repos.
And which to monitor can be configured in file upstream-config.
Signed-off-by: Li Yuanchao lyc163mail@163.com
lib/git_mirror.rb | 55 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 15 deletions(-)
diff --git a/lib/git_mirror.rb b/lib/git_mirror.rb index 22c4e07..4652921 100644 --- a/lib/git_mirror.rb +++ b/lib/git_mirror.rb @@ -81,7 +81,7 @@ class GitMirror
def mirror_sync fork_info = @queue.pop
- mirror_dir = "/srv/git/#{fork_info['git_repo']}"
- mirror_dir = "/srv/git/#{fork_info['belong']}/#{fork_info['git_repo']}" mirror_dir = "#{mirror_dir}.git" unless fork_info['is_submodule'] possible_new_refs = git_repo_download(fork_info['url'], mirror_dir) feedback(fork_info['git_repo'], possible_new_refs)
@@ -107,6 +107,7 @@ class MirrorMain @defaults = {} @git_queue = Queue.new @es_client = Elasticsearch::Client.new(url: "http://#%7BES_HOST%7D:#%7BES_PORT%7D")
- clone_upstream_repo load_fork_info connection_init handle_webhook
@@ -124,35 +125,37 @@ class MirrorMain @fork_stat[git_repo] = get_fork_stat(git_repo) end
- def load_defaults(repodir)
- def load_defaults(repodir, belong) defaults_file = "#{repodir}/DEFAULTS" return unless File.exist?(defaults_file)
- defaults_key = repodir == REPO_DIR ? 'default' : repodir.delete_prefix("#{REPO_DIR}/")
- defaults_key = repodir == "#{REPO_DIR}/#{belong}" ? belong : repodir.delete_prefix("#{REPO_DIR}/#{belong}/") @defaults[defaults_key] = YAML.safe_load(File.open(defaults_file))
- @defaults[defaults_key] = merge_defaults(defaults_key, @defaults[defaults_key])
- @defaults[defaults_key] = merge_defaults(defaults_key, @defaults[defaults_key], belong) end
- def traverse_repodir(repodir)
- def traverse_repodir(repodir, belong) if File.directory? repodir
load_defaults(repodir)
load_defaults(repodir, belong) entry_list = Dir.children(repodir) - ['DEFAULTS'] entry_list.each do |entry| next if entry.start_with? '.'
traverse_repodir("#{repodir}/#{entry}")
else return if File.dirname(repodir) == REPO_DIRtraverse_repodir("#{repodir}/#{entry}", belong) end
project = File.dirname(repodir).delete_prefix("#{REPO_DIR}/")
project = File.dirname(repodir).delete_prefix("#{REPO_DIR}/#{belong}/") fork_name = File.basename(repodir)
load_repo_file(repodir, project, fork_name)
load_repo_file(repodir, project, fork_name, belong)
end end
def load_fork_info
- traverse_repodir(REPO_DIR)
@upstreams['upstreams'].each do |repo|
traverse_repodir("#{REPO_DIR}/#{repo['location']}", repo['location'])
end end
def create_workers
@@ -221,14 +224,16 @@ end
# main thread class MirrorMain
- def load_repo_file(repodir, project, fork_name)
def load_repo_file(repodir, project, fork_name, belong) git_repo = "#{project}/#{fork_name}" git_info = YAML.safe_load(File.open(repodir)) return if git_info.nil? || git_info['url'].nil?
@git_info[git_repo] = git_info @git_info[git_repo]['git_repo'] = git_repo
- @git_info[git_repo] = merge_defaults(git_repo, @git_info[git_repo])
- @git_info[git_repo]['belong'] = belong
- @git_info[git_repo] = merge_defaults(git_repo, @git_info[git_repo], belong)
- fork_stat_init(git_repo) @priority_queue.push git_repo, @priority @priority += 1
@@ -453,8 +458,8 @@ end
# main thread class MirrorMain
- def merge_defaults(object_key, object)
- return object if object_key == 'default'
def merge_defaults(object_key, object, belong)
return object if object_key == belong
defaults_key = File.dirname(object_key) while defaults_key != '.'
@@ -462,8 +467,28 @@ class MirrorMain
defaults_key = File.dirname(defaults_key) end
- return @defaults['default'].merge(object) if @defaults['default']
return @defaults[belong].merge(object) if @defaults[belong]
return object end
def clone_upstream_repo
if File.exist?("#{ENV['CCI_SRC']}/sbin/upstream-config")
@upstreams = YAML.safe_load(File.open('../sbin/upstream-config'))
@upstreams['upstreams'].each do |repo|
url = get_url(repo['url'])
%x(git clone #{url} #{REPO_DIR}/#{repo['location']} 2>&1)
end
else
puts 'ERROR: No upstream-config file'
return -1
end
end
def get_url(url)
if url.include?('gitee.com/') && File.exist?("/srv/git/#{url.delete_prefix('https://%27)%7D")
url = "/srv/git/#{url.delete_prefix('https://')}"
end
return url
end
end
2.23.0
On Sat, Feb 27, 2021 at 05:14:39PM +0800, Wu Fengguang wrote:
Would you give a bit comment/example on the newly introduced 'belong' field? It looks not obvious enough to me.
This 'belong' is just a string, like 'ansible'/'upstream'/'pkgbuild'/'dockerfile'.
As there will be more than one upstream-repo warehouse, and to keep git_repo not change, an attribute is needed to show which upstream-repo warehouse the file belong to. So I add this 'belong'.
Thanks, Yuanchao
On Mon, Mar 01, 2021 at 04:36:18PM +0800, Li Yuanchao wrote:
On Sat, Feb 27, 2021 at 05:14:39PM +0800, Wu Fengguang wrote:
Would you give a bit comment/example on the newly introduced 'belong' field? It looks not obvious enough to me.
This 'belong' is just a string, like 'ansible'/'upstream'/'pkgbuild'/'dockerfile'.
As there will be more than one upstream-repo warehouse, and to keep git_repo not change, an attribute is needed to show which upstream-repo warehouse the file belong to. So I add this 'belong'.
OK. How about the name 'git_collection'?
Thanks, Fengguang