Class: FlashFlow::ShadowRepo

Inherits:
Object
  • Object
show all
Defined in:
lib/flash_flow/shadow_repo.rb

Constant Summary collapse

FLASH_FLOW_BASE =
'.flash_flow'

Instance Method Summary collapse

Constructor Details

#initialize(git, opts = {}) ⇒ ShadowRepo

Returns a new instance of ShadowRepo.



9
10
11
12
# File 'lib/flash_flow/shadow_repo.rb', line 9

def initialize(git, opts={})
  @git = git
  @cmd_runner = CmdRunner.new(logger: opts[:logger])
end

Instance Method Details

#create_shadow_repoObject



26
27
28
29
30
31
# File 'lib/flash_flow/shadow_repo.rb', line 26

def create_shadow_repo
  unless Dir.exists?(flash_flow_dir)
    @cmd_runner.run("mkdir -p #{flash_flow_dir}")
    @cmd_runner.run("cp -R #{current_dir} #{flash_flow_base_dir}")
  end
end

#current_dirObject



42
43
44
# File 'lib/flash_flow/shadow_repo.rb', line 42

def current_dir
  Dir.getwd
end

#flash_flow_base_dirObject



34
35
36
37
38
39
40
# File 'lib/flash_flow/shadow_repo.rb', line 34

def flash_flow_base_dir
  if current_dir =~ /\.flash_flow/
    "#{current_dir.split(FLASH_FLOW_BASE).first}#{FLASH_FLOW_BASE}"
  else
    "#{current_dir}/../#{FLASH_FLOW_BASE}"
  end
end

#flash_flow_dirObject



46
47
48
# File 'lib/flash_flow/shadow_repo.rb', line 46

def flash_flow_dir
  @flash_flow_dir ||= flash_flow_base_dir + "/#{File.basename(current_dir)}"
end

#in_dir(opts = {}) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
# File 'lib/flash_flow/shadow_repo.rb', line 14

def in_dir(opts={})
  opts = { reset: true, go_back: true }.merge(opts)
  create_shadow_repo

  Dir.chdir(flash_flow_dir) do
    @git.fetch(@git.merge_remote)
    @git.run("reset --hard HEAD") if opts[:reset]

    yield
  end
end