Class: GitCommands::Computer

Inherits:
Object
  • Object
show all
Includes:
Prompt
Defined in:
lib/git_commands/computer.rb

Defined Under Namespace

Classes: GitError

Constant Summary

Constants included from Prompt

Prompt::VALID_ANSWERS

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Prompt

#confirm, #error, #success, #warning

Constructor Details

#initialize(repo:, branches:, repo_klass: Repository, branch_klass: Branch, out: STDOUT) ⇒ Computer

Returns a new instance of Computer.



13
14
15
16
17
18
19
20
21
# File 'lib/git_commands/computer.rb', line 13

def initialize(repo:, branches:, repo_klass: Repository, branch_klass: Branch, out: STDOUT)
  @out = out
  @repo = repo_klass.new(repo)
  Dir.chdir(@repo) do
    @branches = branch_klass.factory(branches)
    @timestamp = Time.new.strftime("%Y-%m-%d")
    print_branches
  end
end

Instance Attribute Details

#outObject (readonly)

Returns the value of attribute out.



11
12
13
# File 'lib/git_commands/computer.rb', line 11

def out
  @out
end

Instance Method Details

#aggregateObject



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/git_commands/computer.rb', line 51

def aggregate
  temp = "temp/#{@timestamp}"
  release = "release/#{@timestamp}"
  confirm("Aggregate branches into #{release}") do
    enter_repo do
      `git branch #{release}`
      @branches.each do |branch|
        warning("Merging branch: #{branch}")
        `git checkout -b #{temp} origin/#{branch} --no-track`
        clean_and_exit([temp, release]) unless rebase_with
        clean_and_exit([temp]) unless rebase_with(release)
        `git checkout #{release}`
        `git merge #{temp}`
        `git branch -D #{temp}`
      end      
    end
    success("#{release} branch created")
  end
end

#purgeObject



23
24
25
26
27
28
29
30
31
32
33
# File 'lib/git_commands/computer.rb', line 23

def purge
  enter_repo do
    confirm("Proceed removing these branches") do
      @branches.each do |branch|
        warning("Removing branch: #{branch}")
        `git branch -D #{branch}` if branch.exists?(false)
        `git push origin :#{branch}`
      end
    end
  end
end

#rebaseObject



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/git_commands/computer.rb', line 35

def rebase
  confirm("Proceed rebasing these branches with master") do
    enter_repo do
      @branches.each do |branch|
        warning("Rebasing branch: #{branch}")
        `git checkout #{branch}`
        `git pull origin #{branch}`
        next unless rebase_with
        `git push -f origin #{branch}`
        success("Rebased successfully!")
      end
      remove_locals
    end
  end
end