64 lines
1.1 KiB
Ruby
64 lines
1.1 KiB
Ruby
|
module Gitlab
|
||
|
module GitoriousImport
|
||
|
GITORIOUS_HOST = "https://gitorious.org"
|
||
|
|
||
|
class Client
|
||
|
attr_reader :repo_list
|
||
|
|
||
|
def initialize(repo_list)
|
||
|
@repo_list = repo_list
|
||
|
end
|
||
|
|
||
|
def authorize_url(redirect_uri)
|
||
|
"#{GITORIOUS_HOST}/gitlab-import?callback_url=#{redirect_uri}"
|
||
|
end
|
||
|
|
||
|
def repos
|
||
|
@repos ||= repo_names.map { |full_name| Repository.new(full_name) }
|
||
|
end
|
||
|
|
||
|
def repo(id)
|
||
|
repos.find { |repo| repo.id == id }
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def repo_names
|
||
|
repo_list.to_s.split(',').map(&:strip).reject(&:blank?)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
Repository = Struct.new(:full_name) do
|
||
|
def id
|
||
|
Digest::SHA1.hexdigest(full_name)
|
||
|
end
|
||
|
|
||
|
def namespace
|
||
|
segments.first
|
||
|
end
|
||
|
|
||
|
def path
|
||
|
segments.last
|
||
|
end
|
||
|
|
||
|
def name
|
||
|
path.titleize
|
||
|
end
|
||
|
|
||
|
def description
|
||
|
""
|
||
|
end
|
||
|
|
||
|
def import_url
|
||
|
"#{GITORIOUS_HOST}/#{full_name}.git"
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def segments
|
||
|
full_name.split('/')
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|