Class: Xampl::Version

Inherits:
Object
  • Object
show all
Defined in:
lib/xamplr/version.rb

Constant Summary collapse

@@version_limit =
5

Instance Method Summary collapse

Constructor Details

#initialize(repo_name, repo_root) ⇒ Version

Returns a new instance of Version.



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/xamplr/version.rb', line 5

def initialize(repo_name, repo_root)
  @invalid = true
  throw :refuse_to_version unless repo_name

  repo_name.gsub!(/^[\.\/]*/, '')
  repo_name.gsub!(/\/.*/, '')
  throw :refuse_to_version unless repo_name

  @repo_root = repo_root
  @repo_root << '/' unless '/'[-1] == @repo_root[-1]

  @repo_path = "#{@repo_root}#{repo_name}"
  @repo_name = repo_name

  throw :refuse_to_version if @repo_path == @repo_root
  throw :refuse_to_version unless File.directory?(@repo_path)

  @invalid = false
end

Instance Method Details

#make(version_stream, description = nil) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
# File 'lib/xamplr/version.rb', line 25

def make(version_stream, description=nil)
  throw :refuse_to_version if @invalid

  existing_versions = Dir.glob("#{@repo_root}/#{@repo_name}_#{version_stream}*")

  if 0 == existing_versions.size then
    make_first_version(version_stream, existing_versions, description)
  else
    make_new_version(version_stream, existing_versions, description)
  end
end

#make_first_version(version_stream, existing_versions, description) ⇒ Object



37
38
39
40
41
# File 'lib/xamplr/version.rb', line 37

def make_first_version(version_stream, existing_versions, description)
  cmd = "cd '#{@repo_root}'; rsync -a --delete '#{@repo_name}/'  '#{@repo_name}_#{version_stream}.0/'"
  # puts "first version: #{cmd}"
  system(cmd)
end

#make_new_version(version_stream, existing_versions, description) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/xamplr/version.rb', line 43

def make_new_version(version_stream, existing_versions, description)

  existing_versions.reverse!
  cmd = []
  eliminate = []
  existing_versions.each_with_index do | version, i |
    pushed_name = "#{@repo_name}_#{version_stream}.#{i + 1}"
    cmd << "mv '#{@repo_name}_#{version_stream}.#{i}' '#{pushed_name}'"
    eliminate << pushed_name unless i < @@version_limit
  end
  cmd << "cd '#{@repo_root}'"
  cmd = cmd.reverse
  cmd << "rsync -a --delete --checksum --link-dest='../#{@repo_name}_#{version_stream}.1' '#{@repo_name}/'  '#{@repo_name}_#{version_stream}.0/'"
  cmd << "touch '#{@repo_name}_#{version_stream}.0'"

  eliminate.each do | name |
    cmd << "rm -rf '#{name}'"
  end

  cmd = cmd.join("; ")
  # puts "new version: #{cmd}"
  system(cmd)
end