Skip to content
Snippets Groups Projects
importer.rb 1.41 KiB
Newer Older
  • Learn to ignore specific revisions
  • Valery Sizov's avatar
    Valery Sizov committed
    module Gitlab
    
      module GithubImport
    
    Valery Sizov's avatar
    Valery Sizov committed
        class Importer
          attr_reader :project
    
          def initialize(project)
            @project = project
    
            @formatter = Gitlab::ImportFormatter.new
    
    Valery Sizov's avatar
    Valery Sizov committed
          end
    
          def execute
            client = octo_client(project.creator.github_access_token)
    
    Valery Sizov's avatar
    Valery Sizov committed
            #Issues && Comments
            client.list_issues(project.import_source, state: :all).each do |issue|
              if issue.pull_request.nil?
    
    
                body = @formatter.author_line(issue.user.login, issue.body)
    
    Valery Sizov's avatar
    Valery Sizov committed
                if issue.comments > 0
    
                  body += @formatter.comments_header
    
    
    Valery Sizov's avatar
    Valery Sizov committed
                  client.issue_comments(project.import_source, issue.number).each do |c|
    
                    body += @formatter.comment_to_md(c.user.login, c.created_at, c.body)
    
    Valery Sizov's avatar
    Valery Sizov committed
                  end
                end
    
                project.issues.create!(
    
                  description: body,
    
    Valery Sizov's avatar
    Valery Sizov committed
                  title: issue.title,
                  state: issue.state == 'closed' ? 'closed' : 'opened',
                  author_id: gl_user_id(project, issue.user.id)
                )
              end
            end
          end
    
          private
    
          def octo_client(access_token)
            ::Octokit.auto_paginate = true
    
            ::Octokit::Client.new(access_token: access_token)
    
    Valery Sizov's avatar
    Valery Sizov committed
          end
    
          def gl_user_id(project, github_id)
            user = User.joins(:identities).find_by("identities.extern_uid = ?", github_id.to_s)
            (user && user.id) || project.creator_id
          end
        end
      end
    end