autobuild 0.5.1 → 0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (345) hide show
  1. data/CHANGES +10 -3
  2. data/README +106 -273
  3. data/Rakefile +14 -19
  4. data/TODO +5 -0
  5. data/bin/autobuild +17 -67
  6. data/doc/classes/Autobuild.html +320 -57
  7. data/doc/classes/{Autobuild/Config.src/M000040.html → Autobuild.src/M000005.html} +8 -5
  8. data/doc/classes/{Autobuild/Config.src/M000041.html → Autobuild.src/M000006.html} +3 -3
  9. data/doc/classes/Autobuild.src/M000007.html +18 -0
  10. data/doc/classes/Autobuild.src/M000008.html +18 -0
  11. data/doc/classes/Autobuild.src/M000009.html +18 -0
  12. data/doc/classes/Autobuild.src/M000010.html +18 -0
  13. data/doc/classes/Autobuild.src/M000011.html +18 -0
  14. data/doc/classes/Autobuild.src/M000012.html +18 -0
  15. data/doc/classes/Autobuild.src/M000013.html +25 -0
  16. data/doc/classes/Autobuild.src/M000014.html +19 -0
  17. data/doc/classes/Autobuild.src/M000015.html +19 -0
  18. data/doc/classes/Autobuild.src/M000016.html +16 -0
  19. data/doc/classes/Autobuild.src/M000017.html +20 -0
  20. data/doc/classes/Autobuild.src/M000018.html +18 -0
  21. data/doc/classes/Autobuild.src/M000019.html +52 -0
  22. data/doc/classes/Autobuild.src/M000020.html +44 -0
  23. data/doc/classes/Autobuild.src/M000021.html +19 -0
  24. data/doc/classes/Autobuild.src/M000022.html +19 -0
  25. data/doc/classes/Autobuild.src/M000023.html +20 -0
  26. data/doc/classes/Autobuild.src/M000024.html +22 -0
  27. data/doc/classes/Autobuild.src/M000033.html +31 -0
  28. data/doc/classes/Autobuild.src/M000034.html +32 -10
  29. data/doc/classes/Autobuild.src/M000035.html +4 -5
  30. data/doc/classes/Autobuild.src/M000036.html +4 -30
  31. data/doc/classes/Autobuild.src/M000037.html +4 -5
  32. data/doc/classes/Autobuild.src/M000038.html +4 -5
  33. data/doc/classes/Autobuild.src/M000039.html +4 -6
  34. data/doc/classes/Autobuild.src/M000040.html +18 -0
  35. data/doc/classes/Autobuild.src/M000041.html +25 -0
  36. data/doc/classes/Autobuild.src/M000042.html +19 -0
  37. data/doc/classes/Autobuild.src/M000043.html +19 -0
  38. data/doc/classes/Autobuild.src/M000044.html +16 -0
  39. data/doc/classes/Autobuild.src/M000045.html +20 -0
  40. data/doc/classes/Autobuild.src/M000046.html +18 -0
  41. data/doc/classes/Autobuild.src/M000047.html +52 -0
  42. data/doc/classes/Autobuild.src/M000048.html +44 -0
  43. data/doc/classes/Autobuild.src/M000049.html +19 -0
  44. data/doc/classes/Autobuild.src/M000050.html +19 -0
  45. data/doc/classes/Autobuild.src/M000051.html +20 -0
  46. data/doc/classes/Autobuild.src/M000052.html +22 -0
  47. data/doc/classes/Autobuild/Autotools.html +103 -58
  48. data/doc/classes/Autobuild/Autotools.src/M000055.html +20 -0
  49. data/doc/classes/Autobuild/Autotools.src/M000056.html +20 -0
  50. data/doc/classes/Autobuild/Autotools.src/M000057.html +16 -0
  51. data/doc/classes/Autobuild/Autotools.src/M000058.html +16 -0
  52. data/doc/classes/Autobuild/Autotools.src/M000059.html +22 -0
  53. data/doc/classes/Autobuild/Autotools.src/M000060.html +29 -0
  54. data/doc/classes/Autobuild/Autotools.src/M000061.html +21 -0
  55. data/doc/classes/Autobuild/Autotools.src/M000062.html +20 -0
  56. data/doc/classes/Autobuild/Autotools.src/{M000067.html → M000063.html} +4 -10
  57. data/doc/classes/Autobuild/Autotools.src/M000083.html +20 -0
  58. data/doc/classes/Autobuild/Autotools.src/M000084.html +20 -0
  59. data/doc/classes/Autobuild/Autotools.src/M000085.html +16 -0
  60. data/doc/classes/Autobuild/Autotools.src/M000086.html +16 -0
  61. data/doc/classes/Autobuild/Autotools.src/M000087.html +22 -0
  62. data/doc/classes/Autobuild/Autotools.src/M000088.html +29 -0
  63. data/doc/classes/Autobuild/Autotools.src/M000089.html +21 -0
  64. data/doc/classes/Autobuild/Autotools.src/M000090.html +20 -0
  65. data/doc/classes/Autobuild/Autotools.src/M000091.html +32 -0
  66. data/doc/classes/Autobuild/CVSImporter.html +11 -11
  67. data/doc/classes/Autobuild/CVSImporter.src/M000036.html +26 -0
  68. data/doc/classes/Autobuild/CVSImporter.src/{M000049.html → M000037.html} +1 -1
  69. data/doc/classes/Autobuild/CVSImporter.src/M000064.html +26 -0
  70. data/doc/classes/Autobuild/CVSImporter.src/M000065.html +18 -0
  71. data/doc/classes/Autobuild/CommandNotFound.html +6 -0
  72. data/doc/classes/Autobuild/ConfigException.html +6 -0
  73. data/doc/classes/Autobuild/{Options.html → DarcsImporter.html} +13 -11
  74. data/doc/classes/Autobuild/DarcsImporter.src/M000044.html +20 -0
  75. data/doc/classes/Autobuild/DarcsImporter.src/M000072.html +20 -0
  76. data/doc/classes/Autobuild/Exception.html +38 -20
  77. data/doc/classes/Autobuild/Exception.src/{M000103.html → M000087.html} +1 -1
  78. data/doc/classes/Autobuild/Exception.src/{M000104.html → M000088.html} +1 -1
  79. data/doc/classes/Autobuild/Exception.src/{M000105.html → M000089.html} +2 -3
  80. data/doc/classes/Autobuild/Exception.src/M000090.html +24 -0
  81. data/doc/classes/Autobuild/Exception.src/M000115.html +16 -0
  82. data/doc/classes/Autobuild/Exception.src/M000116.html +16 -0
  83. data/doc/classes/Autobuild/Exception.src/M000117.html +18 -0
  84. data/doc/classes/Autobuild/Exception.src/M000118.html +24 -0
  85. data/doc/classes/Autobuild/GenomModule.html +83 -37
  86. data/doc/classes/Autobuild/GenomModule.src/M000091.html +19 -0
  87. data/doc/classes/Autobuild/GenomModule.src/{M000107.html → M000092.html} +2 -1
  88. data/doc/classes/Autobuild/GenomModule.src/{M000108.html → M000093.html} +1 -1
  89. data/doc/classes/Autobuild/GenomModule.src/{M000109.html → M000094.html} +2 -2
  90. data/doc/classes/Autobuild/GenomModule.src/{M000110.html → M000095.html} +4 -6
  91. data/doc/classes/Autobuild/GenomModule.src/{M000112.html → M000096.html} +2 -4
  92. data/doc/classes/Autobuild/GenomModule.src/{M000111.html → M000097.html} +3 -3
  93. data/doc/classes/Autobuild/GenomModule.src/M000098.html +36 -0
  94. data/doc/classes/Autobuild/GenomModule.src/M000119.html +19 -0
  95. data/doc/classes/Autobuild/GenomModule.src/M000120.html +21 -0
  96. data/doc/classes/Autobuild/GenomModule.src/M000121.html +16 -0
  97. data/doc/classes/Autobuild/GenomModule.src/M000122.html +18 -0
  98. data/doc/classes/Autobuild/GenomModule.src/M000123.html +27 -0
  99. data/doc/classes/Autobuild/GenomModule.src/M000124.html +24 -0
  100. data/doc/classes/Autobuild/GenomModule.src/M000125.html +19 -0
  101. data/doc/classes/Autobuild/GenomModule.src/M000126.html +36 -0
  102. data/doc/classes/Autobuild/Import.html +5 -43
  103. data/doc/classes/Autobuild/Import.src/{M000047.html → M000033.html} +0 -0
  104. data/doc/classes/Autobuild/Import.src/{M000045.html → M000061.html} +4 -4
  105. data/doc/classes/Autobuild/Importer.html +10 -10
  106. data/doc/classes/Autobuild/Importer.src/{M000056.html → M000034.html} +1 -1
  107. data/doc/classes/Autobuild/Importer.src/{M000057.html → M000035.html} +3 -3
  108. data/doc/classes/Autobuild/Importer.src/M000062.html +18 -0
  109. data/doc/classes/Autobuild/Importer.src/M000063.html +38 -0
  110. data/doc/classes/Autobuild/ImporterPackage.html +16 -16
  111. data/doc/classes/Autobuild/ImporterPackage.src/{M000115.html → M000099.html} +1 -1
  112. data/doc/classes/Autobuild/ImporterPackage.src/{M000116.html → M000100.html} +3 -3
  113. data/doc/classes/Autobuild/ImporterPackage.src/{M000117.html → M000101.html} +1 -1
  114. data/doc/classes/Autobuild/{Autotools.src/M000065.html → ImporterPackage.src/M000127.html} +4 -4
  115. data/doc/classes/Autobuild/ImporterPackage.src/M000128.html +22 -0
  116. data/doc/classes/Autobuild/ImporterPackage.src/M000129.html +16 -0
  117. data/doc/classes/Autobuild/Interpolator.html +27 -27
  118. data/doc/classes/Autobuild/Interpolator.src/{M000051.html → M000039.html} +1 -1
  119. data/doc/classes/Autobuild/Interpolator.src/{M000052.html → M000040.html} +1 -1
  120. data/doc/classes/Autobuild/Interpolator.src/{M000053.html → M000041.html} +1 -1
  121. data/doc/classes/Autobuild/Interpolator.src/{M000054.html → M000042.html} +1 -1
  122. data/doc/classes/Autobuild/Interpolator.src/{M000055.html → M000043.html} +1 -1
  123. data/doc/classes/Autobuild/Interpolator.src/M000067.html +18 -0
  124. data/doc/classes/Autobuild/Interpolator.src/M000068.html +21 -0
  125. data/doc/classes/Autobuild/Interpolator.src/M000069.html +45 -0
  126. data/doc/classes/Autobuild/Interpolator.src/M000070.html +39 -0
  127. data/doc/classes/Autobuild/Interpolator.src/M000071.html +29 -0
  128. data/doc/classes/Autobuild/MailReporter.html +31 -25
  129. data/doc/classes/Autobuild/MailReporter.src/{M000060.html → M000045.html} +1 -1
  130. data/doc/classes/Autobuild/MailReporter.src/{M000061.html → M000046.html} +1 -1
  131. data/doc/classes/Autobuild/MailReporter.src/{M000062.html → M000047.html} +1 -1
  132. data/doc/classes/Autobuild/MailReporter.src/{M000063.html → M000048.html} +1 -1
  133. data/doc/classes/Autobuild/MailReporter.src/{M000064.html → M000049.html} +1 -1
  134. data/doc/classes/Autobuild/MailReporter.src/M000073.html +24 -0
  135. data/doc/classes/Autobuild/MailReporter.src/M000074.html +21 -0
  136. data/doc/classes/Autobuild/MailReporter.src/M000075.html +20 -0
  137. data/doc/classes/Autobuild/MailReporter.src/M000076.html +18 -0
  138. data/doc/classes/Autobuild/MailReporter.src/M000077.html +42 -0
  139. data/doc/classes/Autobuild/Package.html +132 -81
  140. data/doc/classes/Autobuild/Package.src/M000073.html +16 -0
  141. data/doc/classes/Autobuild/Package.src/M000074.html +16 -0
  142. data/doc/classes/Autobuild/Package.src/{M000085.html → M000075.html} +2 -2
  143. data/doc/classes/Autobuild/Package.src/M000076.html +56 -0
  144. data/doc/classes/Autobuild/Package.src/M000077.html +16 -0
  145. data/doc/classes/Autobuild/Package.src/{M000091.html → M000078.html} +3 -3
  146. data/doc/classes/Autobuild/Package.src/M000079.html +28 -0
  147. data/doc/classes/Autobuild/Package.src/M000080.html +23 -0
  148. data/doc/classes/Autobuild/Package.src/{M000086.html → M000081.html} +1 -1
  149. data/doc/classes/Autobuild/Package.src/{M000087.html → M000082.html} +3 -3
  150. data/doc/classes/Autobuild/Package.src/M000101.html +16 -0
  151. data/doc/classes/Autobuild/Package.src/M000102.html +16 -0
  152. data/doc/classes/Autobuild/Package.src/M000103.html +16 -0
  153. data/doc/classes/Autobuild/Package.src/M000104.html +56 -0
  154. data/doc/classes/Autobuild/Package.src/M000105.html +16 -0
  155. data/doc/classes/Autobuild/Package.src/M000106.html +16 -0
  156. data/doc/classes/Autobuild/Package.src/M000107.html +28 -0
  157. data/doc/classes/Autobuild/Package.src/M000108.html +23 -0
  158. data/doc/classes/Autobuild/Package.src/M000109.html +19 -0
  159. data/doc/classes/Autobuild/Package.src/{M000093.html → M000110.html} +4 -4
  160. data/doc/classes/Autobuild/PackageException.html +11 -5
  161. data/doc/classes/Autobuild/PackageException.src/{M000059.html → M000050.html} +1 -1
  162. data/doc/classes/Autobuild/PackageException.src/M000078.html +16 -0
  163. data/doc/classes/Autobuild/Reporter.html +16 -10
  164. data/doc/classes/Autobuild/Reporter.src/{M000074.html → M000053.html} +1 -1
  165. data/doc/classes/Autobuild/Reporter.src/{M000075.html → M000054.html} +1 -1
  166. data/doc/classes/Autobuild/Reporter.src/M000081.html +16 -0
  167. data/doc/classes/Autobuild/Reporter.src/M000082.html +16 -0
  168. data/doc/classes/Autobuild/Reporting.html +60 -33
  169. data/doc/classes/Autobuild/Reporting.src/{M000095.html → M000025.html} +1 -1
  170. data/doc/classes/Autobuild/Reporting.src/{M000096.html → M000026.html} +1 -1
  171. data/doc/classes/Autobuild/Reporting.src/{M000097.html → M000027.html} +1 -1
  172. data/doc/classes/Autobuild/Reporting.src/{M000098.html → M000028.html} +1 -1
  173. data/doc/classes/Autobuild/Reporting.src/{M000099.html → M000029.html} +2 -2
  174. data/doc/classes/Autobuild/Reporting.src/M000053.html +24 -0
  175. data/doc/classes/Autobuild/Reporting.src/M000054.html +18 -0
  176. data/doc/classes/Autobuild/Reporting.src/M000055.html +18 -0
  177. data/doc/classes/Autobuild/Reporting.src/M000056.html +18 -0
  178. data/doc/classes/Autobuild/Reporting.src/M000057.html +18 -0
  179. data/doc/classes/Autobuild/{SVNImporter.html → SVN.html} +8 -8
  180. data/doc/classes/Autobuild/SVN.src/M000038.html +22 -0
  181. data/doc/classes/Autobuild/SVN.src/M000066.html +22 -0
  182. data/doc/classes/Autobuild/SourceTreeTask.html +5 -5
  183. data/doc/classes/Autobuild/SourceTreeTask.src/{M000114.html → M000083.html} +1 -1
  184. data/doc/classes/Autobuild/SourceTreeTask.src/M000111.html +18 -0
  185. data/doc/classes/Autobuild/StdoutReporter.html +16 -10
  186. data/doc/classes/Autobuild/StdoutReporter.src/{M000072.html → M000051.html} +1 -1
  187. data/doc/classes/Autobuild/StdoutReporter.src/{M000073.html → M000052.html} +1 -1
  188. data/doc/classes/Autobuild/StdoutReporter.src/M000079.html +18 -0
  189. data/doc/classes/Autobuild/StdoutReporter.src/M000080.html +18 -0
  190. data/doc/classes/Autobuild/SubcommandFailed.html +21 -15
  191. data/doc/classes/Autobuild/SubcommandFailed.src/{M000100.html → M000084.html} +1 -1
  192. data/doc/classes/Autobuild/SubcommandFailed.src/{M000101.html → M000085.html} +2 -2
  193. data/doc/classes/Autobuild/SubcommandFailed.src/{M000102.html → M000086.html} +1 -1
  194. data/doc/classes/Autobuild/SubcommandFailed.src/M000112.html +16 -0
  195. data/doc/classes/Autobuild/SubcommandFailed.src/M000113.html +32 -0
  196. data/doc/classes/Autobuild/SubcommandFailed.src/M000114.html +20 -0
  197. data/doc/classes/Autobuild/Subprocess.html +10 -10
  198. data/doc/classes/Autobuild/Subprocess.src/{M000042.html → M000030.html} +0 -0
  199. data/doc/classes/Autobuild/Subprocess.src/{M000043.html → M000031.html} +4 -2
  200. data/doc/classes/Autobuild/Subprocess.src/M000058.html +18 -0
  201. data/doc/classes/Autobuild/Subprocess.src/M000059.html +98 -0
  202. data/doc/classes/Autobuild/Subprocess/Failed.html +5 -5
  203. data/doc/classes/Autobuild/Subprocess/Failed.src/{M000044.html → M000032.html} +0 -0
  204. data/doc/classes/Autobuild/Subprocess/Failed.src/M000060.html +18 -0
  205. data/doc/classes/Autobuild/TarImporter.html +35 -35
  206. data/doc/classes/Autobuild/TarImporter.src/{M000076.html → M000064.html} +0 -0
  207. data/doc/classes/Autobuild/TarImporter.src/{M000077.html → M000065.html} +0 -0
  208. data/doc/classes/Autobuild/TarImporter.src/{M000078.html → M000066.html} +0 -0
  209. data/doc/classes/Autobuild/TarImporter.src/{M000079.html → M000067.html} +0 -0
  210. data/doc/classes/Autobuild/TarImporter.src/{M000080.html → M000068.html} +0 -0
  211. data/doc/classes/Autobuild/TarImporter.src/{M000081.html → M000069.html} +1 -1
  212. data/doc/classes/Autobuild/TarImporter.src/{M000082.html → M000070.html} +2 -2
  213. data/doc/classes/Autobuild/TarImporter.src/M000092.html +28 -0
  214. data/doc/classes/Autobuild/TarImporter.src/M000093.html +53 -0
  215. data/doc/classes/Autobuild/TarImporter.src/M000094.html +26 -0
  216. data/doc/classes/Autobuild/TarImporter.src/M000095.html +16 -0
  217. data/doc/classes/Autobuild/TarImporter.src/M000096.html +20 -0
  218. data/doc/classes/Autobuild/TarImporter.src/M000097.html +20 -0
  219. data/doc/classes/Autobuild/TarImporter.src/M000098.html +30 -0
  220. data/doc/classes/Autobuild/UndefinedVariable.html +12 -12
  221. data/doc/classes/Autobuild/UndefinedVariable.src/{M000083.html → M000071.html} +1 -1
  222. data/doc/classes/Autobuild/UndefinedVariable.src/{M000084.html → M000072.html} +1 -1
  223. data/doc/classes/Autobuild/UndefinedVariable.src/M000099.html +19 -0
  224. data/doc/classes/Autobuild/{Exception.src/M000106.html → UndefinedVariable.src/M000100.html} +3 -4
  225. data/doc/classes/Hash.html +12 -12
  226. data/doc/classes/Hash.src/{M000019.html → M000002.html} +1 -1
  227. data/doc/classes/Hash.src/M000003.html +23 -0
  228. data/doc/classes/Hash.src/M000020.html +11 -8
  229. data/doc/classes/Hash.src/M000021.html +23 -0
  230. data/doc/classes/RMail/Message.html +8 -5
  231. data/doc/classes/RMail/Message.src/{M000033.html → M000004.html} +1 -1
  232. data/doc/classes/RMail/Message.src/M000028.html +25 -0
  233. data/doc/classes/TC_CVSImport.html +15 -15
  234. data/doc/classes/{TC_TarImporter.src/M000009.html → TC_CVSImport.src/M000025.html} +7 -6
  235. data/doc/classes/TC_CVSImport.src/M000026.html +6 -7
  236. data/doc/classes/TC_CVSImport.src/M000027.html +22 -7
  237. data/doc/classes/TC_Config.html +20 -20
  238. data/doc/classes/TC_Config.src/{M000001.html → M000006.html} +0 -0
  239. data/doc/classes/TC_Config.src/{M000002.html → M000007.html} +0 -0
  240. data/doc/classes/TC_Config.src/{M000003.html → M000008.html} +0 -0
  241. data/doc/classes/TC_Config.src/{M000004.html → M000009.html} +0 -0
  242. data/doc/classes/TC_ConfigInterpolation.html +20 -20
  243. data/doc/classes/TC_ConfigInterpolation.src/{M000015.html → M000002.html} +0 -0
  244. data/doc/classes/TC_ConfigInterpolation.src/{M000016.html → M000003.html} +0 -0
  245. data/doc/classes/TC_ConfigInterpolation.src/{M000017.html → M000004.html} +0 -0
  246. data/doc/classes/TC_ConfigInterpolation.src/{M000018.html → M000005.html} +0 -0
  247. data/doc/classes/TC_SVNImport.html +15 -15
  248. data/doc/classes/TC_SVNImport.src/{M000005.html → M000017.html} +0 -0
  249. data/doc/classes/TC_SVNImport.src/{M000006.html → M000018.html} +0 -0
  250. data/doc/classes/TC_SVNImport.src/{M000007.html → M000019.html} +0 -0
  251. data/doc/classes/TC_Subcommand.html +15 -15
  252. data/doc/classes/TC_Subcommand.src/M000022.html +17 -4
  253. data/doc/classes/TC_Subcommand.src/M000023.html +4 -16
  254. data/doc/classes/TC_Subcommand.src/M000024.html +30 -0
  255. data/doc/classes/TC_TarImporter.html +35 -35
  256. data/doc/classes/TC_TarImporter.src/M000010.html +14 -6
  257. data/doc/classes/TC_TarImporter.src/M000011.html +7 -6
  258. data/doc/classes/TC_TarImporter.src/M000012.html +6 -12
  259. data/doc/classes/TC_TarImporter.src/M000013.html +6 -17
  260. data/doc/classes/TC_TarImporter.src/M000014.html +11 -9
  261. data/doc/classes/TC_TarImporter.src/M000015.html +31 -0
  262. data/doc/classes/TC_TarImporter.src/M000016.html +24 -0
  263. data/doc/created.rid +1 -1
  264. data/doc/files/README.html +378 -0
  265. data/doc/files/{lib/autobuild/options_rb.html → demo_rb.html} +19 -5
  266. data/doc/files/lib/autobuild/config_rb.html +30 -7
  267. data/doc/files/lib/autobuild/config_rb.src/M000001.html +18 -0
  268. data/doc/files/lib/autobuild/environment_rb.html +1 -1
  269. data/doc/files/lib/autobuild/exceptions_rb.html +1 -1
  270. data/doc/files/lib/autobuild/import/cvs_rb.html +2 -1
  271. data/doc/files/{test/base_rb.html → lib/autobuild/import/darcs_rb.html} +8 -11
  272. data/doc/files/lib/autobuild/import/svn_rb.html +1 -1
  273. data/doc/files/lib/autobuild/import/tar_rb.html +1 -1
  274. data/doc/files/lib/autobuild/importer_rb.html +2 -1
  275. data/doc/files/lib/autobuild/{config-interpolator_rb.html → loaders/config-interpolator_rb.html} +3 -3
  276. data/doc/files/lib/autobuild/loaders/config_rb.html +113 -0
  277. data/doc/files/lib/autobuild/package_rb.html +1 -1
  278. data/doc/files/lib/autobuild/packages/autotools_rb.html +2 -1
  279. data/doc/files/lib/autobuild/packages/genom_rb.html +1 -1
  280. data/doc/files/lib/autobuild/packages/import_rb.html +1 -1
  281. data/doc/files/lib/autobuild/reporting_rb.html +2 -1
  282. data/doc/files/lib/autobuild/subcommand_rb.html +1 -1
  283. data/doc/files/lib/autobuild/timestamps_rb.html +2 -1
  284. data/doc/files/{test/test_attr_defval_rb.html → lib/autobuild_rb.html} +7 -6
  285. data/doc/files/test/test_config_interpolation_rb.html +2 -2
  286. data/doc/files/test/test_config_rb.html +2 -2
  287. data/doc/files/test/test_import_cvs_rb.html +1 -1
  288. data/doc/files/test/test_import_svn_rb.html +1 -1
  289. data/doc/files/test/test_import_tar_rb.html +1 -1
  290. data/doc/files/test/test_subcommand_rb.html +2 -2
  291. data/doc/files/test/tools_rb.html +1 -1
  292. data/doc/fr_class_index.html +0 -37
  293. data/doc/fr_file_index.html +1 -25
  294. data/doc/fr_method_index.html +0 -117
  295. data/doc/index.html +1 -1
  296. data/lib/autobuild.rb +3 -0
  297. data/lib/autobuild/config.rb +87 -153
  298. data/lib/autobuild/environment.rb +4 -1
  299. data/lib/autobuild/exceptions.rb +19 -5
  300. data/lib/autobuild/import/cvs.rb +11 -10
  301. data/lib/autobuild/import/darcs.rb +32 -0
  302. data/lib/autobuild/import/svn.rb +10 -13
  303. data/lib/autobuild/import/tar.rb +3 -3
  304. data/lib/autobuild/importer.rb +5 -4
  305. data/lib/autobuild/package.rb +109 -69
  306. data/lib/autobuild/packages/autotools.rb +112 -69
  307. data/lib/autobuild/packages/genom.rb +48 -32
  308. data/lib/autobuild/packages/import.rb +6 -4
  309. data/lib/autobuild/reporting.rb +48 -19
  310. data/lib/autobuild/subcommand.rb +7 -9
  311. data/lib/autobuild/timestamps.rb +6 -5
  312. data/test/test_import_cvs.rb +7 -14
  313. data/test/test_import_svn.rb +6 -20
  314. data/test/test_import_tar.rb +3 -8
  315. data/test/test_subcommand.rb +7 -14
  316. data/test/tools.rb +5 -0
  317. metadata +336 -226
  318. data/doc/classes/Autobuild/Autotools.src/M000066.html +0 -26
  319. data/doc/classes/Autobuild/Autotools.src/M000068.html +0 -53
  320. data/doc/classes/Autobuild/Autotools.src/M000069.html +0 -28
  321. data/doc/classes/Autobuild/Autotools.src/M000070.html +0 -23
  322. data/doc/classes/Autobuild/Autotools.src/M000071.html +0 -22
  323. data/doc/classes/Autobuild/CVSImporter.src/M000048.html +0 -24
  324. data/doc/classes/Autobuild/Config.html +0 -146
  325. data/doc/classes/Autobuild/GenomModule.src/M000113.html +0 -35
  326. data/doc/classes/Autobuild/Import.src/M000046.html +0 -18
  327. data/doc/classes/Autobuild/Options.src/M000058.html +0 -27
  328. data/doc/classes/Autobuild/Package.src/M000088.html +0 -41
  329. data/doc/classes/Autobuild/Package.src/M000089.html +0 -22
  330. data/doc/classes/Autobuild/Package.src/M000090.html +0 -23
  331. data/doc/classes/Autobuild/Package.src/M000092.html +0 -24
  332. data/doc/classes/Autobuild/Package.src/M000094.html +0 -23
  333. data/doc/classes/Autobuild/SVNImporter.src/M000050.html +0 -23
  334. data/doc/classes/TC_AttrDefval.html +0 -152
  335. data/doc/classes/TC_AttrDefval.src/M000024.html +0 -31
  336. data/doc/classes/TC_AttrDefval.src/M000025.html +0 -22
  337. data/doc/classes/TC_CVSImport.src/M000028.html +0 -36
  338. data/doc/classes/TC_Subcommand.src/M000021.html +0 -31
  339. data/doc/classes/TC_TarImporter.src/M000008.html +0 -28
  340. data/lib/autobuild/config-interpolator.rb +0 -107
  341. data/lib/autobuild/options.rb +0 -22
  342. data/test/base.rb +0 -8
  343. data/test/test_attr_defval.rb +0 -29
  344. data/test/test_config.rb +0 -40
  345. data/test/test_config_interpolation.rb +0 -57
@@ -1,115 +1,158 @@
1
+ require 'pathname'
1
2
  require 'autobuild/timestamps'
2
3
  require 'autobuild/environment'
3
4
  require 'autobuild/package'
4
5
  require 'autobuild/subcommand'
5
6
 
6
7
  module Autobuild
7
- ##
8
+ def self.autotools(opts, &proc)
9
+ Autotools.new(opts, &proc)
10
+ end
11
+
12
+ #
8
13
  # ==== Handles autotools-based packages
9
14
  #
10
- # == Used programs
11
- # - aclocal, autoheader, autoconf, automake
15
+ # == Used programs (see <tt>Autobuild.programs</tt>)
16
+ # * aclocal
17
+ # * autoheader
18
+ # * autoconf
19
+ # * automake
12
20
  #
13
21
  # == Available options
14
- # - aclocal (default: true if autoconf is enabled, false otherwise) run aclocal
15
- # - autoconf (default: autodetect) run autoconf. Will be enabled if there is
16
- # +configure.in+ or +configure.ac+ in the source directory
17
- # - autoheader (default: false) run autoheader
18
- # - automake (default: autodetect) run automake. Will run automake if there is a
19
- # +Makefile.am+ in the source directory
22
+ # * aclocal (default: true if autoconf is enabled, false otherwise) run aclocal
23
+ # * autoconf (default: true)
24
+ # * autoheader (default: false) run autoheader
25
+ # * automake (default: autodetect) run automake. Will run automake if there is a
26
+ # +Makefile.am+ in the source directory
20
27
  #
21
28
  class Autotools < Package
22
- factory :autotools, self
29
+ attr_accessor :using
30
+ attr_accessor :configureflags
31
+ class << self
32
+ attr_reader :builddir
33
+ def builddir=(new)
34
+ raise ConfigException, "absolute builddirs are not supported" if (Pathname.new(new).absolute?)
35
+ raise ConfigException, "builddir must be non-nil and non-empty" if (new.nil? || new.empty?)
36
+ @builddir = new
37
+ end
38
+ end
39
+ @builddir = 'build'
40
+
41
+ def builddir=(new)
42
+ raise ConfigException, "absolute builddirs are not supported" if (Pathname.new(new).absolute?)
43
+ raise ConfigException, "builddir must be non-empty" if new.empty?
44
+ @builddir = new
45
+ end
46
+ # Returns the absolute builddir
47
+ def builddir; File.expand_path(@builddir || Autotools.builddir, srcdir) end
48
+
49
+ # Build stamp
50
+ # This returns the name of the file which marks when the package has been
51
+ # successfully built for the last time. The path is absolute
52
+ def buildstamp; "#{builddir}/#{name}-#{STAMPFILE}" end
23
53
 
24
- attr_reader :builddir
54
+ def initialize(options)
55
+ @using = Hash.new
25
56
 
26
- DefaultOptions = {
27
- :autoheader => false,
28
- :aclocal => nil,
29
- :autoconf => nil,
30
- :automake => nil,
31
- :builddir => 'build'
32
- }
57
+ super
33
58
 
34
- def buildstamp
35
- "#{builddir}/#{target}-#{STAMPFILE}"
59
+ Autobuild.update_environment(prefix)
36
60
  end
37
61
 
38
- def initialize(target, options)
39
- options = DefaultOptions.merge(options) { |key, old, new|
40
- (new.nil? || (new.respond_to?(:empty) && new.empty?)) ? old : new
41
- }
42
- super(target, options)
62
+ def use(*programs)
63
+ programs = *programs
64
+ if !programs.kind_of?(Hash)
65
+ programs = Array[*programs].inject({}) do |programs, spec|
66
+ programs[spec.first] = spec.last
67
+ programs
68
+ end
69
+ end
70
+ programs.each do |name, opt|
71
+ using[name.to_sym] = opt
72
+ end
43
73
 
44
- @builddir = options[:builddir]
45
- raise ConfigException, "autotools packages need a non-empty builddir" if (@builddir.nil? || @builddir.empty?)
46
- raise ConfigException, "absolute builddirs are unsupported" if (Pathname.new(@builddir).absolute?)
47
- @builddir = File.expand_path(builddir, srcdir)
74
+ nil
48
75
  end
49
76
 
50
- def prepare
51
- regen_targets
77
+ def depends_on(*packages)
78
+ super
79
+ stamps = packages.collect { |p| Package[p.to_s].installstamp }
80
+ #file "#{builddir}/config.status" => stamps
81
+ file buildstamp => stamps
82
+ end
83
+
84
+ def ensure_dependencies_installed
85
+ dependencies.each do |pkg|
86
+ Rake::Task[Package[pkg].installstamp].invoke
87
+ end
88
+ end
52
89
 
53
- file "#{builddir}/config.status" => "#{srcdir}/configure" do
90
+ def prepare
91
+ file "#{builddir}/config.status" => regen do
92
+ ensure_dependencies_installed
54
93
  configure
55
94
  end
56
95
 
57
96
  source_tree srcdir, builddir
58
97
  file buildstamp => [ srcdir, "#{builddir}/config.status" ] do
98
+ ensure_dependencies_installed
59
99
  build
60
100
  end
61
101
 
62
- if !dependencies.empty?
63
- file buildstamp => dependencies
64
- file srcdir => dependencies
65
- end
66
-
67
102
  file installstamp => buildstamp do
68
103
  install
69
104
  Autobuild.update_environment(prefix)
70
105
  end
71
- Autobuild.update_environment(prefix)
72
106
  end
73
107
 
74
- def regen_targets
108
+
109
+ private
110
+ # Adds a target to rebuild the autotools environment
111
+ def regen
75
112
  conffile = "#{srcdir}/configure"
76
- if File.exists?("#{conffile}.ac")
77
- file conffile => [ "#{conffile}.ac" ]
78
- elsif File.exists?("#{conffile}.in")
79
- file conffile => [ "#{conffile}.in" ]
113
+ if confext = %w{.ac .in}.find { |ext| File.exists?("#{conffile}#{ext}") }
114
+ file conffile => "#{conffile}#{confext}"
80
115
  else
81
- raise PackageException.new(target), "neither configure.ac nor configure.in present in #{srcdir}"
116
+ raise PackageException.new(name), "neither configure.ac nor configure.in present in #{srcdir}"
82
117
  end
118
+
83
119
  file conffile do
84
120
  Dir.chdir(srcdir) {
85
- $PROGRAMS[:aclocal] ||= 'aclocal'
86
- $PROGRAMS[:autoconf] ||= 'autoconf'
87
- $PROGRAMS[:autoheader] ||= 'autoheader'
88
- $PROGRAMS[:automake] ||= 'automake'
121
+ if using[:autogen].nil?
122
+ using[:autogen] = %w{autogen autogen.sh}.find { |f| File.exists?(f) }
123
+ end
89
124
 
90
- if @options[:autogen]
91
- Subprocess.run(target, 'configure', File.expand_path(@options[:autogen]))
125
+ if using[:autogen]
126
+ Subprocess.run(name, 'configure', File.expand_path(using[:autogen]))
92
127
  else
93
128
  # Autodetect autoconf/aclocal/automake
94
- if @options[:autoconf].nil?
95
- @options[:autoconf] =
96
- File.exists?(File.join(srcdir, 'configure.in')) ||
97
- File.exists?(File.join(srcdir, 'configure.ac'))
98
- end
99
- @options[:aclocal] ||= @options[:autoconf]
100
- if @options[:automake].nil?
101
- @options[:automake] = File.exists?(File.join(srcdir, 'Makefile.am'))
129
+ #
130
+ # Let the user disable the use of autoconf explicitely by using 'false'.
131
+ # 'nil' means autodetection
132
+ using[:autoconf] = true if using[:autoconf].nil?
133
+ using[:aclocal] = using[:autoconf] if using[:aclocal].nil?
134
+ if using[:automake].nil?
135
+ using[:automake] = File.exists?(File.join(srcdir, 'Makefile.am'))
102
136
  end
103
137
 
104
- Subprocess.run(target, 'configure', $PROGRAMS[:aclocal]) if @options[:aclocal]
105
- Subprocess.run(target, 'configure', $PROGRAMS[:autoconf]) if @options[:autoconf]
106
- Subprocess.run(target, 'configure', $PROGRAMS[:autoheader]) if @options[:autoheader]
107
- Subprocess.run(target, 'configure', $PROGRAMS[:automake]) if @options[:automake]
138
+ [ :aclocal, :autoconf, :autoheader, :automake ].each do |tool|
139
+ if tool_flag = using[tool]
140
+ tool_program = if tool_flag.respond_to?(:to_str)
141
+ tool_flag.to_str
142
+ else; Autobuild.tool(tool)
143
+ end
144
+
145
+ Subprocess.run(name, 'configure', tool_program)
146
+ end
147
+ end
108
148
  end
109
149
  }
110
150
  end
151
+
152
+ return conffile
111
153
  end
112
154
 
155
+ # Configure the builddir directory before starting make
113
156
  def configure
114
157
  if File.exists?(builddir) && !File.directory?(builddir)
115
158
  raise ConfigException, "#{builddir} already exists but is not a directory"
@@ -118,25 +161,25 @@ module Autobuild
118
161
  FileUtils.mkdir_p builddir if !File.directory?(builddir)
119
162
  Dir.chdir(builddir) {
120
163
  command = [ "#{srcdir}/configure", "--no-create", "--prefix=#{prefix}" ]
121
- command |= @options[:configureflags].to_a
164
+ command |= Array[*configureflags]
122
165
 
123
- Subprocess.run(target, 'configure', *command)
166
+ Subprocess.run(name, 'configure', *command)
124
167
  }
125
168
  end
126
169
 
170
+ # Do the build in builddir
127
171
  def build
128
172
  Dir.chdir(builddir) {
129
- Subprocess.run(target, 'build', './config.status')
130
- $PROGRAMS['make'] ||= 'make'
131
- Subprocess.run(target, 'build', $PROGRAMS['make'])
173
+ Subprocess.run(name, 'build', './config.status')
174
+ Subprocess.run(name, 'build', Autobuild.tool(:make))
132
175
  }
133
176
  touch_stamp(buildstamp)
134
177
  end
135
178
 
179
+ # Install the result in prefix
136
180
  def install
137
181
  Dir.chdir(builddir) {
138
- make = ($PROGRAMS['make'] or 'make')
139
- Subprocess.run(target, 'install', make, 'install')
182
+ Subprocess.run(name, 'install', Autobuild.tool(:make), 'install')
140
183
  }
141
184
  touch_stamp(installstamp)
142
185
  end
@@ -2,26 +2,44 @@ require 'autobuild/packages/autotools'
2
2
  require 'open3'
3
3
 
4
4
  module Autobuild
5
+ def self.genom(opts, &proc)
6
+ GenomModule.new(opts, &proc)
7
+ end
8
+
5
9
  class GenomModule < Autotools
10
+ attr_accessor :genomflags
11
+
12
+ def initialize(*args, &config)
13
+ @genomflags = []
14
+ super
15
+
16
+ use :autogen => 'autogen'
17
+ end
18
+
19
+ # Called before running the rake tasks and
20
+ # after all imports have been made
6
21
  def prepare
22
+
7
23
  super
8
24
  get_requires
9
25
  get_provides
10
26
  end
11
- def genomstamp; "#{srcdir}/.genom/genom-stamp" end
12
27
 
28
+ # The file touched by genom on successful generation
29
+ def genomstamp; File.join(srcdir, '.genom', 'genom-stamp') end
30
+
31
+ # Extract the cpp options from the genom options
13
32
  def cpp_options
14
- @options[:genomflags].to_a.find_all { |opt| opt =~ /^-D/ }
33
+ [*genomflags].find_all { |opt| opt =~ /^-D/ }
15
34
  end
16
35
 
36
+ # Extracts dependencies using the requires: field in the .gen file
17
37
  def get_requires
18
- cpp = ($PROGRAMS['cpp'] || 'cpp')
19
- Open3.popen3("#{cpp} #{cpp_options.join(" ")} #{srcdir}/#{target}.gen") do |cin, out, err|
38
+ cpp = Autobuild.tool(:cpp)
39
+ Open3.popen3("#{cpp} #{cpp_options.join(" ")} #{srcdir}/#{name}.gen") do |cin, out, err|
20
40
  out.each_line { |line|
21
41
  if line =~ /^\s*requires\s*:\s*([\w\-]+(?:\s*,\s*[\w\-]+)*);/
22
- $1.split(/, /).each { |name|
23
- depends_on name
24
- }
42
+ $1.split(/, /).each { |name| depends_on name }
25
43
  elsif line =~ /^\s*requires/
26
44
  puts "failed to match #{line}"
27
45
  end
@@ -29,46 +47,44 @@ module Autobuild
29
47
  end
30
48
  end
31
49
 
32
- def depends_on(name)
33
- super
34
- file genomstamp => Package.name2target(name)
35
- end
36
-
50
+ # Alias this package to the ones defined in the EXTRA_PKGCONFIG
51
+ # flag in configure.ac.user
37
52
  def get_provides
38
- File.open("#{srcdir}/configure.ac.user") do |f|
53
+ File.open(File.join(srcdir, 'configure.ac.user')) do |f|
39
54
  f.each_line { |line|
40
55
  if line =~ /^\s*EXTRA_PKGCONFIG\s*=\s*"?([\w\-]+(?:\s+[\w\-]+)*)"?/
41
- $1.split(/\s+/).each { |pkg|
42
- provides pkg
43
- }
56
+ $1.split(/\s+/).each { |pkg| provides pkg }
44
57
  end
45
58
  }
46
59
  end
47
60
  end
48
61
 
62
+ def depends_on(*packages)
63
+ super
64
+ file genomstamp => packages.map { |p| Package[p].installstamp }
65
+ end
49
66
 
50
- def regen_targets
51
- cmdline = [ 'genom', target ] | @options[:genomflags].to_a
67
+ def regen
68
+ cmdline = [ 'genom', "#{name}.gen", *genomflags ]
52
69
 
53
70
  file buildstamp => genomstamp
54
- file genomstamp => [ :genom, "#{srcdir}/#{target}.gen" ] do
55
- Dir.chdir(srcdir) {
56
- Subprocess.run(target, 'genom', *cmdline)
57
- }
71
+ file genomstamp => srcdir do
72
+ Dir.chdir(srcdir) do
73
+ Subprocess.run(name, 'genom', *cmdline)
74
+ end
75
+ end
76
+ if Package['genom']
77
+ file genomstamp => Package['genom'].installstamp
58
78
  end
59
79
 
60
- acuser = "#{srcdir}/configure.ac.user"
61
- if File.exists?(acuser)
62
- file "#{srcdir}/configure" => acuser do
63
- # configure does not depend on the .gen file
64
- # since the generation takes care of rebuilding configure
65
- # if .gen has changed
66
- Subprocess.run(target, 'genom', File.expand_path('autogen'))
67
- end
80
+ acuser = File.join(srcdir, "configure.ac.user")
81
+ file File.join(srcdir, 'configure') => acuser do
82
+ # configure does not depend on the .gen file
83
+ # since the generation takes care of rebuilding configure
84
+ # if .gen has changed
85
+ Dir.chdir(srcdir) { Subprocess.run(name, 'genom', File.expand_path('autogen')) }
68
86
  end
69
87
  end
70
-
71
- factory :genom, self
72
88
  end
73
89
  end
74
90
 
@@ -2,20 +2,22 @@ require 'autobuild/timestamps'
2
2
  require 'autobuild/package'
3
3
 
4
4
  module Autobuild
5
+ def self.import(spec, &proc)
6
+ ImporterPackage.new(spec, &proc)
7
+ end
8
+
5
9
  class ImporterPackage < Package
6
10
  def installstamp
7
11
  "#{srcdir}/#{STAMPFILE}"
8
12
  end
9
- def initialize(target, options)
10
- super(target, options)
13
+ def initialize(target)
14
+ super
11
15
  source_tree srcdir, installstamp
12
16
  file installstamp => srcdir do
13
17
  touch_stamp installstamp
14
18
  end
15
19
  end
16
20
  def prepare; end
17
-
18
- factory :import, ImporterPackage
19
21
  end
20
22
  end
21
23
 
@@ -4,12 +4,20 @@ require 'net/smtp'
4
4
  require 'socket'
5
5
  require 'etc'
6
6
 
7
+ require 'autobuild/config'
7
8
  require 'autobuild/exceptions'
8
9
 
9
10
  module Autobuild
10
- class Reporting
11
+ ## The reporting module provides the framework
12
+ # to run commands in autobuild and report errors
13
+ # to the user
14
+ #
15
+ # It does not use a logging framework like Log4r, but it should ;-)
16
+ module Reporting
11
17
  @@reporters = Array.new
12
18
 
19
+ ## Run a block and report known exception
20
+ # If an exception is fatal, the program is terminated using exit()
13
21
  def self.report
14
22
  begin
15
23
  yield
@@ -20,28 +28,38 @@ module Autobuild
20
28
  end
21
29
  end
22
30
 
31
+ ## Reports a successful build to the user
23
32
  def self.success
24
33
  @@reporters.each do |rep| rep.success end
25
34
  end
26
35
 
36
+ ## Reports that the build failed to the user
27
37
  def self.error(error)
28
38
  @@reporters.each do |rep| rep.error(error) end
29
39
  end
30
40
 
41
+ ## Add a new reporter
31
42
  def self.<<(reporter)
32
43
  @@reporters << reporter
33
44
  end
34
45
 
46
+ def self.each_reporter(&iter)
47
+ @@reporters.each(&iter)
48
+ end
49
+
50
+ ## Iterate on all log files
35
51
  def self.each_log(&iter)
36
- Dir.glob("#{$LOGDIR}/*.log", &iter)
52
+ Dir.glob("#{Autobuild.logdir}/*.log", &iter)
37
53
  end
38
54
  end
39
55
 
56
+ ## Base class for reporters
40
57
  class Reporter
41
58
  def error(error); end
42
59
  def success; end
43
60
  end
44
61
 
62
+ ## Display using stdout
45
63
  class StdoutReporter < Reporter
46
64
  def error(error)
47
65
  puts "Build failed: #{error}"
@@ -51,6 +69,7 @@ module Autobuild
51
69
  end
52
70
  end
53
71
 
72
+ ## Report by mail
54
73
  class MailReporter < Reporter
55
74
  def default_mail
56
75
  Etc::endpwent
@@ -62,29 +81,36 @@ module Autobuild
62
81
  "#{pwent.name}@#{Socket.gethostname}"
63
82
  end
64
83
 
84
+ attr_reader :from_email, :to_email, :smtp_hostname, :smtp_port, :subject, :only_errors
65
85
  def initialize(config)
66
- @from = (config[:from] || default_mail)
67
- @to = (config[:to] || default_mail)
68
- @smtp = (config[:smtp] || "localhost" )
69
- @port = Integer(config[:port] || Socket.getservbyname('smtp'))
86
+ @from_email = (config[:from] || default_mail)
87
+ @to_email = (config[:to] || default_mail)
88
+ @subject = (config[:subject] || "Build %result% on #{Socket.gethostname} at %time%")
89
+ @only_errors = config[:only_errors]
90
+ @smtp_hostname = (config[:smtp] || "localhost" )
91
+ @smtp_port = Integer(config[:port] || Socket.getservbyname('smtp'))
70
92
  end
71
93
 
72
94
  def error(error)
73
95
  if error.mail?
74
- send_mail("Build failed", error.to_s)
96
+ send_mail("failed", error.to_s)
75
97
  end
76
98
  end
77
99
 
78
100
  def success
79
- send_mail("Build success", "finished successfully at #{Time.now}")
101
+ unless only_errors
102
+ send_mail("success")
103
+ end
80
104
  end
81
105
 
82
- def send_mail(subject, body)
106
+ def send_mail(result, body = "")
83
107
  mail = RMail::Message.new
84
108
  mail.header.date = Time.now
85
- mail.header.from = @from
86
- mail.header.to = @to
87
- mail.header.subject = subject
109
+ mail.header.from = from_email
110
+ mail.header.subject = subject.
111
+ gsub('%result%', result).
112
+ gsub('%time%', Time.now.to_s).
113
+ gsub('%hostname%', Socket.gethostname)
88
114
 
89
115
  part = RMail::Message.new
90
116
  part.header.set('Content-Type', 'text/plain')
@@ -96,21 +122,24 @@ module Autobuild
96
122
  mail.add_file(file)
97
123
  end
98
124
 
99
- # Send the mail
100
- smtp = Net::SMTP.new(@smtp, @port)
101
- smtp.start {
102
- smtp.send_mail RMail::Serialize.write('', mail), @from, @to
103
- }
125
+ # Send the mails
126
+ smtp = Net::SMTP.new(smtp_hostname, smtp_port)
127
+ smtp.start {
128
+ to_email.each do |email|
129
+ mail.header.to = email
130
+ smtp.send_mail RMail::Serialize.write('', mail), from_email, email
131
+ end
132
+ }
104
133
 
105
134
  # Notify the sending
106
- puts "Sent notification mail to #{@to} with source #{@from}"
107
-
135
+ puts "Sent notification mail to #{to_email} with source #{from_email}"
108
136
  end
109
137
  end
110
138
  end
111
139
 
112
140
  module RMail
113
141
  class Message
142
+ ## Attachs a file to a message
114
143
  def add_file(path, content_type='text/plain')
115
144
  part = RMail::Message.new
116
145
  part.header.set('Content-Type', content_type)