Class: Whisk::Provider::Ingredient
Instance Attribute Summary
#resource
Instance Method Summary
collapse
#run_command, #run_command!, #shell_out, #shell_out!
#action_nothing, #initialize
Instance Method Details
#action_destroy ⇒ Object
144
145
146
|
# File 'lib/whisk/provider/ingredient.rb', line 144
def action_destroy
destroy
end
|
#action_diff ⇒ Object
148
149
150
151
|
# File 'lib/whisk/provider/ingredient.rb', line 148
def action_diff
Whisk.ui.info "Diff for ingredient '#{resource.name}'"
shell_out!("git diff", :cwd => resource.path)
end
|
#action_prepare ⇒ Object
153
154
155
156
157
|
# File 'lib/whisk/provider/ingredient.rb', line 153
def action_prepare
self.clone
self.checkout
self.add_remotes
end
|
#action_status ⇒ Object
159
160
161
162
163
164
165
166
167
168
169
|
# File 'lib/whisk/provider/ingredient.rb', line 159
def action_status
Whisk.ui.info "Status for ingredient '#{resource.name}'"
cmd = run_command!("git status", :cwd => resource.path)
cmd.stdout.lines.each do |line|
Whisk.ui.info "\s\s#{line}"
end
cmd.stderr.lines.each do |line|
Whisk.ui.info "\s\s#{line}"
end
Whisk.ui.info "\n"
end
|
#action_update ⇒ Object
171
172
173
174
175
176
177
178
179
180
|
# File 'lib/whisk/provider/ingredient.rb', line 171
def action_update
Whisk.ui.info "Updating ingredient '#{resource.name}'"
cmd = run_command!("git remote update", :cwd => resource.path)
cmd.stdout.lines.each do |line|
Whisk.ui.info "\s\s#{line}"
end
cmd.stderr.lines.each do |line|
Whisk.ui.info "\s\s#{line}"
end
end
|
#add_remote(remote, url) ⇒ Object
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
# File 'lib/whisk/provider/ingredient.rb', line 34
def add_remote(remote, url)
::Dir.chdir resource.path
if repo.config.keys.include?("remote.#{remote}.url")
if remote_changed? remote
Whisk.ui.info "Remote #{remote} points to a different url"
a = Whisk.ui.ask_question("Would you like to change it to point to #{url} ?",
{:default => 'y'}
)
if a =~ /y/i
run_command!("git remote rm #{remote}")
else
Whisk.ui.info("Skipping out of date remote #{remote}")
return
end
else
Whisk.ui.info "Remote #{remote} already added"
return
end
end
Whisk.ui.info "Adding remote #{remote} to ingredient #{resource.name}"
run_command!("git remote add #{remote} #{url}")
end
|
#add_remotes ⇒ Object
28
29
30
31
32
|
# File 'lib/whisk/provider/ingredient.rb', line 28
def add_remotes
resource.remotes.each_pair do |remote, url|
add_remote(remote, url)
end
end
|
#checkout ⇒ Object
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
# File 'lib/whisk/provider/ingredient.rb', line 57
def checkout
if resource.ref
if self.current_ref == resource.ref
Whisk.ui.info "Ingredient '#{resource.name}' already at ref '#{resource.ref}'"
else
Whisk.ui.info "Checking out ref '#{resource.ref}' for ingredient '#{resource.name}'"
cmd = run_command!("git checkout #{resource.ref}", :cwd => resource.path)
cmd.stdout.lines.each do |line|
Whisk.ui.info "\s\s#{line}"
end
cmd.stderr.lines.each do |line|
Whisk.ui.info "\s\s#{line}"
end
end
end
end
|
#clone ⇒ Object
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
# File 'lib/whisk/provider/ingredient.rb', line 74
def clone
if git.exist?
if remote_changed?("origin", resource.source)
reset_origin
else
Whisk.ui.info "Ingredient '#{resource.name}' already prepared"
end
else
Whisk.ui.info "Cloning ingredient '#{resource.name}', " + "from url #{resource.source}"
cmd = run_command!("git clone #{resource.source} #{resource.path}")
cmd.stdout.lines.each do |line|
Whisk.ui.info "\s\s#{line}"
end
cmd.stderr.lines.each do |line|
Whisk.ui.info "\s\s#{line}"
end
end
end
|
#current_ref ⇒ Object
93
94
95
96
97
98
99
100
|
# File 'lib/whisk/provider/ingredient.rb', line 93
def current_ref
cref = run_command!("git rev-parse --abbrev-ref HEAD", :cwd => resource.path).stdout.chomp
if cref == 'HEAD'
return run_command!("git describe --tags", :cwd => resource.path).stdout.chomp
else
return cref
end
end
|
#destroy ⇒ Object
102
103
104
105
106
107
108
109
|
# File 'lib/whisk/provider/ingredient.rb', line 102
def destroy
if git.exist?
Whisk.ui.info "Destroying Ingredient #{resource.name}"
::FileUtils.rm_rf resource.path
else
Whisk.ui.info "Ingredient #{resource.name} already destroyed"
end
end
|
#git ⇒ Object
111
112
113
|
# File 'lib/whisk/provider/ingredient.rb', line 111
def git
Grit::Git.new(resource.path)
end
|
#remote_changed?(remote, source) ⇒ Boolean
119
120
121
122
123
124
125
126
|
# File 'lib/whisk/provider/ingredient.rb', line 119
def remote_changed?(remote, source)
if git.exist? and resource.source != repo.config["remote.#{remote}.url"]
Whisk.ui.info "Remote origin has changed for ingredient #{resource.name}"
true
else
false
end
end
|
#repo ⇒ Object
115
116
117
|
# File 'lib/whisk/provider/ingredient.rb', line 115
def repo
Grit::Repo.new(resource.path)
end
|
#reset_origin ⇒ Object
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
# File 'lib/whisk/provider/ingredient.rb', line 128
def reset_origin
if remote_changed?("origin", new_source.source)
a = Whisk.ui.ask_question(
"Would you like to remove ingredient #{resource.name} before proceeding ?",
{ :default => 'y' }
)
if a =~ /y/i
destroy
clone
else
Whisk.ui.warn "Aborting whisk"
exit 1
end
end
end
|