Class: Gitomator::Task::BaseReposTask

Inherits:
BaseTask
  • Object
show all
Defined in:
lib/gitomator/task/base_repos_task.rb

Direct Known Subclasses

CloneRepos, EnableDisableCI, MakeRepos

Instance Attribute Summary collapse

Attributes inherited from BaseTask

#context, #logger

Instance Method Summary collapse

Methods inherited from BaseTask

#ci, #git, #hosting, #tagging

Constructor Details

#initialize(context, repos, local_dir = nil) ⇒ BaseReposTask

Returns a new instance of BaseReposTask.

Parameters:

  • context (Gitomator::Context)
  • auto_marker_config (Gitomator::Classroom::Config::AutoMarker)

    Parsed configuration object (TODO: Implement it as a subclass of Gitomator::Classroom::Assignment)

  • local_dir (String) (defaults to: nil)

    A local directory where the repos will be (or have been) cloned.



15
16
17
18
19
20
21
22
23
# File 'lib/gitomator/task/base_repos_task.rb', line 15

def initialize(context, repos, local_dir=nil)
  super(context)
  unless local_dir.nil?
    raise "No such directory #{local_dir}" unless Dir.exists? local_dir
  end
  @local_dir = local_dir
  @repos = repos
  @blocks    = { :before => [], :after => [] }
end

Instance Attribute Details

#local_dirObject (readonly)

String or nil



7
8
9
# File 'lib/gitomator/task/base_repos_task.rb', line 7

def local_dir
  @local_dir
end

#reposObject (readonly)

Array<String>



8
9
10
# File 'lib/gitomator/task/base_repos_task.rb', line 8

def repos
  @repos
end

Instance Method Details

#after_processing_all_repos {|result2mark, repo2error| ... } ⇒ Object

Inject a block that will run after all repos have been processed.

Yields:

  • (result2mark, repo2error)

Yield Parameters:

  • repo2result (Hash<String,Object>)
  • repo2error (Hash<String,Error>)


80
81
82
# File 'lib/gitomator/task/base_repos_task.rb', line 80

def after_processing_all_repos(&block)
  @blocks[:after].push block
end

#before_processing_any_repos(&block) ⇒ Object

Inject a block that will run before processing any repos. The blocks takes no arguments, and doesn’t (need to) return any specific value.



69
70
71
# File 'lib/gitomator/task/base_repos_task.rb', line 69

def before_processing_any_repos(&block)
  @blocks[:before].push block
end

#process_repo(repo, index) ⇒ Object

You need to override this method!

Parameters:

  • repo (String)

    The name of the repo



53
54
55
# File 'lib/gitomator/task/base_repos_task.rb', line 53

def process_repo(repo, index)
  raise "Unimplemented"
end

#process_repo_error(repo, index, error) ⇒ Object

Override this to provide custom error handling



60
61
62
# File 'lib/gitomator/task/base_repos_task.rb', line 60

def process_repo_error(repo, index, error)
  logger.error "#{repo} : #{error}\n#{error.backtrace.join("\n\t")}"
end

#runObject



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/gitomator/task/base_repos_task.rb', line 27

def run()
  @blocks[:before].each {|b| self.instance_exec(&b) }

  repo2result, repo2error = {}, {}

  repos.each_with_index do |repo, index|
    logger.debug "#{repo} (#{index + 1} out of #{repos.length})"
    begin
      repo2result[repo] = process_repo(repo, index)
    rescue => e
      process_repo_error(repo, index, e)
      repo2error[repo] = e
    end
  end

  @blocks[:after].each {|b| self.instance_exec(repo2result, repo2error, &b) }
end