tpkg 2.3.3 → 2.3.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (205) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +20 -0
  5. data/Portfile +39 -0
  6. data/Portfile.template +39 -0
  7. data/README.md +43 -0
  8. data/Rakefile +468 -18
  9. data/bin/gem2tpkg +2 -2
  10. data/bin/tpkg +18 -13
  11. data/bin/tpkg_uploader +132 -0
  12. data/ca.pem +1 -0
  13. data/control +7 -0
  14. data/depend +3 -0
  15. data/externals-etch/authorized_keys +40 -0
  16. data/externals-etch/group +9 -0
  17. data/externals-etch/iptables +38 -0
  18. data/externals-etch/limits +30 -0
  19. data/externals-etch/nfs +30 -0
  20. data/externals-etch/sudo +30 -0
  21. data/externals-etch/supplemental_groups +8 -0
  22. data/externals-etch/sysctl +30 -0
  23. data/externals-etch/user +41 -0
  24. data/externals/group +39 -0
  25. data/externals/supplemental_groups +48 -0
  26. data/externals/user +39 -0
  27. data/lib/tpkg.rb +260 -991
  28. data/lib/tpkg/os.rb +164 -0
  29. data/lib/tpkg/os/debian.rb +159 -0
  30. data/lib/tpkg/os/freebsd.rb +113 -0
  31. data/lib/tpkg/os/macosx.rb +113 -0
  32. data/lib/tpkg/os/redhat.rb +173 -0
  33. data/lib/tpkg/os/solaris.rb +101 -0
  34. data/lib/tpkg/os/windows.rb +26 -0
  35. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify.rb +67 -0
  36. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/errors.rb +127 -0
  37. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/kwalify.schema.yaml +58 -0
  38. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/main.rb +442 -0
  39. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/messages.rb +173 -0
  40. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/meta-validator.rb +275 -0
  41. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/parser/base.rb +127 -0
  42. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/parser/yaml.rb +841 -0
  43. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/rule.rb +559 -0
  44. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/templates/genclass-java.eruby +222 -0
  45. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/templates/genclass-php.eruby +104 -0
  46. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/templates/genclass-ruby.eruby +113 -0
  47. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/types.rb +156 -0
  48. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/util.rb +158 -0
  49. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/util/assert-text-equal.rb +46 -0
  50. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/util/hash-interface.rb +18 -0
  51. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/util/hashlike.rb +51 -0
  52. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/util/option-parser.rb +220 -0
  53. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/util/ordered-hash.rb +57 -0
  54. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/util/testcase-helper.rb +112 -0
  55. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/validator.rb +282 -0
  56. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/yaml-parser.rb +870 -0
  57. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh.rb +219 -0
  58. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/agent.rb +179 -0
  59. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/constants.rb +18 -0
  60. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/key_manager.rb +219 -0
  61. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/methods/abstract.rb +60 -0
  62. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/methods/hostbased.rb +71 -0
  63. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/methods/keyboard_interactive.rb +66 -0
  64. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/methods/password.rb +39 -0
  65. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/methods/publickey.rb +92 -0
  66. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/pageant.rb +183 -0
  67. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/session.rb +134 -0
  68. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/buffer.rb +340 -0
  69. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/buffered_io.rb +198 -0
  70. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/config.rb +205 -0
  71. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/connection/channel.rb +630 -0
  72. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/connection/constants.rb +33 -0
  73. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/connection/session.rb +597 -0
  74. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/connection/term.rb +178 -0
  75. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/errors.rb +85 -0
  76. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/key_factory.rb +102 -0
  77. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/known_hosts.rb +129 -0
  78. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/loggable.rb +61 -0
  79. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/packet.rb +102 -0
  80. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/prompt.rb +93 -0
  81. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/proxy/command.rb +75 -0
  82. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/proxy/errors.rb +14 -0
  83. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/proxy/http.rb +94 -0
  84. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/proxy/socks4.rb +70 -0
  85. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/proxy/socks5.rb +142 -0
  86. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/ruby_compat.rb +43 -0
  87. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/service/forward.rb +288 -0
  88. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test.rb +89 -0
  89. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test/channel.rb +129 -0
  90. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test/extensions.rb +152 -0
  91. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test/kex.rb +44 -0
  92. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test/local_packet.rb +51 -0
  93. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test/packet.rb +81 -0
  94. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test/remote_packet.rb +38 -0
  95. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test/script.rb +157 -0
  96. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test/socket.rb +64 -0
  97. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/algorithms.rb +384 -0
  98. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/cipher_factory.rb +97 -0
  99. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/constants.rb +30 -0
  100. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/hmac.rb +31 -0
  101. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/hmac/abstract.rb +79 -0
  102. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/hmac/md5.rb +12 -0
  103. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/hmac/md5_96.rb +11 -0
  104. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/hmac/none.rb +15 -0
  105. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/hmac/sha1.rb +13 -0
  106. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/hmac/sha1_96.rb +11 -0
  107. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/identity_cipher.rb +55 -0
  108. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/kex.rb +13 -0
  109. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb +208 -0
  110. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb +77 -0
  111. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/openssl.rb +127 -0
  112. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/packet_stream.rb +235 -0
  113. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/server_version.rb +71 -0
  114. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/session.rb +276 -0
  115. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/state.rb +206 -0
  116. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/verifiers/lenient.rb +30 -0
  117. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/verifiers/null.rb +12 -0
  118. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/verifiers/strict.rb +53 -0
  119. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/version.rb +62 -0
  120. data/lib/tpkg/version.rb +3 -0
  121. data/man/man1/cpan2tpkg.1 +82 -0
  122. data/man/man1/gem2tpkg.1 +120 -0
  123. data/man/man1/tpkg.1 +411 -0
  124. data/pkginfo +8 -0
  125. data/postinstall.solaris +11 -0
  126. data/postremove.solaris +16 -0
  127. data/schema/schema-1.0.5.yml +0 -0
  128. data/schema/schema-1.0.6.yml +0 -0
  129. data/schema/schema-1.0.7.yml +0 -0
  130. data/schema/schema-1.0.8.yml +0 -0
  131. data/schema/schema-1.0.9.yml +0 -0
  132. data/schema/schema.yml +0 -0
  133. data/schema/tpkg-1.0.0.dtd +0 -0
  134. data/schema/tpkg-1.0.1.dtd +0 -0
  135. data/schema/tpkg-1.0.2.dtd +0 -0
  136. data/schema/tpkg-1.0.3.dtd +0 -0
  137. data/schema/tpkg-1.0.4.dtd +0 -0
  138. data/schema/tpkg-1.0.5.dtd +0 -0
  139. data/schema/tpkg-1.0.6.dtd +0 -0
  140. data/schema/tpkg-1.0.7.dtd +0 -0
  141. data/schema/tpkg-1.0.8.dtd +0 -0
  142. data/schema/tpkg-1.0.9.dtd +0 -0
  143. data/schema/tpkg.dtd +0 -0
  144. data/test/TODO +30 -0
  145. data/test/premadetestpkg/pkg_without_file_metadata-1.0-1.tpkg +0 -0
  146. data/test/test_checksum.rb +53 -0
  147. data/test/test_compress.rb +55 -0
  148. data/test/test_conflict.rb +41 -0
  149. data/test/test_crontabs.rb +398 -0
  150. data/test/test_dependency.rb +1113 -0
  151. data/test/test_downgrade.rb +80 -0
  152. data/test/test_download.rb +95 -0
  153. data/test/test_encrypt.rb +136 -0
  154. data/test/test_filemetadata.rb +131 -0
  155. data/test/test_initscript.rb +93 -0
  156. data/test/test_install.rb +186 -0
  157. data/test/test_lock.rb +82 -0
  158. data/test/test_make.rb +410 -0
  159. data/test/test_metadata.rb +805 -0
  160. data/test/test_misc.rb +379 -0
  161. data/test/test_options.rb +1711 -0
  162. data/test/test_os.rb +193 -0
  163. data/test/test_os_debian.rb +99 -0
  164. data/test/test_os_freebsd.rb +89 -0
  165. data/test/test_os_macosx.rb +79 -0
  166. data/test/test_os_redhat.rb +124 -0
  167. data/test/test_os_solaris.rb +85 -0
  168. data/test/test_os_windows.rb +26 -0
  169. data/test/test_query.rb +134 -0
  170. data/test/test_remove.rb +539 -0
  171. data/test/test_tar.rb +99 -0
  172. data/test/test_unpack.rb +977 -0
  173. data/test/test_upgrade.rb +398 -0
  174. data/test/test_version.rb +54 -0
  175. data/test/testcmds/crontab +14 -0
  176. data/test/testcmds/debian/apt-cache +145 -0
  177. data/test/testcmds/debian/dpkg-query +16 -0
  178. data/test/testcmds/freebsd/pkg_info +13 -0
  179. data/test/testcmds/macosx/port +35 -0
  180. data/test/testcmds/redhat/rpmbuild +6 -0
  181. data/test/testcmds/redhat/yum +90 -0
  182. data/test/testcmds/solaris/pkginfo +25 -0
  183. data/test/testcmds/solaris/pkgutil +36 -0
  184. data/test/testpkg/reloc/encfile +2 -0
  185. data/test/testpkg/reloc/file +2 -0
  186. data/test/testpkg/reloc/precryptfile +1 -0
  187. data/test/testpkg/reloc/precryptfile.plaintext +3 -0
  188. data/test/testpkg/tpkg-bad-ownergroup.xml +25 -0
  189. data/test/testpkg/tpkg-bad-ownergroup.yml +18 -0
  190. data/test/testpkg/tpkg-default-perms.xml +28 -0
  191. data/test/testpkg/tpkg-default-perms.yml +20 -0
  192. data/test/testpkg/tpkg-good-ownergroup.xml +25 -0
  193. data/test/testpkg/tpkg-good-ownergroup.yml +18 -0
  194. data/test/testpkg/tpkg-nativedeps.yml +13 -0
  195. data/test/testpkg/tpkg-nofiles.xml +14 -0
  196. data/test/testpkg/tpkg-nofiles.yml +9 -0
  197. data/test/testpkg/tpkg.xml +35 -0
  198. data/test/testpkg/tpkg.yml +25 -0
  199. data/test/tpkgtest.rb +300 -0
  200. data/tpkg.conf +16 -0
  201. data/tpkg.gemspec +24 -0
  202. data/tpkg.spec +28 -0
  203. data/tpkg.xml +17 -0
  204. data/tpkg_profile.sh +32 -0
  205. metadata +306 -31
@@ -0,0 +1,28 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE tpkg SYSTEM "http://tpkg.sourceforge.net/tpkg-1.0.dtd">
3
+ <tpkg>
4
+ <name>testpkg</name>
5
+ <version>1.0</version>
6
+ <package_version>1</package_version>
7
+ <maintainer>Maintainer</maintainer>
8
+ <operatingsystem>OS</operatingsystem>
9
+ <architecture>Architecture</architecture>
10
+ <description>Description</description>
11
+ <bugreporting>Bugreporting info</bugreporting>
12
+ <files>
13
+ <file_defaults>
14
+ <posix>
15
+ <owner>root</owner>
16
+ <group>root</group>
17
+ <perms>0444</perms>
18
+ </posix>
19
+ </file_defaults>
20
+ <dir_defaults>
21
+ <posix>
22
+ <owner>root</owner>
23
+ <group>root</group>
24
+ <perms>0555</perms>
25
+ </posix>
26
+ </dir_defaults>
27
+ </files>
28
+ </tpkg>
@@ -0,0 +1,20 @@
1
+ name: testpkg
2
+ version: 1.0
3
+ package_version: 1
4
+ maintainer: Maintainer
5
+ operatingsystem: OS
6
+ architecture: Architecture
7
+ description: Description
8
+ bugreporting: Bugreporting info
9
+ files:
10
+ file_defaults:
11
+ posix:
12
+ owner: root
13
+ group: 0
14
+ perms: 0444
15
+ dir_defaults:
16
+ posix:
17
+ owner: root
18
+ group: 0
19
+ perms: 0555
20
+
@@ -0,0 +1,25 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE tpkg SYSTEM "http://tpkg.sourceforge.net/tpkg-1.0.dtd">
3
+ <tpkg>
4
+ <name>testpkg</name>
5
+ <version>1.0</version>
6
+ <package_version>1</package_version>
7
+ <maintainer>Maintainer</maintainer>
8
+ <operatingsystem>OS</operatingsystem>
9
+ <architecture>Architecture</architecture>
10
+ <description>Description</description>
11
+ <bugreporting>Bugreporting info</bugreporting>
12
+ <files>
13
+ <file_defaults>
14
+ <posix>
15
+ <owner>0</owner>
16
+ <group>0</group>
17
+ <perms>0444</perms>
18
+ </posix>
19
+ </file_defaults>
20
+ <file>
21
+ <path>file</path>
22
+ <crontab/>
23
+ </file>
24
+ </files>
25
+ </tpkg>
@@ -0,0 +1,18 @@
1
+ name: testpkg
2
+ version: 1.0
3
+ package_version: 1
4
+ maintainer: Maintainer
5
+ operatingsystem: OS
6
+ architecture: Architecture
7
+ description: Description
8
+ bugreporting: Bugreporting info
9
+ files:
10
+ file_defaults:
11
+ posix:
12
+ owner: 0
13
+ group: 0
14
+ perms: 0444
15
+ files:
16
+ - path: file
17
+ crontab: {}
18
+
@@ -0,0 +1,13 @@
1
+ name: testpkg
2
+ version: 1.0
3
+ package_version: 1
4
+ maintainer: Maintainer
5
+ operatingsystem: OS
6
+ architecture: Architecture
7
+ description: Description
8
+ bugreporting: Bugreporting info
9
+ dependencies:
10
+ - name: dep1
11
+ native: true
12
+ - name: dep2
13
+ native: true
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE tpkg SYSTEM "http://tpkg.sourceforge.net/tpkg-1.0.dtd">
3
+ <tpkg>
4
+ <name>testpkg</name>
5
+ <version>1.0</version>
6
+ <package_version>1</package_version>
7
+ <maintainer>Maintainer</maintainer>
8
+ <operatingsystem>OS</operatingsystem>
9
+ <architecture>Architecture</architecture>
10
+ <description>Description</description>
11
+ <bugreporting>Bugreporting info</bugreporting>
12
+ <files>
13
+ </files>
14
+ </tpkg>
@@ -0,0 +1,9 @@
1
+ name: testpkg
2
+ version: 1.0
3
+ package_version: 1
4
+ maintainer: Maintainer
5
+ operatingsystem: OS
6
+ architecture: Architecture
7
+ description: Description
8
+ bugreporting: Bugreporting info
9
+
@@ -0,0 +1,35 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE tpkg SYSTEM "http://tpkg.sourceforge.net/tpkg-1.0.dtd">
3
+ <tpkg>
4
+ <name>testpkg</name>
5
+ <version>1.0</version>
6
+ <package_version>1</package_version>
7
+ <maintainer>Maintainer</maintainer>
8
+ <operatingsystem>OS</operatingsystem>
9
+ <architecture>Architecture</architecture>
10
+ <description>Description</description>
11
+ <bugreporting>Bugreporting info</bugreporting>
12
+ <files>
13
+ <file_defaults>
14
+ <posix>
15
+ <owner>root</owner>
16
+ <group>root</group>
17
+ <perms>0444</perms>
18
+ </posix>
19
+ </file_defaults>
20
+ <file>
21
+ <path>encfile</path>
22
+ <encrypt/>
23
+ <posix>
24
+ <perms>0400</perms>
25
+ </posix>
26
+ </file>
27
+ <file>
28
+ <path>precryptfile</path>
29
+ <encrypt precrypt="true"/>
30
+ <posix>
31
+ <perms>0400</perms>
32
+ </posix>
33
+ </file>
34
+ </files>
35
+ </tpkg>
@@ -0,0 +1,25 @@
1
+ name: testpkg
2
+ version: 1.0
3
+ package_version: 1
4
+ maintainer: Maintainer
5
+ operatingsystem: OS
6
+ architecture: Architecture
7
+ description: Description
8
+ bugreporting: Bugreporting info
9
+ files:
10
+ file_defaults:
11
+ posix:
12
+ owner: root
13
+ group: 0
14
+ perms: 0444
15
+ files:
16
+ - path: encfile
17
+ encrypt: {}
18
+ posix:
19
+ perms: 0400
20
+ - path: precryptfile
21
+ encrypt:
22
+ precrypt: true
23
+ posix:
24
+ perms: 0400
25
+
@@ -0,0 +1,300 @@
1
+ #
2
+ # Module of code shared by all of the tpkg test cases
3
+ #
4
+
5
+ # Ensure that we're pulling in the local copy of the tpkg libraries, it
6
+ # doesn't do us any good to test copies that are already installed on the
7
+ # system.
8
+ $:.unshift(File.expand_path('../lib', File.dirname(__FILE__)))
9
+ require 'test/unit'
10
+ require 'fileutils'
11
+ require 'tpkg'
12
+ require 'tempfile'
13
+ require 'tmpdir'
14
+ require 'facter'
15
+ require 'mocha/setup'
16
+
17
+ Tpkg::set_debug(true) if ENV['debug']
18
+
19
+ require 'stringio'
20
+
21
+ module Kernel
22
+
23
+ def capture_stdout
24
+ out = StringIO.new
25
+ $stdout = out
26
+ yield
27
+ return out
28
+ ensure
29
+ $stdout = STDOUT
30
+ end
31
+
32
+ end
33
+
34
+ # Ruby 1.8.7 and newer have a Dir.mktmpdir
35
+ # "Backport" it for earlier versions. This is copied straight out of the
36
+ # 1.8.7 tmpdir.rb
37
+ unless Dir.respond_to?(:mktmpdir)
38
+ module Dir
39
+ def Dir.mktmpdir(prefix_suffix=nil, tmpdir=nil)
40
+ case prefix_suffix
41
+ when nil
42
+ prefix = "d"
43
+ suffix = ""
44
+ when String
45
+ prefix = prefix_suffix
46
+ suffix = ""
47
+ when Array
48
+ prefix = prefix_suffix[0]
49
+ suffix = prefix_suffix[1]
50
+ else
51
+ raise ArgumentError, "unexpected prefix_suffix: #{prefix_suffix.inspect}"
52
+ end
53
+ tmpdir ||= Dir.tmpdir
54
+ t = Time.now.strftime("%Y%m%d")
55
+ n = nil
56
+ begin
57
+ path = "#{tmpdir}/#{prefix}#{t}-#{$$}-#{rand(0x100000000).to_s(36)}"
58
+ path << "-#{n}" if n
59
+ path << suffix
60
+ Dir.mkdir(path, 0700)
61
+ rescue Errno::EEXIST
62
+ n ||= 0
63
+ n += 1
64
+ retry
65
+ end
66
+
67
+ if block_given?
68
+ begin
69
+ yield path
70
+ ensure
71
+ FileUtils.remove_entry_secure path
72
+ end
73
+ else
74
+ path
75
+ end
76
+ end
77
+ end
78
+ end
79
+
80
+ module TpkgTests
81
+ # Directory with test package contents
82
+ TESTPKGDIR = File.expand_path('testpkg', File.dirname(__FILE__))
83
+ # Fake command used in place of system commands
84
+ TESTCMDDIR = File.expand_path('testcmds', File.dirname(__FILE__))
85
+ TESTCMD = File.join(TESTCMDDIR, 'testcmd')
86
+ # Passphrase used for encrypting/decrypting packages
87
+ PASSPHRASE = 'password'
88
+
89
+ def create_metadata_file(filename, options={})
90
+ format = :xml
91
+ if options[:format]
92
+ format = options[:format]
93
+ # FIXME
94
+ if format != :xml
95
+ raise "Support for metadata file formats other than XML not yet implemented"
96
+ end
97
+ end
98
+ change = {}
99
+ if options[:change]
100
+ change = options[:change]
101
+ end
102
+ remove = []
103
+ if options[:remove]
104
+ remove = options[:remove]
105
+ end
106
+ file_defaults = {}
107
+ if options[:file_defaults]
108
+ file_defaults = options[:file_defaults]
109
+ end
110
+ files = {}
111
+ if options[:files]
112
+ files = options[:files]
113
+ end
114
+ dependencies = {}
115
+ if options[:dependencies]
116
+ dependencies = options[:dependencies]
117
+ end
118
+ conflicts = {}
119
+ if options[:conflicts]
120
+ conflicts = options[:conflicts]
121
+ end
122
+ externals = {}
123
+ if options[:externals]
124
+ externals = options[:externals]
125
+ end
126
+
127
+ # FIXME: We currently assume the specified filename exists and is a valid
128
+ # template file that we make changes to. We should create the metadata
129
+ # file from scratch. That would eliminate the need for :remove, which
130
+ # seems hacky. And eliminate the need for this half-baked parsing and
131
+ # manipulation, which is super hacky.
132
+ tpkgdst = Tempfile.new(File.basename(filename), File.dirname(filename))
133
+ IO.foreach(filename) do |line|
134
+ if line =~ /^\s*<(\w+)>/
135
+ field = $1
136
+ if change.has_key?(field)
137
+ line.sub!(/^(\s*<\w+>).*(<\/\w+>)/, '\1' + change[$1] + '\2')
138
+ elsif remove.include?(field)
139
+ line = ''
140
+ end
141
+ end
142
+
143
+ # Insert dependencies right before the files section
144
+ if line =~ /^\s*<files>/ && !dependencies.empty?
145
+ tpkgdst.puts(' <dependencies>')
146
+ dependencies.each do |name, opts|
147
+ tpkgdst.puts(' <dependency>')
148
+ tpkgdst.puts(" <name>#{name}</name>")
149
+ ['minimum_version', 'maximum_version', 'minimum_package_version', 'maximum_package_version'].each do |opt|
150
+ if opts[opt]
151
+ tpkgdst.puts(" <#{opt}>#{opts[opt]}</#{opt}>")
152
+ end
153
+ end
154
+ if opts['native']
155
+ tpkgdst.puts(' <native/>')
156
+ end
157
+ tpkgdst.puts(' </dependency>')
158
+ end
159
+ tpkgdst.puts(' </dependencies>')
160
+ end
161
+
162
+ # Insert conflicts right before the files section
163
+ if line =~ /^\s*<files>/ && !conflicts.empty?
164
+ tpkgdst.puts(' <conflicts>')
165
+ conflicts.each do |name, opts|
166
+ tpkgdst.puts(' <conflict>')
167
+ tpkgdst.puts(" <name>#{name}</name>")
168
+ ['minimum_version', 'maximum_version', 'minimum_package_version', 'maximum_package_version'].each do |opt|
169
+ if opts[opt]
170
+ tpkgdst.puts(" <#{opt}>#{opts[opt]}</#{opt}>")
171
+ end
172
+ end
173
+ if opts['native']
174
+ tpkgdst.puts(' <native/>')
175
+ end
176
+ tpkgdst.puts(' </conflict>')
177
+ end
178
+ tpkgdst.puts(' </conflicts>')
179
+ end
180
+
181
+ # Insert externals right before the files section
182
+ if line =~ /^\s*<files>/ && !externals.empty?
183
+ tpkgdst.puts(' <externals>')
184
+ externals.each do |name, opts|
185
+ tpkgdst.puts(' <external>')
186
+ tpkgdst.puts(" <name>#{name}</name>")
187
+ if opts['data']
188
+ tpkgdst.puts(" <data>#{opts['data']}</data>")
189
+ elsif opts['datafile']
190
+ tpkgdst.puts(" <datafile>#{opts['datafile']}</datafile>")
191
+ elsif opts['datascript']
192
+ tpkgdst.puts(" <datascript>#{opts['datascript']}</datascript>")
193
+ end
194
+ tpkgdst.puts(' </external>')
195
+ end
196
+ tpkgdst.puts(' </externals>')
197
+ end
198
+
199
+ # Insert file_defaults settings at the end of the files section
200
+ if line =~ /^\s*<\/files>/ && !file_defaults.empty?
201
+ tpkgdst.puts(' <file_defaults>')
202
+ if file_defaults['owner'] || file_defaults['group'] || file_defaults['perms']
203
+ tpkgdst.puts(' <posix>')
204
+ ['owner', 'group', 'perms'].each do |opt|
205
+ if file_defaults[opt]
206
+ tpkgdst.puts(" <#{opt}>#{file_defaults[opt]}</#{opt}>")
207
+ end
208
+ end
209
+ tpkgdst.puts(' </posix>')
210
+ end
211
+ tpkgdst.puts(' </file_defaults>')
212
+ end
213
+
214
+ # Insert additional file entries at the end of the files section
215
+ if line =~ /^\s*<\/files>/ && !files.empty?
216
+ files.each do |path, opts|
217
+ tpkgdst.puts(' <file>')
218
+ tpkgdst.puts(" <path>#{path}</path>")
219
+ if opts['owner'] || opts['group'] || opts['perms']
220
+ tpkgdst.puts(' <posix>')
221
+ ['owner', 'group', 'perms'].each do |opt|
222
+ if opts[opt]
223
+ tpkgdst.puts(" <#{opt}>#{opts[opt]}</#{opt}>")
224
+ end
225
+ end
226
+ tpkgdst.puts(' </posix>')
227
+ end
228
+ if opts['config']
229
+ tpkgdst.puts(' <config/>')
230
+ end
231
+ if opts['encrypt']
232
+ if opts['encrypt'] = 'precrypt'
233
+ tpkgdst.puts(' <encrypt precrypt="true"/>')
234
+ else
235
+ tpkgdst.puts(' <encrypt/>')
236
+ end
237
+ end
238
+ if opts['init']
239
+ tpkgdst.puts(' <init>')
240
+ if opts['init']['start']
241
+ tpkgdst.puts(" <start>#{opts['init']['start']}</start>")
242
+ end
243
+ if opts['init']['levels']
244
+ tpkgdst.puts(" <levels>#{opts['init']['levels']}</levels>")
245
+ end
246
+ tpkgdst.puts(' </init>')
247
+ end
248
+ if opts['crontab']
249
+ if opts['crontab']['user']
250
+ tpkgdst.puts(" <crontab><user>#{opts['crontab']['user']}</user></crontab>")
251
+ else
252
+ tpkgdst.puts(' <crontab/>')
253
+ end
254
+ end
255
+ tpkgdst.puts(' </file>')
256
+ end
257
+ end
258
+
259
+ tpkgdst.write(line)
260
+ end
261
+ tpkgdst.close
262
+ File.rename(tpkgdst.path, filename)
263
+ end
264
+
265
+ # Make up our regular test package, substituting any fields and adding
266
+ # dependencies as requested by the caller
267
+ def make_package(options={})
268
+ source_directory = TESTPKGDIR
269
+ if options[:source_directory]
270
+ source_directory = options[:source_directory]
271
+ end
272
+ output_directory = nil
273
+ if options[:output_directory]
274
+ output_directory = options[:output_directory]
275
+ end
276
+ passphrase = PASSPHRASE
277
+ if options[:passphrase]
278
+ passphrase = options[:passphrase]
279
+ end
280
+
281
+ pkgfile = nil
282
+ Dir.mktmpdir('pkgdir') do |pkgdir|
283
+ # Copy package contents into working directory
284
+ system("#{Tpkg::find_tar} -C #{source_directory} --exclude .svn --exclude 'tpkg-*.xml' --exclude 'tpkg*.yml' -cf - . | #{Tpkg::find_tar} -C #{pkgdir} -xpf -")
285
+ create_metadata_file(File.join(pkgdir, 'tpkg.xml'), options)
286
+ pkgfile = Tpkg.make_package(pkgdir, passphrase, options)
287
+ end
288
+
289
+ # move the pkgfile to designated directory (if user specifies it)
290
+ if output_directory
291
+ FileUtils.mkdir_p(output_directory)
292
+ FileUtils.move(pkgfile, output_directory)
293
+ pkgfile = File.join(output_directory, File.basename(pkgfile))
294
+ end
295
+
296
+ pkgfile
297
+ end
298
+
299
+ end
300
+