puppet 2.7.19 → 2.7.20.rc1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (324) hide show
  1. data/CONTRIBUTING.md +61 -238
  2. data/Gemfile +32 -0
  3. data/Gemfile.lock +44 -0
  4. data/LICENSE +1 -1
  5. data/README_DEVELOPER.md +300 -5
  6. data/Rakefile +41 -37
  7. data/ext/build_defaults.yaml +20 -0
  8. data/ext/debian/README.Debian +8 -0
  9. data/ext/debian/README.source +2 -0
  10. data/ext/debian/TODO.Debian +1 -0
  11. data/ext/debian/changelog.erb +1104 -0
  12. data/ext/debian/compat +1 -0
  13. data/ext/debian/control +142 -0
  14. data/ext/debian/copyright +361 -0
  15. data/ext/debian/docs +1 -0
  16. data/ext/debian/fileserver.conf +17 -0
  17. data/ext/debian/puppet-common.dirs +8 -0
  18. data/ext/debian/puppet-common.install +3 -0
  19. data/ext/debian/puppet-common.lintian-overrides +7 -0
  20. data/ext/debian/puppet-common.manpages +2 -0
  21. data/ext/debian/puppet-common.postinst +35 -0
  22. data/ext/debian/puppet-common.postrm +32 -0
  23. data/ext/debian/puppet-el.dirs +1 -0
  24. data/ext/debian/puppet-el.emacsen-install +25 -0
  25. data/ext/debian/puppet-el.emacsen-remove +11 -0
  26. data/ext/debian/puppet-el.emacsen-startup +9 -0
  27. data/ext/debian/puppet-el.install +1 -0
  28. data/ext/debian/puppet-testsuite.install +3 -0
  29. data/ext/debian/puppet-testsuite.lintian-overrides +4 -0
  30. data/ext/debian/puppet.NEWS +86 -0
  31. data/ext/debian/puppet.conf +14 -0
  32. data/ext/debian/puppet.default +7 -0
  33. data/ext/debian/puppet.dirs +1 -0
  34. data/ext/debian/puppet.init +118 -0
  35. data/ext/debian/puppet.install +4 -0
  36. data/ext/debian/puppet.lintian-overrides +3 -0
  37. data/ext/debian/puppet.logrotate +11 -0
  38. data/ext/debian/puppet.manpages +36 -0
  39. data/ext/debian/puppet.postinst +20 -0
  40. data/ext/debian/puppet.postrm +20 -0
  41. data/ext/debian/puppet.preinst +20 -0
  42. data/ext/debian/puppetmaster-common.install +5 -0
  43. data/ext/debian/puppetmaster-common.manpages +5 -0
  44. data/ext/debian/puppetmaster-common.puppetqd.default +27 -0
  45. data/ext/debian/puppetmaster-common.puppetqd.init +84 -0
  46. data/ext/debian/puppetmaster-passenger.dirs +4 -0
  47. data/ext/debian/puppetmaster-passenger.postinst +66 -0
  48. data/ext/debian/puppetmaster-passenger.postrm +33 -0
  49. data/ext/debian/puppetmaster.NEWS +13 -0
  50. data/ext/debian/puppetmaster.README.debian +16 -0
  51. data/ext/debian/puppetmaster.default +38 -0
  52. data/ext/debian/puppetmaster.dirs +1 -0
  53. data/ext/debian/puppetmaster.init +158 -0
  54. data/ext/debian/puppetmaster.install +1 -0
  55. data/ext/debian/puppetmaster.lintian-overrides +3 -0
  56. data/ext/debian/puppetmaster.manpages +1 -0
  57. data/ext/debian/puppetmaster.postinst +20 -0
  58. data/ext/debian/puppetmaster.postrm +5 -0
  59. data/ext/debian/puppetmaster.preinst +22 -0
  60. data/ext/debian/rules +127 -0
  61. data/ext/debian/source/format +1 -0
  62. data/ext/debian/source/options +1 -0
  63. data/ext/debian/vim-puppet.README.Debian +13 -0
  64. data/ext/debian/vim-puppet.dirs +3 -0
  65. data/ext/debian/vim-puppet.yaml +5 -0
  66. data/ext/debian/watch +2 -0
  67. data/ext/emacs/puppet-mode.el +1 -0
  68. data/{conf → ext}/osx/PackageInfo.plist +0 -0
  69. data/{conf → ext}/osx/createpackage.sh +0 -0
  70. data/ext/osx/file_mapping.yaml +38 -0
  71. data/ext/osx/preflight.erb +37 -0
  72. data/{tasks/rake/templates → ext/osx}/prototype.plist.erb +0 -0
  73. data/ext/packaging/README-Solaris.md +117 -0
  74. data/ext/packaging/README.md +255 -0
  75. data/ext/packaging/spec/spec_helper.rb +12 -0
  76. data/ext/packaging/spec/tasks/00_utils_spec.rb +66 -0
  77. data/ext/packaging/tasks/00_utils.rake +382 -0
  78. data/ext/packaging/tasks/10_setupvars.rake +71 -0
  79. data/ext/packaging/tasks/20_setupextravars.rake +25 -0
  80. data/ext/packaging/tasks/apple.rake +201 -0
  81. data/ext/packaging/tasks/clean.rake +5 -0
  82. data/ext/packaging/tasks/deb.rake +108 -0
  83. data/ext/packaging/tasks/doc.rake +20 -0
  84. data/ext/packaging/tasks/fetch.rake +18 -0
  85. data/ext/packaging/tasks/gem.rake +68 -0
  86. data/ext/packaging/tasks/ips.rake +80 -0
  87. data/ext/packaging/tasks/mock.rake +126 -0
  88. data/ext/packaging/tasks/pe_deb.rake +9 -0
  89. data/ext/packaging/tasks/pe_remote.rake +45 -0
  90. data/ext/packaging/tasks/pe_rpm.rake +21 -0
  91. data/ext/packaging/tasks/pe_ship.rake +30 -0
  92. data/ext/packaging/tasks/pe_sign.rake +27 -0
  93. data/ext/packaging/tasks/pe_sles.rake +96 -0
  94. data/ext/packaging/tasks/release.rake +73 -0
  95. data/ext/packaging/tasks/remote_build.rake +78 -0
  96. data/ext/packaging/tasks/rpm.rake +52 -0
  97. data/ext/packaging/tasks/ship.rake +78 -0
  98. data/ext/packaging/tasks/sign.rake +82 -0
  99. data/ext/packaging/tasks/tag.rake +8 -0
  100. data/ext/packaging/tasks/tar.rake +68 -0
  101. data/ext/packaging/tasks/template.rake +13 -0
  102. data/ext/packaging/tasks/update.rake +16 -0
  103. data/ext/packaging/tasks/version.rake +21 -0
  104. data/ext/project_data.yaml +24 -0
  105. data/{conf/redhat/puppet.spec → ext/redhat/puppet.spec.erb} +18 -10
  106. data/install.rb +8 -8
  107. data/lib/puppet.rb +2 -6
  108. data/lib/puppet/agent/locker.rb +2 -0
  109. data/lib/puppet/application.rb +1 -1
  110. data/lib/puppet/application/agent.rb +1 -1
  111. data/lib/puppet/application/apply.rb +1 -1
  112. data/lib/puppet/application/cert.rb +5 -6
  113. data/lib/puppet/application/describe.rb +1 -1
  114. data/lib/puppet/application/device.rb +1 -1
  115. data/lib/puppet/application/doc.rb +1 -1
  116. data/lib/puppet/application/filebucket.rb +1 -1
  117. data/lib/puppet/application/inspect.rb +1 -1
  118. data/lib/puppet/application/kick.rb +1 -1
  119. data/lib/puppet/application/master.rb +1 -1
  120. data/lib/puppet/application/resource.rb +1 -1
  121. data/lib/puppet/defaults.rb +21 -3
  122. data/lib/puppet/external/dot.rb +1 -1
  123. data/lib/puppet/face/help/global.erb +1 -1
  124. data/lib/puppet/face/module/install.rb +1 -1
  125. data/lib/puppet/face/module/list.rb +1 -1
  126. data/lib/puppet/face/module/uninstall.rb +1 -1
  127. data/lib/puppet/face/node/clean.rb +23 -18
  128. data/lib/puppet/face/parser.rb +11 -2
  129. data/lib/puppet/file_collection.rb +16 -27
  130. data/lib/puppet/file_collection/lookup.rb +6 -16
  131. data/lib/puppet/file_serving/base.rb +4 -4
  132. data/lib/puppet/indirector/catalog/static_compiler.rb +3 -4
  133. data/lib/puppet/indirector/certificate/disabled_ca.rb +22 -0
  134. data/lib/puppet/indirector/certificate_request/disabled_ca.rb +22 -0
  135. data/lib/puppet/indirector/certificate_revocation_list/disabled_ca.rb +22 -0
  136. data/lib/puppet/indirector/face.rb +2 -2
  137. data/lib/puppet/indirector/key/disabled_ca.rb +22 -0
  138. data/lib/puppet/indirector/node/exec.rb +13 -1
  139. data/lib/puppet/indirector/request.rb +4 -0
  140. data/lib/puppet/metatype/manager.rb +17 -10
  141. data/lib/puppet/network/authstore.rb +1 -1
  142. data/lib/puppet/network/rights.rb +1 -2
  143. data/lib/puppet/node/environment.rb +1 -0
  144. data/lib/puppet/parameter/value.rb +9 -3
  145. data/lib/puppet/parser/ast.rb +1 -4
  146. data/lib/puppet/parser/files.rb +1 -1
  147. data/lib/puppet/parser/functions.rb +68 -22
  148. data/lib/puppet/parser/functions/create_resources.rb +2 -3
  149. data/lib/puppet/parser/functions/shellquote.rb +21 -25
  150. data/lib/puppet/parser/lexer.rb +40 -6
  151. data/lib/puppet/parser/relationship.rb +3 -1
  152. data/lib/puppet/parser/resource.rb +2 -3
  153. data/lib/puppet/parser/resource/param.rb +3 -5
  154. data/lib/puppet/parser/scope.rb +7 -4
  155. data/lib/puppet/property.rb +5 -3
  156. data/lib/puppet/provider.rb +5 -5
  157. data/lib/puppet/provider/aixobject.rb +1 -1
  158. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  159. data/lib/puppet/provider/exec/windows.rb +1 -1
  160. data/lib/puppet/provider/file/windows.rb +10 -29
  161. data/lib/puppet/provider/group/groupadd.rb +2 -3
  162. data/lib/puppet/provider/group/ldap.rb +1 -1
  163. data/lib/puppet/provider/group/windows_adsi.rb +1 -1
  164. data/lib/puppet/provider/ldap.rb +5 -1
  165. data/lib/puppet/provider/nameservice.rb +3 -3
  166. data/lib/puppet/provider/nameservice/directoryservice.rb +2 -2
  167. data/lib/puppet/provider/package/gem.rb +6 -2
  168. data/lib/puppet/provider/package/portage.rb +4 -2
  169. data/lib/puppet/provider/parsedfile.rb +1 -1
  170. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +2 -2
  171. data/lib/puppet/provider/service/base.rb +2 -41
  172. data/lib/puppet/provider/service/daemontools.rb +1 -1
  173. data/lib/puppet/provider/service/launchd.rb +1 -1
  174. data/lib/puppet/provider/service/redhat.rb +6 -5
  175. data/lib/puppet/provider/service/runit.rb +1 -1
  176. data/lib/puppet/provider/service/service.rb +43 -0
  177. data/lib/puppet/provider/service/windows.rb +1 -8
  178. data/lib/puppet/provider/user/user_role_add.rb +2 -1
  179. data/lib/puppet/provider/user/useradd.rb +8 -3
  180. data/lib/puppet/provider/user/windows_adsi.rb +12 -1
  181. data/lib/puppet/provider/zone/solaris.rb +1 -1
  182. data/lib/puppet/rails/inventory_node.rb +26 -13
  183. data/lib/puppet/reports.rb +1 -1
  184. data/lib/puppet/resource.rb +20 -5
  185. data/lib/puppet/resource/status.rb +1 -1
  186. data/lib/puppet/ssl/certificate_authority.rb +2 -0
  187. data/lib/puppet/ssl/host.rb +31 -6
  188. data/lib/puppet/test/test_helper.rb +3 -1
  189. data/lib/puppet/transaction/event.rb +1 -1
  190. data/lib/puppet/transaction/report.rb +2 -2
  191. data/lib/puppet/type.rb +30 -25
  192. data/lib/puppet/type/augeas.rb +1 -1
  193. data/lib/puppet/type/cron.rb +2 -2
  194. data/lib/puppet/type/exec.rb +6 -6
  195. data/lib/puppet/type/file.rb +5 -15
  196. data/lib/puppet/type/file/content.rb +1 -1
  197. data/lib/puppet/type/file/ensure.rb +1 -1
  198. data/lib/puppet/type/file/mode.rb +1 -1
  199. data/lib/puppet/type/file/selcontext.rb +6 -2
  200. data/lib/puppet/type/file/source.rb +1 -1
  201. data/lib/puppet/type/mount.rb +1 -1
  202. data/lib/puppet/type/package.rb +1 -1
  203. data/lib/puppet/type/schedule.rb +1 -1
  204. data/lib/puppet/type/scheduled_task.rb +1 -1
  205. data/lib/puppet/type/tidy.rb +1 -1
  206. data/lib/puppet/type/whit.rb +16 -9
  207. data/lib/puppet/util.rb +27 -11
  208. data/lib/puppet/util/adsi.rb +25 -23
  209. data/lib/puppet/util/autoload.rb +1 -1
  210. data/lib/puppet/util/classgen.rb +1 -1
  211. data/lib/puppet/util/feature.rb +3 -1
  212. data/lib/puppet/util/fileparsing.rb +9 -9
  213. data/lib/puppet/util/filetype.rb +55 -40
  214. data/lib/puppet/util/instance_loader.rb +5 -5
  215. data/lib/puppet/util/instrumentation.rb +3 -5
  216. data/lib/puppet/util/log_paths.rb +1 -3
  217. data/lib/puppet/util/monkey_patches.rb +34 -8
  218. data/lib/puppet/util/platform.rb +7 -0
  219. data/lib/puppet/util/posix.rb +3 -3
  220. data/lib/puppet/util/provider_features.rb +2 -3
  221. data/lib/puppet/util/rdoc.rb +4 -3
  222. data/lib/puppet/util/reference.rb +1 -1
  223. data/lib/puppet/util/selinux.rb +31 -36
  224. data/lib/puppet/util/tagging.rb +28 -6
  225. data/lib/puppet/util/windows.rb +1 -0
  226. data/lib/puppet/util/windows/error.rb +1 -1
  227. data/lib/puppet/util/windows/process.rb +3 -3
  228. data/lib/puppet/util/windows/security.rb +9 -46
  229. data/lib/puppet/util/windows/sid.rb +96 -0
  230. data/lib/puppet/util/windows/user.rb +65 -2
  231. data/lib/puppet/util/zaml.rb +109 -59
  232. data/lib/puppet/version.rb +18 -0
  233. data/spec/fixtures/unit/util/filetype/aixtab_output +44 -0
  234. data/spec/fixtures/unit/util/filetype/suntab_output +9 -0
  235. data/spec/integration/defaults_spec.rb +26 -7
  236. data/spec/integration/parser/functions_spec.rb +0 -4
  237. data/spec/integration/util/file_locking_spec.rb +1 -1
  238. data/spec/integration/util/windows/security_spec.rb +3 -23
  239. data/spec/lib/puppet_spec/files.rb +3 -3
  240. data/spec/shared_contexts/platform.rb +8 -0
  241. data/spec/spec_helper.rb +6 -1
  242. data/spec/unit/application/queue_spec.rb +2 -1
  243. data/spec/unit/configurer_spec.rb +1 -1
  244. data/spec/unit/face/{instrumentation_data.rb → instrumentation_data_spec.rb} +0 -0
  245. data/spec/unit/face/{instrumentation_listener.rb → instrumentation_listener_spec.rb} +0 -0
  246. data/spec/unit/face/{instrumentation_probe.rb → instrumentation_probe_spec.rb} +0 -0
  247. data/spec/unit/indirector/catalog/static_compiler_spec.rb +194 -0
  248. data/spec/unit/indirector/certificate/disabled_ca_spec.rb +33 -0
  249. data/spec/unit/indirector/certificate_request/disabled_ca_spec.rb +33 -0
  250. data/spec/unit/indirector/certificate_revocation_list/disabled_ca_spec.rb +33 -0
  251. data/spec/unit/indirector/key/disabled_ca_spec.rb +33 -0
  252. data/spec/unit/indirector/request_spec.rb +22 -0
  253. data/spec/unit/network/http/webrick_spec.rb +0 -7
  254. data/spec/unit/node/environment_spec.rb +8 -8
  255. data/spec/unit/parser/ast_spec.rb +0 -5
  256. data/spec/unit/parser/collector_spec.rb +1 -0
  257. data/spec/unit/parser/files_spec.rb +2 -2
  258. data/spec/unit/parser/functions/create_resources_spec.rb +3 -4
  259. data/spec/unit/parser/functions/require_spec.rb +0 -6
  260. data/spec/unit/parser/functions/shellquote_spec.rb +0 -5
  261. data/spec/unit/parser/functions/template_spec.rb +6 -1
  262. data/spec/unit/parser/functions_spec.rb +73 -23
  263. data/spec/unit/parser/lexer_spec.rb +133 -8
  264. data/spec/unit/parser/relationship_spec.rb +24 -0
  265. data/spec/unit/parser/resource_spec.rb +0 -4
  266. data/spec/unit/parser/scope_spec.rb +2 -2
  267. data/spec/unit/property_spec.rb +21 -1
  268. data/spec/unit/provider/exec/posix_spec.rb +7 -6
  269. data/spec/unit/provider/file/windows_spec.rb +29 -29
  270. data/spec/unit/provider/group/groupadd_spec.rb +36 -30
  271. data/spec/unit/provider/group/windows_adsi_spec.rb +2 -2
  272. data/spec/unit/provider/package/gem_spec.rb +12 -0
  273. data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +14 -11
  274. data/spec/unit/provider/service/redhat_spec.rb +11 -1
  275. data/spec/unit/provider/service/windows_spec.rb +19 -0
  276. data/spec/unit/provider/user/ldap_spec.rb +22 -8
  277. data/spec/unit/provider/user/user_role_add_spec.rb +12 -0
  278. data/spec/unit/provider/user/useradd_spec.rb +146 -118
  279. data/spec/unit/provider/user/windows_adsi_spec.rb +24 -2
  280. data/spec/unit/puppet_spec.rb +10 -0
  281. data/spec/unit/resource/status_spec.rb +1 -1
  282. data/spec/unit/resource_spec.rb +73 -0
  283. data/spec/unit/ssl/certificate_authority_spec.rb +25 -1
  284. data/spec/unit/ssl/host_spec.rb +73 -27
  285. data/spec/unit/ssl/key_spec.rb +0 -4
  286. data/spec/unit/transaction/event_spec.rb +1 -1
  287. data/spec/unit/type/exec_spec.rb +1 -1
  288. data/spec/unit/type/file/content_spec.rb +6 -4
  289. data/spec/unit/type/file/{ctime.rb → ctime_spec.rb} +0 -0
  290. data/spec/unit/type/file/{mtime.rb → mtime_spec.rb} +0 -0
  291. data/spec/unit/type/file/{type.rb → type_spec.rb} +0 -0
  292. data/spec/unit/type/file_spec.rb +2 -12
  293. data/spec/unit/type/host_spec.rb +14 -5
  294. data/spec/unit/type/mount_spec.rb +8 -0
  295. data/spec/unit/type/scheduled_task_spec.rb +2 -2
  296. data/spec/unit/util/adsi_spec.rb +23 -8
  297. data/spec/unit/util/command_line_spec.rb +11 -2
  298. data/spec/unit/util/feature_spec.rb +12 -1
  299. data/spec/unit/util/filetype_spec.rb +161 -55
  300. data/spec/unit/util/log_spec.rb +1 -1
  301. data/spec/unit/util/monkey_patches_spec.rb +7 -0
  302. data/spec/unit/util/rdoc_spec.rb +8 -2
  303. data/spec/unit/util/selinux_spec.rb +24 -32
  304. data/spec/unit/util/windows/sid_spec.rb +100 -0
  305. data/spec/unit/util/zaml_spec.rb +165 -25
  306. data/spec/unit/util_spec.rb +3 -9
  307. data/spec/watchr.rb +2 -6
  308. data/tasks/rake/gem.rake +4 -2
  309. data/tasks/rake/sign.rake +1 -1
  310. data/test/language/parser.rb +1 -0
  311. data/test/language/scope.rb +0 -5
  312. data/test/language/snippets.rb +1 -2
  313. data/test/lib/puppettest.rb +16 -27
  314. data/test/lib/puppettest/parsertesting.rb +0 -1
  315. data/test/network/authstore.rb +2 -4
  316. data/test/puppet/defaults.rb +0 -4
  317. data/test/util/fileparsing.rb +2 -6
  318. metadata +1706 -1617
  319. data/conf/osx/preflight +0 -24
  320. data/spec/spec.opts +0 -4
  321. data/spec/unit/file_collection/lookup_spec.rb +0 -45
  322. data/spec/unit/file_collection_spec.rb +0 -52
  323. data/tasks/rake/apple.rake +0 -176
  324. data/test/puppet/errortest.rb +0 -19
@@ -0,0 +1,12 @@
1
+ require 'rubygems'
2
+ require 'rspec'
3
+ require 'pathname'
4
+ require 'rake'
5
+
6
+ SPECDIR = Pathname(__FILE__).dirname
7
+
8
+ def require_task(name)
9
+ return false if (@loaded ||= {})[name]
10
+ load SPECDIR + '..' + 'tasks' + "#{name}.rake"
11
+ @loaded[name] = true
12
+ end
@@ -0,0 +1,66 @@
1
+ # -*- ruby -*-
2
+ require 'spec_helper'
3
+ require_task '00_utils'
4
+
5
+ describe "00_utils" do
6
+ TestVersions = {
7
+ '0.7.0' => {
8
+ :git_describe_version => %w{0.7.0},
9
+ :get_dash_version => '0.7.0',
10
+ :get_ips_version => '0.7.0,3.14159-0',
11
+ :get_dot_version => '0.7.0'
12
+ },
13
+ '0.7.0rc1' => {
14
+ :git_describe_version => %w{0.7.0rc1},
15
+ :get_dash_version => '0.7.0rc1',
16
+ :get_ips_version => '0.7.0rc1,3.14159-0',
17
+ :get_dot_version => '0.7.0rc1'
18
+ },
19
+ '0.7.0-rc1' => {
20
+ :git_describe_version => %w{0.7.0 rc1},
21
+ :get_dash_version => '0.7.0-rc1',
22
+ :get_ips_version => '0.7.0,3.14159-0',
23
+ :get_dot_version => '0.7.0.rc1'
24
+ },
25
+ '0.7.0-rc1-63-ge391f55' => {
26
+ :git_describe_version => %w{0.7.0 rc1 63},
27
+ :get_dash_version => '0.7.0-rc1-63',
28
+ :get_ips_version => '0.7.0,3.14159-63',
29
+ :get_dot_version => '0.7.0.rc1.63'
30
+ },
31
+ '0.7.0-rc1-63-ge391f55-dirty' => {
32
+ :git_describe_version => %w{0.7.0 rc1 63 dirty},
33
+ :get_dash_version => '0.7.0-rc1-63-dirty',
34
+ :get_ips_version => '0.7.0,3.14159-63-dirty',
35
+ :get_dot_version => '0.7.0.rc1.63.dirty'
36
+ },
37
+ '0.7.0-63-ge391f55' => {
38
+ :git_describe_version => %w{0.7.0 63},
39
+ :get_dash_version => '0.7.0-63',
40
+ :get_ips_version => '0.7.0,3.14159-63',
41
+ :get_dot_version => '0.7.0.63'
42
+ },
43
+ '0.7.0-63-ge391f55-dirty' => {
44
+ :git_describe_version => %w{0.7.0 63 dirty},
45
+ :get_dash_version => '0.7.0-63-dirty',
46
+ :get_ips_version => '0.7.0,3.14159-63-dirty',
47
+ :get_dot_version => '0.7.0.63.dirty'
48
+ },
49
+ }
50
+
51
+ TestVersions.keys.sort.each do |input|
52
+ results = TestVersions[input]
53
+ results.keys.sort_by(&:to_s).each do |method|
54
+ it "using #{method} #{input.inspect} becomes #{results[method].inspect}" do
55
+ # We have to call the `stub!` alias because we are trying to stub on
56
+ # `self`, and in the scope of an rspec block that is overridden to
57
+ # return a new double, not to stub a method!
58
+ self.stub!(:uname_r) { "3.14159" }
59
+ self.stub!(:is_git_repo) { true }
60
+ self.should_receive(:run_git_describe_internal).and_return(input)
61
+
62
+ self.send(method).should == results[method]
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,382 @@
1
+ # Utility methods used by the various rake tasks
2
+
3
+ def check_tool(tool)
4
+ return true if has_tool(tool)
5
+ STDERR.puts "#{tool} tool not found...exiting"
6
+ exit 1
7
+ end
8
+
9
+ def find_tool(tool)
10
+ ENV['PATH'].split(File::PATH_SEPARATOR).each do |root|
11
+ location = File.join(root, tool)
12
+ return location if FileTest.executable? location
13
+ end
14
+ return nil
15
+ end
16
+ alias :has_tool :find_tool
17
+
18
+ def check_file(file)
19
+ unless File.exist?(file)
20
+ STDERR.puts "#{file} file not found...exiting"
21
+ exit 2
22
+ end
23
+ end
24
+
25
+ def check_var(varname,var=nil)
26
+ if var.nil?
27
+ STDERR.puts "Requires #{varname} be set...exiting"
28
+ exit 3
29
+ end
30
+ end
31
+
32
+ def check_host(host)
33
+ unless host == %x{hostname}.chomp!
34
+ STDERR.puts "Requires host to be #{host}...exiting"
35
+ exit 5
36
+ end
37
+ end
38
+
39
+ def erb(erbfile, outfile)
40
+ template = File.read(erbfile)
41
+ message = ERB.new(template, nil, "-")
42
+ message.filename = erbfile
43
+ output = message.result(binding)
44
+ File.open(outfile, 'w') { |f| f.write output }
45
+ puts "Generated: #{outfile}"
46
+ end
47
+
48
+ def cp_pr(src, dest, options={})
49
+ mandatory = {:preserve => true}
50
+ cp_r(src, dest, options.merge(mandatory))
51
+ end
52
+
53
+ def cp_p(src, dest, options={})
54
+ mandatory = {:preserve => true}
55
+ cp(src, dest, options.merge(mandatory))
56
+ end
57
+
58
+ def mv_f(src, dest, options={})
59
+ force = {:force => true}
60
+ mv(src, dest, options.merge(mandatory))
61
+ end
62
+
63
+ def git_co(dist)
64
+ %x{git reset --hard ; git checkout #{dist}}
65
+ unless $?.success?
66
+ STDERR.puts 'Could not checkout #{dist} git branch to build package from...exiting'
67
+ exit 1
68
+ end
69
+ end
70
+
71
+ def get_temp
72
+ temp = `mktemp -d -t tmpXXXXXX`.strip
73
+ end
74
+
75
+ def remote_ssh_cmd target, command
76
+ check_tool('ssh')
77
+ puts "Executing '#{command}' on #{target}"
78
+ sh "ssh -t #{target} '#{command.gsub("'", "'\\\\''")}'"
79
+ end
80
+
81
+ def rsync_to *args
82
+ check_tool('rsync')
83
+ flags = "-Havxl -O --no-perms --no-owner --no-group"
84
+ source = args[0]
85
+ target = args[1]
86
+ dest = args[2]
87
+ puts "rsyncing #{source} to #{target}"
88
+ sh "rsync #{flags} #{source} #{target}:#{dest}"
89
+ end
90
+
91
+ def rsync_from *args
92
+ check_tool('rsync')
93
+ flags = "-Havxl -O --no-perms --no-owner --no-group"
94
+ source = args[0]
95
+ target = args[1]
96
+ dest = args[2]
97
+ puts "rsyncing #{source} from #{target} to #{dest}"
98
+ sh "rsync #{flags} #{target}:#{source} #{dest}"
99
+ end
100
+
101
+ def scp_file_from(host,path,file)
102
+ %x{scp #{host}:#{path}/#{file} #{@tempdir}/#{file}}
103
+ end
104
+
105
+ def scp_file_to(host,path,file)
106
+ %x{scp #{@tempdir}/#{file} #{host}:#{path}}
107
+ end
108
+
109
+ def timestamp
110
+ Time.now.strftime("%Y-%m-%d %H:%M:%S")
111
+ end
112
+
113
+ # Return information about the current tree, using `git describe`, ready for
114
+ # further processing.
115
+ #
116
+ # Returns an array of one to four elements, being:
117
+ # * version (three dot-joined numbers, leading `v` stripped)
118
+ # * the string 'rcX' (if the last tag was an rc release, where X is the rc number)
119
+ # * commits (string containing integer, number of commits since that version was tagged)
120
+ # * dirty (string 'dirty' if local changes exist in the repo)
121
+ def git_describe_version
122
+ return nil unless is_git_repo and raw = run_git_describe_internal
123
+ # reprocess that into a nice set of output data
124
+ # The elements we select potentially change if this is an rc
125
+ # For an rc with added commits our string will be something like '0.7.0-rc1-63-g51ccc51'
126
+ # and our return will be [0.7.0, rc1, 63, <dirty>]
127
+ # For a final with added commits, it will look like '0.7.0-63-g51ccc51'
128
+ # and our return will be [0.7.0, 64, <dirty>]
129
+ info = raw.chomp.sub(/^v/, '').split('-')
130
+ if info[1].to_s.match('^[\d]+')
131
+ version_string = info.values_at(0,1,3).compact
132
+ else
133
+ version_string = info.values_at(0,1,2,4).compact
134
+ end
135
+ version_string
136
+ end
137
+
138
+ # This is a stub to ease testing...
139
+ def run_git_describe_internal
140
+ raw = %x{git describe --tags --dirty 2>/dev/null}
141
+ $?.success? ? raw : nil
142
+ end
143
+
144
+ def get_dash_version
145
+ if info = git_describe_version
146
+ info.join('-')
147
+ else
148
+ get_pwd_version
149
+ end
150
+ end
151
+
152
+ def uname_r
153
+ %x{uname -r}.chomp
154
+ end
155
+
156
+ def get_ips_version
157
+ if info = git_describe_version
158
+ version, commits, dirty = info
159
+ if commits.to_s.match('^rc[\d]+')
160
+ commits = info[2]
161
+ dirty = info[3]
162
+ end
163
+ osrelease = uname_r
164
+ "#{version},#{osrelease}-#{commits.to_i}#{dirty ? '-dirty' : ''}"
165
+ else
166
+ get_pwd_version
167
+ end
168
+ end
169
+
170
+ def get_dot_version
171
+ get_dash_version.gsub('-', '.')
172
+ end
173
+
174
+ def get_pwd_version
175
+ %x{pwd}.strip.split('.')[-1]
176
+ end
177
+
178
+ def get_debversion
179
+ (@version.include?("rc") ? @version.sub(/rc[0-9]+/, '0.1\0') : "#{@version.gsub('-','.')}-1") + "#{@packager}#{get_debrelease}"
180
+ end
181
+
182
+ def get_origversion
183
+ @debversion.split('-')[0]
184
+ end
185
+
186
+ def get_rpmversion
187
+ @version.match(/^([0-9.]+)/)[1]
188
+ end
189
+
190
+ def get_version_file_version
191
+ # Match version files containing 'VERSION = "x.x.x"' and just x.x.x
192
+ contents = IO.read(@version_file)
193
+ if version_string = contents.match(/VERSION =.*/)
194
+ version_string.to_s.split()[-1]
195
+ else
196
+ contents
197
+ end
198
+ end
199
+
200
+ def get_debrelease
201
+ ENV['RELEASE'] || '1'
202
+ end
203
+
204
+ def get_rpmrelease
205
+ ENV['RELEASE'] ||
206
+ if @version.include?("rc")
207
+ "0.1" + @version.gsub('-', '_').match(/rc[0-9]+.*/)[0]
208
+ else
209
+ "1"
210
+ end
211
+ end
212
+
213
+ def load_keychain
214
+ unless @keychain_loaded
215
+ kill_keychain
216
+ start_keychain
217
+ @keychain_loaded = TRUE
218
+ end
219
+ end
220
+
221
+ def kill_keychain
222
+ %x{keychain -k mine}
223
+ end
224
+
225
+ def start_keychain
226
+ keychain = %x{/usr/bin/keychain -q --agents gpg --eval #{@gpg_key}}.chomp
227
+ new_env = keychain.match(/(GPG_AGENT_INFO)=([^;]*)/)
228
+ ENV[new_env[1]] = new_env[2]
229
+ end
230
+
231
+ def gpg_sign_file(file)
232
+ gpg ||= find_tool('gpg')
233
+
234
+ if gpg
235
+ sh "#{gpg} --armor --detach-sign -u #{@gpg_key} #{file}"
236
+ else
237
+ STDERR.puts "No gpg available. Cannot sign tarball. Exiting..."
238
+ exit 1
239
+ end
240
+ end
241
+
242
+ def mkdir_pr *args
243
+ args.each do |arg|
244
+ mkdir_p arg
245
+ end
246
+ end
247
+
248
+ def set_cow_envs(cow)
249
+ elements = cow.split('-')
250
+ if elements.size != 3
251
+ STDERR.puts "Expecting a cow name split on hyphens, e.g. 'base-squeeze-i386'"
252
+ exit 1
253
+ else
254
+ dist = elements[1]
255
+ arch = elements[2]
256
+ if dist.nil? or arch.nil?
257
+ STDERR.puts "Couldn't get the arg and dist from cow name. Expecting something like 'base-dist-arch'"
258
+ exit 1
259
+ end
260
+ arch = arch.split('.')[0] if arch.include?('.')
261
+ end
262
+
263
+ ENV['DIST'] = dist
264
+ ENV['ARCH'] = arch
265
+ end
266
+
267
+ def ln(target, name)
268
+ FileUtils.ln(name, target, :force => true, :verbose => true)
269
+ end
270
+
271
+ def git_commit_file(file)
272
+ if has_tool('git') and File.exist?('.git')
273
+ %x{git commit #{file} -m "Commit changes to #{file}" &> /dev/null}
274
+ end
275
+ end
276
+
277
+ def ship_gem(file)
278
+ %x{gem push #{file}}
279
+ end
280
+
281
+ def x(v)
282
+ puts %[#{v}]
283
+ print %x[#{v}]
284
+ end
285
+
286
+ def ask_yes_or_no
287
+ return boolean_value(ENV['ANSWER_OVERRIDE']) unless ENV['ANSWER_OVERRIDE'].nil?
288
+ answer = STDIN.gets.downcase.chomp
289
+ return TRUE if answer =~ /^y$|^yes$/
290
+ return FALSE if answer =~ /^n$|^no$/
291
+ puts "Nope, try something like yes or no or y or n, etc:"
292
+ ask_yes_or_no
293
+ end
294
+
295
+ def handle_method_failure(method, args)
296
+ STDERR.puts "There was an error running the method #{method} with the arguments:"
297
+ args.each { |param, arg| STDERR.puts "\t#{param} => #{arg}\n" }
298
+ STDERR.puts "The rake session is paused. Would you like to retry #{method} with these args and continue where you left off? [y,n]"
299
+ if ask_yes_or_no
300
+ send(method, args)
301
+ else
302
+ exit 1
303
+ end
304
+ end
305
+
306
+ def invoke_task(task, args=nil)
307
+ Rake::Task[task].reenable
308
+ Rake::Task[task].invoke(args)
309
+ end
310
+
311
+ def confirm_ship(files)
312
+ STDOUT.puts "The following files have been built and are ready to ship:"
313
+ files.each { |file| STDOUT.puts "\t#{file}\n" unless File.directory?(file) }
314
+ STDOUT.puts "Ship these files?? [y,n]"
315
+ ask_yes_or_no
316
+ end
317
+
318
+ def boolean_value(var)
319
+ return TRUE if (var == TRUE || ( var.is_a?(String) && ( var.downcase == 'true' || var.downcase =~ /^y$|^yes$/ )))
320
+ FALSE
321
+ end
322
+
323
+ def git_tag(version)
324
+ begin
325
+ sh "git tag -s -u #{@gpg_key} -m '#{version}' #{version}"
326
+ rescue Exception => e
327
+ STDERR.puts e
328
+ STDERR.puts "Unable to tag repo at #{version}"
329
+ exit 1
330
+ end
331
+ end
332
+
333
+ def rand_string
334
+ rand.to_s.split('.')[1]
335
+ end
336
+
337
+ def git_bundle(treeish)
338
+ temp = get_temp
339
+ appendix = rand_string
340
+ sh "git bundle create #{temp}/#{@name}-#{@version}-#{appendix} #{treeish} --tags"
341
+ cd temp do
342
+ sh "tar -czf #{@name}-#{@version}-#{appendix}.tar.gz #{@name}-#{@version}-#{appendix}"
343
+ rm_rf "#{@name}-#{@version}-#{appendix}"
344
+ end
345
+ "#{temp}/#{@name}-#{@version}-#{appendix}.tar.gz"
346
+ end
347
+
348
+ def remote_bootstrap(host, treeish)
349
+ tarball = git_bundle(treeish)
350
+ tarball_name = File.basename(tarball).gsub('.tar.gz','')
351
+ rsync_to(tarball, host, '/tmp')
352
+ appendix = rand_string
353
+ sh "ssh -t #{host} 'tar -zxvf /tmp/#{tarball_name}.tar.gz -C /tmp/ ; git clone --recursive /tmp/#{tarball_name} /tmp/#{@name}-#{appendix} ; cd /tmp/#{@name}-#{appendix} ; rake package:bootstrap'"
354
+ "/tmp/#{@name}-#{appendix}"
355
+ end
356
+
357
+ def is_git_repo
358
+ %x{git rev-parse --git-dir > /dev/null 2>&1}
359
+ return $?.success?
360
+ end
361
+
362
+ def git_pull(remote, branch)
363
+ sh "git pull #{remote} #{branch}"
364
+ end
365
+
366
+ def create_rpm_repo(dir)
367
+ check_tool('createrepo')
368
+ cd dir do
369
+ sh "createrepo -d ."
370
+ end
371
+ end
372
+
373
+ def update_rpm_repo(dir)
374
+ check_tool('createrepo')
375
+ cd dir do
376
+ sh "createrepo -d --update ."
377
+ end
378
+ end
379
+
380
+ def empty_dir?(dir)
381
+ File.exist?(dir) and File.directory?(dir) and Dir["#{dir}/**/*"].empty?
382
+ end