docman 0.0.13 → 0.0.14

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1322b6af3565d237bc3d042e02662b9e466aee37
4
- data.tar.gz: 2747a8cca432a253cf16edfa55be4cedf05acc76
3
+ metadata.gz: 0fb73f66842f33cfed8718d90967ff300c9003df
4
+ data.tar.gz: 1a7ab11302d11b040020666a2cdcf03764c24937
5
5
  SHA512:
6
- metadata.gz: d0acff39dadf9565285b4afde218b9491d18e6dbb1a79b23b6a775e088baae70a3f097bda85e592e45681fd9c4fe914737587d3c46d7803d913496bfcab1b65e
7
- data.tar.gz: 1f47d645b9c3d7a20dc4085a520548fc5c40c49930c9e99beeeca186560ef020d6fc9fa5cad3abfecb240cf1060eb0aef838e9063ba8e9616b56209dfb8be5f4
6
+ metadata.gz: f195b9bcca8313fac8986eaa236e7125263740178b7a59779c2fe9c028ccb309ca652f75e3474ea1bdf059346df78a75596699d93f6bcf55429fd99c35e4a4ec
7
+ data.tar.gz: 6d219e4d86dfb1f2afd051e9951607a4ee98cc8fbd66737aa9d3bb7d1c9cbb00dc63443cdee35b20bb6066aed98b9e135b24296cf2269034de302b3d3b86f6d7
@@ -63,3 +63,23 @@ Feature: Docroot management - git_target
63
63
  | master/profiles/sample_profile |
64
64
  | master/projects/sample_project1 |
65
65
  | master/projects/sample_project2 |
66
+
67
+ @announce
68
+ @no-clobber
69
+ @git_target
70
+ @master
71
+ @deploy
72
+ @sites
73
+ Scenario: git_target deploy sites master
74
+ Given I cd to "sample-docroot"
75
+ Then I run `docman deploy git_target sites branch master`
76
+ Then the exit status should be 0
77
+ Then the following directories should exist:
78
+ | master |
79
+ | master/docroot |
80
+ | master/docroot/sites |
81
+ | master/hooks |
82
+ | master/profiles |
83
+ | master/profiles/sample_profile |
84
+ | master/projects/sample_project1 |
85
+ | master/projects/sample_project2 |
@@ -57,6 +57,7 @@ module Docman
57
57
  def deploy(deploy_target_name, name, type, version, options = false)
58
58
  @options = options
59
59
  @deploy_target = @config['deploy_targets'][deploy_target_name]
60
+ raise "Wrong deploy target: #{deploy_target_name}" if @deploy_target.nil?
60
61
  @deploy_target['name'] = deploy_target_name
61
62
  @docroot_config = DocrootConfig.new(@workspace_dir, deploy_target)
62
63
  @docroot_config.states_dependin_on(name, version).keys.each do |state|
@@ -65,7 +66,7 @@ module Docman
65
66
  end
66
67
 
67
68
  def execute(action, state, name = nil)
68
- params = @deploy_target.clone
69
+ params = Marshal.load(Marshal.dump(@deploy_target))
69
70
  params['state'] = state
70
71
  params['action'] = action
71
72
  params['name'] = name
@@ -32,16 +32,24 @@ module Docman
32
32
 
33
33
  before_execute do
34
34
  if @context.need_rebuild?
35
- log("Need rebuild")
35
+ @context.build_mode = :rebuild
36
36
  else
37
- log("Rebuild not needed")
38
- raise NoChangesError, 'This version already deployed' unless changed?
37
+ if @context.changed? or changed?
38
+ @context.build_mode = :update
39
+ log("Changed")
40
+ else
41
+ log("Not changed")
42
+ @context.build_mode = :none
43
+ raise NoChangesError, 'This version already deployed'
44
+ end
39
45
  end
40
46
 
41
47
  end
42
48
 
43
49
  after_execute do
44
- @execute_result = @context.write_info(@execute_result)
50
+ if @execute_result
51
+ @execute_result = @context.write_info(@execute_result)
52
+ end
45
53
  end
46
54
 
47
55
  def changed?
@@ -7,7 +7,8 @@ module Docman
7
7
  register_builder :drupal_drush_builder
8
8
 
9
9
  def execute
10
- return unless @context.need_rebuild?
10
+ return if @build_mode == :none
11
+ #return unless @context.need_rebuild?
11
12
  puts 'Download drupal through drush'
12
13
  FileUtils.mkdir_p(@context['temp_path'])
13
14
  Dir.chdir @context['temp_path']
@@ -7,13 +7,14 @@ module Docman
7
7
  def execute
8
8
  execute_result = GitUtil.get(@context['repo'], @context['full_build_path'], @context.version_type, @context.version)
9
9
  # No commit hash for 'root' as it will be changed later
10
- @context['type'] == 'root' ? @context['build_path'] : execute_result
10
+ result = @context['type'] == 'root' ? @context['build_path'] : execute_result
11
+ GitUtil.repo_changed?(@context['full_build_path']) ? result : false
11
12
  end
12
13
 
13
14
  def changed?
14
15
  stored_version = @context.stored_version['result']
15
16
  # No commit hash for 'root' as it will be changed later
16
- repo_version = @context['type'] == 'root' ? @context['build_path'] : GitUtil.get(@context['repo'], @context['full_build_path'], @context.version_type, @context.version)
17
+ repo_version = @context['type'] == 'root' ? @context['build_path'] : GitUtil.get(@context['repo'], @context['full_build_path'], @context.version_type, @context.version, true)
17
18
  stored_version != repo_version
18
19
  end
19
20
 
@@ -11,7 +11,7 @@ module Docman
11
11
  FileUtils.mkdir_p(@context['full_build_path'])
12
12
  FileUtils.cp_r(Dir["#{@context['temp_path']}/."], @context['full_build_path'])
13
13
  FileUtils.rm_r(File.join(@context['full_build_path'], '.git')) if File.directory?(File.join(@context['full_build_path'], '.git'))
14
- result
14
+ GitUtil.repo_changed?(@context['full_build_path']) ? result : false
15
15
  end
16
16
 
17
17
  def changed?
@@ -50,7 +50,7 @@ module Docman
50
50
  def add_actions(obj, context = nil)
51
51
  if obj.has_key? 'hooks' and obj['hooks'].has_key? @type
52
52
  obj['hooks'][@type].each_pair do |name, hooks|
53
- hooks = hooks.clone
53
+ hooks = Marshal::load(Marshal.dump(hooks))
54
54
  unless context.nil?
55
55
  hooks.each do |hook|
56
56
  hook['context'] = context
@@ -10,9 +10,8 @@ module Docman
10
10
 
11
11
  before_execute do
12
12
  unless GitUtil.repo_changed? @context['root']['full_build_path']
13
- raise NoChangesError, "Repo not changed needed, commit not needed"
13
+ raise NoChangesError, "Repo not changed, commit not needed" unless @context.need_rebuild?
14
14
  end
15
- # @not_execute = true unless GitUtil.repo_changed? @context['root']['full_build_path']
16
15
  end
17
16
 
18
17
  def execute
@@ -5,6 +5,8 @@ require 'digest/md5'
5
5
  module Docman
6
6
  class Config < Hash
7
7
 
8
+ attr_reader :unmutable_config
9
+
8
10
  def initialize(file)
9
11
  super
10
12
  @config = YAML::load_file(file)
@@ -15,6 +17,7 @@ module Docman
15
17
  @config.each_pair do |k, v|
16
18
  self[k] = v
17
19
  end
20
+ @unmutable_config = Marshal::load(Marshal.dump(@config))
18
21
  end
19
22
 
20
23
  def merge_config_from_file(file)
@@ -24,7 +27,7 @@ module Docman
24
27
  end
25
28
 
26
29
  def config_hash
27
- Digest::MD5.hexdigest(Marshal::dump(self))
30
+ Digest::MD5.hexdigest(Marshal::dump(@unmutable_config))
28
31
  end
29
32
 
30
33
  end
@@ -53,7 +53,7 @@ module Docman
53
53
 
54
54
  stored_config_hash = read_version_file_param('config_hash')
55
55
  @config_hash = Docman::Application.instance.config.config_hash
56
- @config_yaml = Docman::Application.instance.config.to_yaml
56
+ @config_yaml = Docman::Application.instance.config.unmutable_config.to_yaml
57
57
 
58
58
  #TODO: need to refactor
59
59
  stored_docroot_config_hash = read_version_file_param('docroot_config_hash')
@@ -66,7 +66,7 @@ module Docman
66
66
  Docman::Application.instance.force = true
67
67
  end
68
68
  if stored_docroot_config_hash != @docroot_config_hash
69
- log 'Forced rebuild as configuration was changed', 'info'
69
+ log 'Forced rebuild as docroot configuration was changed', 'info'
70
70
  filename = File.join(@docroot_config.root['full_build_path'], 'docroot_config.yaml')
71
71
  log Diffy::Diff.new(read_file(filename), @docroot_config_yaml) if File.file? filename
72
72
  Docman::Application.instance.force = true
@@ -105,7 +105,8 @@ module Docman
105
105
  def read_file(path)
106
106
  YAML::load_file(path)
107
107
  rescue
108
- raise "Error in config file #{path}"
108
+ log "Error in config file #{path}"
109
+ return false
109
110
  end
110
111
 
111
112
  def read_version_file_param(param)
@@ -124,7 +125,7 @@ module Docman
124
125
  end
125
126
 
126
127
  def write_config_file(config, path)
127
- File.open(path, 'w') {|f| f.write config.to_yaml}
128
+ File.open(path, 'w') {|f| f.write config}
128
129
  end
129
130
 
130
131
  def build
@@ -20,28 +20,37 @@ module Docman
20
20
  exec 'git clean -f -d'
21
21
  end
22
22
 
23
- def self.get(repo, path, type, version)
23
+ def self.get(repo, path, type, version, force_return = false)
24
24
  if File.directory? path and File.directory?(File.join(path, '.git'))
25
25
  Dir.chdir path
26
26
 
27
- self.reset_repo(path) if self.repo_changed?(path)
27
+ self.reset_repo(path) #if self.repo_changed?(path)
28
28
 
29
29
  if type == 'branch'
30
30
  exec "git checkout #{version}"
31
+ initial_revision = self.last_revision
31
32
  exec "git pull origin #{version}"
32
33
  end
33
34
  if type == 'tag'
34
35
  exec 'git fetch --tags'
36
+ initial_revision = self.last_revision
35
37
  exec "git checkout tags/#{version}"
36
38
  end
37
39
  else
40
+ initial_revision = nil
38
41
  FileUtils.rm_rf path if File.directory? path
39
42
  exec "git clone #{repo} #{path}"
40
43
  Dir.chdir path
41
44
  exec "git checkout #{version}"
42
45
  end
43
- result = `git rev-parse --short HEAD`
46
+ result = self.last_revision
44
47
  @logger.info "Commit hash: #{result}"
48
+ # force_return or result != initial_revision ? result : false
49
+ result
50
+ end
51
+
52
+ def self.last_revision
53
+ result = `git rev-parse --short HEAD`
45
54
  result.delete!("\n")
46
55
  end
47
56
 
@@ -54,7 +63,7 @@ module Docman
54
63
  # puts message
55
64
  pull root_path
56
65
  exec %Q(git add --all #{path.slice "#{root_path}/"})
57
- exec %Q(git commit -m "#{message}")
66
+ exec %Q(git commit -m "#{message}") if repo_changed? path
58
67
  end
59
68
  end
60
69
 
@@ -5,7 +5,7 @@ module Docman
5
5
 
6
6
  include Docman::Context
7
7
 
8
- attr_accessor :need_rebuild
8
+ attr_accessor :need_rebuild, :build_mode
9
9
 
10
10
  def initialize(hash = {})
11
11
  super
@@ -14,6 +14,7 @@ module Docman
14
14
  end
15
15
  self['build_type'] = self['docroot_config'].deploy_target['builders'][self['type']]['handler']
16
16
  @need_rebuild = Hash.new
17
+ @changed = Hash.new
17
18
  end
18
19
 
19
20
  def version
@@ -41,6 +42,16 @@ module Docman
41
42
  to_save
42
43
  end
43
44
 
45
+ def changed?
46
+ #TODO: need refactor
47
+ return @changed[self['state']] if not @changed.nil? and @changed.has_key? self['state'] and not @changed[self['state']].nil?
48
+ @changed[self['state']] = false
49
+ if need_rebuild?
50
+ @changed[self['state']] = true
51
+ end
52
+ @changed[self['state']]
53
+ end
54
+
44
55
  def need_rebuild?
45
56
  return @need_rebuild[self['state']] if not @need_rebuild.nil? and @need_rebuild.has_key? self['state'] and not @need_rebuild[self['state']].nil?
46
57
  @need_rebuild[self['state']] = _need_rebuild?
@@ -66,10 +77,12 @@ module Docman
66
77
  return true unless v
67
78
  return true if v['type'] != self['type']
68
79
  return true if v['build_type'] != self['build_type']
69
- return true if (not v['version'].nil? and v['version'] != self.version)
80
+ # return true if (not v['version'].nil? and v['version'] != self.version)
81
+ @changed[self['state']] = true if (not v['version'].nil? and v['version'] != self.version)
70
82
  return true if (not v['version_type'].nil? and v['version_type'] != self.version_type)
71
83
  unless v['state'].nil?
72
- return true if v['state'] != self['state']
84
+ # return true if v['state'] != self['state']
85
+ @changed[self['state']] = true if v['state'] != self['state']
73
86
  end
74
87
  false
75
88
  end
@@ -1,3 +1,3 @@
1
1
  module Docman
2
- VERSION = "0.0.13"
2
+ VERSION = "0.0.14"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: docman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.13
4
+ version: 0.0.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Tolstikov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-15 00:00:00.000000000 Z
11
+ date: 2014-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler