autobuild 0.5.1 → 0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +10 -3
- data/README +106 -273
- data/Rakefile +14 -19
- data/TODO +5 -0
- data/bin/autobuild +17 -67
- data/doc/classes/Autobuild.html +320 -57
- data/doc/classes/{Autobuild/Config.src/M000040.html → Autobuild.src/M000005.html} +8 -5
- data/doc/classes/{Autobuild/Config.src/M000041.html → Autobuild.src/M000006.html} +3 -3
- data/doc/classes/Autobuild.src/M000007.html +18 -0
- data/doc/classes/Autobuild.src/M000008.html +18 -0
- data/doc/classes/Autobuild.src/M000009.html +18 -0
- data/doc/classes/Autobuild.src/M000010.html +18 -0
- data/doc/classes/Autobuild.src/M000011.html +18 -0
- data/doc/classes/Autobuild.src/M000012.html +18 -0
- data/doc/classes/Autobuild.src/M000013.html +25 -0
- data/doc/classes/Autobuild.src/M000014.html +19 -0
- data/doc/classes/Autobuild.src/M000015.html +19 -0
- data/doc/classes/Autobuild.src/M000016.html +16 -0
- data/doc/classes/Autobuild.src/M000017.html +20 -0
- data/doc/classes/Autobuild.src/M000018.html +18 -0
- data/doc/classes/Autobuild.src/M000019.html +52 -0
- data/doc/classes/Autobuild.src/M000020.html +44 -0
- data/doc/classes/Autobuild.src/M000021.html +19 -0
- data/doc/classes/Autobuild.src/M000022.html +19 -0
- data/doc/classes/Autobuild.src/M000023.html +20 -0
- data/doc/classes/Autobuild.src/M000024.html +22 -0
- data/doc/classes/Autobuild.src/M000033.html +31 -0
- data/doc/classes/Autobuild.src/M000034.html +32 -10
- data/doc/classes/Autobuild.src/M000035.html +4 -5
- data/doc/classes/Autobuild.src/M000036.html +4 -30
- data/doc/classes/Autobuild.src/M000037.html +4 -5
- data/doc/classes/Autobuild.src/M000038.html +4 -5
- data/doc/classes/Autobuild.src/M000039.html +4 -6
- data/doc/classes/Autobuild.src/M000040.html +18 -0
- data/doc/classes/Autobuild.src/M000041.html +25 -0
- data/doc/classes/Autobuild.src/M000042.html +19 -0
- data/doc/classes/Autobuild.src/M000043.html +19 -0
- data/doc/classes/Autobuild.src/M000044.html +16 -0
- data/doc/classes/Autobuild.src/M000045.html +20 -0
- data/doc/classes/Autobuild.src/M000046.html +18 -0
- data/doc/classes/Autobuild.src/M000047.html +52 -0
- data/doc/classes/Autobuild.src/M000048.html +44 -0
- data/doc/classes/Autobuild.src/M000049.html +19 -0
- data/doc/classes/Autobuild.src/M000050.html +19 -0
- data/doc/classes/Autobuild.src/M000051.html +20 -0
- data/doc/classes/Autobuild.src/M000052.html +22 -0
- data/doc/classes/Autobuild/Autotools.html +103 -58
- data/doc/classes/Autobuild/Autotools.src/M000055.html +20 -0
- data/doc/classes/Autobuild/Autotools.src/M000056.html +20 -0
- data/doc/classes/Autobuild/Autotools.src/M000057.html +16 -0
- data/doc/classes/Autobuild/Autotools.src/M000058.html +16 -0
- data/doc/classes/Autobuild/Autotools.src/M000059.html +22 -0
- data/doc/classes/Autobuild/Autotools.src/M000060.html +29 -0
- data/doc/classes/Autobuild/Autotools.src/M000061.html +21 -0
- data/doc/classes/Autobuild/Autotools.src/M000062.html +20 -0
- data/doc/classes/Autobuild/Autotools.src/{M000067.html → M000063.html} +4 -10
- data/doc/classes/Autobuild/Autotools.src/M000083.html +20 -0
- data/doc/classes/Autobuild/Autotools.src/M000084.html +20 -0
- data/doc/classes/Autobuild/Autotools.src/M000085.html +16 -0
- data/doc/classes/Autobuild/Autotools.src/M000086.html +16 -0
- data/doc/classes/Autobuild/Autotools.src/M000087.html +22 -0
- data/doc/classes/Autobuild/Autotools.src/M000088.html +29 -0
- data/doc/classes/Autobuild/Autotools.src/M000089.html +21 -0
- data/doc/classes/Autobuild/Autotools.src/M000090.html +20 -0
- data/doc/classes/Autobuild/Autotools.src/M000091.html +32 -0
- data/doc/classes/Autobuild/CVSImporter.html +11 -11
- data/doc/classes/Autobuild/CVSImporter.src/M000036.html +26 -0
- data/doc/classes/Autobuild/CVSImporter.src/{M000049.html → M000037.html} +1 -1
- data/doc/classes/Autobuild/CVSImporter.src/M000064.html +26 -0
- data/doc/classes/Autobuild/CVSImporter.src/M000065.html +18 -0
- data/doc/classes/Autobuild/CommandNotFound.html +6 -0
- data/doc/classes/Autobuild/ConfigException.html +6 -0
- data/doc/classes/Autobuild/{Options.html → DarcsImporter.html} +13 -11
- data/doc/classes/Autobuild/DarcsImporter.src/M000044.html +20 -0
- data/doc/classes/Autobuild/DarcsImporter.src/M000072.html +20 -0
- data/doc/classes/Autobuild/Exception.html +38 -20
- data/doc/classes/Autobuild/Exception.src/{M000103.html → M000087.html} +1 -1
- data/doc/classes/Autobuild/Exception.src/{M000104.html → M000088.html} +1 -1
- data/doc/classes/Autobuild/Exception.src/{M000105.html → M000089.html} +2 -3
- data/doc/classes/Autobuild/Exception.src/M000090.html +24 -0
- data/doc/classes/Autobuild/Exception.src/M000115.html +16 -0
- data/doc/classes/Autobuild/Exception.src/M000116.html +16 -0
- data/doc/classes/Autobuild/Exception.src/M000117.html +18 -0
- data/doc/classes/Autobuild/Exception.src/M000118.html +24 -0
- data/doc/classes/Autobuild/GenomModule.html +83 -37
- data/doc/classes/Autobuild/GenomModule.src/M000091.html +19 -0
- data/doc/classes/Autobuild/GenomModule.src/{M000107.html → M000092.html} +2 -1
- data/doc/classes/Autobuild/GenomModule.src/{M000108.html → M000093.html} +1 -1
- data/doc/classes/Autobuild/GenomModule.src/{M000109.html → M000094.html} +2 -2
- data/doc/classes/Autobuild/GenomModule.src/{M000110.html → M000095.html} +4 -6
- data/doc/classes/Autobuild/GenomModule.src/{M000112.html → M000096.html} +2 -4
- data/doc/classes/Autobuild/GenomModule.src/{M000111.html → M000097.html} +3 -3
- data/doc/classes/Autobuild/GenomModule.src/M000098.html +36 -0
- data/doc/classes/Autobuild/GenomModule.src/M000119.html +19 -0
- data/doc/classes/Autobuild/GenomModule.src/M000120.html +21 -0
- data/doc/classes/Autobuild/GenomModule.src/M000121.html +16 -0
- data/doc/classes/Autobuild/GenomModule.src/M000122.html +18 -0
- data/doc/classes/Autobuild/GenomModule.src/M000123.html +27 -0
- data/doc/classes/Autobuild/GenomModule.src/M000124.html +24 -0
- data/doc/classes/Autobuild/GenomModule.src/M000125.html +19 -0
- data/doc/classes/Autobuild/GenomModule.src/M000126.html +36 -0
- data/doc/classes/Autobuild/Import.html +5 -43
- data/doc/classes/Autobuild/Import.src/{M000047.html → M000033.html} +0 -0
- data/doc/classes/Autobuild/Import.src/{M000045.html → M000061.html} +4 -4
- data/doc/classes/Autobuild/Importer.html +10 -10
- data/doc/classes/Autobuild/Importer.src/{M000056.html → M000034.html} +1 -1
- data/doc/classes/Autobuild/Importer.src/{M000057.html → M000035.html} +3 -3
- data/doc/classes/Autobuild/Importer.src/M000062.html +18 -0
- data/doc/classes/Autobuild/Importer.src/M000063.html +38 -0
- data/doc/classes/Autobuild/ImporterPackage.html +16 -16
- data/doc/classes/Autobuild/ImporterPackage.src/{M000115.html → M000099.html} +1 -1
- data/doc/classes/Autobuild/ImporterPackage.src/{M000116.html → M000100.html} +3 -3
- data/doc/classes/Autobuild/ImporterPackage.src/{M000117.html → M000101.html} +1 -1
- data/doc/classes/Autobuild/{Autotools.src/M000065.html → ImporterPackage.src/M000127.html} +4 -4
- data/doc/classes/Autobuild/ImporterPackage.src/M000128.html +22 -0
- data/doc/classes/Autobuild/ImporterPackage.src/M000129.html +16 -0
- data/doc/classes/Autobuild/Interpolator.html +27 -27
- data/doc/classes/Autobuild/Interpolator.src/{M000051.html → M000039.html} +1 -1
- data/doc/classes/Autobuild/Interpolator.src/{M000052.html → M000040.html} +1 -1
- data/doc/classes/Autobuild/Interpolator.src/{M000053.html → M000041.html} +1 -1
- data/doc/classes/Autobuild/Interpolator.src/{M000054.html → M000042.html} +1 -1
- data/doc/classes/Autobuild/Interpolator.src/{M000055.html → M000043.html} +1 -1
- data/doc/classes/Autobuild/Interpolator.src/M000067.html +18 -0
- data/doc/classes/Autobuild/Interpolator.src/M000068.html +21 -0
- data/doc/classes/Autobuild/Interpolator.src/M000069.html +45 -0
- data/doc/classes/Autobuild/Interpolator.src/M000070.html +39 -0
- data/doc/classes/Autobuild/Interpolator.src/M000071.html +29 -0
- data/doc/classes/Autobuild/MailReporter.html +31 -25
- data/doc/classes/Autobuild/MailReporter.src/{M000060.html → M000045.html} +1 -1
- data/doc/classes/Autobuild/MailReporter.src/{M000061.html → M000046.html} +1 -1
- data/doc/classes/Autobuild/MailReporter.src/{M000062.html → M000047.html} +1 -1
- data/doc/classes/Autobuild/MailReporter.src/{M000063.html → M000048.html} +1 -1
- data/doc/classes/Autobuild/MailReporter.src/{M000064.html → M000049.html} +1 -1
- data/doc/classes/Autobuild/MailReporter.src/M000073.html +24 -0
- data/doc/classes/Autobuild/MailReporter.src/M000074.html +21 -0
- data/doc/classes/Autobuild/MailReporter.src/M000075.html +20 -0
- data/doc/classes/Autobuild/MailReporter.src/M000076.html +18 -0
- data/doc/classes/Autobuild/MailReporter.src/M000077.html +42 -0
- data/doc/classes/Autobuild/Package.html +132 -81
- data/doc/classes/Autobuild/Package.src/M000073.html +16 -0
- data/doc/classes/Autobuild/Package.src/M000074.html +16 -0
- data/doc/classes/Autobuild/Package.src/{M000085.html → M000075.html} +2 -2
- data/doc/classes/Autobuild/Package.src/M000076.html +56 -0
- data/doc/classes/Autobuild/Package.src/M000077.html +16 -0
- data/doc/classes/Autobuild/Package.src/{M000091.html → M000078.html} +3 -3
- data/doc/classes/Autobuild/Package.src/M000079.html +28 -0
- data/doc/classes/Autobuild/Package.src/M000080.html +23 -0
- data/doc/classes/Autobuild/Package.src/{M000086.html → M000081.html} +1 -1
- data/doc/classes/Autobuild/Package.src/{M000087.html → M000082.html} +3 -3
- data/doc/classes/Autobuild/Package.src/M000101.html +16 -0
- data/doc/classes/Autobuild/Package.src/M000102.html +16 -0
- data/doc/classes/Autobuild/Package.src/M000103.html +16 -0
- data/doc/classes/Autobuild/Package.src/M000104.html +56 -0
- data/doc/classes/Autobuild/Package.src/M000105.html +16 -0
- data/doc/classes/Autobuild/Package.src/M000106.html +16 -0
- data/doc/classes/Autobuild/Package.src/M000107.html +28 -0
- data/doc/classes/Autobuild/Package.src/M000108.html +23 -0
- data/doc/classes/Autobuild/Package.src/M000109.html +19 -0
- data/doc/classes/Autobuild/Package.src/{M000093.html → M000110.html} +4 -4
- data/doc/classes/Autobuild/PackageException.html +11 -5
- data/doc/classes/Autobuild/PackageException.src/{M000059.html → M000050.html} +1 -1
- data/doc/classes/Autobuild/PackageException.src/M000078.html +16 -0
- data/doc/classes/Autobuild/Reporter.html +16 -10
- data/doc/classes/Autobuild/Reporter.src/{M000074.html → M000053.html} +1 -1
- data/doc/classes/Autobuild/Reporter.src/{M000075.html → M000054.html} +1 -1
- data/doc/classes/Autobuild/Reporter.src/M000081.html +16 -0
- data/doc/classes/Autobuild/Reporter.src/M000082.html +16 -0
- data/doc/classes/Autobuild/Reporting.html +60 -33
- data/doc/classes/Autobuild/Reporting.src/{M000095.html → M000025.html} +1 -1
- data/doc/classes/Autobuild/Reporting.src/{M000096.html → M000026.html} +1 -1
- data/doc/classes/Autobuild/Reporting.src/{M000097.html → M000027.html} +1 -1
- data/doc/classes/Autobuild/Reporting.src/{M000098.html → M000028.html} +1 -1
- data/doc/classes/Autobuild/Reporting.src/{M000099.html → M000029.html} +2 -2
- data/doc/classes/Autobuild/Reporting.src/M000053.html +24 -0
- data/doc/classes/Autobuild/Reporting.src/M000054.html +18 -0
- data/doc/classes/Autobuild/Reporting.src/M000055.html +18 -0
- data/doc/classes/Autobuild/Reporting.src/M000056.html +18 -0
- data/doc/classes/Autobuild/Reporting.src/M000057.html +18 -0
- data/doc/classes/Autobuild/{SVNImporter.html → SVN.html} +8 -8
- data/doc/classes/Autobuild/SVN.src/M000038.html +22 -0
- data/doc/classes/Autobuild/SVN.src/M000066.html +22 -0
- data/doc/classes/Autobuild/SourceTreeTask.html +5 -5
- data/doc/classes/Autobuild/SourceTreeTask.src/{M000114.html → M000083.html} +1 -1
- data/doc/classes/Autobuild/SourceTreeTask.src/M000111.html +18 -0
- data/doc/classes/Autobuild/StdoutReporter.html +16 -10
- data/doc/classes/Autobuild/StdoutReporter.src/{M000072.html → M000051.html} +1 -1
- data/doc/classes/Autobuild/StdoutReporter.src/{M000073.html → M000052.html} +1 -1
- data/doc/classes/Autobuild/StdoutReporter.src/M000079.html +18 -0
- data/doc/classes/Autobuild/StdoutReporter.src/M000080.html +18 -0
- data/doc/classes/Autobuild/SubcommandFailed.html +21 -15
- data/doc/classes/Autobuild/SubcommandFailed.src/{M000100.html → M000084.html} +1 -1
- data/doc/classes/Autobuild/SubcommandFailed.src/{M000101.html → M000085.html} +2 -2
- data/doc/classes/Autobuild/SubcommandFailed.src/{M000102.html → M000086.html} +1 -1
- data/doc/classes/Autobuild/SubcommandFailed.src/M000112.html +16 -0
- data/doc/classes/Autobuild/SubcommandFailed.src/M000113.html +32 -0
- data/doc/classes/Autobuild/SubcommandFailed.src/M000114.html +20 -0
- data/doc/classes/Autobuild/Subprocess.html +10 -10
- data/doc/classes/Autobuild/Subprocess.src/{M000042.html → M000030.html} +0 -0
- data/doc/classes/Autobuild/Subprocess.src/{M000043.html → M000031.html} +4 -2
- data/doc/classes/Autobuild/Subprocess.src/M000058.html +18 -0
- data/doc/classes/Autobuild/Subprocess.src/M000059.html +98 -0
- data/doc/classes/Autobuild/Subprocess/Failed.html +5 -5
- data/doc/classes/Autobuild/Subprocess/Failed.src/{M000044.html → M000032.html} +0 -0
- data/doc/classes/Autobuild/Subprocess/Failed.src/M000060.html +18 -0
- data/doc/classes/Autobuild/TarImporter.html +35 -35
- data/doc/classes/Autobuild/TarImporter.src/{M000076.html → M000064.html} +0 -0
- data/doc/classes/Autobuild/TarImporter.src/{M000077.html → M000065.html} +0 -0
- data/doc/classes/Autobuild/TarImporter.src/{M000078.html → M000066.html} +0 -0
- data/doc/classes/Autobuild/TarImporter.src/{M000079.html → M000067.html} +0 -0
- data/doc/classes/Autobuild/TarImporter.src/{M000080.html → M000068.html} +0 -0
- data/doc/classes/Autobuild/TarImporter.src/{M000081.html → M000069.html} +1 -1
- data/doc/classes/Autobuild/TarImporter.src/{M000082.html → M000070.html} +2 -2
- data/doc/classes/Autobuild/TarImporter.src/M000092.html +28 -0
- data/doc/classes/Autobuild/TarImporter.src/M000093.html +53 -0
- data/doc/classes/Autobuild/TarImporter.src/M000094.html +26 -0
- data/doc/classes/Autobuild/TarImporter.src/M000095.html +16 -0
- data/doc/classes/Autobuild/TarImporter.src/M000096.html +20 -0
- data/doc/classes/Autobuild/TarImporter.src/M000097.html +20 -0
- data/doc/classes/Autobuild/TarImporter.src/M000098.html +30 -0
- data/doc/classes/Autobuild/UndefinedVariable.html +12 -12
- data/doc/classes/Autobuild/UndefinedVariable.src/{M000083.html → M000071.html} +1 -1
- data/doc/classes/Autobuild/UndefinedVariable.src/{M000084.html → M000072.html} +1 -1
- data/doc/classes/Autobuild/UndefinedVariable.src/M000099.html +19 -0
- data/doc/classes/Autobuild/{Exception.src/M000106.html → UndefinedVariable.src/M000100.html} +3 -4
- data/doc/classes/Hash.html +12 -12
- data/doc/classes/Hash.src/{M000019.html → M000002.html} +1 -1
- data/doc/classes/Hash.src/M000003.html +23 -0
- data/doc/classes/Hash.src/M000020.html +11 -8
- data/doc/classes/Hash.src/M000021.html +23 -0
- data/doc/classes/RMail/Message.html +8 -5
- data/doc/classes/RMail/Message.src/{M000033.html → M000004.html} +1 -1
- data/doc/classes/RMail/Message.src/M000028.html +25 -0
- data/doc/classes/TC_CVSImport.html +15 -15
- data/doc/classes/{TC_TarImporter.src/M000009.html → TC_CVSImport.src/M000025.html} +7 -6
- data/doc/classes/TC_CVSImport.src/M000026.html +6 -7
- data/doc/classes/TC_CVSImport.src/M000027.html +22 -7
- data/doc/classes/TC_Config.html +20 -20
- data/doc/classes/TC_Config.src/{M000001.html → M000006.html} +0 -0
- data/doc/classes/TC_Config.src/{M000002.html → M000007.html} +0 -0
- data/doc/classes/TC_Config.src/{M000003.html → M000008.html} +0 -0
- data/doc/classes/TC_Config.src/{M000004.html → M000009.html} +0 -0
- data/doc/classes/TC_ConfigInterpolation.html +20 -20
- data/doc/classes/TC_ConfigInterpolation.src/{M000015.html → M000002.html} +0 -0
- data/doc/classes/TC_ConfigInterpolation.src/{M000016.html → M000003.html} +0 -0
- data/doc/classes/TC_ConfigInterpolation.src/{M000017.html → M000004.html} +0 -0
- data/doc/classes/TC_ConfigInterpolation.src/{M000018.html → M000005.html} +0 -0
- data/doc/classes/TC_SVNImport.html +15 -15
- data/doc/classes/TC_SVNImport.src/{M000005.html → M000017.html} +0 -0
- data/doc/classes/TC_SVNImport.src/{M000006.html → M000018.html} +0 -0
- data/doc/classes/TC_SVNImport.src/{M000007.html → M000019.html} +0 -0
- data/doc/classes/TC_Subcommand.html +15 -15
- data/doc/classes/TC_Subcommand.src/M000022.html +17 -4
- data/doc/classes/TC_Subcommand.src/M000023.html +4 -16
- data/doc/classes/TC_Subcommand.src/M000024.html +30 -0
- data/doc/classes/TC_TarImporter.html +35 -35
- data/doc/classes/TC_TarImporter.src/M000010.html +14 -6
- data/doc/classes/TC_TarImporter.src/M000011.html +7 -6
- data/doc/classes/TC_TarImporter.src/M000012.html +6 -12
- data/doc/classes/TC_TarImporter.src/M000013.html +6 -17
- data/doc/classes/TC_TarImporter.src/M000014.html +11 -9
- data/doc/classes/TC_TarImporter.src/M000015.html +31 -0
- data/doc/classes/TC_TarImporter.src/M000016.html +24 -0
- data/doc/created.rid +1 -1
- data/doc/files/README.html +378 -0
- data/doc/files/{lib/autobuild/options_rb.html → demo_rb.html} +19 -5
- data/doc/files/lib/autobuild/config_rb.html +30 -7
- data/doc/files/lib/autobuild/config_rb.src/M000001.html +18 -0
- data/doc/files/lib/autobuild/environment_rb.html +1 -1
- data/doc/files/lib/autobuild/exceptions_rb.html +1 -1
- data/doc/files/lib/autobuild/import/cvs_rb.html +2 -1
- data/doc/files/{test/base_rb.html → lib/autobuild/import/darcs_rb.html} +8 -11
- data/doc/files/lib/autobuild/import/svn_rb.html +1 -1
- data/doc/files/lib/autobuild/import/tar_rb.html +1 -1
- data/doc/files/lib/autobuild/importer_rb.html +2 -1
- data/doc/files/lib/autobuild/{config-interpolator_rb.html → loaders/config-interpolator_rb.html} +3 -3
- data/doc/files/lib/autobuild/loaders/config_rb.html +113 -0
- data/doc/files/lib/autobuild/package_rb.html +1 -1
- data/doc/files/lib/autobuild/packages/autotools_rb.html +2 -1
- data/doc/files/lib/autobuild/packages/genom_rb.html +1 -1
- data/doc/files/lib/autobuild/packages/import_rb.html +1 -1
- data/doc/files/lib/autobuild/reporting_rb.html +2 -1
- data/doc/files/lib/autobuild/subcommand_rb.html +1 -1
- data/doc/files/lib/autobuild/timestamps_rb.html +2 -1
- data/doc/files/{test/test_attr_defval_rb.html → lib/autobuild_rb.html} +7 -6
- data/doc/files/test/test_config_interpolation_rb.html +2 -2
- data/doc/files/test/test_config_rb.html +2 -2
- data/doc/files/test/test_import_cvs_rb.html +1 -1
- data/doc/files/test/test_import_svn_rb.html +1 -1
- data/doc/files/test/test_import_tar_rb.html +1 -1
- data/doc/files/test/test_subcommand_rb.html +2 -2
- data/doc/files/test/tools_rb.html +1 -1
- data/doc/fr_class_index.html +0 -37
- data/doc/fr_file_index.html +1 -25
- data/doc/fr_method_index.html +0 -117
- data/doc/index.html +1 -1
- data/lib/autobuild.rb +3 -0
- data/lib/autobuild/config.rb +87 -153
- data/lib/autobuild/environment.rb +4 -1
- data/lib/autobuild/exceptions.rb +19 -5
- data/lib/autobuild/import/cvs.rb +11 -10
- data/lib/autobuild/import/darcs.rb +32 -0
- data/lib/autobuild/import/svn.rb +10 -13
- data/lib/autobuild/import/tar.rb +3 -3
- data/lib/autobuild/importer.rb +5 -4
- data/lib/autobuild/package.rb +109 -69
- data/lib/autobuild/packages/autotools.rb +112 -69
- data/lib/autobuild/packages/genom.rb +48 -32
- data/lib/autobuild/packages/import.rb +6 -4
- data/lib/autobuild/reporting.rb +48 -19
- data/lib/autobuild/subcommand.rb +7 -9
- data/lib/autobuild/timestamps.rb +6 -5
- data/test/test_import_cvs.rb +7 -14
- data/test/test_import_svn.rb +6 -20
- data/test/test_import_tar.rb +3 -8
- data/test/test_subcommand.rb +7 -14
- data/test/tools.rb +5 -0
- metadata +336 -226
- data/doc/classes/Autobuild/Autotools.src/M000066.html +0 -26
- data/doc/classes/Autobuild/Autotools.src/M000068.html +0 -53
- data/doc/classes/Autobuild/Autotools.src/M000069.html +0 -28
- data/doc/classes/Autobuild/Autotools.src/M000070.html +0 -23
- data/doc/classes/Autobuild/Autotools.src/M000071.html +0 -22
- data/doc/classes/Autobuild/CVSImporter.src/M000048.html +0 -24
- data/doc/classes/Autobuild/Config.html +0 -146
- data/doc/classes/Autobuild/GenomModule.src/M000113.html +0 -35
- data/doc/classes/Autobuild/Import.src/M000046.html +0 -18
- data/doc/classes/Autobuild/Options.src/M000058.html +0 -27
- data/doc/classes/Autobuild/Package.src/M000088.html +0 -41
- data/doc/classes/Autobuild/Package.src/M000089.html +0 -22
- data/doc/classes/Autobuild/Package.src/M000090.html +0 -23
- data/doc/classes/Autobuild/Package.src/M000092.html +0 -24
- data/doc/classes/Autobuild/Package.src/M000094.html +0 -23
- data/doc/classes/Autobuild/SVNImporter.src/M000050.html +0 -23
- data/doc/classes/TC_AttrDefval.html +0 -152
- data/doc/classes/TC_AttrDefval.src/M000024.html +0 -31
- data/doc/classes/TC_AttrDefval.src/M000025.html +0 -22
- data/doc/classes/TC_CVSImport.src/M000028.html +0 -36
- data/doc/classes/TC_Subcommand.src/M000021.html +0 -31
- data/doc/classes/TC_TarImporter.src/M000008.html +0 -28
- data/lib/autobuild/config-interpolator.rb +0 -107
- data/lib/autobuild/options.rb +0 -22
- data/test/base.rb +0 -8
- data/test/test_attr_defval.rb +0 -29
- data/test/test_config.rb +0 -40
- 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
|
-
#
|
15
|
+
# == Used programs (see <tt>Autobuild.programs</tt>)
|
16
|
+
# * aclocal
|
17
|
+
# * autoheader
|
18
|
+
# * autoconf
|
19
|
+
# * automake
|
12
20
|
#
|
13
21
|
# == Available options
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
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
|
-
|
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
|
-
|
54
|
+
def initialize(options)
|
55
|
+
@using = Hash.new
|
25
56
|
|
26
|
-
|
27
|
-
:autoheader => false,
|
28
|
-
:aclocal => nil,
|
29
|
-
:autoconf => nil,
|
30
|
-
:automake => nil,
|
31
|
-
:builddir => 'build'
|
32
|
-
}
|
57
|
+
super
|
33
58
|
|
34
|
-
|
35
|
-
"#{builddir}/#{target}-#{STAMPFILE}"
|
59
|
+
Autobuild.update_environment(prefix)
|
36
60
|
end
|
37
61
|
|
38
|
-
def
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
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
|
-
|
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
|
51
|
-
|
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
|
-
|
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
|
-
|
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}
|
77
|
-
file conffile =>
|
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(
|
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
|
-
|
86
|
-
|
87
|
-
|
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
|
91
|
-
Subprocess.run(
|
125
|
+
if using[:autogen]
|
126
|
+
Subprocess.run(name, 'configure', File.expand_path(using[:autogen]))
|
92
127
|
else
|
93
128
|
# Autodetect autoconf/aclocal/automake
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
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
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
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 |=
|
164
|
+
command |= Array[*configureflags]
|
122
165
|
|
123
|
-
Subprocess.run(
|
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(
|
130
|
-
|
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
|
-
|
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
|
-
|
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 = (
|
19
|
-
Open3.popen3("#{cpp} #{cpp_options.join(" ")} #{srcdir}/#{
|
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
|
-
|
33
|
-
|
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(
|
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
|
51
|
-
cmdline = [ 'genom',
|
67
|
+
def regen
|
68
|
+
cmdline = [ 'genom', "#{name}.gen", *genomflags ]
|
52
69
|
|
53
70
|
file buildstamp => genomstamp
|
54
|
-
file genomstamp =>
|
55
|
-
Dir.chdir(srcdir)
|
56
|
-
Subprocess.run(
|
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 = "
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
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
|
10
|
-
super
|
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
|
|
data/lib/autobuild/reporting.rb
CHANGED
@@ -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
|
-
|
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("#{
|
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
|
-
@
|
67
|
-
@
|
68
|
-
|
69
|
-
|
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("
|
96
|
+
send_mail("failed", error.to_s)
|
75
97
|
end
|
76
98
|
end
|
77
99
|
|
78
100
|
def success
|
79
|
-
|
101
|
+
unless only_errors
|
102
|
+
send_mail("success")
|
103
|
+
end
|
80
104
|
end
|
81
105
|
|
82
|
-
def send_mail(
|
106
|
+
def send_mail(result, body = "")
|
83
107
|
mail = RMail::Message.new
|
84
108
|
mail.header.date = Time.now
|
85
|
-
mail.header.from =
|
86
|
-
mail.header.
|
87
|
-
|
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
|
100
|
-
|
101
|
-
|
102
|
-
|
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 #{
|
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)
|