autobuild 0.5.1 → 0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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)
|