From 4efc80f044a71a48601c37cb98e1f8488c42fdda Mon Sep 17 00:00:00 2001 From: "yoonhyung.kim" Date: Wed, 11 Jul 2012 17:04:09 +0900 Subject: [PATCH] [Title] Upload initialize source [Type] [Module] [Priority] [Jira#] [Redmine#] [Problem] [Cause] [Solution] [TestCase] --- AUTHORS | 5 + LICENSE | 202 +++ NOTICE | 1 + README | 318 ++++ build-cli | 366 +++++ build-svr | 113 ++ doc/DIBS_Advanced_Guide.pdf | Bin 0 -> 502560 bytes doc/TizenSDK_Development_Guide.pdf | Bin 0 -> 364077 bytes package/.log | 4 + package/build.linux | 35 + package/pkginfo.manifest | 15 + pkg-build | 91 ++ pkg-clean | 62 + pkg-cli | 165 ++ pkg-svr | 116 ++ src/build_server/BinaryUploadProject.rb | 81 + src/build_server/BuildClientOptionParser.rb | 163 ++ src/build_server/BuildComm.rb | 504 ++++++ src/build_server/BuildJob.rb | 813 +++++++++ src/build_server/BuildServer.rb | 300 ++++ src/build_server/BuildServerController.rb | 575 +++++++ src/build_server/BuildServerOptionParser.rb | 200 +++ src/build_server/CommonProject.rb | 62 + src/build_server/FullBuildJob.rb | 253 +++ src/build_server/GitBuildJob.rb | 218 +++ src/build_server/GitBuildProject.rb | 163 ++ src/build_server/JobClean.rb | 173 ++ src/build_server/JobLog.rb | 125 ++ src/build_server/JobManager.rb | 388 +++++ src/build_server/LocalBuildJob.rb | 147 ++ src/build_server/ProjectManager.rb | 309 ++++ src/build_server/RegisterPackageJob.rb | 383 +++++ src/build_server/RemoteBuildJob.rb | 43 + src/build_server/RemoteBuildServer.rb | 130 ++ src/build_server/RemoteBuilder.rb | 182 +++ src/build_server/SocketJobRequestListener.rb | 652 ++++++++ src/builder/Builder.rb | 529 ++++++ src/builder/CleanOptionParser.rb | 55 + src/builder/optionparser.rb | 78 + src/common/Action.rb | 47 + src/common/PackageManifest.rb | 139 ++ src/common/ScheduledActionHandler.rb | 97 ++ src/common/Version.rb | 54 + src/common/dependency.rb | 74 + src/common/fileTransfer.rb | 98 ++ src/common/log.rb | 105 ++ src/common/mail.rb | 86 + src/common/mailConfig.rb | 2 + src/common/package.rb | 166 ++ src/common/parser.rb | 246 +++ src/common/utils.rb | 318 ++++ src/pkg_server/SocketRegisterListener.rb | 168 ++ src/pkg_server/client.rb | 1452 +++++++++++++++++ src/pkg_server/clientOptParser.rb | 202 +++ src/pkg_server/distribution.rb | 594 +++++++ src/pkg_server/downloader.rb | 68 + src/pkg_server/installer.rb | 365 +++++ src/pkg_server/packageServer.rb | 638 ++++++++ src/pkg_server/packageServerConfig.rb | 36 + src/pkg_server/packageServerLog.rb | 46 + src/pkg_server/serverOptParser.rb | 236 +++ test/b/b | 1 + test/b/package/build.linux | 27 + test/b/package/pkginfo.manifest | 7 + test/bin/bin_0.0.0_linux.zip | Bin 0 -> 620 bytes test/bin/bin_0.0.1_linux.zip | Bin 0 -> 622 bytes test/bin/src.tar.gz | Bin 0 -> 150 bytes test/build-cli-01.testcase | 21 + test/build-cli-02.testcase | 15 + test/build-cli-03.testcase | 29 + test/build-cli-04.testcase | 7 + test/build-cli-05.testcase | 6 + test/build-cli-06.testcase | 6 + test/build-cli-07.testcase | 11 + test/build-cli-08.testcase | 31 + test/build-cli-09.testcase | 14 + test/build-cli-10.testcase | 29 + test/build-cli-11.testcase | 10 + test/build-cli-12.testcase | 7 + test/build-cli-13.testcase | 34 + test/build-cli-14.testcase | 9 + test/build-cli-15.testcase | 9 + test/build-cli-16.testcase | 8 + test/build-cli-17.testcase | 40 + test/build-cli-18.testcase | 32 + test/build-svr-01.testcase | 11 + test/build-svr-02.testcase | 27 + test/build-svr-03.testcase | 13 + test/build-svr-04.testcase | 13 + test/build-svr-05.testcase | 14 + test/build-svr-06.testcase | 10 + test/build-svr-07.testcase | 9 + test/build-svr-08.testcase | 12 + test/build-svr-09.testcase | 6 + test/build-svr-10.testcase | 6 + test/build-svr-11.testcase | 11 + test/build-svr-12.testcase | 6 + test/build-svr-13.testcase | 11 + test/build-svr-14.testcase | 11 + test/build-svr-15.testcase | 19 + test/build-svr-16.testcase | 15 + test/buildcli.testsuite | 18 + test/buildserver.testsuite | 14 + test/buildsvr.init | 19 + test/c/c | 1 + test/c/package/build.linux | 21 + test/c/package/pkginfo.manifest | 6 + test/git01/a.tar.gz | Bin 0 -> 14112 bytes test/git01/a_new.tar.gz | Bin 0 -> 16165 bytes test/git01/b.tar.gz | Bin 0 -> 13951 bytes test/git01/b_new.tar.gz | Bin 0 -> 15255 bytes test/git01/c.tar.gz | Bin 0 -> 18834 bytes test/git01/c_new.tar.gz | Bin 0 -> 19975 bytes test/git01/d.tar.gz | Bin 0 -> 15469 bytes test/packageserver.testsuite | 23 + test/packageserver01.testcase | 32 + test/packageserver02.testcase | 6 + test/packageserver03.testcase | 6 + test/packageserver04.testcase | 6 + test/packageserver05.testcase | 6 + test/packageserver06.testcase | 6 + test/packageserver07.testcase | 6 + test/packageserver08.testcase | 6 + test/packageserver09.testcase | 6 + test/packageserver10.testcase | 6 + test/packageserver11.testcase | 6 + test/packageserver12.testcase | 6 + test/packageserver13.testcase | 6 + test/packageserver14.testcase | 7 + test/packageserver15.testcase | 6 + test/packageserver16.testcase | 7 + test/packageserver17.testcase | 7 + test/packageserver18.testcase | 7 + test/packageserver19.testcase | 7 + test/packageserver20.testcase | 7 + test/packageserver21.testcase | 7 + test/packageserver22.testcase | 7 + test/packageserver23.testcase | 7 + test/pkg-cli-checkupgrade.testcase | 11 + test/pkg-cli-clean-f.testcase | 11 + test/pkg-cli-download-t.testcase | 13 + test/pkg-cli-download.testcase | 10 + test/pkg-cli-install-f.testcase | 11 + test/pkg-cli-install-t.testcase | 13 + test/pkg-cli-install.testcase | 10 + test/pkg-cli-installfile-f.testcase | 13 + test/pkg-cli-installfile.testcase | 12 + test/pkg-cli-listlpkg.testcase | 10 + test/pkg-cli-listrpkg.testcase | 6 + test/pkg-cli-showlpkg.testcase | 12 + test/pkg-cli-showrpkg.testcase | 8 + test/pkg-cli-source.testcase | 10 + test/pkg-cli-uninstall-t.testcase | 11 + test/pkg-cli-uninstall.testcase | 11 + test/pkg-cli-update.testcase | 6 + test/pkg-cli-upgrade.testcase | 11 + test/pkg-cli.testsuite | 18 + test/pkg-list | 24 + test/pkginfo.manifest | 35 + test/pkgsvr.init | 5 + test/regression.rb | 202 +++ test/test.sh | 5 + test/test_bserver.rb | 27 + test/test_bserver2-1.rb | 28 + test/test_bserver2.rb | 28 + test/test_bserver2c.rb | 25 + test/test_bserver3.rb | 12 + test/test_bserver3c.rb | 28 + test/test_client.rb | 57 + test/test_downloader.rb | 12 + test/test_installer.rb | 10 + test/test_pkglist_parser.rb | 9 + test/test_server | 66 + test/test_server.rb | 24 + test/test_server_pkg_file/archive.zip | Bin 0 -> 308 bytes .../smart-build-interface_1.20.1_linux.zip | Bin 0 -> 308 bytes test/test_utils.rb | 7 + test/tpkg/.log | 31 + test/tpkg/package/build.linux | 40 + test/tpkg/package/pkgfour.install | 1 + test/tpkg/package/pkgfour.remove | 1 + test/tpkg/package/pkginfo.manifest | 71 + test/tpkg/package/pkgone.install | 1 + test/tpkg/package/pkgone.remove | 1 + test/tpkg/package/pkgthree.install | 1 + test/tpkg/package/pkgthree.remove | 1 + test/tpkg/package/pkgtwo.install | 1 + test/tpkg/package/pkgtwo.remove | 1 + tizen-ide/get_ide_sources.sh | 275 ++++ 189 files changed, 15314 insertions(+) create mode 100644 AUTHORS create mode 100644 LICENSE create mode 100644 NOTICE create mode 100644 README create mode 100755 build-cli create mode 100755 build-svr create mode 100644 doc/DIBS_Advanced_Guide.pdf create mode 100644 doc/TizenSDK_Development_Guide.pdf create mode 100644 package/.log create mode 100755 package/build.linux create mode 100644 package/pkginfo.manifest create mode 100755 pkg-build create mode 100755 pkg-clean create mode 100755 pkg-cli create mode 100755 pkg-svr create mode 100644 src/build_server/BinaryUploadProject.rb create mode 100644 src/build_server/BuildClientOptionParser.rb create mode 100644 src/build_server/BuildComm.rb create mode 100644 src/build_server/BuildJob.rb create mode 100644 src/build_server/BuildServer.rb create mode 100644 src/build_server/BuildServerController.rb create mode 100644 src/build_server/BuildServerOptionParser.rb create mode 100644 src/build_server/CommonProject.rb create mode 100644 src/build_server/FullBuildJob.rb create mode 100644 src/build_server/GitBuildJob.rb create mode 100644 src/build_server/GitBuildProject.rb create mode 100644 src/build_server/JobClean.rb create mode 100644 src/build_server/JobLog.rb create mode 100644 src/build_server/JobManager.rb create mode 100644 src/build_server/LocalBuildJob.rb create mode 100644 src/build_server/ProjectManager.rb create mode 100644 src/build_server/RegisterPackageJob.rb create mode 100644 src/build_server/RemoteBuildJob.rb create mode 100644 src/build_server/RemoteBuildServer.rb create mode 100644 src/build_server/RemoteBuilder.rb create mode 100644 src/build_server/SocketJobRequestListener.rb create mode 100644 src/builder/Builder.rb create mode 100644 src/builder/CleanOptionParser.rb create mode 100644 src/builder/optionparser.rb create mode 100644 src/common/Action.rb create mode 100644 src/common/PackageManifest.rb create mode 100644 src/common/ScheduledActionHandler.rb create mode 100644 src/common/Version.rb create mode 100644 src/common/dependency.rb create mode 100644 src/common/fileTransfer.rb create mode 100644 src/common/log.rb create mode 100644 src/common/mail.rb create mode 100644 src/common/mailConfig.rb create mode 100644 src/common/package.rb create mode 100644 src/common/parser.rb create mode 100644 src/common/utils.rb create mode 100644 src/pkg_server/SocketRegisterListener.rb create mode 100644 src/pkg_server/client.rb create mode 100644 src/pkg_server/clientOptParser.rb create mode 100644 src/pkg_server/distribution.rb create mode 100644 src/pkg_server/downloader.rb create mode 100644 src/pkg_server/installer.rb create mode 100644 src/pkg_server/packageServer.rb create mode 100644 src/pkg_server/packageServerConfig.rb create mode 100644 src/pkg_server/packageServerLog.rb create mode 100644 src/pkg_server/serverOptParser.rb create mode 100644 test/b/b create mode 100755 test/b/package/build.linux create mode 100644 test/b/package/pkginfo.manifest create mode 100644 test/bin/bin_0.0.0_linux.zip create mode 100644 test/bin/bin_0.0.1_linux.zip create mode 100644 test/bin/src.tar.gz create mode 100644 test/build-cli-01.testcase create mode 100644 test/build-cli-02.testcase create mode 100644 test/build-cli-03.testcase create mode 100644 test/build-cli-04.testcase create mode 100644 test/build-cli-05.testcase create mode 100644 test/build-cli-06.testcase create mode 100644 test/build-cli-07.testcase create mode 100644 test/build-cli-08.testcase create mode 100644 test/build-cli-09.testcase create mode 100644 test/build-cli-10.testcase create mode 100644 test/build-cli-11.testcase create mode 100644 test/build-cli-12.testcase create mode 100644 test/build-cli-13.testcase create mode 100644 test/build-cli-14.testcase create mode 100644 test/build-cli-15.testcase create mode 100644 test/build-cli-16.testcase create mode 100644 test/build-cli-17.testcase create mode 100644 test/build-cli-18.testcase create mode 100644 test/build-svr-01.testcase create mode 100644 test/build-svr-02.testcase create mode 100644 test/build-svr-03.testcase create mode 100644 test/build-svr-04.testcase create mode 100644 test/build-svr-05.testcase create mode 100644 test/build-svr-06.testcase create mode 100644 test/build-svr-07.testcase create mode 100644 test/build-svr-08.testcase create mode 100644 test/build-svr-09.testcase create mode 100644 test/build-svr-10.testcase create mode 100644 test/build-svr-11.testcase create mode 100644 test/build-svr-12.testcase create mode 100644 test/build-svr-13.testcase create mode 100644 test/build-svr-14.testcase create mode 100644 test/build-svr-15.testcase create mode 100644 test/build-svr-16.testcase create mode 100644 test/buildcli.testsuite create mode 100644 test/buildserver.testsuite create mode 100755 test/buildsvr.init create mode 100644 test/c/c create mode 100755 test/c/package/build.linux create mode 100644 test/c/package/pkginfo.manifest create mode 100644 test/git01/a.tar.gz create mode 100644 test/git01/a_new.tar.gz create mode 100644 test/git01/b.tar.gz create mode 100644 test/git01/b_new.tar.gz create mode 100644 test/git01/c.tar.gz create mode 100644 test/git01/c_new.tar.gz create mode 100644 test/git01/d.tar.gz create mode 100644 test/packageserver.testsuite create mode 100644 test/packageserver01.testcase create mode 100644 test/packageserver02.testcase create mode 100644 test/packageserver03.testcase create mode 100644 test/packageserver04.testcase create mode 100644 test/packageserver05.testcase create mode 100644 test/packageserver06.testcase create mode 100644 test/packageserver07.testcase create mode 100644 test/packageserver08.testcase create mode 100644 test/packageserver09.testcase create mode 100644 test/packageserver10.testcase create mode 100644 test/packageserver11.testcase create mode 100644 test/packageserver12.testcase create mode 100644 test/packageserver13.testcase create mode 100644 test/packageserver14.testcase create mode 100644 test/packageserver15.testcase create mode 100644 test/packageserver16.testcase create mode 100644 test/packageserver17.testcase create mode 100644 test/packageserver18.testcase create mode 100644 test/packageserver19.testcase create mode 100644 test/packageserver20.testcase create mode 100644 test/packageserver21.testcase create mode 100644 test/packageserver22.testcase create mode 100644 test/packageserver23.testcase create mode 100644 test/pkg-cli-checkupgrade.testcase create mode 100644 test/pkg-cli-clean-f.testcase create mode 100644 test/pkg-cli-download-t.testcase create mode 100644 test/pkg-cli-download.testcase create mode 100644 test/pkg-cli-install-f.testcase create mode 100644 test/pkg-cli-install-t.testcase create mode 100644 test/pkg-cli-install.testcase create mode 100644 test/pkg-cli-installfile-f.testcase create mode 100644 test/pkg-cli-installfile.testcase create mode 100644 test/pkg-cli-listlpkg.testcase create mode 100644 test/pkg-cli-listrpkg.testcase create mode 100644 test/pkg-cli-showlpkg.testcase create mode 100644 test/pkg-cli-showrpkg.testcase create mode 100644 test/pkg-cli-source.testcase create mode 100644 test/pkg-cli-uninstall-t.testcase create mode 100644 test/pkg-cli-uninstall.testcase create mode 100644 test/pkg-cli-update.testcase create mode 100644 test/pkg-cli-upgrade.testcase create mode 100644 test/pkg-cli.testsuite create mode 100644 test/pkg-list create mode 100644 test/pkginfo.manifest create mode 100755 test/pkgsvr.init create mode 100755 test/regression.rb create mode 100755 test/test.sh create mode 100755 test/test_bserver.rb create mode 100755 test/test_bserver2-1.rb create mode 100755 test/test_bserver2.rb create mode 100755 test/test_bserver2c.rb create mode 100755 test/test_bserver3.rb create mode 100755 test/test_bserver3c.rb create mode 100755 test/test_client.rb create mode 100755 test/test_downloader.rb create mode 100755 test/test_installer.rb create mode 100755 test/test_pkglist_parser.rb create mode 100755 test/test_server create mode 100755 test/test_server.rb create mode 100644 test/test_server_pkg_file/archive.zip create mode 100644 test/test_server_pkg_file/smart-build-interface_1.20.1_linux.zip create mode 100755 test/test_utils.rb create mode 100644 test/tpkg/.log create mode 100755 test/tpkg/package/build.linux create mode 100644 test/tpkg/package/pkgfour.install create mode 100644 test/tpkg/package/pkgfour.remove create mode 100644 test/tpkg/package/pkginfo.manifest create mode 100644 test/tpkg/package/pkgone.install create mode 100644 test/tpkg/package/pkgone.remove create mode 100644 test/tpkg/package/pkgthree.install create mode 100644 test/tpkg/package/pkgthree.remove create mode 100644 test/tpkg/package/pkgtwo.install create mode 100644 test/tpkg/package/pkgtwo.remove create mode 100755 tizen-ide/get_ide_sources.sh diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..9589ae0 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,5 @@ +DongHee Yang +Taejun Ha +Jiil Hyoun +Donghyuk Yang +HyunGoo Kang diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/NOTICE b/NOTICE new file mode 100644 index 0000000..4297ee3 --- /dev/null +++ b/NOTICE @@ -0,0 +1 @@ +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. diff --git a/README b/README new file mode 100644 index 0000000..e54ec3f --- /dev/null +++ b/README @@ -0,0 +1,318 @@ +Tizen SDK Development Guide + + +Contents +======================================== + +1 Introduction +2 Setup Build Environment +2.1 Linux(Ubuntu) +2.1.1 Install Tizen SDK +2.1.2 Install Ruby +2.1.3 Install Packages needed by DIBS +2.1.4 Install Pre-Requisite Packages +2.1.5 More +2.2 Windows +2.2.1 Install Tizen SDK +2.2.2 Install Ruby +2.2.3 Install Packages needed by DIBS +2.2.4 Install MSYS GIT +2.2.5 More +3 Simple Build and Test +3.1 Build Package +3.2 Install Package +3.3 Launch your own SDK +4 More DIBS commands +4.1 List Up Available Packages +4.2 Update Package List +4.3 Upgrade Packages +4.4 Install SDK + + +1 Introduction +======================================== + +Tizen SDK is composed of many separated packages which are has their own dependencies. And DIBS(Distributed Intelligent Build System) is the build system designed for building that kind of complexity. It provides various features. +* Has own packaging system and packaging interface +* Provides distributed package server/build Server +* Provides Automatic dependency checker/resolver +* Provides client/server tools which are easy to use +This guides will show how to build Tize SDK packages using DIBS + + +2 Setup Build Environment +======================================== + +2.1 Linux(Ubuntu) + +2.1.1 Install Tizen SDK +Install the SDK first + +2.1.2 Install Ruby +To use DIBS, you have to install Ruby 1.8.7 + + $ sudo apt-get install ruby + +Higher version of Ruby is not tested yet! + +2.1.3 Install Packages needed by DIBS + + $ sudo apt-get install wget zip unzip + +2.1.4 Install Pre-Requisite Packages +To build or develop SDK , you have to install following packages +* For emulator development + bcc bison flex autoconf gcc libglu1-mesa-dev libsdl1.2-dev libgtk2.0-dev libsdl-image1.2-dev libsdl-gfx1.2-dev debhelper libxml2-dev libasound2-dev libx11-dev zlib1g-dev uuid-dev libv4l-dev +* GDB 7.2 + quilt libncurses5-dev libexpat1-dev libreadline-dev mingw32(only for building windows version) +* GCC 4.5 + quilt texinfo bison flex mingw32(only for building windows version) + + $ sudo apt-get install {pre-requisite packages} + +2.1.5 More +For your convenience, +* Add DIBS path to $PATH. Edit shell configuration. ex) .bashrc + + $ export PATH={SDK Install dir}/dev-tools:$PATH + +2.2 Windows + +2.2.1 Install Tizen SDK +Install the SDK first + +2.2.2 Install Ruby +* You can download Ruby binary at .. + ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ruby-1.8.7-i386-mswin32.zip + http://rubyforge.org/frs/download.php/75679/rubyinstaller-1.8.7-p357.exe + +2.2.3 Install Packages needed by DIBS +* Login MinGW provided by Tizen SDK. Execute following windows BAT file. + + {Tizen-Install Dir}/MinGW/msys/1.0/msys.bat + +* Execute the following commands on MinGW environment + + $ mingw-get.exe update + $ mingw-get.exe install msys-wget + $ mingw-get.exe install msys-zip + $ mingw-get.exe install msys-unzip + +2.2.4 Install MSYS GIT +* Download the MSYS binary + http://msysgit.googlecode.com/files/Git-1.7.9-preview20120201.exe + +* Install it + +2.2.5 More +For your convenience, +* Add "/usr/bin/ruby" shell script + + #!/bin/sh + {ruby install dir}/bin/ruby.exe $@ + + ex) + + #!/bin/sh + /c/Ruby187/bin/ruby.exe $@ + +* Add "/usr/bin/git" shell script + + #!/bin/sh + {MSYS GIT install dir}/bin/ruby.exe $@ + + ex) + + #!/bin/sh + /c/Program\ Files/Git/bin/it.exe $@ + +* Add DIBS path to $PATH. Edit shell configuration. ex) /etc/profile + + $ export PATH={SDK Install dir}/dev-tools:$PATH + + +3 Simple Build and Test +======================================== + +If you downloaded a SDK package source and modified it, then you want to build it and apply it to Tizen SDK. Here is the simple process to do it. + +3.1 Build Package +Building a SDK package is very simple. Here is the command for buiding package. + + ## pkg-build [-u ] [-o ] [-c ] [-r ] + ## -u : Package server URL which contains binary and development packages. + ## If ommited, it will use previous server URL. + ## -o : Target OS(linux or windows) + ## -c : Clean build"" + ## If set, start build after downloading all dependent packages + ## If not set, it will not download dependent packages if already downloaded + ## -r : Check reverse-build-dependency + ## This option will check that the packages which depend on me can be built + +And Here are simple steps + 1. Move to source directory + ex) + + $ cd ~/project/common-eplugin + + 2. Type the command + ex) + + $ pkg-build -u http://172.21.17.55/dibs/unstable + + 3. Now you can see the package files( *.zip, *.tar.gz ) in your source directory + +3.2 Install Package +Installing a SDK package is also very simple. Here is the command for installing package files + + ## pkg-cli install-file -p [-l ] [-f] + ## -p : Binary package file(*.zip) path which you want to install + ## -l : Install root location of target SDK + ## If omitted, current working directory path will be set + ## -f : Install the package by force + ## This option will allow installing the package that has lower or equal version compare to installed + +Now let's assume that you have just finished building and have a Tizen SDK installation on '~/tizen_sdk' + 1. Just type the command + ex) + + $ pkg-cli install-file -p common-eplugin_0.20.6_linux.zip -l ~/tizen_sdk + +3.3 Launch your own SDK +Now you can check your modifications. Lauch your SDK!! + 1. type the following command or use the short-cut for launching Tizen SDK. + ex) + + $ ~/tizen_sdk/IDE/startup.sh + + +4 More DIBS commands +======================================== + +There are more useful commands provided + +4.1 List Up Available Packages +You can list up available packages of server. + + ## pkg-cli list-rpkg [-o ] [-u ] + ## -o : Target OS(linux or windows) + ## -u : Package server URL which contains binary and development packages. + ## If ommited, it will use previous server URL. + + 1. List up packages + ex) + + $ pkg-cli update -u http://172.21.17.55/dibs/unstable_release + + ex) + + $ pkg-cli list-rpkg + + 2. List up packages with updating + ex) + + $ pkg-cli list-rpkg -u http://172.21.17.55/dibs/unstable_release + +You can list up packages of your install directory + + ## pkg-cli list-lpkg [-l ] + ## -l : Install root location of target SDK + ## If omitted, current working directory path will be set + + 1. List up packages + ex) + + $ pkg-cli list-lpkg -l ~/tizen_sdk + +4.2 Update Package List +You should have package list of server in your host before listing, installing and downloading packages. So, if you want to install the latest package, then you should update your package list before installing. + + ## pkg-cli update [-u ] + ## -u : Package server URL which contains binary and development packages. + ## If ommited, it will use previous server URL. + + 1. Update package list from server + ex) + + $ pkg-cli update -u http://172.21.17.55/dibs/unstable_release + + 2. Install / download packages from server + ex) + + $ pkg-cli install -p nativeapp-eplugin -l ~/tizen_sdk + + ex) + + $ pkg-cli install -p unittest-eplugin -l ~/tizen_sdk + + ex) + + $ pkg-cli download -p base-ide-product -l ~/downloads + + 3. If package is updated on server and you want to use is, you should update your package list. If you do not set the server url, it will be set previous server URL. + ex) + + $ pkg-cli update + + ex) + + $ pkg-cli install -p nativeapp-eplugin -l ~/tizen_sdk + +4.3 Upgrade Packages +You can upgrade your installed packages from server. + + ## pkg-cli upgrade -l -u + ## -u : Package server URL which contains binary and development packages. + ## If ommited, it will use previous server URL. + ## -l : Install root location of target SDK + ## If omitted, current working directory path will be set + + 1. Check package for upgrading + ex) + + $ pkg-cli update -u http://172.21.17.55/dibs/unstable_release + $ pkg-cli check-upgrade -l ~/tizen_sdk + + 2. Upgrade packages + ex) + + $ pkg-cli upgrade -l ~/tizen_sdk + + 3. Upgrade packages with updating + ex) + + $ pkg-cli upgrade -l ~/tizen_sdk -u http://172.21.17.55/dibs/unstable_release + + 4. If you want to upgrade specific package, you can upgrade it as installing + ex) + + $ pkg-cli install -p common-eplugin -l ~/tizen_sdk -u http://172.21.17.55/dibs/unstable_release + +4.4 Install SDK +You can also install new SDK using the network install command. Originally this command is used for installing packages by network. But you can set "TIZEN-SDK" as package name, all Tizen SDK packages will be installed. + + ## pkg-cli install -p [-u ] [-l ] [-t] [-f] + ## -p : Binary package name which you want to install + ## -u : Package server URL which contains binary and development packages. + ## If ommited, it will use previous server URL. + ## -l : Install root location of target SDK + ## If omitted, current working directory path will be set + ## -t : Install the package with all dependent packages + ## -f : Install the package by force + ## This option will allow installing the package that has lower or equal version compare to installed + + 1. Install "TIZEN-SDK" by network to new location("~/tizen_sdk2") + ex) + + $ pkg-cli install -p TIZEN-SDK -l ~/tizen_sdk2 -t + + 2. Change Tizen SDK configuration + ex) + + $ echo "TIZEN_SDK_INSTALLED_PATH=/home/{username}/tizen_sdk2" > ~/.TizenSDK/tizensdkpath + + 3. Launch your SDK! + ex) + + $ ~/tizen_sdk2/IDE/startup.sh + diff --git a/build-cli b/build-cli new file mode 100755 index 0000000..f35697f --- /dev/null +++ b/build-cli @@ -0,0 +1,366 @@ +#!/usr/bin/ruby + +=begin + + build-cli + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require "socket" +require 'fileutils' +$LOAD_PATH.unshift File.dirname(__FILE__)+"/src/common" +$LOAD_PATH.unshift File.dirname(__FILE__)+"/src/build_server" +require "utils" +require "BuildClientOptionParser" +require "BuildComm" + +#option parsing +begin + option = option_parse +rescue => e + puts e.message + exit 0 +end + +# if "--os" is not specified, use host os type +if option[:os].nil? then + option[:os] = Utils::HOST_OS +else + if not option[:os] =~ /^(linux|windows|darwin|all)$/ then + puts "We have no plan to Buld OS \"#{option[:os]}\" \n please check your option OS " + exit 1 + end +end + +if option[:domain].nil? then + option[:domain] = "127.0.0.1" +end + +if option[:port].nil? then + option[:port] = 2222 +end + +begin + case option[:cmd] + when "build" + result = Utils.parse_server_addr(option[:domain]) + if result.nil? then + puts "Server address is incorrect. (#{option[:domain]})" + puts "Tune as following format." + puts " :" + exit 1 + end + client = BuildCommClient.create( result[0], result[1], 0 ) + if not client.nil? then + client.send "BUILD,GIT,#{option[:project]},#{option[:passwd]},#{option[:os]},#{option[:async]}" + client.print_stream + client.terminate + else + puts "Connection to server failed!" + exit 1 + end + when "resolve" + result = Utils.parse_server_addr(option[:domain]) + if result.nil? then + puts "Server address is incorrect. (#{option[:domain]})" + puts "Tune as following format." + puts " :" + exit 1 + end + client = BuildCommClient.create( result[0], result[1], 0 ) + if not client.nil? then + client.send "RESOLVE,GIT,#{option[:project]},#{option[:passwd]},#{option[:os]},#{option[:async]}" + client.print_stream + client.terminate + end + when "query" + result = Utils.parse_server_addr(option[:domain]) + if result.nil? then + puts "Server address is incorrect. (#{option[:domain]})" + puts "Tune as following format." + puts " :" + exit 1 + end + # SYSTEM INFO + client = BuildCommClient.create( result[0], result[1], 0 ) + if not client.nil? then + client.send "QUERY,SYSTEM" + result0 = client.receive_data() + if result0.nil? then + client.terminate + exit(-1) + end + result0 = result0[0].split(",").map { |x| x.strip } + puts "HOST-OS: #{result0[0]}" + puts "MAX_WORKING_JOBS: #{result0[1]}" + client.terminate + else + puts "Connection to server failed!" + exit 1 + end + + # FTP INFO + puts "" + client = BuildCommClient.create( result[0], result[1], 0 ) + if not client.nil? then + client.send "QUERY,FTP" + result0 = client.receive_data() + if result0.nil? then + client.terminate + exit(-1) + end + puts "* FTP *" + result0 = result0[0].split(",").map { |x| x.strip } + puts "FTP_ADDR: #{result0[0]}" + puts "FTP_USERNAME: #{result0[1]}" + client.terminate + else + puts "Connection to server failed!" + exit 1 + end + + # PROJECT INFO + puts "" + client = BuildCommClient.create( result[0], result[1], 0 ) + if not client.nil? then + client.send "QUERY,PROJECT" + result1 = client.receive_data() + if result1.nil? then + client.terminate + exit(-1) + end + puts "* PROJECT(S) *" + for item in result1 + tok = item.split(",").map { |x| x.strip } + type = (tok[0]=="G" ? "NORMAL":"REMOTE") + printf("%-25s %s\n",tok[1],type) + end + else + puts "Connection to server failed!" + exit 1 + end + + # JOB INFO + puts "" + client = BuildCommClient.create( result[0], result[1], 0 ) + if not client.nil? then + client.send "QUERY,JOB" + result1 = client.receive_data() + if result1.nil? then + client.terminate + exit(-1) + end + puts "* JOB(S) *" + for item in result1 + tok = item.split(",").map { |x| x.strip } + puts "#{tok[1]} #{tok[0]} #{tok[2]}" + end + else + puts "Connection to server failed!" + exit 1 + end + + when "cancel" + result = Utils.parse_server_addr(option[:domain]) + if result.nil? then + puts "Server address is incorrect. (#{option[:domain]})" + puts "Tune as following format." + puts " :" + exit 1 + end + if not option[:job].nil? then + client = BuildCommClient.create( result[0], result[1], 0 ) + if not client.nil? then + client.send "CANCEL,#{option[:job]},#{option[:passwd]}" + result1 = client.receive_data() + if result1.nil? then + client.terminate + exit(-1) + end + puts result1 + else + puts "Connection to server failed!" + exit 1 + end + else + puts "you must input \"cancel job number\"!!" + exit 1 + end + + when "register" + # check file exist + if not File.exist? option[:package] then + puts "The file does not exist!.. #{option[:package]}" + exit(-1) + end + + result = Utils.parse_server_addr(option[:domain]) + if result.nil? then + puts "Server address is incorrect. (#{option[:domain]})" + puts "Tune as following format." + puts " :" + exit 1 + end + bs_ip = result[0] + bs_port = result[1] + + ftp_result = Utils.parse_ftpserver_url(option[:fdomain]) + if ftp_result.nil? or ftp_result.length != 4 then + puts "FTP server url is incorrect. (#{option[:fdomain]})" + puts "Tune as following format." + puts " ftp://:@
" + exit 1 + end + ip = ftp_result[0] + port = ftp_result[1] + username = ftp_result[2] + passwd = ftp_result[3] + + # upload + client = BuildCommClient.create( bs_ip, bs_port, 0 ) + if client.nil? then + puts "Can't access server #{bs_ip}:#{bs_port}" + exit(-1) + end + client.send("UPLOAD") + result = client.send_file(ip, port, username, passwd, option[:package]) + client.terminate + if not result then + puts "Uploading file failed!.. #{option[:package]}" + exit(-1) + end + + # register + client = BuildCommClient.create( bs_ip, bs_port, 0 ) + if client.nil? then + puts "Can't access server #{bs_ip}:#{bs_port}" + exit(-1) + end + client.send("REGISTER,BINARY,#{File.basename(option[:package])},#{option[:passwd]}") + client.print_stream + client.terminate + + # for test + when "upload" + # check file exist + if not File.exist? option[:file] then + puts "The file does not exist!.. #{option[:file]}" + exit(-1) + end + + result = Utils.parse_server_addr(option[:domain]) + if result.nil? then + puts "Server address is incorrect. (#{option[:domain]})" + puts "Tune as following format." + puts " :" + exit 1 + end + + # FTP INFO + client = BuildCommClient.create( result[0], result[1], 0 ) + if client.nil? then + puts "Can't access server #{result[0]}:#{result[1]}" + exit(-1) + end + client.send "QUERY,FTP" + result0 = client.receive_data() + if result0.nil? then + client.terminate + exit(-1) + end + result0 = result0[0].split(",").map { |x| x.strip } + ip = result0[0] + username = result0[1] + passwd = result0[2] + client.terminate + + client = BuildCommClient.create( result[0], result[1], 0 ) + if client.nil? then + puts "Can't access server #{result[0]}:#{result[1]}" + exit(-1) + end + client.send("UPLOAD") + result = client.send_file(ip, username, passwd, option[:file]) + client.terminate + if not result then + puts "Uploading file failed!.. #{option[:file]}" + exit(-1) + else + puts "Uploading file succeeded!" + end + + when "download" + result = Utils.parse_server_addr(option[:domain]) + if result.nil? then + puts "Server address is incorrect. (#{option[:domain]})" + puts "Tune as following format." + puts " :" + exit 1 + end + + # FTP INFO + client = BuildCommClient.create( result[0], result[1], 0 ) + if client.nil? then + puts "Can't access server #{result[0]}:#{result[1]}" + exit(-1) + end + client.send "QUERY,FTP" + result0 = client.receive_data() + if result0.nil? then + client.terminate + exit(-1) + end + result0 = result0[0].split(",").map { |x| x.strip } + ip = result0[0] + username = result0[1] + passwd = result0[2] + client.terminate + + # download + client = BuildCommClient.create( result[0], result[1], 0 ) + if client.nil? then + puts "Can't access server #{result[0]}:#{result[1]}" + exit(-1) + end + file_name = option[:file] + client.send("DOWNLOAD,#{file_name}") + result = client.receive_file(ip, username, passwd, "./#{file_name}") + client.terminate + if not result then + puts "Downloading file failed!.. #{option[:file]}" + exit(-1) + else + puts "Downloading file succeeded!" + end + else + raise RuntimeError, "input option incorrect : #{option[:cmd]}" + end + +rescue => e + puts e.message + exit(-1) +end + +exit 0 diff --git a/build-svr b/build-svr new file mode 100755 index 0000000..62842bd --- /dev/null +++ b/build-svr @@ -0,0 +1,113 @@ +#!/usr/bin/ruby -d + +=begin + + build-svr + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require 'fileutils' +$LOAD_PATH.unshift File.dirname(__FILE__)+"/src/common" +$LOAD_PATH.unshift File.dirname(__FILE__)+"/src/build_server" +require "utils" +require "BuildServerOptionParser" +require "BuildServerController" + +#option parsing +begin + option = option_parse +rescue => e + puts e.message + exit 0 +end + + +# if "--os" is not specified, use host os type +if option[:os].nil? then + option[:os] = "linux,windows" +end + +begin + case option[:cmd] + when "create" + svr_result = Utils.parse_server_addr(option[:domain]) + if svr_result.nil? or svr_result.length != 2 then + puts "Server address is incorrect. (#{option[:domain]})" + puts "Tune as following format." + puts " :" + exit 1 + end + ftp_result = Utils.parse_ftpserver_url(option[:fdomain]) + if ftp_result.nil? or ftp_result.length != 4 then + puts "FTP server url is incorrect. (#{option[:fdomain]})" + puts "Tune as following format." + puts " ftp://:@
:" + exit 1 + end + pkgsvr_addr = svr_result[0] + pkgsvr_port = svr_result[1] + ftpsvr_addr = ftp_result[0] + ftpsvr_port = ftp_result[1] + ftpsvr_username = ftp_result[2] + ftpsvr_passwd = ftp_result[3] + BuildServerController.create_server( option[:name], Utils::WORKING_DIR, option[:url], pkgsvr_addr, pkgsvr_port, option[:pid], ftpsvr_addr, ftpsvr_port, ftpsvr_username, ftpsvr_passwd ) + when "remove" + BuildServerController.remove_server( option[:name] ) + when "start" + BuildServerController.start_server( option[:name], option[:port] ) + when "stop" + BuildServerController.stop_server( option[:name] ) + when "add-svr" + svr_result = Utils.parse_server_addr(option[:domain]) + if svr_result.nil? or svr_result.length != 2 then + puts "Server address is incorrect. Tune as following format." + puts " :" + exit 1 + end + pkgsvr_addr = svr_result[0] + pkgsvr_port = svr_result[1] + BuildServerController.add_friend_server( option[:name], pkgsvr_addr, pkgsvr_port ) + when "add-prj" + if not option[:git].nil? then + BuildServerController.add_project( option[:name], option[:pid], + option[:git], option[:branch], option[:remote], option[:passwd], option[:os] ) + else + BuildServerController.add_binary_project( option[:name], option[:pid], + option[:package], option[:passwd], option[:os] ) + end + when "fullbuild" + BuildServerController.build_all_projects( option[:name] ) + when "register" + BuildServerController.register_package( option[:name], option[:package] ) + else + raise RuntimeError, "input option incorrect : #{option[:cmd]}" + end + + exit 0 +rescue => e + puts e.message +end + + diff --git a/doc/DIBS_Advanced_Guide.pdf b/doc/DIBS_Advanced_Guide.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f8d0862488e4becbb9dbf73cd91f2399c17d7c38 GIT binary patch literal 502560 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

+gYyia-`kp24LHTe=-+}AcZPyI@45$P7`9(<>C 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 z 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

c{2yo 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

N$A}4`w6Sa-kOf^$M_>QeLSsM_hk%Sb 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 a*^oRu&D}l!&2}&hlawF;7nh=z(*FZdT-lxg literal 0 HcmV?d00001 diff --git a/package/.log b/package/.log new file mode 100644 index 0000000..d739a34 --- /dev/null +++ b/package/.log @@ -0,0 +1,4 @@ +# Logfile created on Mon Feb 06 23:18:31 +0900 2012 by logger.rb/22285 +I, [2012-02-06T23:18:31.266112 #30127] INFO -- : option parsing start +I, [2012-02-06T23:18:31.266200 #30127] INFO -- : option is : -u,http://172.21.111.132/testserver/unstable +I, [2012-02-06T23:18:31.266322 #30127] INFO -- : option parsing end diff --git a/package/build.linux b/package/build.linux new file mode 100755 index 0000000..3527b0c --- /dev/null +++ b/package/build.linux @@ -0,0 +1,35 @@ +#!/bin/sh -xe +# clean +clean() +{ + rm -rf $SRCDIR/*.zip + rm -rf $SRCDIR/*.tar.gz +} + +# build +build() +{ + echo "build" +} + +# install +install() +{ + BIN_DIR=$SRCDIR/package/dibs.package.${BUILD_TARGET_OS}/data/dev_tools/dibs/ + DOC_DIR=$SRCDIR/package/dibs.package.${BUILD_TARGET_OS}/data/dev_tools/dibs/doc + mkdir -p $BIN_DIR + mkdir -p $DOC_DIR + cp -f $SRCDIR/pkg-* $BIN_DIR/ + cp -f $SRCDIR/build-* $BIN_DIR/ + cp -rf $SRCDIR/src $BIN_DIR/ + cp -rf $SRCDIR/src $BIN_DIR/ + cp -f $SRCDIR/AUTHORS $DOC_DIR/ + cp -f $SRCDIR/LICENSE $DOC_DIR/ + cp -f $SRCDIR/NOTICE $DOC_DIR/ + cp -f $SRCDIR/doc/* $DOC_DIR/ +} + + +$1 +echo "$1 success" + diff --git a/package/pkginfo.manifest b/package/pkginfo.manifest new file mode 100644 index 0000000..e1916ff --- /dev/null +++ b/package/pkginfo.manifest @@ -0,0 +1,15 @@ +Package : dibs +Version : 0.99.11 +OS : linux +Build-host-os : linux +Source : dibs +Maintainer : taejun ha, jiil hyoun , , donghee yang< donghee.yang@samsung.com > +Description : Distribute Inteligent Build System + +Package : dibs +Version : 0.99.11 +OS : windows +Build-host-os : linux +Source : dibs +Maintainer : taejun ha, jiil hyoun , , donghee yang< donghee.yang@samsung.com > +Description : Distribute Inteligent Build System diff --git a/pkg-build b/pkg-build new file mode 100755 index 0000000..6584135 --- /dev/null +++ b/pkg-build @@ -0,0 +1,91 @@ +#!/usr/bin/ruby + +=begin + + pkg-build + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +$LOAD_PATH.unshift File.dirname(__FILE__)+"/src/common" +$LOAD_PATH.unshift File.dirname(__FILE__)+"/src/pkg_server" +$LOAD_PATH.unshift File.dirname(__FILE__)+"/src/builder" +require "utils" +require "packageServer" +require "Builder" +require "optionparser" + +begin + option = parse +rescue => e + puts e.message + exit 0 +end + +#generate server when local package server is not set + +# if "--os" is not specified, use host os type +if option[:os].nil? then + option[:os] = Utils::HOST_OS +else + if not option[:os] =~ /^(linux|windows|darwin)$/ then + puts "We have no plan to Buld OS \"#{option[:os]}\" \n please check your option OS " + exit 1 + end +end + +path = Dir.pwd +if not File.exist? "package" then + puts "current dirctory \"#{path}\" is not package root directory" + exit 1 +end + +# if url specified +if not option[:url].nil? then + begin + builder = Builder.get("default") + if builder.pkgserver_url != option[:url] then + puts "Package server URL has been changed! Creating new builder..." + builder = Builder.create("default", option[:url], nil, nil, nil) + end + rescue + puts "Default builder does not exist! Creating new builder..." + builder = Builder.create("default", option[:url], nil, nil, nil) + end +else # if url is not specified + begin + builder = Builder.get("default") + rescue + puts "Default builder does not exist! Creating new builder..." + builder = Builder.create("default", "http://172.21.111.132/pkgserver/unstable",nil, nil, nil) + end +end + +#build project +if not builder.build( Utils::WORKING_DIR, option[:os], option[:clean], [], false) then + puts "Build Failed!" +else + puts "Build Succeeded!" +end + diff --git a/pkg-clean b/pkg-clean new file mode 100755 index 0000000..de48dce --- /dev/null +++ b/pkg-clean @@ -0,0 +1,62 @@ +#!/usr/bin/ruby + +=begin + + pkg-clean + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +$LOAD_PATH.unshift File.dirname(__FILE__)+"/src/common" +$LOAD_PATH.unshift File.dirname(__FILE__)+"/src/pkg_server" +$LOAD_PATH.unshift File.dirname(__FILE__)+"/src/builder" +require "utils" +require "packageServer" +require "Builder" +require "CleanOptionParser" + +path = Dir.pwd +if not File.exist? "package" then + puts "current dirctory \"#{path}\" is not package root directory" + exit 1 +end + +option = parse + +#generate server when local package server is not set + +begin + builder = Builder.get("default") +rescue + puts "Default builder does not exist! Creating new builder..." + builder = Builder.create("default", "http://172.21.111.132/pkgserver/unstable",nil) +end + +#build project +if not builder.clean( Utils::WORKING_DIR ) then + puts "Clean failed!" +else + puts "Clean succeeded!" +end + diff --git a/pkg-cli b/pkg-cli new file mode 100755 index 0000000..657c41f --- /dev/null +++ b/pkg-cli @@ -0,0 +1,165 @@ +#!/usr/bin/ruby + +=begin + + pkg-cli + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require 'fileutils' +require 'logger' +$LOAD_PATH.unshift File.dirname(__FILE__)+"/src/common" +$LOAD_PATH.unshift File.dirname(__FILE__)+"/src/pkg_server" + +#library +require "utils" +require "clientOptParser" +require "client" +require "packageServer" + +#set global variable +@WORKING_DIR = nil + +#option parsing +begin + option = option_parse +rescue => e + # if option parse error print help message + puts e.message + exit 0 +end + +#if "--os" is not specfied, use host os type +if option[:os].nil? then + system_type = `uname -s` + case system_type.strip + when "Linux" then + option[:os] = "linux" + when /MINGW32.*/ then + option[:os] = "windows" + when "Darwin" then + option[:os] = "darwin" + else + raise RuntimeError, "Unknown OS type : #{system_type}" + end +end + +case option[:cmd] +when "update" then + client = Client.new( option[:url], nil, nil ) + client.update() +when "clean" then + client = Client.new( nil, option[:loc], nil ) + client.clean(option[:f]) +when "download" then + client = Client.new( option[:url], option[:loc], nil ) + if not option[:url].nil? then + client.update() + end + file_loc = client.download( option[:pkg], option[:os], option[:t] ) +when "install" then + client = Client.new( option[:url], option[:loc], nil ) + if not option[:url].nil? then + client.update() + end + client.install( option[:pkg], option[:os], option[:t], option[:f] ) +when "install-file" then + client = Client.new( nil, option[:loc], nil ) + client.install_local_pkg( option[:pkg], option[:f] ) +when "uninstall" then + client = Client.new( nil, option[:loc], nil ) + client.uninstall( option[:pkg], option[:t] ) +when "upgrade" then + client = Client.new( option[:url], option[:loc], nil ) + if not option[:url].nil? then + client.update() + end + client.upgrade( option[:os], option[:t] ) +when "check-upgrade" then + client = Client.new( option[:url], option[:loc], nil ) + if not option[:url].nil? then + client.update() + end + client.check_upgrade( option[:os] ) +when "show-rpkg" then + client = Client.new( option[:url], nil, nil ) + if not option[:url].nil? then + client.update() + end + puts client.show_pkg_info( option[:pkg], option[:os] ) +when "list-rpkg" then + client = Client.new( option[:url], nil, nil ) + if not option[:url].nil? then + client.update() + end + result = client.show_pkg_list( option[:os] ) + if not result.nil? and not result.empty? then + result.each do |i| + name = i[0].strip + version = i[1].strip + desc = i[2].strip + puts name + " (" + version + ")" + end + end +when "show-lpkg" then + client = Client.new( nil, option[:loc], nil ) + puts client.show_installed_pkg_info( option[:pkg] ) +when "list-lpkg" then + client = Client.new( nil, option[:loc], nil ) + result = client.show_installed_pkg_list() + if not result.nil? and not result.empty? then + result.each do |i| + name = i[0].strip + version = i[1].strip + desc = i[2].strip + puts name + " (" + version + ")" + end + else + puts "Info: There is no any package." + end +when "build-dep" then + client = Client.new( nil, nil, nil ) + result = client.get_build_dependent_packages( option[:pkg], option[:os], true ) + ret = "" + result.each do |i| + ret = ret + i + " --> " + end + ret = ret.strip + ret[-3..-1] = "" + puts ret +when "install-dep" then + client = Client.new( nil, nil, nil ) + result = client.get_install_dependent_packages( option[:pkg], option[:os], true, false ) + ret = "" + result.each do |i| + ret = ret + i + " --> " + end + ret = ret.strip + ret[-3..-1] = "" + puts ret +else + raise RuntimeError, "Input is incorrect : #{option[:cmd]}" +end + diff --git a/pkg-svr b/pkg-svr new file mode 100755 index 0000000..a0fc79a --- /dev/null +++ b/pkg-svr @@ -0,0 +1,116 @@ +#!/usr/bin/ruby + +=begin + + pkg-svr + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require 'fileutils' +$LOAD_PATH.unshift File.dirname(__FILE__)+"/src/common" +$LOAD_PATH.unshift File.dirname(__FILE__)+"/src/pkg_server" +require "utils" +require "packageServer" +require "serverOptParser" + +#option parsing +begin + option = option_parse +rescue => e + puts e.message + exit 0 +end + +begin + if option[:cmd].eql? "list" then + if option[:id].empty? then + PackageServer.list_id + else + PackageServer.list_dist option[:id] + end + exit + end + + server = PackageServer.new( option[:id] ) + + if server.nil? + raise RuntimeError, "server class creation fail" + end + + case option[:cmd] + when "create" + server.create( option[:id], option[:dist], option[:url], option[:loc] ) + when "register" + server.register( option[:pkgs], option[:dist], option[:gensnap], option[:test] ) + when "gen-snapshot" + server.generate_snapshot( option[:snaps][0], option[:dist], option[:bsnap] ) + when "sync" + server.sync( option[:dist], option[:force] ) + when "add-dist" + server.add_distribution( option[:dist], option[:url], option[:clone] ) + when "remove" + if not option[:force] then + puts "Do you want to really? then input \"YES\"" + input = $stdin.gets.strip + if input.eql? "YES" then + puts "Remove server!" + else + puts "Remove is canceled by user input" + exit(0) + end + end + + server.remove_server() + when "remove-dist" + if not option[:force] then + puts "Do you want to really? then input \"YES\"" + input = $stdin.gets.strip + if input.eql? "YES" then + puts "Remove server!" + else + puts "Remove is canceled by user input" + exit(0) + end + end + + server.remove_dist( option[:dist] ) + when "remove-pkg" + server.remove_pkg( option[:dist], option[:pkgs], option[:os], option[:recursive] ) + when "remove-snapshot" + server.remove_snapshot( option[:dist], option[:snaps] ) + when "clean" + server.clean( option[:dist], option[:snaps] ) + when "start" + server.start( option[:port] ) + when "stop" + server.stop( option[:port] ) + else + raise RuntimeError, "input option incorrect : #{option[:cmd]}" + end +rescue => e + puts e.message +end + + diff --git a/src/build_server/BinaryUploadProject.rb b/src/build_server/BinaryUploadProject.rb new file mode 100644 index 0000000..977ee86 --- /dev/null +++ b/src/build_server/BinaryUploadProject.rb @@ -0,0 +1,81 @@ +=begin + + BinaryUploadProject.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require 'fileutils' +$LOAD_PATH.unshift File.dirname(__FILE__) +require "CommonProject.rb" +require "RegisterPackageJob.rb" +require "Version.rb" +require "PackageManifest.rb" + + +class BinaryUploadProject < CommonProject + attr_accessor :pkg_name + + # initialize + def initialize( name, pkg_name, server, os_list ) + super(name, "BINARY", server, os_list) + @pkg_name = pkg_name + end + + + # create new job + def create_new_job( filename ) + new_name = filename.sub(/(.*)_(.*)_(.*)\.zip/,'\1,\2,\3') + pkg_name = new_name.split(",")[0] + os = new_name.split(",")[2] + + # check file name + if @pkg_name != pkg_name then return nil end + + # check package info + file_path = "#{@server.incoming_path}/#{filename}" + if not File.exist? file_path then return nil end + + pkginfo_dir = "#{@server.path}/projects/#{@name}/pkginfos" + if not File.exist? pkginfo_dir then FileUtils.mkdir_p pkginfo_dir end + if not Utils.extract_a_file(file_path, "pkginfo.manifest", pkginfo_dir) then + return nil + end + pkginfo =PackageManifest.new("#{pkginfo_dir}/pkginfo.manifest") + pkgs = pkginfo.get_target_packages(os) + if pkgs.count != 1 then return nil end + if pkgs[0].package_name != @pkg_name then return nil end + + return RegisterPackageJob.new( "#{@server.incoming_path}/#{filename}", @server ) + end + + + def include_package?(name, version=nil, os=nil) + if name == @pkg_name then + return true + else + return false + end + end +end diff --git a/src/build_server/BuildClientOptionParser.rb b/src/build_server/BuildClientOptionParser.rb new file mode 100644 index 0000000..e57b49b --- /dev/null +++ b/src/build_server/BuildClientOptionParser.rb @@ -0,0 +1,163 @@ +=begin + + BuildClientOptionParser.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require 'optparse' + +def option_error_check( options ) + case options[:cmd] + + when "build" then + if options[:project].nil? or options[:project].empty? or + options[:domain].nil? or options[:domain].empty? then + raise ArgumentError, "Usage: build-cli build -N -d [-o ] [-w ] [--async]" + end + + when "resolve" then + if options[:project].nil? or options[:project].empty? or + options[:domain].nil? or options[:domain].empty? then + raise ArgumentError, "Usage: build-cli resolve -N -d [-o ] [-w ] [--async]" + end + + when "query" then + if options[:domain].nil? or options[:domain].empty? then + raise ArgumentError, "Usage: build-cli query -d " + end + + when "cancel" then + if options[:job].nil? or options[:job].empty? or + options[:domain].nil? or options[:domain].empty? then + raise ArgumentError, "Usage: build-cli cancel -j -d [-w ]" + end + when "register" then + if options[:package].nil? or options[:package].empty? or + options[:domain].nil? or options[:domain].empty? or + options[:fdomain].nil? or options[:fdomain].empty? then + raise ArgumentError, "Usage: build-cli register -P -d -t [-w ]" + end + + else + raise ArgumentError, "Input is incorrect : #{options[:cmd]}" + end + +end + +def option_parse + options = {} + banner = "Requiest service to build-server command-line tool." + "\n" \ + + "\n" + "Usage: build-cli [OPTS] or build-cli -h" + "\n" \ + + "\n" + "Subcommands:" + "\n" \ + + "\t" + "resolve Request change to resolve-status for build-conflict." + "\n" \ + + "\t" + "query Query information about build-server." + "\n" \ + + "\t" + "cancel Cancel a building project." + "\n" \ + + "\t" + "register Register the package to the build-server." + "\n" \ + + "\n" + "Subcommand usage:" + "\n" \ + + "\t" + "build-cli build -N -d [-o ] [-w ] [--async]" + "\n" \ + + "\t" + "build-cli resolve -N -d [-o ] [-w ] [--async]" + "\n" \ + + "\t" + "build-cli query -d " + "\n" \ + + "\t" + "build-cli cancel -j -d [-w ] " + "\n" \ + + "\t" + "build-cli register -P -d -t [-w ] " + "\n" \ + + "\n" + "Options:" + "\n" + + optparse = OptionParser.new(nil, 32, ' '*8) do|opts| + # Set a banner, displayed at the top + # of the help screen. + + opts.banner = banner + + opts.on( '-N', '--project ', 'project name' ) do|project| + options[:project] = project + end + + options[:domain] = nil + opts.on( '-d', '--address ', 'build server address: 127.0.0.1:2224' ) do|domain| + options[:domain] = domain + end + + options[:os] = nil + opts.on( '-o', '--os ', 'target operating system: linux/windows/darwin' ) do|os| + options[:os] = os + end + + options[:async] = "NO" + opts.on( '--async', 'asynchronous job' ) do + options[:async] = "YES" + end + + opts.on( '-j', '--job ', 'job number' ) do|job| + options[:job] = job + end + + options[:passwd] = "" + opts.on( '-w', '--passwd ', 'password for managing project' ) do|passwd| + options[:passwd] = passwd + end + + opts.on( '-P', '--pkg ', 'package file path' ) do|package| + options[:package] = package.strip + end + + opts.on( '-t', '--ftp ', 'ftp server url: ftp://dibsftp:dibsftp@127.0.0.1' ) do|domain| + options[:fdomain] = domain + end + + opts.on( '-h', '--help', 'display manual' ) do + puts opts + exit + end + + opts.on( '-v', '--version', 'display version' ) do + puts "DIBS(Distributed Intelligent Build System) version 1.2.0" + exit + end + + end + + cmd = ARGV[0] + + if cmd.eql? "build" or cmd.eql? "resolve" or + cmd.eql? "query" or cmd.eql? "cancel" or + cmd.eql? "register" or + cmd =~ /(-v)|(--version)/ or + cmd =~ /(help)|(-h)|(--help)/ then + + if cmd.eql? "help" then + ARGV[0] = "-h" + end + + options[:cmd] = ARGV[0] + else + raise ArgumentError, "Usage: build-cli [OPTS] or build-cli -h" + end + + optparse.parse! + + option_error_check options + + return options +end + diff --git a/src/build_server/BuildComm.rb b/src/build_server/BuildComm.rb new file mode 100644 index 0000000..47a61e2 --- /dev/null +++ b/src/build_server/BuildComm.rb @@ -0,0 +1,504 @@ +require "socket" + +=begin + + BuildComm.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +$LOAD_PATH.unshift File.dirname(__FILE__)+"/src/common" +require "log" +require 'timeout' +require "fileTransfer" +require "net/ftp" + +class BuildCommServer + VERSION = "1.3.0" + + def initialize(port, log, ftp_url=nil) + @port = port + # checking port is available + if port_open? @port then + raise "Port \"#{@port}\" is already in use." + end + + @log = log + @ftp_url = ftp_url + @tcp_server = TCPServer.open( port ) + end + + + # wait for connection and handle request + def wait_for_connection(quit_loop) + while( not quit_loop ) + req = @tcp_server.accept + + begin + yield req + rescue + @log.error $! + @log.error "Caught a connection exception" + req.close + end + end + end + + + # terminate + def terminate + @tcp_server.close() + end + + + # send_begin + def self.send_begin( req ) + send( req, "=BEGIN,#{VERSION}") + end + + + def self.send_end( req ) + send( req, "=END") + end + + + def self.send_chk( req ) + send( req, "=CHK" ) + end + + + def self.send( req, line ) + begin + if not req.nil? then + req.puts line + end + rescue + raise "Connection is closed" + end + end + + + def send_file(req, src_file) + # 1. send "READY" + # 2. If "FTP,ip,username,passwd" is received, + # Upload the src file using server's ftp_url. + # if then ftp_url is nil, use the url on "FTP" message instead + # After uploading, send "UPLOADED,ftp_filepath" + # 3. If "SUCC" is received, remove the file on FTP server + + begin + if not File.exist? src_file then + puts "[E] \"#{src_file}\" file does not exist" + req.puts "ERROR" + return false + end + + req.puts "READY" + while l = req.gets() + tok = l.split(",").map { |x| x.strip } + cmd = tok[0].strip + puts "[I] Received \"#{cmd}\" message.." + if cmd == "FTP" then + if tok.count < 5 then + puts "[E] Received wrong REQ : #{l.strip}" + req.puts "ERROR" + return false + end + + # get ftp connection info + if @ftp_url.nil? then + ip = tok[1].strip + port = tok[2].strip + username = tok[3].strip + passwd = tok[4].strip + puts "[I] FTP info from client : [#{ip}, #{port}, #{username}, #{passwd}]" + else + url_contents = Utils.parse_ftpserver_url(@ftp_url) + ip = url_contents[0] + port = url_contents[1] + username = url_contents[2] + passwd = url_contents[3] + end + + # upload to ftp server + ftp_filepath = FileTransfer.putfile(ip, port, username, passwd, src_file) + req.puts "UPLOADED,#{ftp_filepath}" + puts "[I] Uploaded file to FTP server: [#{File.basename(src_file)}]" + elsif cmd == "SUCC" then + FileTransfer.cleandir(ip, port, username, passwd, ftp_filepath) + puts "[I] Clean temporary dir on FTP server: #{ftp_filepath}" + break + end + end + rescue => e + puts "[E] Connection closed" + raise e + end + + return true + end + + + def receive_file(req, dst_file) + # 1. send "READY" + # 2. If "UPLOADED,ip,port,file_path,username,passwd" is received, + # Download the file using my ftp_url. + # If ftp_url is nil, use the url on "UPLOADED" messge instead + # After downloading it, send "SUCC" + begin + req.puts "READY" + while l = req.gets() + tok = l.split(",").map { |x| x.strip } + cmd = tok[0].strip + puts "[I] Received \"#{cmd}\" message.." + if cmd == "UPLOADED" then + if tok.count < 6 then + puts "[E] Received wrong REQ : #{l.strip}" + req.puts "ERROR" + return false + end + filepath = tok[3].strip + dirname = File.dirname(filepath) + filename = File.basename(filepath) + + # get ftp connection info + if @ftp_url.nil? then + ip = tok[1].strip + port = tok[2].strip + username = tok[4].strip + passwd = tok[5].strip + puts "[I] FTP info from client: [#{ip}, #{port}, #{username}, #{passwd}]" + else + url_contents = Utils.parse_ftpserver_url(@ftp_url) + ip = url_contents[0] + port = url_contents[1] + username = url_contents[2] + passwd = url_contents[3] + end + + # download from ftp server + FileTransfer.getfile(ip, port, username, passwd, filepath, dst_file) + puts "[I] Received file from FTP server sucessfully.." + req.puts "SUCC" + break + end + end + rescue => e + puts "[E] Connectio is closed" + req.puts "ERROR" + raise e + end + + return true + end + + + def self.disconnect( req ) + begin + req.close + rescue + end + end + + private + def port_open?( port ) + Timeout::timeout(1) do + begin + TCPSocket.new("127.0.0.1",port).close + true + rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH + false + end + end + rescue Timeout::Error + false + end +end + + +class BuildCommClient + VERSION = "1.3.0" + + private_class_method :new + + def initialize(socket) + @socket = socket + end + + + # create + # if sec 0 or nil then not set timeout. it's timeout spec + def self.create(ip, port, sec = 5) + # open socket + socket = nil + begin + timeout(sec) do + socket = TCPSocket.open( ip, port ) + end + rescue Timeout::Error + return nil + rescue + # unknown exception + return nil + end + + # refused + if socket.nil? then + return nil + end + + return new(socket) + end + + + def send( msg ) + if @socket.nil? then return false end + + @socket.puts( msg ) + return true + end + + + def print_stream + + begin + l = @socket.gets() + + if l.nil? then + puts "Connection refused" + return false + end + + # check protocol + if not protocol_matched? l.strip then + puts "Comm. Protocol version is mismatched! #{VERSION}" + return false + end + + + # get contents + while line = @socket.gets() + if line.strip == "=END" then break end + if line.strip == "=CHK" then next end + # print + puts line.strip + end + rescue + puts "Connection closed" + return false + end + + return true + end + + + # handle + def read_lines + + begin + # get first line + l = nil + timeout(5) do + l = @socket.gets() + end + + if l.nil? then + return false + end + + # check protocol + if not protocol_matched? l.strip then + return false + end + + # get contents + while line = @socket.gets() + if line.strip == "=END" then break end + if line.strip == "=CHK" then next end + + # print + yield line.strip + end + rescue Timeout::Error + puts "WARN: Connection timed out" + return false + rescue => e + puts e.message + return false + end + + return true + end + + + # return result + def receive_data + result = [] + + begin + l = @socket.gets() + + if l.nil? then + puts "Connection refused" + return nil + end + + # check protocol + if not protocol_matched? l.strip then + puts "Comm. Protocol version is mismatched! #{VERSION}" + return nil + end + + + # get contents + while line = @socket.gets() + if line.strip == "=END" then break end + if line.strip == "=CHK" then next end + # print + result.push line.strip + end + rescue + puts "Connection closed" + return nil + end + + return result + end + + + def send_file(ip, port, username, passwd, src_file) + begin + l = @socket.gets() + if l.nil? then + puts "[E] Connection refused" + return false + end + + # check protocol + if not protocol_matched? l.strip then + puts "[E] Comm. Protocol version is mismatched! #{VERSION}" + return false + end + + # 1. If "READY" is received, upload src file to FTP server + # After uploading it, send "UPLOADED,ip,file_path,username,passwd" + # 2. If "SUCC" is received, remove the file on FTP server + while line = @socket.gets() + puts "[I] Recevied \"#{line.strip}\" message.." + if line.strip == "READY" then + ftp_filepath = FileTransfer.putfile(ip, port, username, passwd, src_file) + send "UPLOADED,#{ip},#{port},#{ftp_filepath},#{username},#{passwd}" + puts "[I] Uploaded file to FTP server : #{File.basename(src_file)}" + elsif line.strip == "SUCC" then + FileTransfer.cleandir(ip, port, username, passwd, ftp_filepath) + puts "[I] Clean FTP temporary dir : #{ftp_filepath}" + elsif line.strip == "ERROR" then + puts "[E] FTP failed to put file" + return false + elsif line.strip == "=END" then + break + end + end + rescue => e + puts "[E] Connection closed" + raise e + end + + return true + end + + + # return file + def receive_file(ip, port, username, passwd, dst_file) + begin + l = @socket.gets() + + if l.nil? then + puts "[E] Connection refused" + return false + end + + # check protocol + if not protocol_matched? l.strip then + puts "[E] Comm. Protocol version is mismatched! #{VERSION}" + return false + end + + # 1. If "READY" is received, send "FTP,ip,port,username,passwd" + # 2. if "UPLOADED,ftp_file_path" is received, + # Download the file + # Send "SUCC" + # 3. If "SUCC" is received, remove the file on FTP server + while line = @socket.gets() + cmd = line.split(",")[0].strip + puts "[I] Received \"#{cmd}\" message" + if cmd == "READY" then + send "FTP,#{ip},#{port},#{username},#{passwd}" + puts "[I] Send FTP info to server : #{ip}, #{port}, #{username}, #{passwd}" + elsif cmd == "UPLOADED" then + tok = line.split(",") + if tok.length < 2 then + puts "[ERROR] Received wrong REQ : #{line.strip}" + return false + end + ftp_filepath = tok[1].strip + FileTransfer.getfile(ip, port, username, passwd, ftp_filepath, dst_file) + send "SUCC" + puts "[I] Received file from FTP server sucessfully.." + elsif cmd == "ERROR" then + puts "[E] Failed to receive file from server" + return false + elsif cmd == "=END" then + break + end + end + rescue + puts "[E] Connection closed" + return false + end + + return true + end + + + def terminate + @socket.close + end + + + private + + + # check protocol + def protocol_matched?(l) + + version = ( l.split(",")[1].nil? ? "1.0.0" : l.split(",")[1] ) + if not l.start_with? "=BEGIN" or + version.nil? or version != VERSION then + return false + else + return true + end + end +end diff --git a/src/build_server/BuildJob.rb b/src/build_server/BuildJob.rb new file mode 100644 index 0000000..09cf8f6 --- /dev/null +++ b/src/build_server/BuildJob.rb @@ -0,0 +1,813 @@ +=begin + + BuildJob.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require "fileutils" +$LOAD_PATH.unshift File.dirname(__FILE__) +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common" +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/builder" +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/pkg_server" +require "client.rb" +require "PackageManifest.rb" +require "Version.rb" +require "Builder.rb" +require "RemoteBuilder.rb" +require "BuildServer.rb" +require "JobLog.rb" +require "mail.rb" + +class BuildJob + + attr_accessor :id, :server, :pre_jobs, :os, :type + attr_accessor :status, :pkginfo, :log, :source_path + attr_accessor :pkgsvr_client, :thread + attr_accessor :rev_fail_projects, :rev_success_jobs + attr_accessor :pending_ancestor, :build_dep_prjs + attr_accessor :is_fullbuild_job + + # initialize + def initialize (id, project, os, server) + @id = id + @project = project + @os = os + @server = server + @type = "BUILD" + + @status = "JUST_CREATED" + @resolve = false + @host_os = Utils::HOST_OS + @pkgserver_url = @server.pkgserver_url + @job_root = "#{@server.path}/jobs/#{@id}" + @source_path = @job_root+"/temp" + @job_working_dir=@job_root+"/works" + @buildroot_dir = "#{@job_root}/buildroot" + @pre_jobs = [] #pre-requisite jobs + + # this item will be initialized on pre-verify + @pkginfo = nil + @pkgsvr_client = nil + @thread = nil + @log = nil + @parent = nil # for job hierachy + + #for cancel operation + @pending_ancestor = nil # for cancel pending job + @remote_id = nil # for cancel remote_working job + @build_dep_prjs = [] # for cacnel pending job + + # for resolving build-break + @rev_fail_projects = [] + @rev_success_jobs = [] + + # remote build + @remote_server = nil + + # job type + @is_rev_build_check_job = false + @is_remote_job = false + @is_internal_job = false + @is_fullbuild_job = false + + @external_pkgs = [] + end + + + def get_project() + return @project + end + + + # set parent + def set_parent_job( parent ) + # if parent exists, share build-root + @parent = parent + @buildroot_dir = "#{@server.path}/jobs/#{@parent.id}/buildroot" + end + + + # set reverse build check job + def set_rev_build_check_job( parent ) + @is_rev_build_check_job = true + + # if parent exists, share build-root + if not parent.nil? then + set_parent_job( parent ) + end + end + + + def set_remote_job(server) + @is_remote_job = true + @remote_server=server + end + + + def set_internal_job() + @is_internal_job = true + end + + + # set option for waiting for resolve + def set_resolve_flag() + @resolve = true + end + + + # set logger + def set_logger( logger ) + @log = logger + end + + + # add external packages to overwrite before build + def add_external_package( file_path ) + @external_pkgs.push file_path + end + + + # execute + def execute(sync=false) + @log.info( "Invoking a thread for building Job #{@id}", Log::LV_USER) + if @status == "ERROR" then return end + @thread = Thread.new { + # main + thread_main() + + # close + terminate() + } + + if sync then + @thread.join + end + + return true + end + + + #terminate + def terminate() + #do noting + end + + + #cancel + def cancel() + case @status + when "WORKING" then + @status = "CANCELED" + @thread.terminate + if not @log.nil? then + @log.info( "JOB is canceled by cancel operation !!", Log::LV_USER) + end + terminate + when "REMOTE_WORKING" then + @status = "CANCELED" + client = BuildCommClient.create( @server.ip, @server.port ) + if not client.nil? then + client.send "CANCEL,#{@remote_id}" + result1 = client.receive_data() + if result1.nil? then + client.terminate + exit(-1) + end + end + when "WAITING" , "INITIALIZING" , "JUST_CREATED" then + @status = "CANCELED" + if not @log.nil? then + @log.info( "JOB is canceled by cancel operation !!", Log::LV_USER) + end + when "PENDING" then + @server.cancel_lock.synchronize{ + @thread.terminate + @status = "CANCELED" + } + if @pending_ancestor.nil? then + #resolve pending job + pending_descendants = @server.jobmgr.jobs.select{|j| (not j.pending_ancestor.nil?) and "#{j.pending_ancestor.id}" == "#{@id}"} + pending_descendants.each do |pd| + pd.cancel + end + else + @pending_ancestor.rev_success_jobs.delete self if @pending_ancestor.rev_success_jobs.include? self + @pending_ancestor.rev_fail_projects.push @project if not @pending_ancestor.rev_fail_projects.include? @project + pending_descendants = @server.jobmgr.jobs.select{|j| (not j.pending_ancestor.nil?) and "#{j.pending_ancestor.id}" == "#{@pending_ancestor.id}"} + pending_descendants.select{|j| j.build_dep_prjs.include? @project}.each do |d| + @pending_ancestor.rev_success_jobs.delete d if @pending_ancestor.rev_success_jobs.include? d + @pending_ancestor.rev_fail_projects.push d.get_project if not @pending_ancestor.rev_fail_projects.include? d.get_project + d.thread.terminate + d.status = "WAITING" + end + end + if not @log.nil? then + @log.info( "JOB is canceled by cancel operation !!", Log::LV_USER) + end + terminate + else # ERROR | FINISHED | RESOLVED + #do noting + end + end + + + # check building is possible + def can_be_built_on?(host_os) + for pkg in @pkginfo.packages + if pkg.os == @os and pkg.build_host_os.include? host_os then + return true + end + end + + return false + end + + + def has_build_dependency?(other_job) + + if has_same_packages?(other_job) or + does_depend_on?(other_job) or + does_depended_by?(other_job) then + + return true + else + return false + end + end + + + def has_same_packages?( wjob ) + # if job type is different, always true + if @type != wjob.type then return true end + + # same package must have same os + if not @os.eql? wjob.os then + return false + end + + # check package name + for pkg in @pkginfo.packages + for wpkg in wjob.pkginfo.packages + if pkg.package_name == wpkg.package_name then + #puts "Removed from candiated... A == B" + return true + end + end + end + + return false + end + + + def does_depend_on?( wjob ) + # if job type is different, always true + if @type != wjob.type then return true end + + # compare build dependency + for dep in @pkginfo.get_build_dependencies(@os) + for wpkg in wjob.pkginfo.packages + # dep packages of my job must have same name and target os + # with packages in working job + if dep.package_name == wpkg.package_name and + dep.target_os_list.include? wjob.os then + #puts "Removed from candiated... A -> B" + return true + end + end + end + + # if both are full build jobs, install dependency must be checked + if @is_fullbuild_job and wjob.is_fullbuild_job and + @os == wjob.os then + + for dep in @pkginfo.get_install_dependencies(@os) + for wpkg in wjob.pkginfo.packages + if dep.package_name == wpkg.package_name then + return true + end + end + end + end + + return false + end + + + def does_depended_by?( wjob ) + # if job type is different, always true + if @type != wjob.type then return true end + + for pkg in @pkginfo.packages + for dep in wjob.pkginfo.get_build_dependencies(wjob.os) + # dep package of working job must have same name and target os + # with packages in my job + if dep.package_name == pkg.package_name and + dep.target_os_list.include? @os then + #puts "Checking... A <- B" + return true + end + end + end + return false + end + + + def is_connected? + return @log.is_connected? + end + + + # return the job is asyncronous job + def is_asynchronous_job? + if not @log.has_second_out? then + return true + else + return false + end + end + + # + # PROTECTED METHODS + # + protected + + + # main module + def thread_main + @log.info( "New Job #{@id} is started", Log::LV_USER) + + # checking build dependency + if not @is_rev_build_check_job and not @is_remote_job and + not @is_fullbuild_job and + not check_build_dependency() then + @status = "ERROR" + return false + end + + # clean build + if not build() then + @status = "ERROR" + return + end + + # upload + if not @is_rev_build_check_job and not @is_internal_job and + not upload() then + @status = "ERROR" + return + end + + # copy result files to outgoing path + if @is_internal_job then + copy_result_files(@server.outgoing_path) + elsif @is_fullbuild_job then + copy_result_files(@parent.source_path) + end + + # INFO. don't change this string + @log.info( "Job is completed!", Log::LV_USER) + @status = "FINISHED" + end + + + # check if local package version is greater than server + def check_package_version() + @log.info( "Checking package version ...", Log::LV_USER) + + # package update + @pkgsvr_client.update + + for pkg in @pkginfo.packages + ver_local = pkg.version + #ver_svr = @pkgsvr_client.get_package_version( pkg.package_name, @os ) + ver_svr = @pkgsvr_client.get_attr_from_pkg( pkg.package_name, @os, "version") + if not ver_svr.nil? and Version.new(ver_local) <= Version.new(ver_svr) then + @log.error( "Version must be increased : #{ver_local} <= #{ver_svr}", Log::LV_USER) + return false + end + end + + return true + end + + + # build dependency version + def check_build_dependency() + @log.info( "Checking build dependency ...", Log::LV_USER) + @pkgsvr_client.update + for dep in @pkginfo.get_build_dependencies( @os ) + #ver_svr = @pkgsvr_client.get_package_version( dep.package_name, @os ) + if dep.target_os_list.count != 0 then + dep_target_os = dep.target_os_list[0] + else + dep_target_os = @os + end + ver_svr = @pkgsvr_client.get_attr_from_pkg( dep.package_name, dep_target_os, "version") + + if ver_svr.nil? + @log.error( "The package \"#{dep.package_name}\" for build-dependency is not found", Log::LV_USER) + return false + end + + if not dep.match? ver_svr + @log.error( "Version for build-dependency in not matched : server version => #{ver_svr}", Log::LV_USER) + return false + end + end + + return true + end + + + # build clean + def build() + + # check there are pending pacakges which wait for me + # it will return nil if not exist + # this process must be skip if it is sub-job + if not @is_rev_build_check_job and not @is_internal_job then + @server.cancel_lock.synchronize{ + @pending_ancestor = get_pending_job() + } + end + + if not @pending_ancestor.nil? then + # resolve other pending job + resolve() + elsif @resolve then + # wait for being resolved by other jobs + # this condition must be placed after checking pending status + wait_resolve() + else + # build + build_normal() + end + end + + + # return pending job that wait for me + def get_pending_job() + @server.jobmgr.get_pending_jobs.each do |job| + if job.rev_fail_projects.include? @project then + return job + end + end + + return nil + end + + + def build_normal() + @log.info( "Started to build this job...", Log::LV_USER) + + # create builder + if @is_remote_job then + builder = RemoteBuilder.new("JB#{@id}", @remote_server.ip, @remote_server.port, @server.ftp_addr, @server.ftp_port, @server.ftp_username, @server.ftp_passwd) + @log.info( "JobBuilder##{@id} is created", Log::LV_USER) + @log.info( " - Remote Server : #{@remote_server.ip}:#{@remote_server.port}" ) + @log.info( " - FTP Server : #{@server.ftp_addr}" ) + else + builder = Builder.create( "JB#{@id}", @pkgserver_url, @log.path, + "#{@buildroot_dir}/#{@os}", @server.build_cache_dir ) + if builder.nil? + @log.error( "Creating job builder failed", Log::LV_USER) + return false + end + @log.info( "JobBuilder##{@id} is created", Log::LV_USER) + @log.info( " - Package Server : #{@pkgserver_url}" ) + @log.info( " - Build Cache Path : #{@server.build_cache_dir}" ) + end + @log.info( " - Log Path : #{@log.path}" ) + + # set log output + builder.log.close + builder.log = @log + + # if sub job(reverse-build), install parent-pkgs and not clean + use_clean = true + local_pkgs = [] + local_pkgs += @external_pkgs + if @is_rev_build_check_job and not @parent.nil? then + use_clean = false + # get local packages to install + src_path = @parent.source_path + ver = @parent.pkginfo.get_version() + for pkg in @parent.pkginfo.get_target_packages(@os) + local_pkgs.push "#{src_path}/#{pkg.package_name}_#{ver}_#{@os}.zip" + end + end + if @is_fullbuild_job and not @parent.nil? then + use_clean = false + # get local packages to install + src_path = @parent.source_path + deps = @pkginfo.get_build_dependencies(@os) + for dep in deps + binpkgs = Dir.glob("#{src_path}/#{dep.package_name}_*_#{@os}.zip") + if binpkgs.count > 0 then + local_pkgs.push binpkgs[0] + end + end + end + + # build + if @is_remote_job then + result = builder.build(@project.name, @project.passwd, @source_path, @os, + use_clean, @is_rev_build_check_job, @git_commit, local_pkgs) + else + result = builder.build(@source_path, @os, use_clean, local_pkgs, false ) + end + if not result then + @log.error( "Building job failed", Log::LV_USER) + return false + end + + # check reverse dependecy if not sub job + if not @is_rev_build_check_job and not @is_internal_job and + not check_reverse_build( [], true ).empty? then + @log.error( "Reverse-build-check failed!" ) + return false + end + + return true + end + + + # build projects that dependes on me + # can ignore some projects + def check_reverse_build( ignored_projects, exit_on_error) + @log.info( "Checking reverse build dependency ...", Log::LV_USER) + + failed_projects = [] + + # get reverse-dependent projects + rev_pkgs = [] + for pkg in @pkginfo.get_target_packages(@os) + rev_pkgs += @pkgsvr_client.get_reverse_build_dependent_packages(pkg.package_name, @os) + end + rev_pkgs.uniq! + rev_projects = @server.prjmgr.get_projects_from_pkgs(rev_pkgs) + rev_projects -= ignored_projects + + # build rev-dep project as sub-job + for prj in rev_projects + if prj.type != "GIT" then next end + for os in prj.os_list + # check version + version = nil + for pkg in rev_pkgs + if os != pkg.os then next end + if prj.include_package?(pkg.package_name, pkg.version, os) then + version = pkg.version + break + end + end + if version.nil? then next end + + # create sub jobs for checking + new_job = prj.create_new_job_from_version(os, version) + new_job.set_rev_build_check_job(self) + @log.info( " * Checking reverse-build ... #{prj.name}(#{new_job.id})", Log::LV_USER) + result = new_job.init() + rserver = @server.get_available_server( new_job ) + if rserver != nil and rserver != @server then + new_job.set_remote_job( rserver ) + end + if result then + new_job.execute(true) + if new_job.status == "ERROR" then result = false end + end + + # check result + if not result then + failed_projects.push prj + if exit_on_error then + return failed_projects + end + end + end + end + + return failed_projects + end + + + # wait to be resolved by other jobs + def wait_resolve() + @log.info( "Started to build this job and wait for being resolved...", Log::LV_USER) + + # create builder + if @is_remote_job then + builder = RemoteBuilder.new("JB#{@id}", @remote_server.ip, @remote_server.port, @server.ftp_addr, @server.ftp_port, @server.ftp_username, @server.ftp_passwd) + @log.info( "JobBuilder##{@id} is created", Log::LV_USER) + @log.info( " - Remote Server : #{@remote_server.ip}:#{@remote_server.port}" ) + @log.info( " - FTP Server : #{@server.ftp_addr}" ) + else + builder = Builder.create( "JB#{@id}", @pkgserver_url, @log.path, + "#{@buildroot_dir}/#{@os}", @server.build_cache_dir ) + if builder.nil? + @log.error( "Creating job builder failed", Log::LV_USER) + return false + end + @log.info( "JobBuilder##{@id} is created", Log::LV_USER) + @log.info( " - Package Server : #{@pkgserver_url}" ) + @log.info( " - Build Cache Path : #{@server.build_cache_dir}" ) + end + @log.info( " - Log Path : #{@log.path}" ) + + # set log output + builder.log.close + builder.log = @log + + # build + if @is_remote_job then + result = builder.build(@project.name, @project.passwd, @source_path, @os, + true, false, @git_commit, []) + else + result = builder.build(@source_path, @os, true, [], false ) + end + if not result then + @log.error( "Building job failed", Log::LV_USER) + return false + end + + # check reverse dependecy + @rev_fail_projects = check_reverse_build([], false) + if @rev_fail_projects.empty? then + # if no problem?, it OK + return true + end + + # pending + @status = "PENDING" + @log.info( "Entered the PENDING state ...", Log::LV_USER) + while @status == "PENDING" + sleep 1 + end + + return true + end + + + # resolve other pending job + def resolve() + deps = @pkginfo.get_build_dependencies(@os) + pkgs = deps.map{|x|@pkgsvr_client.get_pkg_from_list(x.package_name, @os)} + prjs = @server.prjmgr.get_projects_from_pkgs(pkgs) + @build_dep_prjs = prjs + old = "" + while not (@pending_ancestor.rev_fail_projects & prjs).empty? + @status = "PENDING" + new = (@pending_ancestor.rev_fail_projects & prjs).map{|x|x.name}.join("\" and \"") + if new != old then + @log.info("waiting \"#{new}\" projects", Log::LV_USER) + old = new + end + sleep 1 + end + @status = "WORKING" + + @log.info( "Started to build this job and resolve other pending job...", Log::LV_USER) + + # create builder + if @is_remote_job then + builder = RemoteBuilder.new("JB#{@id}", @remote_server.ip, @remote_server.port, @server.ftp_addr, @server.ftp_port, @server.ftp_username, @server.ftp_passwd) + @log.info( "JobBuilder##{@id} is created", Log::LV_USER) + @log.info( " - Remote Server : #{@remote_server.ip}:#{@remote_server.port}" ) + @log.info( " - FTP Server : #{@server.ftp_addr}" ) + else + builder = Builder.create( "JB#{@id}", @pkgserver_url, @log.path, + "#{@buildroot_dir}/#{@os}", @server.build_cache_dir ) + if builder.nil? + @log.error( "Creating job builder failed", Log::LV_USER) + return false + end + @log.info( "JobBuilder##{@id} is created", Log::LV_USER) + @log.info( " - Package Server : #{@pkgserver_url}" ) + @log.info( " - Build Cache Path : #{@server.build_cache_dir}" ) + end + @log.info( " - Log Path : #{@log.path}" ) + + # set log output + builder.log.close + builder.log = @log + + # get local packages to overwite + # they must be composed of packages of pending jobs and its success list + local_pkgs=[] + local_pkgs += @external_pkgs + src_path = @pending_ancestor.source_path + ver = @pending_ancestor.pkginfo.get_version() + for pkg in @pending_ancestor.pkginfo.get_target_packages(@os) + local_pkgs.push "#{src_path}/#{pkg.package_name}_#{ver}_#{@os}.zip" + end + for job in @pending_ancestor.rev_success_jobs + src_path = job.source_path + ver = job.pkginfo.get_version() + for pkg in job.pkginfo.get_target_packages(@os) + local_pkgs.push "#{src_path}/#{pkg.package_name}_#{ver}_#{@os}.zip" + end + end + + # build + if @is_remote_job then + result = builder.build(@project.name, @project.passwd, @source_path, @os, true, false, @git_commit, local_pkgs) + else + result = builder.build(@source_path, @os, true, local_pkgs, false ) + end + if not result then + @log.error( "Building job failed", Log::LV_USER) + return false + end + + # get ignored projects will not be built in reverse build check + # the projects are failed projects of pending jobs + # and they must be built by other jobs + ignored_projects = @pending_ancestor.rev_fail_projects + + # check reverse dependecy + @pending_ancestor.rev_fail_projects = (@pending_ancestor.rev_fail_projects + check_reverse_build(ignored_projects, false)).uniq + + # update the status of pending job + @status = "PENDING" + @pending_ancestor.rev_fail_projects.delete @project + @pending_ancestor.rev_success_jobs.push self + if @pending_ancestor.rev_fail_projects.empty? then + @pending_ancestor.status = "RESOLVED" + @pending_ancestor.rev_success_jobs.each do |job| + job.status = "RESOLVED" + end + else + @log.info( "Entered the PENDING state ...", Log::LV_USER) + while @status == "PENDING" + sleep 1 + end + end + + return true + end + + + def upload() + @log.info( "Uploading ...", Log::LV_USER) + + # get package path list + binpkg_path_list = Dir.glob("#{@source_path}/*_*_#{@os}.zip") + srcpkg_path_list = Dir.glob("#{@source_path}/*.tar.gz") + + # upload + u_client = Client.new( @server.pkgserver_url, nil, @log ) + u_client.update + snapshot = u_client.upload( @server.pkgserver_addr, @server.pkgserver_port, @server.ftp_addr, @server.ftp_port, @server.ftp_username, @server.ftp_passwd, binpkg_path_list) + + if snapshot.nil? then + @log.info( "Upload failed...", Log::LV_USER) + + return false + end + + # update local + @log.info( "Upload succeeded. Sync local pkg-server again...", Log::LV_USER) + @pkgsvr_client.update + @log.info("Snapshot: #{snapshot}", Log::LV_USER) + + return true + end + + + def copy_result_files(dst_path) + @log.info( "Copying result files to #{dst_path}", Log::LV_USER) + + # get package path list + binpkg_path_list = Dir.glob("#{@source_path}/*_*_#{@os}.zip") + + for file in binpkg_path_list + @log.info( " * #{file}", Log::LV_USER) + FileUtils.cp(file,"#{dst_path}/") + end + + return true + end + +end diff --git a/src/build_server/BuildServer.rb b/src/build_server/BuildServer.rb new file mode 100644 index 0000000..96a2d92 --- /dev/null +++ b/src/build_server/BuildServer.rb @@ -0,0 +1,300 @@ +=begin + + BuildServer.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require 'fileutils' +$LOAD_PATH.unshift File.dirname(__FILE__) +require "SocketJobRequestListener.rb" +require "RemoteBuildJob.rb" +require "LocalBuildJob.rb" +require "JobManager.rb" +require "JobClean.rb" +require "RemoteBuildServer.rb" +require "ProjectManager.rb" + +class BuildServer + attr_accessor :id, :path, :pkgserver_url, :pkgserver_addr, :pkgserver_port, :pkgserver_id, :port, :status, :friend_servers, :host_os, :log + attr_accessor :git_server_url, :git_bin_path + attr_accessor :job_log_url + attr_accessor :allowed_git_branch + attr_accessor :send_mail + attr_accessor :jobmgr + attr_accessor :test_time + attr_accessor :password + attr_accessor :finish + attr_accessor :build_cache_dir + attr_accessor :keep_time + attr_accessor :ftp_addr + attr_accessor :ftp_port + attr_accessor :ftp_username + attr_accessor :ftp_passwd + attr_accessor :cleaner + attr_accessor :prjmgr + attr_accessor :incoming_path, :outgoing_path + attr_accessor :cancel_lock + CONFIG_ROOT = "#{Utils::HOME}/.build_tools/build_server" + HOST_OS = Utils::HOST_OS + + # initialize + def initialize (id, path, pkgsvr_url, pkgsvr_addr, pkgsvr_port, pkgsvr_id, ftpsvr_addr, ftpsvr_port, ftpsvr_username, ftpsvr_passwd) + @id = id + @path = path + @pkgserver_url = pkgsvr_url + @pkgserver_addr = pkgsvr_addr + @pkgserver_port = pkgsvr_port + @pkgserver_id = pkgsvr_id + @friend_servers = [] + @req_listener = [] + @finish = false + # port number + @port = 2222 + # status + @status = "RUNNING" + # host_os + @host_os = HOST_OS + # log + @log =nil + @git_server_url = "gerrithost" + @git_bin_path = "/usr/bin/git" + @job_log_url = "" + @allowed_git_branch = "" + @send_mail = "NO" + # local package server + @pkgsvr_cache_path = nil + # Job Manager + @jobmgr = JobManager.new(self) + @test_time=0 #test time in mili-seconds + @password="0000" + @keep_time=86400 + @ftp_addr = ftpsvr_addr + @ftp_port = ftpsvr_port + @ftp_username = ftpsvr_username + @ftp_passwd = ftpsvr_passwd + @cleaner=nil + @prjmgr = ProjectManager.new(self) + # + @incoming_path = "#{@path}/incoming" + @outgoing_path = "#{@path}/outgoing" + @cancel_lock = Mutex.new + end + + + # start server daemon + def start + # start + @log = Log.new( "#{BuildServer::CONFIG_ROOT}/#{@id}/log" ) + + # set build cache dir + @build_cache_dir="#{BuildServer::CONFIG_ROOT}/#{@id}/build_cache" + if not File.exist? @build_cache_dir then + FileUtils.mkdir_p @build_cache_dir + end + + # init incoming/outgoing path + if not File.exist? @incoming_path then FileUtils.mkdir_p @incoming_path end + if not File.exist? @outgoing_path then FileUtils.mkdir_p @outgoing_path end + + # init project mgr + @log.info "Setting Project Manager..." + @prjmgr.load() + + # set local package server for cache + @log.info "Setting local package server..." + pkgsvr_id = @id + pkgsvr_dist = @pkgserver_url.split("/")[-1] + + # set job request listener + @log.info "Setting listener..." + listener2 = SocketJobRequestListener.new(self) + listener2.start + @req_listener.push listener2 + + # set job cleaner + @log.info "Setting Job Cleaner..." + @cleaner = JobCleaner.new(self) + @cleaner.start + + # main loop + @log.info "Entering main loop..." + if @test_time > 0 then start_time = Time.now end + while( not @finish ) + + # update friend server status + for server in @friend_servers + # update state + server.update_state + end + + # handle jobs + @jobmgr.handle() + + # sleep + if @test_time > 0 then + curr_time = Time.now + if (curr_time - start_time).to_i > @test_time then + puts "Test time is elapsed!" + break + end + else + sleep 1 + end + end + + # TODO: something should be done for server down + + end + + + # stop sever daemon + def stop + @finish = true + end + + + # check the job can be built on this server + def can_build?(job) + # check max allowed jobs + if @jobmgr.max_working_jobs <= 0 then + return false + end + + # check me + if job.can_be_built_on? @host_os then + return true + end + + return false + end + + + # add new remote friend server + def add_remote_server( ip, port ) + + # if already exit, return false + for svr in @friend_servers + if svr.ip.eql? ip and svr.port == port then + return false + end + end + + # create new one, and add it into list + new_server = RemoteBuildServer.new( ip, port, self ) + @friend_servers.push new_server + + return true + end + + + # get remote server + def get_available_server ( job ) + candidates = [] + + # calculate empty rooms + # if fullbuild job, his parent should be excluded + local_empty_rooms = @jobmgr.get_number_of_empty_room + if job.is_fullbuild_job then + local_empty_rooms += 1 + end + + if local_empty_rooms > 0 and can_build?(job) then + candidates.push self + end + + # get availables server + # but, job must not be "REGISTER" job + if job.type != "REGISTER" then + for server in @friend_servers + if ( server.status == "RUNNING" and server.can_build?( job ) and + not server.has_waiting_jobs and + server.get_number_of_empty_room > 0 ) + candidates.push server + end + end + end + + best_server = candidates[0] + if best_server.nil? or candidates.count == 1 then return best_server end + + # get best + # it is better if working jobs count is less + max_empty_room = best_server.get_number_of_empty_room + for server in candidates + # check whether idle, use it + if not server.has_working_jobs then return server end + + # skip + if server == best_server then next end + + # compare remain rooms + empty_room = server.get_number_of_empty_room + if empty_room > max_empty_room then + max_empty_room = empty_root + best_server = server + end + end + + return best_server + end + + + # check there is some servers that can build the job + def check_job_availability(job) + + # check me + if can_build? job then return true end + + #if not found, check friends + for server in @friend_servers + if server.status == "RUNNING" and + job.can_be_built_on? server.host_os then + return true + end + end + + return false + end + + + # return available working slot + def get_number_of_empty_room + return @jobmgr.get_number_of_empty_room + end + + + # check there are working jobs + def has_working_jobs + return @jobmgr.has_working_jobs + end + + + # check there are waiting jobs + def has_waiting_jobs + return @jobmgr.has_waiting_jobs + end + +end + diff --git a/src/build_server/BuildServerController.rb b/src/build_server/BuildServerController.rb new file mode 100644 index 0000000..8470ed2 --- /dev/null +++ b/src/build_server/BuildServerController.rb @@ -0,0 +1,575 @@ +=begin + + BuildServerController.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +$LOAD_PATH.unshift File.dirname(__FILE__) +require "BuildServer.rb" +require "BuildComm.rb" + +class BuildServerController + @@instance_map = {} + + # create + def self.create_server (id, path, pkgsvr_url, pkgsvr_addr, pkgsvr_port, pkgsvr_id, ftpsvr_addr, ftpsvr_port, ftpsvr_username, ftpsvr_passwd) + + # check server config root + check_build_server_root + + # check id + if File.exist? "#{BuildServer::CONFIG_ROOT}/#{id}" + raise RuntimeError, "Creating server failed. The server id is already exist" + end + + # create new instance and return it + @@instance_map[id] = BuildServer.new( id, path, pkgsvr_url, pkgsvr_addr, pkgsvr_port, pkgsvr_id, ftpsvr_addr, ftpsvr_port, ftpsvr_username, ftpsvr_passwd) + + # set default + @@instance_map[id].git_server_url="gerrithost:" + if Utils::HOST_OS == "windows" then + @@instance_map[id].git_bin_path="/c/Program\\ Files/Git/bin/git.exe" + else + @@instance_map[id].git_bin_path="/usr/bin/git" + end + @@instance_map[id].allowed_git_branch=nil + @@instance_map[id].jobmgr.max_working_jobs= 2 + @@instance_map[id].job_log_url="" + @@instance_map[id].send_mail="NO" + + + # write config + write_server_config( @@instance_map[id] ) + + puts "Created new build server: \"#{id}\"" + return @@instance_map[id] + end + + + def self.remove_server (id) + + # check server config root + check_build_server_root + + # check id + if File.exist? "#{BuildServer::CONFIG_ROOT}/#{id}" + FileUtils.rm_rf "#{BuildServer::CONFIG_ROOT}/#{id}" + @@instance_map[id] = nil + puts "Removed the server \"#{id}\"" + else + puts "The server \"#{id}\" does not exist!" + end + end + + + # get + def self.get_server( id ) + + # check instance first + if not @@instance_map[id] == nil + return @@instance_map[id] + end + + # check server config + if not File.exist? "#{BuildServer::CONFIG_ROOT}/#{id}/server.cfg" + raise RuntimeError, "The server \"#{id}\" does not exist!" + end + + # get server config and return its object + @@instance_map[id] = read_server_config(id) + + return @@instance_map[id] + end + + + # start server + def self.start_server( id, port = 2222 ) + server = get_server(id) + + # write run port + server_dir = "#{BuildServer::CONFIG_ROOT}/#{server.id}" + f = File.open( "#{server_dir}/run", "w" ) + f.puts port + f.close + + # start + server.port = port + server.start + end + + + # stop server + def self.stop_server( id ) + + # server + server = get_server(id) + client = BuildCommClient.create( "127.0.0.1", server.port ) + if client.nil? then + puts "Server is not running!" + return false + end + + # send request + stop_ok = false + if client.send "STOP,#{server.password}" then + # recevie & print + mismatched = false + result = client.read_lines do |l| + puts l + if l.include? "Password mismatched!" then + mismatched = true + end + end + if result and not mismatched then + stop_ok = true + end + end + + # terminate + client.terminate + + if not stop_ok then + puts "Server stop failed!" + end + + return true + end + + + # add friend server + def self.add_friend_server( id, ip, port ) + server = get_server(id) + + # add + if server.add_remote_server( ip, port ) then + + # write config + server_dir = "#{BuildServer::CONFIG_ROOT}/#{server.id}" + f = File.open( "#{server_dir}/friends", "a" ) + f.puts "#{ip},#{port}" + f.close + + puts "Friend server is added successfully!" + + return true + else + puts "Friend server already exists in list!" + return false + end + end + + + # build git repository and upload + def self.build_git( id, repository, commit, os, url, resolve ) + + # server + server = get_server(id) + client = BuildCommClient.create( "127.0.0.1", server.port ) + if client.nil? then return false end + + # send request + client.send "BUILD,GIT,#{repository},#{commit},#{os}" + + # recevie & print + client.print_stream + + # terminate + client.terminate + + return true + end + + + # resolve git and build it and upload + def resolve_git( id, repository, commit, os, url ) + # server + server = get_server(id) + client = BuildCommClient.create( "127.0.0.1", server.port ) + if client.nil? then return false end + + # send request + client.send "RESOLVE,GIT,#{repository},#{commit},#{os}" + + # recevie & print + client.print_stream + + # terminate + client.terminate + + return true + end + + + # build local project and upload + def self.build_local( id, local_path, os, url, resolve ) + # server + server = get_server(id) + client = BuildCommClient.create( "127.0.0.1", server.port ) + if client.nil? then return false end + + # send request + client.send "BUILD,LOCAL,#{local_path},#{os}" + + # recevie & print + client.print_stream + + # terminate + client.terminate + + return true + end + + + # resolve local project and build it and upload + def resolve_local( path, os ) + # server + server = get_server(id) + client = BuildCommClient.create( "127.0.0.1", server.port ) + if client.nil? then return false end + + # send request + client.send "RESOLVE,LOCAL,#{local_path},#{os}" + + # recevie & print + client.print_stream + + # terminate + client.terminate + + return true + end + + + # add project + def self.add_project( id, project_name, git_repos, git_branch, remote_server_id, passwd, os_string ) + server = get_server(id) + + # get supported os + if os_string.nil? then + os_list = ["linux", "windows"] + else + os_list = os_string.strip.split(",") + end + + # add + if not git_repos.nil? and not git_branch.nil? then + result = server.prjmgr.add_git_project( project_name, git_repos, git_branch, passwd, os_list ) + elsif not remote_server_id.nil? then + result = server.prjmgr.add_remote_project( project_name, remote_server_id, passwd, os_list) + else + result = false + end + + if result then + puts "Adding project succeeded!" + return true + else + puts "Adding project failed!" + return false + end + end + + + # add binary project + def self.add_binary_project( id, project_name, pkg_name, passwd, os_string ) + server = get_server(id) + + # get supported os + if os_string.nil? then + os_list = ["linux", "windows"] + else + os_list = os_string.strip.split(",") + end + + # add + result = server.prjmgr.add_binary_project( project_name, pkg_name, passwd, os_list ) + + if result then + puts "Adding project succeeded!" + return true + else + puts "Adding project failed!" + return false + end + end + + + # full build + def self.build_all_projects( id ) + + # server + server = get_server(id) + client = BuildCommClient.create( "127.0.0.1", server.port ) + if client.nil? then + puts "Server is not running!" + return false + end + + # send request + fullbuild_ok = false + if client.send "FULLBUILD,#{server.password}" then + # recevie & print + mismatched = false + result = client.read_lines do |l| + puts l + if l.include? "Password mismatched!" then + mismatched = true + end + end + if result and not mismatched then + fullbuild_ok = true + end + end + + # terminate + client.terminate + + if not fullbuild_ok then + puts "Full build failed!" + end + + return true + end + + + def self.register_package(id, file_path) + # server + server = get_server(id) + client = BuildCommClient.create( "127.0.0.1", server.port ) + if client.nil? then + puts "Server is not running!" + return false + end + + if not File.exist? file_path then + puts "File not found!" + return false + end + + file_path = File.expand_path(file_path) + # send request + success = false + if client.send "REGISTER,BINARY-LOCAL,#{file_path},#{server.password}" then + # recevie & print + mismatched = false + result = client.read_lines do |l| + puts l + if l.include? "Password mismatched!" then + mismatched = true + end + end + if result and not mismatched then + success = true + end + end + + # terminate + client.terminate + + if not success then + puts "Registering package failed!" + end + + return true + end + + private + + # check build server config path + def self.check_build_server_root + if not File.exist? BuildServer::CONFIG_ROOT + puts "Server configuation is not found." + puts "Creating new server configuration... #{BuildServer::CONFIG_ROOT}" + FileUtils.mkdir_p "#{BuildServer::CONFIG_ROOT}" + end + end + + + # write server configuration + def self.write_server_config( server ) + # create config folder + server_dir = "#{BuildServer::CONFIG_ROOT}/#{server.id}" + if not File.exist? server_dir then + FileUtils.mkdir_p( server_dir ) + end + + # write configuration + File.open( "#{server_dir}/server.cfg", "w" ) do |f| + f.puts "ID=#{server.id}" + f.puts "PATH=#{server.path}" + f.puts "PSERVER_URL=#{server.pkgserver_url}" + f.puts "PSERVER_ADDR=#{server.pkgserver_addr}" + f.puts "PSERVER_PORT=#{server.pkgserver_port}" + f.puts "PSERVER_ID=#{server.pkgserver_id}" + f.puts "GIT_SERVER_URL=#{server.git_server_url}" + f.puts "GIT_BIN_PATH=#{server.git_bin_path}" + f.puts "ALLOWED_GIT_BRANCH=#{server.allowed_git_branch}" + f.puts "MAX_WORKING_JOBS=#{server.jobmgr.max_working_jobs}" + f.puts "JOB_LOG_URL=#{server.job_log_url}" + f.puts "SEND_MAIL=#{server.send_mail}" + f.puts "TEST_TIME=#{server.test_time}" if server.test_time > 0 + f.puts "PASSWORD=#{server.test_time}" if server.password != "0000" + f.puts "JOB_KEEP_TIME=#{server.keep_time}" + f.puts "FTP_ADDR=#{server.ftp_addr}" + f.puts "FTP_PORT=#{server.ftp_port}" + f.puts "FTP_USERNAME=#{server.ftp_username}" + f.puts "FTP_PASSWD=#{server.ftp_passwd}" + end + end + + + # read server configuration + def self.read_server_config( id ) + path="" + pkgsvr_url="" + pkgsvr_addr="" + pkgsvr_port="3333" + pkgsvr_id="" + git_server_url="gerrithost:" + git_bin_path="/usr/bin/git" + allowed_git_branch="" + max_working_jobs= 2 + job_log_url="" + send_mail="NO" + test_time=0 + password="0000" + keep_time=86400 + ftp_addr="" + ftp_port="21" + ftp_username="" + ftp_passwd="" + + # read configuration + server_dir = "#{BuildServer::CONFIG_ROOT}/#{id}" + File.open( "#{server_dir}/server.cfg", "r" ) do |f| + f.each_line do |l| + idx = l.index("=") + 1 + length = l.length - idx + + if l.start_with?("PATH=") + path = l[idx,length].strip + elsif l.start_with?("PSERVER_URL=") + pkgsvr_url = l[idx,length].strip + elsif l.start_with?("PSERVER_ADDR=") + pkgsvr_addr = l[idx,length].strip + elsif l.start_with?("PSERVER_PORT=") + pkgsvr_port = l[idx,length].strip + elsif l.start_with?("PSERVER_ID=") + pkgsvr_id = l[idx,length].strip + elsif l.start_with?("GIT_SERVER_URL=") + git_server_url = l[idx,length].strip + elsif l.start_with?("GIT_BIN_PATH=") + git_bin_path = l[idx,length].strip + elsif l.start_with?("ALLOWED_GIT_BRANCH=") + allowed_git_branch = l[idx,length].strip + elsif l.start_with?("MAX_WORKING_JOBS=") + max_working_jobs = l[idx,length].strip.to_i + elsif l.start_with?("JOB_LOG_URL=") + job_log_url = l[idx,length].strip + elsif l.start_with?("SEND_MAIL=") + send_mail = l[idx,length].strip + elsif l.start_with?("TEST_TIME=") + test_time = l[idx,length].strip.to_i + elsif l.start_with?("PASSWORD=") + password = l[idx,length].strip.to_i + elsif l.start_with?("JOB_KEEP_TIME=") + keep_time = l[idx,length].strip.to_i + elsif l.start_with?("FTP_ADDR=") + ftp_addr = l[idx,length].strip + elsif l.start_with?("FTP_PORT=") + ftp_port = l[idx,length].strip + elsif l.start_with?("FTP_USERNAME=") + ftp_username = l[idx,length].strip + elsif l.start_with?("FTP_PASSWD=") + ftp_passwd = l[idx,length].strip + else + next + end + end + end + + # create server object + obj = BuildServer.new( id, path, pkgsvr_url, pkgsvr_addr, pkgsvr_port, pkgsvr_id, ftp_addr, ftp_port, ftp_username, ftp_passwd ) + + # check running port + if File.exist? "#{server_dir}/run" then + f = File.open( "#{server_dir}/run", "r" ) + l = f.gets + obj.port = l.strip.to_i + f.close + end + + # check friend server + if File.exist? "#{server_dir}/friends" then + File.open( "#{server_dir}/friends", "r" ) do |f| + f.each_line do |l| + if l.split(",").count < 2 then next end + ip = l.split(",")[0].strip + port = l.split(",")[1].strip + obj.add_remote_server( ip, port.to_i ) + end + end + end + + # set git server url + obj.git_server_url = git_server_url + + # set git binary path + obj.git_bin_path = git_bin_path + + # set git binary path + obj.jobmgr.max_working_jobs = max_working_jobs + + # set job log url + obj.job_log_url = job_log_url + + # set send mail + obj.send_mail = send_mail + + # set allowed git branch name + obj.allowed_git_branch = allowed_git_branch + + # set test time + obj.test_time = test_time + + # set password + obj.password = password + + # set password + obj.keep_time = keep_time + + # set ftp infomation + obj.ftp_addr = ftp_addr + obj.ftp_port = ftp_port + obj.ftp_username = ftp_username + obj.ftp_passwd = ftp_passwd + + # save config + write_server_config( obj ) + + # create object & return it + return obj + end +end diff --git a/src/build_server/BuildServerOptionParser.rb b/src/build_server/BuildServerOptionParser.rb new file mode 100644 index 0000000..81fd918 --- /dev/null +++ b/src/build_server/BuildServerOptionParser.rb @@ -0,0 +1,200 @@ +=begin + + BuildServerOptionParser.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require 'optparse' + +def option_error_check( options ) + case options[:cmd] + + when "create" + if options[:name].nil? or options[:name].empty? or + options[:url].nil? or options[:url].empty? or + options[:domain].nil? or options[:domain].empty? or + options[:fdomain].nil? or options[:fdomain].empty? then + raise ArgumentError, "Usage: build-svr create -n -u -d -t " + end + + when "remove" + if options[:name].nil? or options[:name].empty? then + raise ArgumentError, "Usage: build-svr remove -n " + end + + when "start" + if options[:name].nil? or options[:name].empty? or + options[:port].nil? then + raise ArgumentError, "Usage: build-svr start -n -p " + end + + when "stop" + if options[:name].nil? or options[:name].empty? then + raise ArgumentError, "Usage: build-svr stop -n " + end + + when "add-svr" + if options[:name].nil? or options[:name].empty? or + options[:domain].nil? or options[:domain].empty? then + raise ArgumentError, "Usage: build-svr add-svr -n -d " + end + + when "add-prj" + if options[:name].nil? or options[:name].empty? or + options[:pid].nil? or options[:pid].empty? then + raise ArgumentError, "Usage: build-svr add-prj -n -N [-g ] [-b ] [-P ] [-w ] [-o ]" + end + + when "fullbuild" + if options[:name].nil? or options[:name].empty? then + raise ArgumentError, "Usage: build-svr fullbuild -n " + end + + when "register" + if options[:name].nil? or options[:name].empty? or + options[:package].nil? or options[:package].empty? then + raise ArgumentError, "Usage: build-svr register -n -P " + end + else + raise ArgumentError, "Input is incorrect : #{options[:cmd]}" + end +end + +def option_parse + options = {} + banner = "Build-server administer service command-line tool." + "\n" \ + + "\n" + "Usage: build-svr [OPTS] or build-svr -h" + "\n" \ + + "\n" + "Subcommands:" + "\n" \ + + "\t" + "create Create the build-server." + "\n" \ + + "\t" + "remove Remove the build-server." + "\n" \ + + "\t" + "start Start the build-server." + "\n" \ + + "\t" + "stop Stop the build-server." + "\n" \ + + "\t" + "add-svr Add build-server for support multi-OS or distribute build job." + "\n" \ + + "\t" + "add-prj Register information for project what you want build berfore building a project." + "\n" \ + + "\t" + "register Register the package to the build-server." + "\n" \ + + "\t" + "fullbuild Build all your projects and upload them to package server." + "\n" \ + + "\n" + "Subcommand usage:" + "\n" \ + + "\t" + "build-svr create -n -u -d -t " + "\n" \ + + "\t" + "build-svr remove -n " + "\n" \ + + "\t" + "build-svr start -n -p " + "\n" \ + + "\t" + "build-svr stop -n " + "\n" \ + + "\t" + "build-svr add-svr -n -d " + "\n" \ + + "\t" + "build-svr add-prj -n -N [-g ] [-b ] [-P ] [-w ] [-o ]" + "\n" \ + + "\t" + "build-svr register -n -P " + "\n" \ + + "\t" + "build-svr fullbuild -n " + "\n" \ + + "\n" + "Options:" + "\n" + + optparse = OptionParser.new(nil, 32, ' '*8) do|opts| + # Set a banner, displayed at the top + # of the help screen. + + opts.banner = banner + + opts.on( '-n', '--name ', 'build server name' ) do|name| + options[:name] = name + end + + opts.on( '-u', '--url ', 'package server url: http://127.0.0.1/dibs/unstable' ) do|url| + options[:url] = url + end + + opts.on( '-d', '--address ', 'server address: 127.0.0.1:2224' ) do|domain| + options[:domain] = domain + end + + options[:port] = 2222 + opts.on( '-p', '--port ', 'server port number: 2224' ) do|port| + options[:port] = port.strip.to_i + end + + opts.on( '-P', '--pkg ', 'package file path or name' ) do|package| + options[:package] = package.strip + end + + options[:os] = nil + opts.on( '-o', '--os ', 'ex) linux,windows' ) do|os| + options[:os] = os + end + + opts.on( '-N', '--pname ', 'project name' ) do|pid| + options[:pid] = pid + end + + opts.on( '-g', '--git ', 'git repository' ) do|git| + options[:git] = git + end + + opts.on( '-b', '--branch ', 'git branch' ) do|branch| + options[:branch] = branch + end + + #opts.on( '-r', '--remote ', 'remote server id' ) do|remote| + # options[:remote] = remote + #end + + options[:passwd] = "" + opts.on( '-w', '--passwd ', 'password for managing project' ) do|passwd| + options[:passwd] = passwd + end + + opts.on( '-t', '--ftp ', 'ftp server url: ftp://dibsftp:dibsftp@127.0.0.1:1024' ) do|domain| + options[:fdomain] = domain + end + + opts.on( '-h', '--help', 'display this information' ) do + puts opts + exit + end + + opts.on( '-v', '--version', 'display version' ) do + puts "DIBS(Distributed Intelligent Build System) version 1.2.0" + exit + end + + end + + cmd = ARGV[0] + if cmd.eql? "create" or cmd.eql? "remove" or cmd.eql? "start" or + cmd.eql? "stop" or cmd.eql? "add-svr" or cmd.eql? "fullbuild" or + cmd.eql? "add-prj" or cmd.eql? "register" or + cmd =~ /(-v)|(--version)/ or + cmd =~ /(help)|(-h)|(--help)/ then + + if cmd.eql? "help" then + ARGV[0] = "-h" + end + + options[:cmd] = ARGV[0] + else + raise ArgumentError, "Usage: build-svr [OPTS] or build-svr -h" + end + + optparse.parse! + + option_error_check options + + return options +end + diff --git a/src/build_server/CommonProject.rb b/src/build_server/CommonProject.rb new file mode 100644 index 0000000..5ff3af5 --- /dev/null +++ b/src/build_server/CommonProject.rb @@ -0,0 +1,62 @@ +=begin + + CommonProject.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require 'fileutils' +$LOAD_PATH.unshift File.dirname(__FILE__) +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common" + +class CommonProject + attr_accessor :name, :type, :passwd, :os_list + + # initialize + def initialize( name, type, server, os_list ) + @name = name + @type = type + @passwd = "" + @os_list = os_list + @server = server + end + + + #return passwd + def is_passwd_set?() + return @passwd.empty? ? false:true + end + + + def passwd_match?(word) + if not is_passwd_set? then return true end + + if word.nil? then return false end + if word.eql? @passwd then + return true + else + return false + end + end +end diff --git a/src/build_server/FullBuildJob.rb b/src/build_server/FullBuildJob.rb new file mode 100644 index 0000000..bc603b0 --- /dev/null +++ b/src/build_server/FullBuildJob.rb @@ -0,0 +1,253 @@ +=begin + + FullBuildJob.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require "fileutils" +$LOAD_PATH.unshift File.dirname(__FILE__) +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common" +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/builder" +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/pkg_server" +require "client.rb" +require "PackageManifest.rb" +require "Version.rb" +require "Builder.rb" +require "RemoteBuilder.rb" +require "BuildServer.rb" +require "JobLog.rb" +require "mail.rb" + +class FullBuildJob + + attr_accessor :id, :server, :pre_jobs, :os, :type + attr_accessor :status, :log, :source_path + attr_accessor :pkgsvr_client, :thread + attr_accessor :is_fullbuild_job + + # initialize + def initialize (server) + @server = server + @id = server.jobmgr.get_new_job_id() + @log = nil + @type = "FULLBUILD" + + @status = "JUST_CREATED" + @host_os = Utils::HOST_OS + @pkgserver_url = @server.pkgserver_url + @job_root = "#{@server.path}/jobs/#{@id}" + @source_path = @job_root+"/temp" + @job_working_dir=@job_root+"/works" + @buildroot_dir = "#{@job_root}/buildroot" + @pre_jobs = [] #pre-requisite jobs + + @is_fullbuild_job = false + end + + + # execute + def execute(sync=false) + @log.info( "Invoking a thread for FULL-BUILD Job #{@id}", Log::LV_USER) + if @status == "ERROR" then return end + @thread = Thread.new { + # main + thread_main() + + # close + terminate() + } + + if sync then + @thread.join + end + + return true + end + + + # + def init + # mkdir + if not File.exist? @job_root then + FileUtils.mkdir_p @job_root + end + + # create logger + if @log.nil? then + @log = JobLog.new(self, nil ) + end + + @log.info( "Initializing job...", Log::LV_USER) + + # create dummy source path + if not File.exist? @source_path then + FileUtils.mkdir_p @source_path + end + + # set up pkgsvr_client + @pkgsvr_client = Client.new(@pkgserver_url, @job_working_dir, @log) + @pkgsvr_client.update + + return true + end + + + #terminate + def terminate() + # report error + if @status == "ERROR" then + @log.error( "Job is stopped by ERROR" , Log::LV_USER) + @server.cleaner.clean_afterwards(@id) + else + # clean up + @server.cleaner.clean(@id) + end + + # close logger + @log.close + end + + + #cancel + def cancel() + #TODO + end + + + # check building is possible + def can_be_built_on?(host_os) + return true + end + + + def has_build_dependency?(other_job) + return true + end + + + def has_same_packages?( wjob ) + return self == wjob ? true : false + end + + + def does_depend_on?( wjob ) + return true + end + + + def does_depended_by?( wjob ) + return true + end + + + def is_connected? + return true + end + + + # return the job is asyncronous job + def is_asynchronous_job? + return false + end + + # set logger + def set_logger( logger ) + @log = logger + end + + + # + # PROTECTED METHODS + # + protected + + + # main module + def thread_main + @log.info( "New Job #{@id} is started", Log::LV_USER) + + # check passwd + + # create sub jobs + build_jobs = [] + for prj in @server.prjmgr.projects + if prj.type != "GIT" then next end + build_jobs += @server.prjmgr.create_new_jobs_for_all_os( prj.name ) + end + + # set full build job flag + for job in build_jobs + job.is_fullbuild_job = true + job.set_parent_job( self ) + end + + # add all jobs to jobmanager + job_status_map = {} # for tracking job status changes + for job in build_jobs + @server.jobmgr.add_internal_job( job ) + + @log.info( "Added new job \"#{job.id}\"(#{job.get_project().name}) for #{job.os}!", + Log::LV_USER) + + if not @server.job_log_url.empty? then + @log.info( " * Log URL : #{@server.job_log_url}/#{job.id}/log", Log::LV_USER) + end + + # set satus + job_status_map[job.id] = job.status + end + + # show job status changes + all_jobs_finished = false + error_exist = false + while not all_jobs_finished + all_jobs_finished = true + for job in build_jobs + + # check status chanaged, if then print + if job_status_map[ job.id ] != job.status then + @log.info("Job #{job.id}(#{job.get_project().name},#{job.os}) is #{job.status}", Log::LV_USER) + job_status_map[ job.id ] = job.status + end + if job.status != "ERROR" and job.status != "FINISHED" then + all_jobs_finished = false + end + if job.status == "ERROR" then error_exist = true end + end + sleep 1 + end + + # check error + if error_exist then + @status = "ERROR" + return + end + + # INFO. don't change this string + @log.info( "Job is completed!", Log::LV_USER) + @status = "FINISHED" + end + +end diff --git a/src/build_server/GitBuildJob.rb b/src/build_server/GitBuildJob.rb new file mode 100644 index 0000000..c8fa65a --- /dev/null +++ b/src/build_server/GitBuildJob.rb @@ -0,0 +1,218 @@ +=begin + + GitBuildJob.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require "fileutils" +require "thread" +$LOAD_PATH.unshift File.dirname(__FILE__) +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common" +require "BuildJob.rb" +require "utils.rb" + +# mutax for git operation +$git_mutex = Mutex.new + + +class GitBuildJob < BuildJob + + # initialize + def initialize( project, os, server ) + super(server.jobmgr.get_new_job_id(), project, os, server) + @git_repos = project.repository + @git_branch = project.branch + @git_commit = nil + end + + + def terminate() + # report error + if @status == "ERROR" then + @log.error( "Job is stopped by ERROR" , Log::LV_USER) + @server.cleaner.clean_afterwards(@id) + elsif @status == "CANCELED" then + @log.error( "Job is CANCELED" , Log::LV_USER) + @server.cleaner.clean_afterwards(@id) + else + # if succeeded, register source info and copy pkginfo.manifest + @project.add_source_info( @pkginfo.get_version(), @git_commit) + @project.copy_package_info( @pkginfo.get_version(), + "#{@source_path}/package/pkginfo.manifest") + + # clean up + @server.cleaner.clean(@id) + end + + # clean up builder directory if exist? + if Builder.exist? "JB#{@id}" then + Builder.remove("JB#{@id}") + end + + # send mail + if ( @server.send_mail.eql? "YES" ) and ( not @pkginfo.nil? ) and ( not @pkginfo.packages.nil? ) then + mail_list = [] + contents = [] + done_pkg_list = [] + contents.push " " + contents.push " Git information : #{@git_commit} " + contents.push " " + contents.push "%-30s| %10s | %10s" % ["package name", "version", "os"] + contents.push "---------------------------------------------------------------" + for pkg in @pkginfo.packages + if not pkg.os.eql? @os then next end + mail_list = mail_list | Mail.parse_email( pkg.maintainer ) + contents.push("%-30s| %10s | %10s" % [ pkg.package_name, pkg.version, pkg.os] ) + end + + if @status == "ERROR" then + subject = "[DIBS] Build fail" + contents.push " " + contents.push "check log file" + contents.push "* Log : #{@server.job_log_url}/#{@id}/log" + elsif @status == "CANCELED" then + subject = "[DIBS] Build canceled" + else + subject = "[DIBS] Build success" + end + Mail.send_mail(mail_list, subject, contents.join("\n")) + end + + # close logger + @log.close + end + + + # verify + def init + # mkdir + if not File.exist? @job_root then + FileUtils.mkdir_p @job_root + end + + # create logger + if @log.nil? then + @log = JobLog.new(self, nil ) + end + + @log.info( "Initializing job...", Log::LV_USER) + + $git_mutex.synchronize { + # git clone + if not git_cmd("clone #{@git_repos} temp", @job_root) then + @log.error( "Failed on \"git clone #{@git_repos}\"", Log::LV_USER) + @status = "ERROR" + return false + end + + if @git_commit.nil? then + # git reset + if not git_cmd("reset --hard origin/#{@git_branch}", @source_path) then + @log.error( "Failed on \"git reset --hard origin/#{@git_branch}\"", Log::LV_USER) + @status = "ERROR" + return false + end + + # get git commit-id + commit_id = "" + result_line = git_cmd_return("log -1",@source_path) + if result_line != nil then + result_line.each do |l| + if l.start_with?("commit ") then + commit_id = l.split(" ")[1].strip + end + end + end + @git_commit = commit_id + else + # git reset + if not git_cmd("reset --hard #{@git_commit}", @source_path) then + @log.error( "Failed on \"git reset --hard #{@git_commit}\"", Log::LV_USER) + @status = "ERROR" + return false + end + end + } + + # check pkginfo.manifest + if not File.exist? "#{@source_path}/package/pkginfo.manifest" + @log.error( "package/pkginfo.manifest doest not exist", Log::LV_USER) + @status = "ERROR" + return false + end + + # set up pkg info + @pkginfo = PackageManifest.new("#{@source_path}/package/pkginfo.manifest") + + # set up pkgsvr_client + @pkgsvr_client = Client.new(@pkgserver_url, @job_working_dir, @log) + @pkgsvr_client.update + + # checking version if not reverse-build job + if not @is_rev_build_check_job and not @is_remote_job and + not check_package_version() then + + # if fullbuild job, its OK + if @is_fullbuild_job then + @status = "FINISHED" + return true + else + @status = "ERROR" + return false + end + end + + # check availabiltiy + if not @server.check_job_availability( self ) then + @log.error( "No servers that are able to build your packages.", Log::LV_USER) + @status = "ERROR" + @server.log.info "Adding the job \"#{@id}\" is canceled" + end + + return true + end + + + def set_git_commit( commit ) + @git_commit = commit + end + + + def git_cmd(cmd, working_dir) + build_command = "cd \"#{working_dir}\";#{@server.git_bin_path} #{cmd}" + ret = Utils.execute_shell_with_log(build_command,@log) + + return ret + end + + + def git_cmd_return(cmd, working_dir) + build_command = "cd \"#{working_dir}\";#{@server.git_bin_path} #{cmd}" + ret = Utils.execute_shell_return(build_command) + + return ret + end + +end diff --git a/src/build_server/GitBuildProject.rb b/src/build_server/GitBuildProject.rb new file mode 100644 index 0000000..5f12e8c --- /dev/null +++ b/src/build_server/GitBuildProject.rb @@ -0,0 +1,163 @@ +=begin + + GitProject.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require 'fileutils' +$LOAD_PATH.unshift File.dirname(__FILE__) +require "CommonProject.rb" +require "GitBuildJob.rb" +require "Version.rb" +require "PackageManifest.rb" + + +class GitBuildProject < CommonProject + attr_accessor :repository, :branch + + # initialize + def initialize( name, repos, branch, server, os_list ) + super(name, "GIT", server, os_list) + @repository = repos + @branch = branch + @source_infos = {} + @package_infos = {} + end + + + # get commid-id of specified package version + def get_commit_id( version ) + return get_source_info( version ) + end + + + # create new job + def create_new_job( os ) + return GitBuildJob.new( self, os, @server ) + end + + + # create new job + def create_new_job_from_version( os, version=nil ) + new_job=create_new_job( os ) + + # set commit id + if version.nil? then + version = get_latest_version() + end + + commit = get_commit_id( version ) + if not commit.nil? then + new_job.set_git_commit( commit ) + end + + return new_job + end + + # get latest package version + def get_latest_version() + versions = @package_infos.keys + if not versions.empty? then + versions.sort! {|x,y| Version.new(x).compare(Version.new(y)) } + return versions[-1] + else + return nil + end + end + + + # get all package version + def get_all_versions() + return @package_infos.keys + end + + + # add source source info + def add_source_info( version, info ) + @source_infos[version] = info + + # write to file + sources_file = "#{@server.path}/projects/#{@name}/sources" + File.open( sources_file, "w" ) do |f| + @source_infos.each { |key,value| + f.puts "#{key},#{value}" + } + end + end + + + # get source info + def get_source_info( version ) + return @source_infos[version] + end + + + # add package info + def add_package_info( version, path ) + pkginfo =PackageManifest.new(path) + @package_infos[version] = pkginfo + end + + + # get package info + def get_package_info( version ) + return @package_infos[version] + end + + + # copy package info + def copy_package_info(version, file_path) + # check pkginfo directory + pkginfo_dir = "#{@server.path}/projects/#{@name}/pkginfos" + if not File.exist? pkginfo_dir then + FileUtils.mkdir_p pkginfo_dir + end + + # copy + pkginfo_file = "#{pkginfo_dir}/#{version}.manifest" + FileUtils.cp(file_path, pkginfo_file) + + add_package_info(version, pkginfo_file) + end + + + def include_package?(name, version=nil, os=nil) + # check version first + if not version.nil? then + version = get_latest_version() + end + + if version.nil? or @package_infos[version].nil? then return false end + + # check name and version + pkginfo=@package_infos[version] + pkg_list = os.nil? ? pkginfo.packages : pkginfo.get_target_packages(os) + for pkg in pkg_list + if pkg.package_name.eql? name then return true end + end + + return false + end +end diff --git a/src/build_server/JobClean.rb b/src/build_server/JobClean.rb new file mode 100644 index 0000000..5bc4abd --- /dev/null +++ b/src/build_server/JobClean.rb @@ -0,0 +1,173 @@ +=begin + + ScheduledActionHandler.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require "fileutils" +require "thread" +$LOAD_PATH.unshift File.dirname(__FILE__) +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common" +require "BuildServer.rb" +require "Action.rb" +require "ScheduledActionHandler.rb" + +$access_listfile = Mutex.new + +class JobCleanAction < Action + + def initialize( time, job_path, list_file ) + super(time,0) + + @job_path = job_path + @job_id = @job_path.split("/")[-1] + @list_file = list_file + end + + + def init + $access_listfile.synchronize { + File.open(@list_file, "a") do |f| + f.puts "#{@job_id},#{time.year},#{time.month},#{time.day},#{time.hour},#{time.min},#{time.sec}" + end + } + end + + + def execute + + # remove directories + if File.exist? "#{@job_path}/buildroot" then + FileUtils.rm_rf "#{@job_path}/buildroot" + end + if File.exist? "#{@job_path}/temp" then + FileUtils.rm_rf "#{@job_path}/temp" + end + + # remove line for the job + $access_listfile.synchronize { + lines = [] + # get all lines + if File.exist? @list_file then + File.open(@list_file,"r") do |f| + f.each_line do |l| + lines.push l + end + end + end + + # write the line except my job_id + File.open(@list_file,"w") do |f| + for l in lines + if l.split(",")[0].eql? @job_id then next end + f.puts l + end + end + } + end +end + + +class JobCleaner + attr_accessor :quit + + # init + def initialize( server ) + @server = server + @handler = ScheduledActionHandler.new + @list_file = "#{BuildServer::CONFIG_ROOT}/#{@server.id}/clean" + end + + + # start thread + def start() + + list_file2 = "#{BuildServer::CONFIG_ROOT}/#{@server.id}/clean_backup" + jobs_path = "#{@server.path}/jobs" + if not File.exist? jobs_path then + FileUtils.mkdir_p jobs_path + end + + # read clean list + clean_list = [] + if File.exist? @list_file then + FileUtils.mv(@list_file,list_file2) + File.open(list_file2, "r") do |f| + f.each_line do |l| + id = l.split(",")[0] + year = l.split(",")[1] + month = l.split(",")[2] + day = l.split(",")[3] + hour = l.split(",")[4] + min = l.split(",")[5] + sec = l.split(",")[6] + + # create job and register + job_path = "#{jobs_path}/#{id}" + time = Time.mktime(year.to_i, month.to_i, day.to_i, hour.to_i, min.to_i, sec.to_i) + @server.log.info "Registered clean-action for the job in list : #{id}" + @handler.register(JobCleanAction.new(time,job_path,@list_file)) + + # add clean list + clean_list.push id + end + end + end + + + # scan all jobs + for id in Dir.new(jobs_path).entries + # skip . or .. + if id.eql? "." or id.eql? ".." then next end + + if not clean_list.include? id then + job_path = "#{jobs_path}/#{id}" + time = Time.now + @server.log.info "Registered clean-action for old job : #{id}" + @handler.register(JobCleanAction.new(time,job_path,@list_file)) + end + end + + # start handler + @handler.start + end + + + # clean after some time + def clean_afterwards(job_id) + curr = Time.now + time = Time.now + @server.keep_time + job_path = "#{@server.path}/jobs/#{job_id}" + @handler.register(JobCleanAction.new(time, job_path, @list_file)) + end + + + # clean directly + def clean(job_id) + time = Time.now + job_path = "#{@server.path}/jobs/#{job_id}" + @handler.register(JobCleanAction.new(time, job_path, @list_file)) + end +end diff --git a/src/build_server/JobLog.rb b/src/build_server/JobLog.rb new file mode 100644 index 0000000..0989b87 --- /dev/null +++ b/src/build_server/JobLog.rb @@ -0,0 +1,125 @@ +=begin + + JobLog.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +$LOAD_PATH.unshift File.dirname(__FILE__) +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__)) + "/common" +require "log" +require "logger" +require "BuildComm.rb" + +class JobLog < Log + + def initialize(job, stream_out) + if job.nil? then + super(nil) + else + if not File.exist? "#{job.server.path}/jobs/#{job.id}" then + FileUtils.mkdir_p "#{job.server.path}/jobs/#{job.id}" + end + super("#{job.server.path}/jobs/#{job.id}/log") + end + @parent_job=job + @second_out = stream_out + end + + + def set_second_out( out ) + @second_out = out + end + + + def init + # comm-begin + if not @second_out.nil? and not @second_out.closed? then + BuildCommServer.send_begin(@second_out) + end + end + + + def close + # close communication + if not @second_out.nil? then + begin + if not @second_out.closed? then + BuildCommServer.send_end(@second_out) + end + rescue + end + BuildCommServer.disconnect(@second_out) + end + + @second_out = nil + end + + + def is_connected? + if @second_out.nil? or @second_out.closed? then + return false + else + return true + end + end + + + def has_second_out? + if @second_out.nil? then + return false + else + return true + end + end + + + protected + + # overide + def output_extra(msg) + begin + if not @second_out.nil? then + BuildCommServer.send( @second_out, msg ) + end + rescue + close() + error "Connection closed by remote client" + + if not @parent_job.nil? then + @parent_job.status="ERROR" + # terminate job + @parent_job.terminate + # exit thread if independent worker thread + if @parent_job.thread == Thread.current then + error "Thread wiil be terminated" + @parent_job.thread=nil + Thread.exit + end + end + + end + end + +end diff --git a/src/build_server/JobManager.rb b/src/build_server/JobManager.rb new file mode 100644 index 0000000..447c4ec --- /dev/null +++ b/src/build_server/JobManager.rb @@ -0,0 +1,388 @@ +=begin + + JobManager.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require 'fileutils' +$LOAD_PATH.unshift File.dirname(__FILE__) +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/pkg_server" +require "SocketJobRequestListener.rb" +require "RemoteBuildJob.rb" +require "LocalBuildJob.rb" +require "RegisterPackageJob.rb" +require "packageServer.rb" + +class JobManager + attr_accessor :max_working_jobs, :jobs + + # initialize + def initialize( parent ) + @parent = parent + @jobs = [] + @internal_jobs = [] + @max_working_jobs=2 + @new_job_index = 0 + end + + + # get new id + def get_new_job_id + # check file + server_dir = "#{BuildServer::CONFIG_ROOT}/#{@parent.id}" + if File.exist? "#{server_dir}/latest_job" then + f = File.open( "#{server_dir}/latest_job", "r" ) + @new_job_index = f.gets.strip.to_i + 1 + f.close + end + + # get new id + new_id = @new_job_index + + # save it + f = File.open( "#{server_dir}/latest_job", "w" ) + f.puts "#{new_id}" + f.close + + return new_id + end + + + def create_new_register_job( file_path ) + return RegisterPackageJob.new( file_path, @parent ) + end + + # add a normal job + def add_job ( new_job ) + @parent.log.info "Added new job \"#{new_job.id}\"" + new_job.status = "JUST_CREATED" + @jobs.push( new_job ) + end + + + # add internal job (reverse-build or full-build) + def add_internal_job( new_job ) + @parent.log.info "Added new job \"#{new_job.id}\"" + new_job.status = "JUST_CREATED" + @internal_jobs.push( new_job ) + end + + + # intialize normal job + def initialize_job ( job ) + job.status = "INITIALIZING" + Thread.new { + # init + if not job.init or job.status == "ERROR" then + job.status = "ERROR" + @parent.log.info "Adding the job \"#{job.id}\" is canceled" + job.terminate() + Thread.current.exit + end + if job.status != "FINISHED" then + job.status = "WAITING" + end + @parent.log.info "Checking the job \"#{job.id}\" was finished!" + } + end + + + #execute + def execute(job) + job.status = "WORKING" + + # start build + job.execute + @parent.log.info "Moved the job \"#{job.id}\" to working job list" + end + + + # execute remote + def execute_remote(job, rserver) + + # start build + job.set_remote_job(rserver) + if job.execute() then + # status change & job control + job.status = "REMOTE_WORKING" + @parent.log.info "Moved the job \"#{job.id}\" to remote job list" + else + @parent.log.info "Moving the job \"#{job.id}\" to remote failed" + end + end + + + # handle + def handle() + + # for internal jobs + for job in @internal_jobs + # if "ERROR", "FINISHED", "CANCELED" remove it from list + if job.status == "ERROR" + @parent.log.info "Job \"#{job.id}\" is stopped by ERROR" + @internal_jobs.delete job + elsif job.status == "FINISHED" + @internal_jobs.delete job + elsif job.status == "CANCELED" + @internal_jobs.delete job + end + + # if "JUST_CREATED", initialize it + if job.status == "JUST_CREATED" then + initialize_job( job ) + end + end + + # for normal job + for job in @jobs + # if "ERROR", "FINISHED", "CANCELED" remove it from list + if job.status == "ERROR" + @parent.log.info "Job \"#{job.id}\" is stopped by ERROR" + @jobs.delete job + elsif job.status == "FINISHED" + @jobs.delete job + elsif job.status == "CANCELED" + @jobs.delete job + end + + # if "JUST_CREATED", initialize it + if job.status == "JUST_CREATED" then + initialize_job( job ) + end + + # check the connection if job is not asynchronous job + if ( job.status == "WAITING" or job.status == "REMOTE_WORKING") and + not job.is_asynchronous_job? and + not job.is_connected? then + + job.status = "ERROR" + @jobs.delete( job ) + @parent.log.info "Job \"#{job.id}\" is disconnected by user. Removed!" + end + end + + # check internal job first, if not exist, get new available job + if @internal_jobs.count > 0 then + job = get_available_internal_job + else + job = get_available_job + end + + # available job not exist?, continue + if not job.nil? then + # oherwise, check remote server + rserver = @parent.get_available_server( job ) + if rserver != nil and rserver == @parent then + execute(job) + elsif rserver != nil then + execute_remote(job, rserver) + else + #puts "No available server" + end + end + + end + + + # select the job whith no build-dependency problem + def get_available_job + return get_available_job_in_list(@jobs) + end + + + # select the job whith no build-dependency problem + def get_available_internal_job + return get_available_job_in_list(@internal_jobs) + end + + + + # return "max_working_jobs_cnt - current_working_jobs_cnt" + def get_number_of_empty_room + working_cnt = 0 + for job in @jobs + @internal_jobs + if job.status == "WORKING" then + working_cnt = working_cnt + 1 + end + end + + return @max_working_jobs - working_cnt + end + + + # check there are working jobs + def has_working_jobs + working_cnt = 0 + for job in @jobs + @internal_jobs + if job.status == "WORKING" then + return true + end + end + + return false + end + + + # check there are waiting jobs + def has_waiting_jobs + waiting_cnt = 0 + for job in @jobs + @internal_jobs + if job.status == "WAITING" then + return true + end + end + + return false + end + + + def get_working_jobs + result = [] + for job in @jobs + @internal_jobs + if job.status == "WORKING" then + result.push job + end + end + + return result + end + + + def get_waiting_jobs + result = [] + for job in @jobs + @internal_jobs + if job.status == "WAITING" then + result.push job + end + end + + return result + end + + + def get_remote_jobs + result = [] + for job in @jobs + @internal_jobs + if job.status == "REMOTE_WORKING" then + result.push job + end + end + + return result + end + + + def get_pending_jobs + result = [] + for job in @jobs + if job.status == "PENDING" then + result.push job + end + end + return result + end + + + protected + # select the job whith no build-dependency problem + def get_available_job_in_list( jobs ) + + # gather all working jobs and full-build jobs + all_working_jobs = [] + full_build_jobs = [] + uninit_fjob_exist = false #uninitialized full build job exist flag + for job in jobs + if job.status == "WORKING" or job.status == "REMOTE_WORKING" then + all_working_jobs.push job + end + if job.is_fullbuild_job then + if job.status == "WAITING" then + full_build_jobs.push job + end + if job.status == "JUST_CREATED" or job.status == "INITIALIZING" then + uninit_fjob_exist = true + end + end + end + + # for waiting jobs + for job in jobs + if job.status != "WAITING" then next end + + # check build dependency against working job + pre_jobs = [] + for wjob in all_working_jobs + if job.has_build_dependency?( wjob ) then + pre_jobs.push wjob + end + end + + # if full build job, do something special + if job.is_fullbuild_job then + # wait all full build jobs are ready + if uninit_fjob_exist then next end + # if full build job, check build-dep among full-build jobs + for fjob in full_build_jobs + if job == fjob then next end + if job.does_depend_on?( fjob ) then + pre_jobs.push fjob + end + end + end + + # check pre-requisite jobs are changed, notify to user + is_changed = false + if pre_jobs.count != job.pre_jobs.count then + is_changed=true + else + for pjob in pre_jobs + if not job.pre_jobs.include? pjob then + is_changed = true + break + end + end + end + if pre_jobs.count > 0 and is_changed then + job.log.info( "Waiting for finishing following jobs:", Log::LV_USER) + for bjob in pre_jobs + if bjob.type == "BUILD" then + job.log.info( " * #{bjob.id} #{bjob.pkginfo.packages[0].source}", Log::LV_USER) + elsif bjob.type == "FULLBUILD" then + job.log.info( " * #{bjob.id} (Full Build Job)", Log::LV_USER) + end + end + end + job.pre_jobs = pre_jobs + + # no pre-requisite jobs, return its job + if job.pre_jobs.count == 0 then + pre_jobs.push fjob + return job + end + end + + return nil + end +end diff --git a/src/build_server/LocalBuildJob.rb b/src/build_server/LocalBuildJob.rb new file mode 100644 index 0000000..79a2368 --- /dev/null +++ b/src/build_server/LocalBuildJob.rb @@ -0,0 +1,147 @@ +=begin + + LocalBuildJob.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +$LOAD_PATH.unshift File.dirname(__FILE__) +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common" +require "BuildJob.rb" +require "utils.rb" + +class LocalBuildJob < BuildJob + attr_accessor :id, :status, :pkginfo, :pkgsvr_client, :thread, :log, :rev_fail_list, :rev_success_list, :source_path + + # initialize + def initialize (local_path, os, pkgserver_url, options, server, parent, outstream, resolve ) + super(server.jobmgr.get_new_job_id(), server) + @rev_fail_list = [] + @rev_success_list = [] + @parent = parent + @local_path = local_path + @os = os + @host_os = Utils::HOST_OS + @pkgserver_url = pkgsvr_url + @options = options + @resolve = resolve + @outstream = outstream + + @status = "JUST_CREATED" + @sub_jobs = [] + @job_root = "#{@server.path}/jobs/#{@id}" + @source_path = @local_path + @pkginfo = nil + @pkgsvr_client = nil + @job_working_dir=@job_root+"/works" + + @thread = nil + + # mkdir + FileUtils.rm_rf "#{@server.path}/jobs/#{@id}" + FileUtils.mkdir_p "#{@server.path}/jobs/#{@id}" + + # create logger + @log = JobLog.new( self, "#{@server.path}/jobs/#{@id}/log", outstream ) + end + + + def terminate() + + # report error + if @status == "ERROR" then + @log.error( "Job is stopped by ERROR", Log::LV_USER) + @server.cleaner.clean_afterwards(@id) + else + # if succeeded, clean up + @server.cleaner.clean(@id) + end + + # clean up builder directory if exist? + if Builder.exist? "JB#{@id}" then + Builder.remove("JB#{@id}") + end + + # send mail + if ( @server.send_mail.eql? "YES" ) and ( not @pkginfo.nil? ) and ( not @pkginfo.packages.nil? ) then + mail_list = [] + contents = [] + done_pkg_list = [] + contents.push " " + contents.push "%-30s| %10s | %10s" % ["package name", "version", "os"] + contents.push "---------------------------------------------------------------" + for pkg in @pkginfo.packages + if not pkg.os.eql? @os then next end + mail_list = mail_list | Mail.parse_email( pkg.maintainer ) + contents.push("%-30s| %10s | %10s" % [ pkg.package_name, pkg.version, pkg.os] ) + end + + if @status == "ERROR" then + subject = "[DIBS] Build fail" + contents.push " " + contents.push "check log file" + contents.push "* Log : #{@server.job_log_url}/#{@id}/log" + else + subject = "[DIBS] Build success" + end + Mail.send_mail(mail_list, subject, contents.join("\n")) + end + + # close logger + @log.close + + # send END signal , if connectionn is valid + if @status != "ERROR" and not @outstream.nil? then + BuildCommServer.send_end(@outstream) + end + + # close outstream + if not @outstream.nil? then + BuildCommServer.disconnect( @outstream ) + end + end + + + # verify + def pre_verify + @log.info( "Verifying job input...", Log::LV_USER) + + # check pkginfo.manifest + if not File.exist? "#{@source_path}/package/pkginfo.manifest" + @log.error( "#{@source_path}/package/pkginfo.manifest doest not exist", Log::LV_USER) + @status = "ERROR" + return false + end + + # set pkginfo + @pkginfo = PackageManifest.new("#{@source_path}/package/pkginfo.manifest") + + # set up pkgsvr_client + @pkgsvr_client = Client.new(@pkgserver_url, @job_working_dir, @log) + @pkgsvr_client.update + + return true + end + +end diff --git a/src/build_server/ProjectManager.rb b/src/build_server/ProjectManager.rb new file mode 100644 index 0000000..01479ef --- /dev/null +++ b/src/build_server/ProjectManager.rb @@ -0,0 +1,309 @@ +=begin + + ProjectManager.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require 'fileutils' +$LOAD_PATH.unshift File.dirname(__FILE__) +require "GitBuildProject.rb" +require "BinaryUploadProject.rb" +require "PackageManifest.rb" +require "package.rb" +require "FullBuildJob.rb" + +class ProjectManager + attr_accessor :projects + + # initialize + def initialize( server ) + @server = server + @projects = [] + @project_root = "#{@server.path}/projects" + end + + + # load existing project from server configuration + def load() + # check project root + if not File.exist? @project_root then + FileUtils.mkdir_p @project_root + end + + # scan all projects + for name in Dir.new(@project_root).entries + # skip . or .. + if name.eql? "." or name.eql? ".." then next end + + # create project + @server.log.info "Loading project : #{name}" + prj = load_project( name ) + if not prj.nil? then + @projects.push prj + end + end + + end + + + # get_project of the name + def get_project ( name ) + for prj in @projects + if prj.name.eql? name then return prj end + end + + return nil + end + + + def add_git_project(name , repos, branch, passwd, os_list) + prj = get_project( name) + if not prj.nil? then return false end + + new_prj = GitBuildProject.new(name, repos, branch, @server, os_list) + if not passwd.nil? and not passwd.empty? then + new_prj.passwd = passwd + end + @projects.push new_prj + + # check project directory + if not File.exist? "#{@project_root}/#{name}" then + FileUtils.mkdir_p "#{@project_root}/#{name}" + end + + # write configuration + write_configuration(name, repos, branch, passwd, os_list) + + return true + end + + + def add_binary_project(name, pkg_name, passwd, os_list) + prj = get_project( name) + if not prj.nil? then return false end + + new_prj = BinaryUploadProject.new(name, pkg_name, @server, os_list) + if not passwd.nil? and not passwd.empty? then + new_prj.passwd = passwd + end + @projects.push new_prj + + # check project directory + if not File.exist? "#{@project_root}/#{name}" then + FileUtils.mkdir_p "#{@project_root}/#{name}" + end + + # write configuration + write_configuration_for_binary_project(name, pkg_name, passwd, os_list) + + return true + end + + + def add_remote_project( name, server_id) + end + + + # create new job for project + def create_new_job( name, os ) + prj = get_project( name ) + if prj.nil? then return nil end + + return prj.create_new_job( os ) + end + + + def create_new_jobs_for_all_os( name ) + result = [] + + prj = get_project( name ) + if prj.nil? then return nil end + + for new_os in prj.os_list + new_job = create_new_job(name, new_os) + if not new_job.nil? then + result.push new_job + end + end + + return result + end + + + # get project that includes specified pkg name and os + def get_projects_from_pkgs(pkgs) + result = [] + for prj in @projects + for pkg in pkgs + name = pkg.package_name + ver = pkg.version + os = pkg.os + + # check project provide target package + if prj.include_package?(name, ver, os) then + result.push prj + project_found = true + break + end + + if project_found then break end + end + end + + return result + end + + + def get_project_from_package_name(pkg_name) + for prj in @projects + # check project provide target package + if prj.include_package?(pkg_name) then + return prj + end + end + + return nil + end + + + def create_new_fullbuild_job() + return FullBuildJob.new(@server) + end + + protected + + # load and create project + def load_project(name) + + # check config file + config_file = "#{@project_root}/#{name}/build" + if not File.exist? config_file then return nil end + + # read configuration + type="GIT" + passwd="" + repos="none" + branch="master" + os_list = ["linux","windows"] + rserver_id=nil + pkg_name=nil + File.open( config_file, "r" ) do |f| + f.each_line do |l| + idx = l.index("=") + 1 + length = l.length - idx + + if l.start_with?("TYPE=") + type = l[idx,length].strip + elsif l.start_with?("PASSWD=") + passwd = l[idx,length].strip + elsif l.start_with?("GIT_REPOSITORY=") + repos = l[idx,length].strip + elsif l.start_with?("GIT_BRANCH=") + branch = l[idx,length].strip + elsif l.start_with?("OS_LIST=") + os_list = l[idx,length].strip.split(",") + elsif l.start_with?("REMOTE_SERVER_ID=") + rserver_id = l[idx,length].strip + elsif l.start_with?("PACKAGE_NAME=") + pkg_name = l[idx,length].strip + else + next + end + end + end + + # write back & create project + if type == "GIT" then + write_configuration(name, repos, branch, passwd, os_list) + new_project = GitBuildProject.new(name, repos, branch, @server, os_list) + + # read source info + sources_file = "#{@project_root}/#{name}/sources" + if File.exist? sources_file then + File.open(sources_file, "r") do |f| + f.each_line do |l| + version = l.split(",")[0].strip + info = l.split(",")[1].strip + + new_project.add_source_info( version, info ) + end + end + end + + # read pkginfo + pkginfo_dir = "#{@project_root}/#{name}/pkginfos" + if not File.exist? pkginfo_dir then FileUtils.mkdir_p pkginfo_dir end + for file in Dir.new(pkginfo_dir).entries + if file.eql? "." or file.eql? ".." then next end + + vlen = file.length - ".manifest".length + version = file[0,vlen] + new_project.add_package_info( version, "#{pkginfo_dir}/#{file}" ) + end + + elsif type == "BINARY" then + write_configuration_for_binary_project(name, pkg_name, passwd, os_list) + new_project = BinaryUploadProject.new(name, pkg_name, @server, os_list) + end + + + # set passwd if exist + if not passwd.empty? then + new_project.passwd = passwd + end + + + return new_project + end + + + # write configuration + def write_configuration(name, repos, branch, passwd, os_list ) + config_file = "#{@project_root}/#{name}/build" + File.open( config_file, "w" ) do |f| + f.puts "TYPE=GIT" + if not passwd.nil? and not passwd.empty? then + f.puts "PASSWD=#{passwd}" + end + f.puts "GIT_REPOSITORY=#{repos}" + f.puts "GIT_BRANCH=#{branch}" + f.puts "OS_LIST=#{os_list.join(",")}" + end + end + + + # write configuration + def write_configuration_for_binary_project(name, pkg_name, passwd, os_list ) + config_file = "#{@project_root}/#{name}/build" + File.open( config_file, "w" ) do |f| + f.puts "TYPE=BINARY" + if not passwd.nil? and not passwd.empty? then + f.puts "PASSWD=#{passwd}" + end + f.puts "PACKAGE_NAME=#{pkg_name}" + f.puts "OS_LIST=#{os_list.join(",")}" + end + end +end diff --git a/src/build_server/RegisterPackageJob.rb b/src/build_server/RegisterPackageJob.rb new file mode 100644 index 0000000..1ea4738 --- /dev/null +++ b/src/build_server/RegisterPackageJob.rb @@ -0,0 +1,383 @@ +=begin + + RegisterBinaryJob.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require "fileutils" +$LOAD_PATH.unshift File.dirname(__FILE__) +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common" +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/builder" +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/pkg_server" +require "client.rb" +require "PackageManifest.rb" +require "Version.rb" +require "BuildServer.rb" +require "JobLog.rb" +require "mail.rb" +require "utils.rb" + +class RegisterPackageJob + + attr_accessor :id, :server, :pre_jobs, :os, :type + attr_accessor :status, :log, :source_path + attr_accessor :pkgsvr_client, :thread + attr_accessor :is_fullbuild_job + attr_accessor :pkg_name, :pkginfo + + + # initialize + def initialize( local_path, server, ftpurl=nil ) + @server = server + @id = server.jobmgr.get_new_job_id() + @log = nil + @type = "REGISTER" + + @status = "JUST_CREATED" + @host_os = Utils::HOST_OS + @pkgserver_url = @server.pkgserver_url + @job_root = "#{@server.path}/jobs/#{@id}" + @source_path = @job_root+"/temp" + @job_working_dir=@job_root+"/works" + @buildroot_dir = "#{@job_root}/buildroot" + @pre_jobs = [] + + @local_path=local_path + @filename = File.basename(local_path) + if @filename =~ /.*_.*_.*\.zip/ then + @pkg_type = "BINARY" + new_name = @filename.sub(/(.*)_(.*)_(.*)\.zip/,'\1,\2,\3') + @pkg_name = new_name.split(",")[0] + @os = new_name.split(",")[2] + else + @pkg_type = "ARCHIVE" + @pkg_name = @filename + end + @pkginfo = nil #This info is valid only for BINARY package + end + + + # execute + def execute(sync=false) + @log.info( "Invoking a thread for REGISTER Job #{@id}", Log::LV_USER) + if @status == "ERROR" then return end + @thread = Thread.new { + # main + thread_main() + + # close + terminate() + } + + if sync then + @thread.join + end + + return true + end + + + # + def init + # mkdir + if not File.exist? @job_root then + FileUtils.mkdir_p @job_root + end + + # create logger + if @log.nil? then + @log = JobLog.new(self, nil ) + end + + @log.info( "Initializing job...", Log::LV_USER) + + # create dummy source path + if not File.exist? @source_path then + FileUtils.mkdir_p @source_path + end + + # set up pkgsvr_client + @pkgsvr_client = Client.new(@pkgserver_url, @job_working_dir, @log) + @pkgsvr_client.update + + # download from sites + if not File.exist? @local_path then + + end + + # copy package file to source path + if not File.exist? @local_path then + @log.error( "File not found!", Log::LV_USER) + @status = "ERROR" + return false + else + FileUtils.cp(@local_path,"#{@source_path}/#{File.basename(@local_path)}") + end + + # checking version if not reverse-build job + if @pkg_type == "BINARY" then + # extrac pkg file + cmd = "cd \"#{@source_path}\";unzip #{@local_path}" + if not Utils.execute_shell(cmd) then + @log.error( "Extracting package file failed!", Log::LV_USER) + @status = "ERROR" + return false + end + + # set up pkg info + @pkginfo = PackageManifest.new("#{@source_path}/pkginfo.manifest") + + if not check_package_version() then + @status = "ERROR" + return false + end + end + + return true + end + + + #terminate + def terminate() + # report error + if @status == "ERROR" then + @log.error( "Job is stopped by ERROR" , Log::LV_USER) + @server.cleaner.clean_afterwards(@id) + else + # clean up + @server.cleaner.clean(@id) + end + + # close logger + @log.close + end + + + #cancel + def cancel() + #TODO + end + + + # check building is possible + def can_be_built_on?(host_os) + return true + end + + + def has_build_dependency?(other_job) + if has_same_packages?(other_job) or + does_depended_by?(other_job) then + + return true + else + return false + end + end + + + def has_same_packages?( wjob ) + if @type == wjob.type and + @pkg_name == wjob.pkg_name then + + return true + else + return false + end + end + + + def does_depend_on?( wjob ) + return false + end + + + def does_depended_by?( wjob ) + if @pkg_type == "BINARY" then + for dep in wjob.pkginfo.get_build_dependencies(wjob.os) + # dep package of working job must have same name and target os + # with packages in my job + if dep.package_name == @pkg_name and + dep.target_os_list.include? @os then + #puts "Checking... A <- B" + return true + end + end + else + for dep in wjob.pkginfo.get_source_dependencies(wjob.os,@host_os) + if dep.package_name == @pkg_name then + return true + end + end + end + + return false + end + + + def is_connected? + return true + end + + + # return the job is asyncronous job + def is_asynchronous_job? + return false + end + + # set logger + def set_logger( logger ) + @log = logger + end + + + # + # PROTECTED METHODS + # + protected + + + # main module + def thread_main + @log.info( "New Job #{@id} is started", Log::LV_USER) + + # clean build + if not check_reverse_build() then + @log.error( "Reverse-build-check failed!" ) + return false + end + + # upload + if not upload() then + @status = "ERROR" + return + end + + # INFO. don't change this string + @log.info( "Job is completed!", Log::LV_USER) + @status = "FINISHED" + end + + + # build projects that dependes on me + # can ignore some projects + def check_reverse_build() + @log.info( "Checking reverse build dependency ...", Log::LV_USER) + + # get reverse-dependent projects + rev_pkgs = [] + if @pkg_type == "BINARY" then + rev_pkgs += @pkgsvr_client.get_reverse_build_dependent_packages(@pkg_name, @os) + else + rev_pkgs += @pkgsvr_client.get_reverse_source_dependent_packages(@pkg_name) + end + + rev_projects = @server.prjmgr.get_projects_from_pkgs(rev_pkgs) + + # build rev-dep project as sub-job + for prj in rev_projects + if prj.type != "GIT" then next end + for os in prj.os_list + # check version + version = nil + for pkg in rev_pkgs + if prj.include_package?(pkg.package_name, pkg.version, os) then + version = pkg.version + break + end + end + if version.nil? then next end + + # create sub jobs for checking + new_job = prj.create_new_job_from_version(os, version) + new_job.set_rev_build_check_job(self) + @log.info( " * Checking reverse-build ... #{prj.name}(#{new_job.id})", Log::LV_USER) + result = new_job.init() + rserver = @server.get_available_server( new_job ) + if rserver != nil and rserver != @server then + new_job.set_remote_job( rserver ) + end + if result then + new_job.execute(true) + if new_job.status == "ERROR" then result = false end + end + + # check result + if not result then + return false + end + end + end + + return true + end + + + def upload() + @log.info( "Uploading ...", Log::LV_USER) + + # get package path list + binpkg_path_list = [ "#{@source_path}/#{@filename}" ] + + # upload + u_client = Client.new( @server.pkgserver_url, nil, @log ) + u_client.update + snapshot = u_client.upload( @server.pkgserver_addr, @server.pkgserver_port, @server.ftp_addr, @server.ftp_port, @server.ftp_username, @server.ftp_passwd, binpkg_path_list) + + if snapshot.nil? then + @log.info( "Upload failed...", Log::LV_USER) + + return false + end + + # update local + @log.info( "Upload succeeded. Sync local pkg-server again...", Log::LV_USER) + @pkgsvr_client.update + @log.info("Snapshot: #{snapshot}", Log::LV_USER) + + return true + end + + + # check if local package version is greater than server + def check_package_version() + @log.info( "Checking package version ...", Log::LV_USER) + + # package update + @pkgsvr_client.update + + for pkg in @pkginfo.packages + ver_local = pkg.version + #ver_svr = @pkgsvr_client.get_package_version( pkg.package_name, @os ) + ver_svr = @pkgsvr_client.get_attr_from_pkg( pkg.package_name, @os, "version") + if not ver_svr.nil? and Version.new(ver_local) <= Version.new(ver_svr) then + @log.error( "Version must be increased : #{ver_local} <= #{ver_svr}", Log::LV_USER) + return false + end + end + + return true + end +end diff --git a/src/build_server/RemoteBuildJob.rb b/src/build_server/RemoteBuildJob.rb new file mode 100644 index 0000000..f13b030 --- /dev/null +++ b/src/build_server/RemoteBuildJob.rb @@ -0,0 +1,43 @@ +=begin + + RemoteBuildJob.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +$LOAD_PATH.unshift File.dirname(__FILE__) +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common" +require "BuildJob.rb" +require "utils.rb" + +class RemoteBuildJob < BuildJob + attr_accessor :id + + # initialize + def initialize (id,server) + super(id,nil,nil,server) + @id = id + @type = nil + end +end diff --git a/src/build_server/RemoteBuildServer.rb b/src/build_server/RemoteBuildServer.rb new file mode 100644 index 0000000..5b66ab8 --- /dev/null +++ b/src/build_server/RemoteBuildServer.rb @@ -0,0 +1,130 @@ +=begin + + RemoteBuildServer.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require 'fileutils' +$LOAD_PATH.unshift File.dirname(__FILE__) +require "RemoteBuildJob.rb" +require "BuildComm.rb" + +class RemoteBuildServer + attr_accessor :ip, :port, :status, :host_os + attr_accessor :max_working_jobs, :working_jobs, :waiting_jobs + attr_accessor :pkgserver_url, :path + + # initialize + def initialize(ip, port, parent) + @ip = ip + @port = port + @status = "DISCONNECTED" + @host_os = Utils::HOST_OS + @max_working_jobs = 2 + @working_jobs = [] + @waiting_jobs = [] + @pkgserver_url = parent.pkgserver_url + @path = "" + end + + + # check the job can be built on this server + def can_build?(job) + + # check me + if job.can_be_built_on? @host_os then + return true + end + + return false + end + + + # query remote server info & update server state + def update_state + + # send + #@status = "DISCONNECTED" + client = BuildCommClient.create( @ip, @port ) + if client.nil? then return end + if client.send("QUERY,SYSTEM") then + result = client.read_lines do |l| + tok = l.split(",").map { |x| x.strip } + @host_os = tok[0] + @max_working_jobs = tok[1].to_i + @status = "RUNNING" + end + if not result then @status = "DISCONNECTED" end + end + client.terminate + if @status == "DISCONNECTED" then return end + + # send + @working_jobs = [] + @waiting_jobs = [] + client = BuildCommClient.create( @ip, @port ) + if client.nil? then return end + if client.send("QUERY,JOB") then + result = client.read_lines do |l| + tok = l.split(",").map { |x| x.strip } + + job_status = tok[0] + job_id = tok[1] + new_job = RemoteBuildJob.new(job_id,self) + case job_status + when "WAITING" + @waiting_jobs.push new_job + when "WORKING" + @working_jobs.push new_job + else + #puts "Uncontrolled status" + end + end + if not result then @status = "DISCONNECTED" end + else + @status = "DISCONNECTED" + end + client.terminate + end + + + # return available working slot + def get_number_of_empty_room + return @max_working_jobs - @working_jobs.count + end + + + # check there are working jobs + def has_working_jobs + return (@working_jobs.count > 0) + end + + + # check there are waiting jobs + def has_waiting_jobs + return (@waiting_jobs.count > 0) + end +end + diff --git a/src/build_server/RemoteBuilder.rb b/src/build_server/RemoteBuilder.rb new file mode 100644 index 0000000..597715e --- /dev/null +++ b/src/build_server/RemoteBuilder.rb @@ -0,0 +1,182 @@ +=begin + + RemoteBuilder.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +$LOAD_PATH.unshift File.dirname(__FILE__) +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common" +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/pkg_server" +require "utils" +require "PackageManifest" +require "log" + +class RemoteBuilder + attr_accessor :id, :log + + # initialize + def initialize( id, addr, port, ftp_addr, ftp_port, ftp_username, ftp_passwd) + @id = id + @addr = addr + @port = port + @ftp_addr = ftp_addr + @ftp_port = ftp_port + @ftp_username = ftp_username + @ftp_passwd = ftp_passwd + @log = Log.new(nil) + end + + + # build + def build( project_name, project_passwd, source_path, os, clean, rev_build_check_job, srcinfo, local_pkgs ) + # send local packages + for pkg_path in local_pkgs + @log.info( "Sending file... : #{pkg_path}", Log::LV_USER ) + result = send_binary_package( pkg_path ) + if not result then + @log.error( "File transfering failed!", Log::LV_USER ) + return false + end + end + + # send build request + result, result_files = send_build_request(project_name, project_passwd, os, clean, + rev_build_check_job, srcinfo, local_pkgs) + if not result then + @log.error( "Building job on remote server failed!", Log::LV_USER ) + return false + end + + # receive binary package + for file_name in result_files + @log.info( "Receiving file... : #{file_name}", Log::LV_USER ) + result = receive_binary_package( "#{source_path}/#{file_name}" ) + if not result then + @log.error( "File transfering failed!", Log::LV_USER ) + return false + end + end + + return true + end + + + # upload binary packages that is need to be overwrite + # before remote package + def send_binary_package(file_path) + # create client + client = BuildCommClient.create( @addr, @port ) + if client.nil? then + @log.error( "Creating communication client failed!", Log::LV_USER) + return false + end + + # upload file + result = true + file_name = file_path.split("/")[-1] + if client.send("UPLOAD,#{file_name}") then + result=client.send_file( @ftp_addr, @ftp_port, @ftp_username, @ftp_passwd, file_path ) + if not result then + @log.error( "File uploading failed...#{file_name}", Log::LV_USER) + end + end + + #close connections + client.terminate + + return result + end + + + # send build request + def send_build_request( project_name, project_passwd, os, clean, rev_build_job, commit,local_pkgs) + result_files = [] + + client = BuildCommClient.create( @addr, @port ) + if client.nil? then + @log.error( "Creating communication client failed!", Log::LV_USER) + return false, result_files + end + + # get local package names + local_pkg_names = local_pkgs.map { |path| File.basename(path) } + + # send + # BUILD,GIT,project_name,os,pkgsvr_url,async,internal,commit,pkgs + result = true + commit=commit.nil? ? "":commit + pkg_list=local_pkg_names.join(",") + rev=rev_build_job ? "YES":"NO" + if client.send("BUILD,GIT,#{project_name},#{project_passwd},#{os},NO,YES,#{rev},#{commit},#{pkg_list}") then + result = client.read_lines do |l| + # check build result + if l.include? "Job is stopped by ERROR" then + result = false + break + end + + # gather result files + if l =~ /Creating package file \.\.\. (.*)/ then + file_name = $1 + result_files.push file_name + end + + # ddd list + @log.output( l.strip, Log::LV_USER) + end + end + + # close socket + client.terminate + + return result, result_files + end + + + # receive binary package of remote server + def receive_binary_package(file_path) + # create client + client = BuildCommClient.create( @addr, @port ) + if client.nil? then + @log.error( "Creating communication client failed!", Log::LV_USER) + return false + end + + # download file + result = true + file_name = file_path.split("/")[-1] + if client.send("DOWNLOAD,#{file_name}") then + result=client.receive_file( @ftp_addr, @ftp_port, @ftp_username, @ftp_passwd, file_path ) + if not result then + @log.error( "File downloading failed...#{file_name}", Log::LV_USER) + end + end + + #close connections + client.terminate + + return result + end +end diff --git a/src/build_server/SocketJobRequestListener.rb b/src/build_server/SocketJobRequestListener.rb new file mode 100644 index 0000000..7067a4c --- /dev/null +++ b/src/build_server/SocketJobRequestListener.rb @@ -0,0 +1,652 @@ +=begin + + SocketJobRequestListener.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +$LOAD_PATH.unshift File.dirname(__FILE__) +require "JobLog.rb" +require "BuildComm.rb" + + +class SocketJobRequestListener + + # initialize + def initialize (parent) + @parent_server = parent + @thread = nil + @finish_loop = false + @comm_server = nil + @log = @parent_server.log + end + + # start listening + def start() + @thread = Thread.new { + main() + } + end + + + + # quit listening + def stop_listening() + @finish_loop = true + end + + private + + # thread main + def main() + # server open + begin + ftp_url = Utils.generate_ftp_url(@parent_server.ftp_addr, @parent_server.ftp_port, + @parent_server.ftp_username, @parent_server.ftp_passwd) + @comm_server = BuildCommServer.new(@parent_server.port, @log, ftp_url) + rescue + @log.info "Server creation failed" + puts "Server creation failed" + @parent_server.stop + return + end + + # loop + @log.info "Entering Control Listening Loop ... " + @finish_loop = false + @comm_server.wait_for_connection(@finish_loop) do |req| + handle_job_request( req ) + end + + # quit + @comm_server.terminate + end + + + # wait for job requests + def wait_for_job_requests + req_list = [] + req_list.push @tcp_server.accept + + return req_list + end + + + # handle job request + def handle_job_request( req ) + + # read request + req_line = req.gets + if req_line.nil? then return end + + # parse request + cmd = "" + if req_line.split(",").count > 0 then + cmd = req_line.split(",")[0].strip + end + + case cmd + when "BUILD" + handle_cmd_build( req_line, req ) + when "RESOLVE" + handle_cmd_resolve( req_line, req ) + when "QUERY" + handle_cmd_query( req_line, req ) + when "CANCEL" + handle_cmd_cancel( req_line, req ) + when "STOP" + handle_cmd_stop( req_line, req ) + when "FULLBUILD" + handle_cmd_fullbuild( req_line, req ) + when "REGISTER" + handle_cmd_register( req_line, req ) + when "DOWNLOAD" + Thread.new { + handle_cmd_download( req_line, req ) + } + when "UPLOAD" + Thread.new { + handle_cmd_upload( req_line, req ) + } + else + @log.info "Received Unknown REQ: #{req_line}" + raise "Unknown request: #{req_line}" + end + + end + + + # "BUILD" + def handle_cmd_build( line, req ) + tok = line.split(",").map { |x| x.strip } + if tok.count < 3 then + @log.info "Received Wrong REQ: #{line}" + raise "Invalid request format is used: #{line}" + end + + case tok[1] + # BUILD,GIT,proj,os,url,async,internal + # "internal" means that this job requested by other server. + when "GIT" + # parse + project_name=tok[2] + passwd=tok[3] + os=tok[4] + async = (not tok[5].nil? and tok[5]=="YES" ? true:false) + is_internal = (not tok[6].nil? and tok[6]=="YES" ? true:false) + + # check project + prj = check_project_exist(project_name, req) + if prj.nil? then + raise "Requested project does not exist!" + end + + # check passwd + if not check_project_password(prj, passwd, req) then + raise "Project's password is not matched!!" + end + + # create new job + @log.info "Received a request for building this project : #{tok[2]}" + new_job_list = create_new_job( project_name, os, req ) + if new_job_list.empty? then + raise "Creating build job failed : #{project_name}, #{os}" + end + + for new_job in new_job_list + # set internal flags + if is_internal then + # set job type + new_job.set_internal_job() + # check revere_build_check_job + rev_job = (not tok[7].nil? and tok[7].eql? "YES") ? true:false + if rev_job then new_job.set_rev_build_check_job(nil) end + # set commit id + commit_id = tok[8] + if not commit_id.nil? and not commit_id.empty? then + new_job.set_git_commit(commit_id) + end + # set external pkgs + i = 9 + pkg_file = tok[i] + while not pkg_file.nil? do + new_job.add_external_package( "#{@parent_server.incoming_path}/#{pkg_file}" ) + i = i + 1 + pkg_file = tok[i] + end + end + end + + # create logger and set + if new_job_list.count == 1 then + logger = JobLog.new( new_job_list[0], req ) + if not async then new_job.set_logger(logger) end + else + logger = JobLog.new( nil, req ) + end + logger.init + + # notify that job has been received + for job in new_job_list + logger.info( "Added new job \"#{job.id}\" for #{job.os}!", Log::LV_USER) + if not @parent_server.job_log_url.empty? then + logger.info( " * Log URL : #{@parent_server.job_log_url}/#{job.id}/log", Log::LV_USER) + end + end + + # if asynchronouse, quit connection + if os == "all" or async then + logger.info( "Above job(s) will be processed asynchronously!", Log::LV_USER) + logger.close + end + + # add + for new_job in new_job_list + @parent_server.jobmgr.add_job( new_job ) + end + else + @log.info "Received Wrong REQ: #{line}" + raise "Invalid request format is used: #{line}" + end + end + + + # "RESOLVE" + def handle_cmd_resolve( line ,req) + tok = line.split(",").map { |x| x.strip } + if tok.count < 3 then + @log.info "Received Wrong REQ: #{line}" + raise "Invalid request format is used: #{line}" + end + + case tok[1] + # RESOLVE,GIT,repos,commit,os,url + when "GIT" + # parse + project_name=tok[2] + passwd=tok[3] + os=tok[4] + async = (not tok[5].nil? and tok[6]=="YES" ? true:false) + + # check project + prj = check_project_exist(project_name, req) + if prj.nil? then + raise "Requested project does not exist!" + end + + # check passwd + if not check_project_password(prj, passwd, req) then + raise "Project's password is not matched!!" + end + + # create new job + @log.info "Received a request for resolving this project : #{tok[2]}" + new_job_list = create_new_job( project_name, os, req ) + if new_job_list.empty? then + raise "Creating build job failed : #{project_name}, #{os}" + end + + # resolve + for new_job in new_job_list + new_job.set_resolve_flag() + end + + # create logger and set + if new_job_list.count == 1 then + logger = JobLog.new( new_job_list[0], req ) + if not async then new_job.set_logger(logger) end + else + logger = JobLog.new( nil, req ) + end + logger.init + + # notify that job has been received + for job in new_job_list + logger.info( "Added new job \"#{job.id}\" for #{job.os}!", Log::LV_USER) + if not @parent_server.job_log_url.empty? then + logger.info( " * Log URL : #{@parent_server.job_log_url}/#{job.id}/log", Log::LV_USER) + end + end + + # if asynchronouse, quit connection + if os == "all" or async then + logger.info( "Above job(s) will be processed asynchronously!", Log::LV_USER) + logger.close + end + + for new_job in new_job_list + @parent_server.jobmgr.add_job( new_job ) + end + else + @log.info "Received Wrong REQ: #{line}" + raise "Invalid request format is used: #{line}" + end + end + + + # "QUERY" + def handle_cmd_query( line, req ) + tok = line.split(",").map { |x| x.strip } + if tok.count < 2 then + @log.info "Received Wrong REQ: #{line}" + raise "Invalid request format is used: #{line}" + end + + case tok[1] + + # QUERY, FTP + when "FTP" + BuildCommServer.send_begin(req) + BuildCommServer.send(req,"#{@parent_server.ftp_addr},#{@parent_server.ftp_username},#{@parent_server.ftp_passwd}") + BuildCommServer.send_end(req) + BuildCommServer.disconnect(req) + + # QUERY,JOB + when "JOB" + #puts "Received QUERY JOB" + + BuildCommServer.send_begin(req) + for job in @parent_server.jobmgr.get_working_jobs + BuildCommServer.send(req,"WORKING,#{job.id},#{job.pkginfo.packages[0].source}") + end + for job in @parent_server.jobmgr.get_waiting_jobs + BuildCommServer.send(req,"WAITING,#{job.id},#{job.pkginfo.packages[0].source}") + end + for job in @parent_server.jobmgr.get_remote_jobs + BuildCommServer.send(req,"REMOTE ,#{job.id},#{job.pkginfo.packages[0].source}") + end + BuildCommServer.send_end(req) + BuildCommServer.disconnect(req) + + # QUERY,SYSTEM + when "SYSTEM" + #puts "Received QUERY SYSTEM" + + BuildCommServer.send_begin(req) + BuildCommServer.send(req,"#{@parent_server.host_os},#{@parent_server.jobmgr.max_working_jobs}") + BuildCommServer.send_end(req) + BuildCommServer.disconnect(req) + when "PROJECT" + BuildCommServer.send_begin(req) + # print GIT projects + for prj in @parent_server.prjmgr.projects + if prj.type != "GIT" then next end + BuildCommServer.send(req,"G,#{prj.name},#{prj.repository},#{prj.branch}") + end + # print BINARY projects + for prj in @parent_server.prjmgr.projects + if prj.type != "BINARY" then next end + BuildCommServer.send(req,"B,#{prj.name},#{prj.pkg_name}") + end + # print REMOTE project + for prj in @parent_server.prjmgr.projects + if prj.type != "REMOTE" then next end + BuildCommServer.send(req,"R,#{prj.name}") + end + BuildCommServer.send_end(req) + BuildCommServer.disconnect(req) + + else + @log.info "Received Wrong REQ: #{line}" + raise "Invalid request format is used: #{line}" + end + end + + + # "CANCEL" + def handle_cmd_cancel( line, req ) + tok = line.split(",").map { |x| x.strip } + if tok.count < 2 then + @log.info "Received Wrong REQ: #{line}" + raise "Invalid request format is used: #{line}" + end + cancel_job = nil + + #CANCEL, JOB + @parent_server.jobmgr.jobs.each do |j| + if "#{j.id}" == "#{tok[1]}" then + cancel_job = j + break + end + end + + BuildCommServer.send_begin(req) + if cancel_job.nil? then + BuildCommServer.send(req, "There is no job \"#{tok[1]}\"") + raise "There is no job \"#{tok[1]}\"" + else + # check passwd + if not check_project_password( cancel_job.get_project, tok[2], req) then + raise "Project's password is not matched!!" + end + + BuildCommServer.send(req, "\"#{cancel_job.id} #{cancel_job.pkginfo.packages[0].source} #{cancel_job.status}\"") + cancel_job.cancel + end + BuildCommServer.send_end(req) + BuildCommServer.disconnect(req) + end + + + # "STOP" + def handle_cmd_stop( line, req ) + tok = line.split(",").map { |x| x.strip } + if tok.count < 2 then + @log.info "Received Wrong REQ: #{line}" + raise "Invalid request format is used: #{line}" + end + + BuildCommServer.send_begin(req) + if tok[1] != @parent_server.password then + BuildCommServer.send(req,"Password mismatched!") + else + BuildCommServer.send(req,"Server will be down!") + end + BuildCommServer.send_end(req) + BuildCommServer.disconnect(req) + if tok[1] == @parent_server.password then + @parent_server.finish = true + end + end + + + # "FULLBUILD" + def handle_cmd_fullbuild( line, req ) + tok = line.split(",").map { |x| x.strip } + if tok.count < 2 then + @log.info "Received Wrong REQ: #{line}" + raise "Invalid request format is used: #{line}" + end + + # create full build job + new_job = @parent_server.prjmgr.create_new_fullbuild_job() + logger = JobLog.new( new_job, req ) + new_job.set_logger(logger) + logger.init + + # add to job + @parent_server.jobmgr.add_job( new_job ) + end + + + # "REGISTER" + def handle_cmd_register( line, req ) + tok = line.split(",").map { |x| x.strip } + if tok.count < 4 then + @log.info "Received Wrong REQ: #{line}" + raise "Invalid request format is used: #{line}" + end + + type = tok[1] + + case type + # REGISTER,BINARY-LOCAL,local_path + # REGISTER,SOURCE-LOCAL,local_path + when "BINARY-LOCAL", "SOURCE-LOCAL" + file_path = tok[2] + new_job = @parent_server.jobmgr.create_new_register_job( file_path ) + logger = JobLog.new( new_job, req ) + new_job.set_logger(logger) + logger.init + + # add + @parent_server.jobmgr.add_job( new_job ) + + # REGISTER,BINARY,filename,passwd + when "BINARY" + # parse + filename = tok[2] + passwd = tok[3] + + # check project + prj = check_project_for_package_file_name(filename, req) + if prj.nil? then + raise "No project is defined for this binary : #{filename}!" + end + + # check passwd + if not check_project_password(prj, passwd, req) then + raise "Project's password is not matched!!" + end + + # create new job + @log.info "Received a request for uploading binaries : #{tok[2]}" + new_job = create_new_upload_job( prj.name, filename, req ) + if new_job.nil? then + raise "Creating build job failed : #{prj.name}, #{filename}" + end + + # create logger and set + logger = JobLog.new( new_job, req ) + new_job.set_logger(logger) + logger.init + + # notify that job has been received + logger.info( "Added new job \"#{new_job.id}\" for #{new_job.os}!", Log::LV_USER) + if not @parent_server.job_log_url.empty? then + logger.info( " * Log URL : #{@parent_server.job_log_url}/#{new_job.id}/log", Log::LV_USER) + end + + # add + @parent_server.jobmgr.add_job( new_job ) + else + @log.info "Received Wrong REQ: #{line}" + raise "Invalid request format is used: #{line}" + end + + end + + + # "UPLOAD" + def handle_cmd_upload( line, req ) + tok = line.split(",").map { |x| x.strip } + if tok.count < 1 then + @log.info "Received Wrong REQ: #{line}" + raise "Invalid request format is used: #{line}" + end + + file_name = tok[1] + @log.info "Received a request for upload file : #{file_name}" + BuildCommServer.send_begin(req) + begin + @comm_server.receive_file(req, @parent_server.incoming_path) + rescue => e + puts "Failed to receive file" + puts e.message + puts e.backtrace.inspect + end + BuildCommServer.send_end(req) + end + + + # "DOWNLOAD" + def handle_cmd_download( line, req ) + tok = line.split(",").map { |x| x.strip } + if tok.count < 1 then + @log.info "Received Wrong REQ: #{line}" + raise "Invalid request format is used: #{line}" + end + + file_name = tok[1] + + @log.info "Received a request for download file : #{file_name}" + BuildCommServer.send_begin(req) + begin + @comm_server.send_file(req, "#{@parent_server.outgoing_path}/#{file_name}") + rescue => e + puts "transfer failed" + puts e.message + puts e.backtrace.inspect + end + BuildCommServer.send_end(req) + end + + + + private + def check_project_exist(project_name, req) + prj = @parent_server.prjmgr.get_project(project_name) + if prj.nil? then + BuildCommServer.send_begin(req) + req.puts "Error: Requested project does not exist!" + req.puts "Info: Check project name using \"query\" command option !" + BuildCommServer.send_end(req) + return nil + end + + return prj + end + + private + def check_project_for_package_file_name(filename, req) + # get package name + new_name = filename.sub(/(.*)_(.*)_(.*)\.zip/,'\1,\2,\3') + pkg_name = new_name.split(",")[0] + + prj = @parent_server.prjmgr.get_project_from_package_name(pkg_name) + if prj.nil? then + BuildCommServer.send_begin(req) + req.puts "Error: Requested project does not exist!" + req.puts "Info: Check project name using \"query\" command option !" + BuildCommServer.send_end(req) + return nil + end + + return prj + end + + + private + def check_project_password(prj, passwd, req) + + if prj.is_passwd_set? and not prj.passwd_match?(passwd) then + BuildCommServer.send_begin(req) + req.puts "Error: Project's password is not matched!" + req.puts "Error: Use -w option to input your project password" + BuildCommServer.send_end(req) + return false + end + + return true + end + + + private + def create_new_job( project_name, os, req ) + result = [] + + if os == "all" then + jobs = @parent_server.prjmgr.create_new_jobs_for_all_os(project_name) + result += jobs + else + new_job = @parent_server.prjmgr.create_new_job(project_name, os) + if not new_job.nil? then + result.push new_job + end + end + + if result.empty? then + BuildCommServer.send_begin(req) + req.puts "Error: Creating job failed: #{project_name}, #{os}" + BuildCommServer.send_end(req) + end + + return result + end + + + def create_new_upload_job( project_name, filename, req) + + new_job = @parent_server.prjmgr.get_project(project_name).create_new_job(filename) + + if new_job.nil? then + BuildCommServer.send_begin(req) + req.puts "Error: Creating job failed: #{project_name} #{filename}" + BuildCommServer.send_end(req) + return nil + end + + return new_job + end +end diff --git a/src/builder/Builder.rb b/src/builder/Builder.rb new file mode 100644 index 0000000..0043ae8 --- /dev/null +++ b/src/builder/Builder.rb @@ -0,0 +1,529 @@ +=begin + + Builder.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +$LOAD_PATH.unshift File.dirname(__FILE__) +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common" +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/pkg_server" +require "client" +require "utils" +require "PackageManifest" +require "log" + +class Builder + private_class_method :new + attr_accessor :id, :pkgserver_url, :log, :buildroot_dir, :cache_dir + + CONFIG_ROOT = Utils::HOME + "/.build_tools/builder" + @@instance_map = {} + + # initialize + def initialize (id, pkgserver_url, log_path, buildroot_dir, cache_dir) + @id = id + @pkgserver_url = pkgserver_url + @host_os = Utils::HOST_OS + @buildroot_dir = buildroot_dir + @cache_dir = cache_dir + @log = Log.new(log_path) + end + + + # create + def self.create (id, pkgserver_url, log_path, buildroot_dir, cache_dir) + + # check builder config root + check_builder_config_root + + # if exist , overwrite + if File.exist? "#{CONFIG_ROOT}/#{id}" + FileUtils.rm_rf "#{CONFIG_ROOT}/#{id}" + end + + # create buildroot if not set + if buildroot_dir.nil? then + buildroot_dir = "#{CONFIG_ROOT}/#{id}/buildroot" + if not File.exist? buildroot_dir then + FileUtils.mkdir_p buildroot_dir + end + end + + # create cachedir if not set + if cache_dir.nil? then + cache_dir = "#{CONFIG_ROOT}/#{id}/build_cache" + if not File.exist? cache_dir then + FileUtils.mkdir_p cache_dir + end + end + + # create new instance and return it + @@instance_map[id] = new( id, pkgserver_url, log_path, buildroot_dir, cache_dir ) + + # write config + write_builder_config( @@instance_map[id] ) + return @@instance_map[id] + end + + + def self.remove( id ) + # check builder config root + check_builder_config_root + + # check id + if File.exist? "#{CONFIG_ROOT}/#{id}" + FileUtils.rm_rf "#{CONFIG_ROOT}/#{id}" + @@instance_map[id] = nil + puts "Removed the builder \"#{id}\"" + end + end + + + def self.exist?( id ) + # check builder config root + check_builder_config_root + + # check id + if File.exist? "#{CONFIG_ROOT}/#{id}" then + return true + else + return false + end + end + + # get + def self.get( id ) + + # check instance first + if not @@instance_map[id] == nil + return @@instance_map[id] + end + + # check builder config + if not File.exist? "#{CONFIG_ROOT}/#{id}/builder.cfg" + raise RuntimeError, "The builder \"#{id}\" does not exist." + end + + # get builder config and return its object + @@instance_map[id] = read_builder_config(id) + + return @@instance_map[id] + end + + + # clean + def clean( src_path ) + + build_root_dir = @buildroot_dir + + # create pkginfo + pkginfo = PackageManifest.new("#{src_path}/package/pkginfo.manifest") + + # make clean + for pkg in pkginfo.packages + for os1 in ["linux","windows","darwin"] + if File.exist? "#{src_path}/package/#{pkg.package_name}.package.#{os1}" then + FileUtils.rm_rf "#{src_path}/package/#{pkg.package_name}.package.#{os1}" + end + end + end + + # execute + return execute_build_command("clean", src_path, build_root_dir, @host_os ) + end + + + # build + def build( src_path, os, clean, local_pkgs, use_cache ) + + # create pkginfo + pkginfo = PackageManifest.new("#{src_path}/package/pkginfo.manifest") + + # check there are packages which can be built + if not pkginfo.package_exist?(os, Utils::HOST_OS ) then + @log.error( "There are no packages which can be built on this host OS: #{Utils::HOST_OS}") + @log.error( " * Check \"Build-host-os\" in pkginfo.manifest" ) + return false + end + + # set build root + build_root_dir = @buildroot_dir + if not File.exist? build_root_dir then + FileUtils.mkdir_p build_root_dir + end + + # create client + @log.info( "Downloding client is initializing...", Log::LV_USER) + cl = Client.new(@pkgserver_url, build_root_dir, @log) + if clean then + cl.clean(true) + cl.update + end + + # install build dependencies + package_overwrite_list = [] + @log.info( "Installing dependent packages...", Log::LV_USER) + pkginfo.get_build_dependencies( os ).each do |dep| + if dep.target_os_list.count != 0 then + dep_target_os = dep.target_os_list[0] + else + dep_target_os = os + end + @log.info( " * #{dep.package_name}", Log::LV_USER) + + # get local dependent package + pkgexp = Regexp.new("\/#{dep.package_name}_.*_#{dep_target_os}\.zip$") + package_overwrite_list += local_pkgs.select{|l| l =~ pkgexp} + + # install pkgs + if not cl.install(dep.package_name, dep_target_os, true, false) then + @log.error( "Installing \"#{dep.package_name}\" failed!", Log::LV_USER) + return false + end + end + + # overwrite local dependent packages + package_overwrite_list.each do |l| + @log.info( "Overwriting...#{l}", Log::LV_USER) + cl.install_local_pkg(l,false) + end + + @log.info( "Downloading dependent source packages...", Log::LV_USER) + pkginfo.get_source_dependencies(os,@host_os).each do |dep| + @log.info( " * #{dep.package_name}", Log::LV_USER) + + if cl.download_dep_source(dep.package_name).nil? then + @log.error( "Downloading \"#{dep.package_name}\" failed!", Log::LV_USER) + return false + end + end + + # make clean + @log.info( "Make clean...", Log::LV_USER) + for pkg in pkginfo.packages + for os1 in ["linux","windows","darwin"] + if File.exist? "#{src_path}/package/#{pkg.package_name}.package.#{os1}" then + FileUtils.rm_rf "#{src_path}/package/#{pkg.package_name}.package.#{os1}" + end + end + end + + # convert path if windows + if Utils::HOST_OS == "windows" then + build_root_dir = Utils.get_unix_path( build_root_dir ) + end + + if not execute_build_command("clean", src_path, build_root_dir, os) then + return false + end + + # execute build script + #if use_cache then + # @log.info( "Make build from cache...", Log::LV_USER) + # if not execute_build_command("build_cache", src_path, build_root_dir, os) then + # @log.warn( "Build from cache failed, \"build\" target will used instead...", Log::LV_USER) + # if not execute_build_command("build", src_path, build_root_dir, os) then + # return false + # end + # end + #else + # @log.info( "Make build...", Log::LV_USER) + # if not execute_build_command("build", src_path, build_root_dir, os) then + # return false + # end + # + # # saving build cache + # if not execute_build_command("save_cache", src_path, build_root_dir, os) then + # @log.warn( "Saving cache failed...", Log::LV_USER) + # else + # @log.info( "Saved build information to cache...", Log::LV_USER) + # end + #end + if not execute_build_command("build", src_path, build_root_dir, os) then + return false + end + + # execute install script + @log.info( "Make install...", Log::LV_USER) + if not execute_build_command("install", src_path, build_root_dir, os) then + return false + end + + # write pkginfo + @log.info( "Generatiing pkginfo.manifest...", Log::LV_USER) + if not write_pkginfo_files(pkginfo,os,src_path) then + @log.error( "Failed to write pkginfo.manifest", Log::LV_USER) + return false + end + + # zip + @log.info( "Zipping...", Log::LV_USER) + if not make_zip(pkginfo,os,src_path) then + @log.error( "Creating packages failed!", Log::LV_USER) + return false + end + + return true + end + + + private + + + # check builder config root + def self.check_builder_config_root + if not File.exist? Builder::CONFIG_ROOT + puts "Builder configuation is not found." + puts "Creating new builder configuration... #{Builder::CONFIG_ROOT}" + FileUtils.mkdir_p "#{Builder::CONFIG_ROOT}" + end + end + + + # write builder configuration + def self.write_builder_config( obj ) + # create config folder + builder_dir = "#{CONFIG_ROOT}/#{obj.id}" + if not File.exist? builder_dir then + FileUtils.mkdir_p( "#{builder_dir}" ) + end + + # write configuration + File.open( "#{builder_dir}/builder.cfg", "w" ) do |f| + f.puts "ID=#{obj.id}" + f.puts "PSERVER_URL=#{obj.pkgserver_url}" + f.puts "LOG-PATH=#{obj.log.path}" + f.puts "CACHE-DIR=#{obj.cache_dir}" + end + end + + + # read builder configuration + def self.read_builder_config( id ) + pkgserver_url="" + + # read configuration + builder_dir = "#{CONFIG_ROOT}/#{id}" + log_path = nil + cache_dir = "#{CONFIG_ROOT}/#{id}/build_cache" + buildroot_dir = "#{CONFIG_ROOT}/#{id}/buildroot" + File.open( "#{builder_dir}/builder.cfg", "r" ) do |f| + f.each_line do |l| + if l.start_with?("PSERVER_URL=") + pkgserver_url = l.split("=")[1].strip + elsif l.start_with?("LOG-PATH=") + log_path = l.split("=")[1].strip + log_path = nil if log_path == "STDOUT" + elsif l.start_with?("CACHE-DIR=") + cache_dir = l.split("=")[1].strip + elsif l.start_with?("BUILDROOT-DIR=") + buildroot_dir = l.split("=")[1].strip + else + next + end + end + end + + if log_path.empty? then log_path = nil end + + # create object & return it + return new( id, pkgserver_url, log_path, buildroot_dir, cache_dir ) + end + + + # execute build command + def execute_build_command( target, src_path, build_root_dir, os ) + + + pkginfo = PackageManifest.new("#{src_path}/package/pkginfo.manifest") + env_def = + "BUILD_TARGET_OS=#{os} \ + SRCDIR=\"#{src_path}\" \ + PKG_CACHE_DIR=\"#{@cache_dir}/#{pkginfo.packages[0].source}/#{os}\" \ + ROOTDIR=\"#{build_root_dir}\" " + + # read build script + # this will ignore last lines without block + contents = [] + File.open( "#{src_path}/package/build.#{@host_os}", "r" ) do |f| + lines = [] + f.each_line do |l| + lines.push l + if l.start_with? "}" then + contents = contents + lines + lines = [] + end + end + end + + # generate shell script + File.open( "#{src_path}/.build.sh", "w" ) do |f| + f.puts "#!/bin/sh -xe" + for l in contents + f.puts l + end + + case target + when "clean" + f.puts " " + when "build" + f.puts " " + when "build_cache" + f.puts "CACHEDIR=${PKG_CACHE_DIR}/$(cache_key)" + when "save_cache" + f.puts "rm -rf ${PKG_CACHE_DIR}/*" + f.puts "CACHEDIR=${PKG_CACHE_DIR}/$(cache_key)" + f.puts "mkdir -p ${CACHEDIR}" + when "install" + f.puts " " + else + @log.warn( "Wron build-target is used: \"#{target}\"", Log::LV_USER) + return false + end + f.puts "#{target}" + f.puts "echo \"success\"" + end + Utils.execute_shell_with_log( "chmod +x #{src_path}/.build.sh", @log ) + build_command = "cd \"#{src_path}\";" + env_def + "./.build.sh" + + # execute script + if not Utils.execute_shell_with_log( build_command, @log ) then + @log.warn( "Failed on build script: \"#{target}\"", Log::LV_USER) + return false + else + Utils.execute_shell_with_log( "rm -rf #{src_path}/.build.sh", @log ) + return true + end + end + + + # write pkginfo.manifest and install/remove script + def write_pkginfo_files(pkginfo,os,src_path) + for pkg in pkginfo.packages + # skip if not support the target os + if not pkg.os.include? os + next + end + + # install script files + copy_post_install_script(pkg,os,src_path); + copy_post_remove_script(pkg,os,src_path); + + # write manifest file + install_dir = "#{src_path}/package/#{pkg.package_name}.package.#{os}" + + # if there is no intall directory, error + if not File.exist? install_dir then + @log.error( "Following directory must be created before writing pkginfo.manifest", Log::LV_USER) + @log.error( " * package/#{pkg.package_name}.package.#{os}", Log::LV_USER) + return false + end + + # write pkginfo.manifest + File.open("#{install_dir}/pkginfo.manifest", "w") do |f| + pkg.print_to_file_with_os( f, os ) + end + end + + return true + end + + + # copy post-install script + def copy_post_install_script(pkg,os,src_path) + + tar = nil + + if File.exist? "#{src_path}/package/#{pkg.package_name}.install.#{os}" + src = "#{src_path}/package/#{pkg.package_name}.install.#{os}" + else + src = nil + end + + if not src.nil? then + if os == "linux" or os == "darwin" then + tar = "#{src_path}/package/#{pkg.package_name}.package.#{os}/install.sh" + elsif os == "windows" then + tar = "#{src_path}/package/#{pkg.package_name}.package.#{os}/install.BAT" + else + puts "Unknown OS: #{os} " + return + end + + FileUtils.cp(src, tar) + end + + return + end + + + # copy post-remove script + def copy_post_remove_script(pkg,os,src_path) + + tar = nil + + if File.exist? "#{src_path}/package/#{pkg.package_name}.remove.#{os}" + src = "#{src_path}/package/#{pkg.package_name}.remove.#{os}" + else + src = nil + end + + if not src.nil? + if os == "linux" or os == "darwin" then + tar = "#{src_path}/package/#{pkg.package_name}.package.#{os}/remove.sh" + elsif os == "windows" then + tar = "#{src_path}/package/#{pkg.package_name}.package.#{os}/remove.BAT" + else + puts "Unknown OS: #{os} " + return + end + + FileUtils.cp(src, tar) + end + end + + + # create package file + def make_zip(pkginfo,os,src_path) + for pkg in pkginfo.packages + # skip if not support the target os + if not pkg.os.include? os + next + end + + # cd install dir + install_dir = "#{src_path}/package/#{pkg.package_name}.package.#{os}" + + # zip + @log.info( "Creating package file ... #{pkg.package_name}_#{pkg.version}_#{os}.zip", Log::LV_USER) + @log.info("cd \"#{install_dir}\"; zip -r -y #{src_path}/#{pkg.package_name}_#{pkg.version}_#{os}.zip *") + Utils.execute_shell_with_log("cd \"#{install_dir}\"; zip -r -y #{src_path}/#{pkg.package_name}_#{pkg.version}_#{os}.zip *", @log) + if not File.exist? "#{src_path}/#{pkg.package_name}_#{pkg.version}_#{os}.zip" then + return false + end + end + return true + end +end diff --git a/src/builder/CleanOptionParser.rb b/src/builder/CleanOptionParser.rb new file mode 100644 index 0000000..61cec43 --- /dev/null +++ b/src/builder/CleanOptionParser.rb @@ -0,0 +1,55 @@ +=begin + + CleanOptionParser.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require 'optparse' +require 'logger' + +def parse() + + #option parsing + option = {} + optparse = OptionParser.new(nil, 32, ' '*8) do |opts| + opts.banner = "Clean the package service command-line tool." + "\n" \ + + "\n" + "Usage: pkg-clean [-h] or [-v]" + "\n" \ + + "\n" + "Options:" + "\n" + + opts.on('-h','--help', 'display manual') do + puts opts + exit + end + + opts.on('-v','--version', 'display version') do + puts "DIBS(Distributed Intelligent Build System) version 1.2.0" + exit + end + end + + optparse.parse! + + return option +end diff --git a/src/builder/optionparser.rb b/src/builder/optionparser.rb new file mode 100644 index 0000000..1ecf2c5 --- /dev/null +++ b/src/builder/optionparser.rb @@ -0,0 +1,78 @@ +=begin + + optionparser.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require 'optparse' +require 'logger' + +def parse() + + #option parsing + option = {} + optparse = OptionParser.new do |opts| + opts.banner = "Build and packaging service command-line tool." + "\n" \ + + "\n" + "Usage: pkg-build -u [-o ] [-c] [-h]" + "\n" \ + + "\n" + "Options:" + "\n" + + opts.on('-u','--url ', 'remote package server url: http://127.0.0.1/dibs/unstable') do |url| + option[:url] = url + end + + option[:os] = nil + opts.on('-o','--os ', 'operating system ') do |os| + option[:os] = os + end + + option[:clean] = false + opts.on('-c','--clean', 'clean build') do + option[:clean] = true + end + + option[:rev] = false + #opts.on('-r','--rev', 'reverse build dependency check') do + # option[:rev] = true + #end + + opts.on('-h','--help', 'display manual') do + puts opts + exit + end + + opts.on('-v','--version', 'display version') do + puts "DIBS(Distributed Intelligent Build System) version 1.2.0" + exit + end + end + + optparse.parse! + + if option[:url].nil? or option[:url].empty? then + raise ArgumentError, "Usage: pkg-build -u [-o ] [-c] [-h]" + end + + return option +end diff --git a/src/common/Action.rb b/src/common/Action.rb new file mode 100644 index 0000000..7b64559 --- /dev/null +++ b/src/common/Action.rb @@ -0,0 +1,47 @@ +=begin + + Action.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +class Action + attr_accessor :time, :period + + def initialize( time, period ) + @time = time + @period = period + end + + + # initialize action + def init() + end + + + # execute action + def execute() + end + +end diff --git a/src/common/PackageManifest.rb b/src/common/PackageManifest.rb new file mode 100644 index 0000000..c6f88aa --- /dev/null +++ b/src/common/PackageManifest.rb @@ -0,0 +1,139 @@ +=begin + + PackageManifest.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +$LOAD_PATH.unshift File.dirname(__FILE__) +require "parser" + +class PackageManifest + attr_accessor :packages + + def initialize( file_path ) + @pkg_map = Parser.read_multy_pkginfo_from file_path + @packages = @pkg_map.values + end + + + # scan all build dependencies + def get_build_dependencies( target_os ) + # for all + list = [] + for pkg in @packages + # package that has the target os + if not pkg.os.include?(target_os) + next + end + + # package that has the target os + for dep in pkg.build_dep_list + list.push dep + end + end + list.uniq! + + return list + end + + + # scan all source dependencies + def get_source_dependencies( target_os, host_os ) + # for all + list = [] + for pkg in @packages + # only package that used in target os + if not pkg.os.include?(target_os) + next + end + + # package that has the host os + if not pkg.build_host_os.include?(host_os) + next + end + + # package that has the target os + for dep in pkg.source_dep_list + # if dep.target_os_list.include? target_os + list.push dep + # end + end + end + list.uniq! + + return list + end + + + # scan all install dependencies + def get_install_dependencies( target_os ) + # for all + list = [] + for pkg in @packages + # only package that used in target os + if not pkg.os.include?(target_os) + next + end + + # package that has the target os + for dep in pkg.install_dep_list + list.push dep + end + end + list.uniq! + + return list + end + + + def package_exist?(target_os, host_os) + for pkg in @packages + # only package that used in target os + if pkg.os.include?(target_os) and + pkg.build_host_os.include?(host_os) + return true + end + end + + return false + end + + + def get_version() + return @packages[0].version + end + + + def get_target_packages(target_os) + pkgs = [] + for pkg in @packages + if pkg.os.include?(target_os) then + pkgs.push pkg + end + end + + return pkgs + end +end diff --git a/src/common/ScheduledActionHandler.rb b/src/common/ScheduledActionHandler.rb new file mode 100644 index 0000000..2a0c18a --- /dev/null +++ b/src/common/ScheduledActionHandler.rb @@ -0,0 +1,97 @@ +=begin + + ScheduledActionHandler.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +$LOAD_PATH.unshift File.dirname(__FILE__) + +class ScheduledActionHandler + attr_accessor :quit + + # init + def initialize( ) + @thread = nil + @quit = false + @actions = [] + end + + + # register a action + def register( action ) + # init action + action.init + # add to list + @actions.push action + end + + + # start thread + def start() + @thread = Thread.new { + # main + thread_main() + + # close + terminate() + } + end + + + protected + + def thread_main + + while not @quit + + current_time = Time.new + + # get list + action_list = Array.new(@actions) + for action in action_list + # if its time is reached, execute action + if not action.time.nil? and current_time > action.time then + action.execute + + # if periodic action, renew the time + # else remove it from list + if action.period != 0 then + action.time = action.time + action.period + else + @actions.delete(action) + end + end + end + + # sleep 1 min + sleep 5 + end + end + + + def terminate + end + +end diff --git a/src/common/Version.rb b/src/common/Version.rb new file mode 100644 index 0000000..633d378 --- /dev/null +++ b/src/common/Version.rb @@ -0,0 +1,54 @@ +=begin + + Version.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + + +class Version < Array + def initialize s + super(s.split('.').map { |e| e.to_i }) + end + def < x + (self <=> x) < 0 + end + def <= x + (self <=> x) <= 0 + end + def > x + (self <=> x) > 0 + end + def >= x + (self <=> x) >= 0 + end + def == x + (self <=> x) == 0 + end + def compare x + if self < x then return -1 + elsif self == x then return 0 + else return 1 end + end +end diff --git a/src/common/dependency.rb b/src/common/dependency.rb new file mode 100644 index 0000000..a6e9499 --- /dev/null +++ b/src/common/dependency.rb @@ -0,0 +1,74 @@ +=begin + + dependency.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +$LOAD_PATH.unshift File.dirname(__FILE__) +require "Version" + +class Dependency + attr_accessor :package_name, :comp, :base_version, :target_os_list + def initialize (package_name, comp, base_version, target_os_list) + @package_name = package_name + @comp = comp + @base_version = base_version + @target_os_list = target_os_list + end + + def to_s + string = @package_name + if not @comp.nil? and not @base_version.nil? then + string = string + " ( #{@comp} #{@base_version} )" + end + + if not @target_os_list.empty? then + string = string + " [ #{@target_os_list.join("|")} ]" + end + return string + end + + def match? ver + if @base_version.nil? + return true + end + + # compare to base version + if @comp == ">>" + return Version.new(ver) > Version.new(@base_version) + elsif @comp == ">=" + return Version.new(ver) >= Version.new(@base_version) + elsif @comp == "==" + return Version.new(ver) == Version.new(@base_version) + elsif @comp == "<=" + return Version.new(ver) <= Version.new(@base_version) + elsif @comp == "<<" + return Version.new(ver) < Version.new(@base_version) + else + return true + end + end +end + diff --git a/src/common/fileTransfer.rb b/src/common/fileTransfer.rb new file mode 100644 index 0000000..01c30f4 --- /dev/null +++ b/src/common/fileTransfer.rb @@ -0,0 +1,98 @@ + +require 'socket' + +class FileTransfer + + @@log = nil + + def FileTransfer.set_logger(logger) + @@log = logger + end + + def FileTransfer.putfile(ip, port, username, passwd, bpath) + filename = File.basename(bpath) + uniqdir = Utils.create_uniq_name + ftp_filepath = File.join(uniqdir, filename) + + begin + ftp = Net::FTP.new + if port.nil? or port == "" then + ftp.connect(ip) + else + ftp.connect(ip, port) + end + ftp.login(username, passwd) + ftp.binary = true + ftp.mkdir(uniqdir) + ftp.chdir(uniqdir) + ftp.put(bpath) + ftp.quit + rescue => e + if not @@log.nil? then + @@log.error "FileTransfer::putfile" + end + raise e + end + return ftp_filepath + end + + def FileTransfer.getfile(ip, port, username, passwd, bpath, target) + dirname = File.dirname(bpath) + filename = File.basename(bpath) + + # target can be directory or file + if File.directory? target then + dst_file = File.join(target,filename) + else + dst_file = target + end + + begin + ftp = Net::FTP.new + if port.nil? or port == "" then + ftp.connect(ip) + else + ftp.connect(ip, port) + end + ftp.login(username, passwd) + ftp.binary = true + ftp.chdir(dirname) + ftp.get(filename, dst_file) + ftp.quit + rescue => e + @@log.error "FileTransfer::getfile" + raise e + end + return bpath + end + + def FileTransfer.cleandir(ip, port, username, passwd, path) + dirname = File.dirname(path) + + begin + ftp = Net::FTP.new + if port.nil? or port == "" then + ftp.connect(ip) + else + ftp.connect(ip, port) + end + ftp.login(username, passwd) + old_dir = ftp.pwd + ftp.chdir(dirname) + list = ftp.ls + # TODO: if list is directory? + for l in list + file = l.split(" ")[-1].strip + ftp.delete(file) + end + ftp.chdir(old_dir) + ftp.rmdir(dirname) + ftp.quit + rescue => e + @@log.error "FileTransfer::cleandir" + raise e + end + + return true + end +end diff --git a/src/common/log.rb b/src/common/log.rb new file mode 100644 index 0000000..6e06896 --- /dev/null +++ b/src/common/log.rb @@ -0,0 +1,105 @@ +=begin + + log.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require "logger" + +class Log + + attr_accessor :path + + # Log LEVEL + LV_NORMAL = 1 + LV_USER = 2 + + + # init + def initialize(path, lv=LV_USER) + @path = path + if @path.nil? then + @logger = Logger.new(STDOUT) + else + @logger = Logger.new(path, "monthly") + end + # if log level is bigger/equal to second out level + # , we will send the log to second-out + @second_out_level = lv + @second_out = nil + # diable logger format + @default_formatter = @logger.formatter + @no_prefix_formatter = proc do |severity, datetime, progname, msg| + " >#{msg}" + end + end + + + def info(msg, lv=LV_NORMAL) + if @path.nil? and not @second_out.nil? then puts "Info: #{msg}" + else @logger.info msg end + if not @second_out.nil? and lv >= @second_out_level then + output_extra "Info: " + msg + end + end + + def warn(msg, lv=LV_NORMAL) + if @path.nil? and not @second_out.nil? then puts "Warn: #{msg}" + else @logger.warn msg end + if not @second_out.nil? and lv >= @second_out_level then + output_extra "Warn: " + msg + end + end + + + def error(msg, lv=LV_NORMAL) + if @path.nil? and not @second_out.nil? then puts "Error: #{msg}" + else @logger.error msg end + if not @second_out.nil? and lv >= @second_out_level then + output_extra "Error: " + msg + end + end + + + def output(msg, lv=LV_NORMAL) + if @path.nil? and not @second_out.nil? then puts msg + else @logger.info msg end + if not @second_out.nil? and lv >= @second_out_level then + output_extra msg + end + end + + + def close + @second_out= nil + end + + + protected + def output_extra(msg) + #do nothing + end + +end diff --git a/src/common/mail.rb b/src/common/mail.rb new file mode 100644 index 0000000..5005b70 --- /dev/null +++ b/src/common/mail.rb @@ -0,0 +1,86 @@ +=begin + + mail.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require 'net/smtp' +$LOAD_PATH.unshift File.dirname(__FILE__) +require "mailConfig" + +class Mail + + def Mail.send_mail( mail_to, subject, contents ) + + if mail_to.nil? or mail_to.empty? \ + or subject.nil? or subject.empty? \ + or contents.nil? or contents.empty? then + return false + end + + message = < e + puts "Can't send result email" + puts e.message + end + end + end + + def Mail.parse_email( low_email_list ) + mail_list = [] + low_email_list.split(",").each do | low_email | + ms = low_email.index('<') + me = low_email.index('>') + if ms.nil? or me.nil? then + next + else + mail = low_email[(ms+1)..(me-1)] + end + + if mail.include?("@") then mail_list.push mail end + end + + return mail_list + end +end diff --git a/src/common/mailConfig.rb b/src/common/mailConfig.rb new file mode 100644 index 0000000..73fb8c3 --- /dev/null +++ b/src/common/mailConfig.rb @@ -0,0 +1,2 @@ +SENDER = "sdk.slp@samsung.com" +SERVER_ADDR = "http://172.21.17.46:8080" diff --git a/src/common/package.rb b/src/common/package.rb new file mode 100644 index 0000000..d3b28e2 --- /dev/null +++ b/src/common/package.rb @@ -0,0 +1,166 @@ +=begin + + package.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +class Package + attr_accessor :package_name, :label, :version, :os, :build_host_os, :maintainer, :attribute, :install_dep_list, :build_dep_list, :source_dep_list, :conflicts, :source, :src_path, :path, :origin, :checksum, :size, :description + def initialize (package_name) + @package_name = package_name + @label = "" + @version = "" + @os = "" + @build_host_os = [] + @maintainer = "" + @attribute = [] + @install_dep_list = [] + @build_dep_list = [] + @source_dep_list = [] + @conflicts = [] + @source = "" + @src_path = "" + @path = "" + @origin = "" + @checksum = "" + @size = "" + @description = "" + end + def print + puts "Package : " + @package_name + if not @label.empty? then puts "Label : " + @label end + if not @version.empty? then puts "Version : " + @version end + if not @os.empty? then puts "OS : " + @os end + if not @build_host_os.empty? then puts "Build-host-os : " + @build_host_os.join("|") end + if not @maintainer.empty? then puts "Maintainer : " + @maintainer end + if not @attribute.empty? then puts "Attribute : " + @attribute.join("|") end + if not @install_dep_list.empty? then + puts "Install-dependency : " + @install_dep_list.map {|x| x.to_s}.join(", ") + end + if not @build_dep_list.empty? then + puts "Build-dependency : " + @build_dep_list.map {|x| x.to_s}.join(", ") + end + if not @source_dep_list.empty? then + puts "Source-dependency : " + @source_dep_list.map {|x| x.to_s}.join(", ") + end + if not @conflicts.empty? then + puts "Conflicts : " + @conflicts.map {|x| x.to_s}.join(", ") + end + if not @source.empty? then puts "Source : " + @source end + if not @src_path.empty? then puts "Src-path : " + @src_path end + if not @path.empty? then puts "Path : " + @path end + if not @origin.empty? then puts "Origin : " + @origin end + if not @checksum.empty? then puts "SHA256 : " + @checksum end + if not @size.empty? then puts "Size : " + @size end + if not @description.empty? then puts "Description : " + @description end + end + + def to_s + string = "Package : " + @package_name + if not @label.empty? then string = string + "\n" + "Label : " + @label end + if not @version.empty? then string = string + "\n" + "Version : " + @version end + if not @os.empty? then string = string + "\n" + "OS : " + @os end + if not @build_host_os.empty? then string = string + "\n" + "Build-host-os : " + @build_host_os.join("|") end + if not @maintainer.empty? then string = string + "\n" + "Maintainer : " + @maintainer end + if not @attribute.empty? then string = string + "\n" + "Attribute : " + @attribute.join("|") end + if not @install_dep_list.empty? then + string = string + "\n" + "Install-dependency : " + @install_dep_list.map {|x| x.to_s}.join(", ") + end + if not @build_dep_list.empty? then + string = string + "\n" + "Build-dependency : " + @build_dep_list.map {|x| x.to_s}.join(", ") + end + if not @source_dep_list.empty? then + string = string + "\n" + "Source-dependency : " + @source_dep_list.map {|x| x.to_s}.join(", ") + end + if not @conflicts.empty? then + string = string + "\n" + "Conflicts : " + @conflicts.map {|x| x.to_s}.join(", ") + end + if not @source.empty? then string = string + "\n" + "Source : " + @source end + if not @src_path.empty? then string = string + "\n" + "Src-path : " + @src_path end + if not @path.empty? then string = string + "\n" + "Path : " + @path end + if not @origin.empty? then string = string + "\n" + "Origin : " + @origin end + if not @checksum.empty? then string = string + "\n" + "SHA256 : " + @checksum end + if not @size.empty? then string = string + "\n" + "Size : " + @size end + if not @description.empty? then string = string + "\n" + "Description : " + @description end + return string + end + def print_to_file(file) + file.puts "Package : " + @package_name + if not @label.empty? then file.puts "Label : " + @label end + if not @version.empty? then file.puts "Version : " + @version end + if not @os.empty? then file.puts "OS : " + @os end + if not @build_host_os.empty? then file.puts "Build-host-os : " + @build_host_os.join("|") end + if not @maintainer.empty? then file.puts "Maintainer : " + @maintainer end + if not @attribute.empty? then file.puts "Attribute : " + @attribute.join("|") end + if not @install_dep_list.empty? then + file.puts "Install-dependency : " + @install_dep_list.map {|x| x.to_s}.join(", ") + end + if not @build_dep_list.empty? then + file.puts "Build-dependency : " + @build_dep_list.map {|x| x.to_s}.join(", ") + end + if not @source_dep_list.empty? then + file.puts "Source-dependency : " + @source_dep_list.map {|x| x.to_s}.join(", ") + end + if not @conflicts.empty? then + file.puts "Conflicts : " + @conflicts.map {|x| x.to_s}.join(", ") + end + if not @source.empty? then file.puts "Source : " + @source end + if not @src_path.empty? then file.puts "Src-path : " + @src_path end + if not @path.empty? then file.puts "Path : " + @path end + if not @origin.empty? then file.puts "Origin : " + @origin end + if not @checksum.empty? then file.puts "SHA256 : " + @checksum end + if not @size.empty? then file.puts "Size : " + @size end + if not @description.empty? then file.puts "Description : " + @description end + end + + def print_to_file_with_os(file,target_os) + file.puts "Package : " + @package_name + if not @version.empty? then file.puts "Version : " + @version end + if not @label.empty? then file.puts "Label : " + @label end + file.puts "OS : " + target_os + if not @build_host_os.empty? then file.puts "Build-host-os : " + @build_host_os.join("|") end + if not @maintainer.empty? then file.puts "Maintainer : " + @maintainer end + if not @attribute.empty? then file.puts "Attribute : " + @attribute.join("|") end + if not @install_dep_list.empty? then + file.puts "Install-dependency : " + @install_dep_list.map {|x| x.to_s}.join(", ") + end + if not @build_dep_list.empty? then + file.puts "Build-dependency : " + @build_dep_list.map {|x| x.to_s}.join(", ") + end + if not @source_dep_list.empty? then + file.puts "Source-dependency : " + @source_dep_list.map {|x| x.to_s}.join(", ") + end + if not @conflicts.empty? then + file.puts "Conflicts : " + @conflicts.map {|x| x.to_s}.join(", ") + end + if not @source.empty? then file.puts "Source : " + @source end + if not @src_path.empty? then file.puts "Src-path : " + @src_path end + if not @path.empty? then file.puts "Path : " + @path end + if not @origin.empty? then file.puts "Origin : " + @origin end + if not @checksum.empty? then file.puts "SHA256 : " + @checksum end + if not @size.empty? then file.puts "Size : " + @size end + if not @description.empty? then file.puts "Description : " + @description end + end +end diff --git a/src/common/parser.rb b/src/common/parser.rb new file mode 100644 index 0000000..deca8b9 --- /dev/null +++ b/src/common/parser.rb @@ -0,0 +1,246 @@ +=begin + + parser.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +$LOAD_PATH.unshift File.dirname(__FILE__) +require "package" +require "dependency" + +class Parser + def Parser.read_multy_pkginfo_from (file) + pkglist = {} + File.open file,"r" do |f| + #variable initialize + package_name = "" + label = "" + version = "" + os = "" + build_host_os = [] + maintainer = "" + attribute = [] + install_dep_list = [] + build_dep_list = [] + source_dep_list = [] + conflicts = [] + source = "" + src_path = "" + path = "" + origin = "" + checksum = "" + size = "" + description = "" + + f.each_line do |l| + # separator + if l.strip.empty? then + #make package and initialize + if not package_name.empty? and not os.empty? then + package = Package.new(package_name) + if not label.empty? then package.label = label end + if not version.empty? then package.version = version end + if not os.empty? then package.os = os end + if not build_host_os.empty? then package.build_host_os = build_host_os end + if not maintainer.empty? then package.maintainer = maintainer end + if not attribute.empty? then package.attribute = attribute end + if not install_dep_list.empty? then package.install_dep_list = install_dep_list end + if not build_dep_list.empty? then package.build_dep_list = build_dep_list end + if not source_dep_list.empty? then package.source_dep_list = source_dep_list end + if not conflicts.empty? then package.conflicts = conflicts end + if not source.empty? then package.source = source end + if not src_path.empty? then package.src_path = src_path end + if not path.empty? then package.path = path end + if not origin.empty? then package.origin = origin end + if not checksum.empty? then package.checksum = checksum end + if not size.empty? then package.size = size end + if not description.empty? then package.description = description end + pkglist[[package_name,os]] = package + package_name = "" + label = "" + version = "" + os = "" + bulid_host_os = [] + maintainer = "" + attribute = [] + install_dep_list = [] + build_dep_list = [] + source_dep_list = [] + conflicts = [] + source = "" + src_path = "" + path = "" + origin = "" + checksum = "" + size = "" + description = "" + end + next + end + # commant + if l.strip.start_with? "#" then next end + #contents + dsic_on = false + case l.strip.split(':')[0].strip + when /^Package/i then + package_name = l.sub(/^[ \t]*Package[ \t]*:[ \t]*/i,"").strip + disc_on=false + when /^Label/i then + label = l.sub(/^[ \t]*Label[ \t]*:[ \t]*/i,"").strip + disc_on=false + when /^Version/i then + version = l.sub(/^[ \t]*Version[ \t]*:[ \t]*/i,"").strip + disc_on=false + when /^OS/i then + os = l.sub(/^[ \t]*OS[ \t]*:[ \t]*/i,"").strip + disc_on=false + when /^Build-host-os/i then + build_host_os = l.sub(/^[ \t]*Build-host-os[ \t]*:[ \t]*/i,"").tr(" \t\n\r", "").split("|") + disc_on=false + when /^Maintainer/i then + maintainer = l.sub(/^[ \t]*Maintainer[ \t]*:[ \t]*/i,"").strip + disc_on=false + when /^Attribute/i then + attribute = l.sub(/^[ \t]*Attribute[ \t]*:[ \t]*/i,"").tr(" \t\n\r","").split("|") + disc_on=false + when /^Install-dependency/i then + install_dep_list = dep_parser l.sub(/^[ \t]*Install-dependency[ \t]*:[ \t]*/i,"").split(',') + disc_on=false + when /^Build-dependency/i then + build_dep_list = dep_parser l.sub(/^[ \t]*Build-dependency[ \t]*:[ \t]*/i,"").split(',') + disc_on=false + when /^Source-dependency/i then + source_dep_list = dep_parser l.sub(/^[ \t]*Source-dependency[ \t]*:[ \t]*/i,"").split(',') + disc_on=false + when /^Conflicts/i then + conflicts = dep_parser l.sub(/^[ \t]*Conflicts[ \t]*:[ \t]*/i,"").split(',') + disc_on=false + when /^Source/i then + source = l.sub(/^[ \t]*Source[ \t]*:[ \t]*/i,"").strip + disc_on=false + when /^Src-path/i then + src_path = l.sub(/^[ \t]*Src-path[ \t]*:[ \t]*/i,"").strip + disc_on=false + when /^Path/i then + path = l.sub(/^[ \t]*Path[ \t]*:[ \t]*/i,"").strip + disc_on=false + when /^Origin/i then + origin = l.sub(/^[ \t]*Origin[ \t]*:[ \t]*/i,"").strip + disc_on=false + when /^SHA256/i then + checksum = l.sub(/^[ \t]*SHA256[ \t]*:[ \t]*/i,"").strip + disc_on=false + when /^Size/i then + size = l.sub(/^[ \t]*Size[ \t]*:[ \t]*/i,"").strip + disc_on=false + when /^Description/i then + description = l.sub(/^[ \t]*Description[ \t]*:[ \t]*/i,"") + disc_on=true + else + if disc_on then + description = description + l + else + puts "unknown section : #{l}" + end + end + + end + #i essent + + # check last package + if not package_name.empty? and not os.empty? then + package = Package.new(package_name) + if not label.empty? then package.label = label end + if not version.empty? then package.version = version end + if not os.empty? then package.os = os end + if not build_host_os.empty? then package.build_host_os = build_host_os end + if not maintainer.empty? then package.maintainer = maintainer end + if not attribute.empty? then package.attribute = attribute end + if not install_dep_list.empty? then package.install_dep_list = install_dep_list end + if not build_dep_list.empty? then package.build_dep_list = build_dep_list end + if not source_dep_list.empty? then package.source_dep_list = source_dep_list end + if not conflicts.empty? then package.conflicts = conflicts end + if not source.empty? then package.source = source end + if not src_path.empty? then package.src_path = src_path end + if not path.empty? then package.path = path end + if not origin.empty? then package.origin = origin end + if not checksum.empty? then package.checksum = checksum end + if not size.empty? then package.size = size end + if not description.empty? then package.description = description end + pkglist[[package_name,os]] = package + end + end + return pkglist + end + + def Parser.read_single_pkginfo_from (file) + return read_repo_pkg_list_from(file).values[0] + end + + def Parser.read_repo_pkg_list_from (file) + result = {} + read_multy_pkginfo_from(file).values.each { |x| result[x.package_name]=x } + return result + end + + private + def Parser.dep_parser (string_list) + dependency_list = [] + string_list.each do |dep| + #variable initialize + package_name = "" + comp = nil + base_version = nil + target_os_list = [] + #string trim + dependency = dep.tr " \t\r\n", "" + #version extract + vs = dependency.index('(') + ve = dependency.index(')') + if not vs.nil? and not ve.nil? then + comp = dependency[(vs+1)..(vs+2)] + base_version = dependency[(vs+3)..(ve-1)] + end + #os list extract + os = dependency.index('[') + oe = dependency.index(']') + if not os.nil? and not oe.nil? then + target_os_list = dependency[(os+1)..(oe-1)].split("|") + end + # package_name extract + pe = dependency.index(/[\]\[\)\(]/) + if pe.nil? + package_name = dependency + else + package_name = dependency[0..pe-1] + end + #package_name check + if not package_name.empty? then + dependency_list.push Dependency.new(package_name,comp,base_version,target_os_list) + end + end + return dependency_list + end +end diff --git a/src/common/utils.rb b/src/common/utils.rb new file mode 100644 index 0000000..8098a62 --- /dev/null +++ b/src/common/utils.rb @@ -0,0 +1,318 @@ +=begin + + utils.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +class Utils + + if defined?(HOST_OS).nil? then + case `uname -s`.strip + when "Linux" + HOST_OS = "linux" + when /MINGW32.*/ + HOST_OS = "windows" + when "Darwin" + HOST_OS = "darwin" + else + end + end + + # set static variable in WORKING_DIR, HOME + if defined?(WORKING_DIR).nil? then WORKING_DIR = Dir.pwd end + if defined?(HOME).nil? then + # get home directory, using Dir.chdir + Dir.chdir + HOME = Dir.pwd + Dir.chdir WORKING_DIR + end + + def Utils.create_uniq_name + time = Time.new + # uniq snapshot_name name is year_month_day_hour_min_sec_microsec + return time.strftime("%m%d%H%M%S") + time.usec.to_s() + end + + def Utils.is_url_remote(url) + if url.nil? then + return false + end + + protocol = url.split(':')[0] + + case protocol + when "http" then + return true + else + return false + end + end + + # if source_ver > target_ver, return -1 + # if source_ver < target_ver, return 1 + # if source_ver == target_ver, return 0 + def Utils.compare_version(source_ver, target_ver) + sver = source_ver.split('-')[0] + tver = target_ver.split('-')[0] + + arr_sver = sver.split('.') + arr_tver = tver.split('.') + + slen = arr_sver.length + tlen = arr_tver.length + len = tlen + + if slen > tlen then + gap = slen - tlen + gap.times do + arr_tver.push("0") + end + len = slen + elsif tlen > slen then + gap = tlen - slen + gap.times do + arr_sver.push("0") + end + len = tlen + end + + len.times do |i| + if arr_sver[i].to_i < arr_tver[i].to_i then + return 1 + elsif arr_sver[i].to_i > arr_tver[i].to_i then + return -1 + end + end + + return 0 + end + + + def Utils.execute_shell(cmd) + ret = false + if HOST_OS.eql? "windows" then + mingw_path = "sh.exe -c " + cmd = cmd.gsub("\"", "\\\"") + cmd = mingw_path + "\"#{cmd}\"" + end + + `#{cmd}` + if $?.to_i == 0 then ret = true else ret = false end + + return ret + end + + + def Utils.execute_shell_return(cmd) + result_lines = [] + + if HOST_OS.eql? "windows" then + mingw_path = "sh.exe -c " + cmd = cmd.gsub("\"", "\\\"") + cmd = mingw_path + "\"#{cmd}\"" + end + + # get result + IO.popen("#{cmd} 2>&1") { |io| + io.each do |line| + result_lines.push line + end + } + + if $?.to_i == 0 then + return result_lines + else + return nil + end + end + + def Utils.execute_shell_return_ret(cmd) + if HOST_OS.eql? "windows" then + mingw_path = "sh.exe -c " + cmd = cmd.gsub("\"", "\\\"") + cmd = mingw_path + "\"#{cmd}\"" + end + + return `#{cmd}` + end + + def Utils.execute_shell_with_log(cmd, log) + + if HOST_OS.eql? "windows" then + mingw_path = "sh.exe -c " + cmd = cmd.gsub("\"", "\\\"") + cmd = mingw_path + "\"#{cmd}\"" + end + + # print log + IO.popen("#{cmd} 2>&1") { |io| + io.each do |line| + log.output line + end + } + + if $?.to_i == 0 then + return true + else + return false + end + end + + + def Utils.is_absolute_path(path) + if HOST_OS.eql? "linux" or HOST_OS.eql? "darwin" then + # if path start "/" then absoulte path + if path.start_with?("/") then + return true + else + return false + end + elsif HOST_OS.eql? "windows" then + # if path start "c:/" or "D:/" or ... then absoulte path + if path =~ /^[a-zA-Z]:[\/]/ then + return true + else + return false + end + else + puts "HOST_OS is invalid" + end + end + + + # this will be used on MinGW/MSYS + def Utils.get_unix_path(path) + if HOST_OS.eql? "linux" or HOST_OS.eql? "darwin" then + return path + elsif HOST_OS.eql? "windows" then + new_path = path + if is_absolute_path( new_path ) then + new_path = "/" + new_path[0,1] + new_path[2..-1] + end + return new_path + else + puts "HOST_OS is invalid" + return path + end + end + + def Utils.file_lock(lock_file_name) + lock_file = File.new(lock_file_name, File::RDWR|File::CREAT, 0644) + lock_file.flock(File::LOCK_EX) + lock_file.rewind + lock_file.flush + lock_file.truncate(lock_file.pos) + + return lock_file + end + + def Utils.file_unlock(lock_file) + lock_file.close + end + + def Utils.parse_server_addr(saddr) + addr = saddr.split(":") + return nil unless addr.length == 2 + return addr + end + + def Utils.parse_ftpserver_url(surl) + return nil unless surl.start_with? "ftp://" + + surl = surl[6..-1] + parse1 = surl.split("@") + return nil unless parse1.length == 2 + + idpw = parse1[0] + url = parse1[1] + parse1 = idpw.split(":") + return nil unless parse1.length == 2 + + id = parse1[0] + passwd = parse1[1] + if url.end_with? "/" then url = url.chop end + + parse1 = url.split(":") + if parse1.length == 2 then + ip = parse1[0] + port = parse1[1] + elsif parse1.length == 1 then + ip = parse1[0] + port = 21 + else + return nil + end + + return [ip, port, id, passwd] + end + + + def Utils.generate_ftp_url(addr, port, username, passwd) + return "ftp://#{username}:#{passwd}@#{addr}:#{port}" + end + + + def Utils.extract_a_file(file_path, target_file, path) + dirname = File.dirname(file_path) + filename = File.basename(file_path) + ext = File.extname(filename) + + # path should be unix path if it is used in tar command + _package_file_path = Utils.get_unix_path(file_path) + _path = Utils.get_unix_path(path) + + case ext + when ".zip" then + if not path.nil? then + extract_file_command = "unzip -xo #{_package_file_path} #{target_file} -d #{_path}" + else + extract_file_command = "unzip -xo #{_package_file_path} #{target_file}" + end + when ".tar" then + if not path.nil? then + extract_file_command = "tar xf #{_package_file_path} -C #{_path} #{target_file}" + else + extract_file_command = "tar xf #{_package_file_path} #{target_file}" + end + end + + # check exit code + ret = execute_shell "#{extract_file_command}" + if not ret then return false end + + # check result file + if not path.nil? then + target_file_path = File.join(path, target_file) + else + target_file_path = target_file + end + + if not File.exist? target_file_path then + return false + else + return true + end + end +end diff --git a/src/pkg_server/SocketRegisterListener.rb b/src/pkg_server/SocketRegisterListener.rb new file mode 100644 index 0000000..6e89ba6 --- /dev/null +++ b/src/pkg_server/SocketRegisterListener.rb @@ -0,0 +1,168 @@ +require 'socket' + +$LOAD_PATH.unshift File.dirname(__FILE__) +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common" +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/build_server" +require "packageServerConfig" +require "fileTransfer" +require "BuildComm" +require "net/ftp" + +class SocketRegisterListener + + # initialize + def initialize (parent) + @parent_server = parent + @thread = nil + @finish_loop = false + @log = @parent_server.log + end + + # start listening + def start() + @log.info "SocketRegisterListener start" + @thread = Thread.new { + main() + } + end + + # quit listening + def stop_listening() + @finish_loop = true + end + + private + + # thread main + def main() + @log.info "SocketRegisterListener entering main loop" + # server open + begin + @comm_server = BuildCommServer.new(@parent_server.port, @log) + rescue => e + @log.info "Server creation failed" + @log.error e.message + @log.error e.backtrace.inspect + return + end + + # loop + @log.info "Entering Control Listening Loop ... " + @finish_loop = false + @comm_server.wait_for_connection(@finish_loop) do |req| + begin + handle_job_request( req ) + rescue => e + @log.info "error occured in handle_job_request function" + @log.error e.message + @log.error e.backtrace.inspect + end + end + + # quit + @comm_server.terminate + end + + # wait for job requests + def wait_for_job_requests + req_list = [] + req_list.push @tcp_server.accept + + return req_list + end + + # handle job request + def handle_job_request( req ) + + # read request + req_line = req.gets + if req_line.nil? then return end + + # parse request + cmd = "" + if req_line.split(",").count > 0 then + cmd = req_line.split(",")[0].strip + end + + case cmd + when "UPLOAD" + Thread.new { + handle_cmd_upload( req_line, req ) + } + when "REGISTER" + handle_cmd_register( req_line, req ) + when "STOP" + handle_cmd_stop( req_line, req ) + else + @log.error "Received Unknown REQ: #{req_line}" + end + @log.info "REQ processing done" + end + + # "UPLOAD" + def handle_cmd_upload( line, req ) + @log.info "Received File transfer REQ : #{line}" + BuildCommServer.send_begin(req) + begin + @comm_server.receive_file(req, @parent_server.incoming_path) + rescue => e + @log.error "Failed to transfer file" + @log.error e.message + @log.error e.backtrace.inspect + BuildCommServer.send_end(req) + return + end + BuildCommServer.send_end(req) + end + + # "Register" + def handle_cmd_register( line, req ) + @log.info "Received register REQ : #{line}" + + @parent_server.reload_dist_package() + + tok = line.split(",").map { |x| x.strip } + BuildCommServer.send_begin(req) + if tok.count < 3 then + @log.error "Received Wrong REQ : #{line}" + BuildCommServer.send(req, "ERROR,Invalid REQ format") + return + end + dist_name = tok[1].strip + + file_path_list = [] + + idx = 2 + while idx < tok.length do + file_path_list.push "#{@parent_server.incoming_path}/#{tok[idx]}" + idx = idx + 1 + end + + begin + snapshot_name = @parent_server.register( file_path_list, dist_name, true, false) + rescue => e + @log.error "register failed" + @log.error e.message + @log.error e.backtrace.inspect + BuildCommServer.send(req, "ERROR,#{e.message}") + @parent_server.release_lock_file + return + end + + BuildCommServer.send(req,"SUCC,#{snapshot_name}") + BuildCommServer.send_end(req) + end + + # "STOP" + def handle_cmd_stop( line, req ) + @log.info "Received STOP REQ" + + @parent_server.finish = true + BuildCommServer.send_begin(req) + BuildCommServer.send(req,"SUCC") + BuildCommServer.send_end(req) + BuildCommServer.disconnect(req) + @log.info "Package server stop" + end +end + diff --git a/src/pkg_server/client.rb b/src/pkg_server/client.rb new file mode 100644 index 0000000..5b96ce1 --- /dev/null +++ b/src/pkg_server/client.rb @@ -0,0 +1,1452 @@ + +=begin + + client.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require "fileutils" +require "thread" +$LOAD_PATH.unshift File.dirname(__FILE__) +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common" +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/build_server" +require "downloader" +require "installer" +require "fileTransfer" +require "packageServerConfig" +require "package" +require "parser" +require "utils" +require "log" +require "Version" +require "net/ftp" +$update_mutex = Mutex.new +class Client + + # constant + SUPPORTED_OS = ["linux", "windows", "darwin"] + PKG_LIST_FILE_PREFIX = "pkg_list_" + INSTALLED_PKG_LIST_FILE = "installedpackage.list" + CONFIG_PATH = "#{PackageServerConfig::CONFIG_ROOT}/client" + PACKAGE_INFO_DIR = ".info" + DEFAULT_INSTALL_DIR = "#{Utils::HOME}/build_root" + DEFAULT_SERVER_ADDR = "http://172.21.17.55/dibs/unstable" + + attr_accessor :server_addr, :location, :pkg_hash_os, :is_server_remote, :installed_pkg_hash_loc, :archive_pkg_list, :all_dep_list, :log + + public + # initialize + # create "remote package hash" and "installed package hash" + # @server_addr = server address (can be included distribution, snapshot) + # @location = client location (download and install file to this location) + def initialize(server_addr, location, logger) + + # create directory + if not File.exist? CONFIG_PATH then FileUtils.mkdir_p "#{CONFIG_PATH}" end + + # set default server address, location + if server_addr.nil? then server_addr = get_default_server_addr() end + if location.nil? then location = get_default_inst_dir() end + + # chop server address, if end with "/" + if server_addr.strip.end_with? "/" then server_addr = server_addr.chop end + + @server_addr = server_addr + @location = location + @pkg_hash_os = {} + @installed_pkg_hash_loc = {} + @archive_pkg_list = [] + @all_dep_list = [] + @is_server_remote = Utils.is_url_remote(server_addr) + + # set log + if logger.nil? or logger.class.to_s.eql? "String" then + @log = Log.new(logger) + else + @log = logger + end + + FileInstaller.set_logger(@log) + FileDownLoader.set_logger(@log) + FileTransfer.set_logger(@log) + + # read installed pkg list, and create hash + if not File.exist? @location then FileUtils.mkdir_p "#{@location}" end + create_installed_pkg_hash() + + # readk remote pkg list, and hash list + create_remote_pkg_hash(false) + @log.info "Initialize - #{server_addr}, #{location}" + end + + public + # update package list from server + def update() + # update operation must be processed one by one + $update_mutex.synchronize { + if not create_remote_pkg_hash(true) then + @log.error "\"#{@server_addr}\" does not have package list file properly." + return false + end + create_default_config(@server_addr) + @log.info "Update package list from \"#{@server_addr}\".. OK" + } + return true + end + + public + # download package + def download(pkg_name, os, trace) + + dependent_pkg_list = [] + + # get dependent list + if trace then + dependent_pkg_list = get_install_dependent_packages(pkg_name, os, true, false) + if dependent_pkg_list.nil? then + @log.error "Failed to get dependency for \"#{pkg_name}\" package" + return nil + end + else dependent_pkg_list = [pkg_name] end + + surl = nil + addr_arr = @server_addr.split('/') + if addr_arr[-2].eql? "snapshots" then + surl = @server_addr + "/../.." + else + surl = @server_addr + end + + # download files + file_local_path = [] + dependent_pkg_list.each do |p| + pkg_path = get_attr_from_pkg(p, os, "path") + pkg_ver = get_attr_from_pkg(p, os, "version") + if pkg_path.nil? or pkg_ver.nil? then + @log.error "\"#{p}\" package does not exist in package server. If it exist in package server, then try \"pkg-cli update\"" + return nil + end + url = surl + pkg_path + filename = pkg_path.split('/')[-1] + if not FileDownLoader.download(url, @location) then + @log.error "Failed download #{pkg_name} [#{pkg_ver}]" + return nil + end + + file_path = File.join(@location, filename) + file_local_path.push(file_path) + @log.info "Downloaded \"#{p} [#{pkg_ver}]\" package file.. OK" + #@log.info " [path : #{file_path}]" + end + + if trace then + @log.info "Downloaded \"#{pkg_name}\" package with all dependent packages.. OK" + else + @log.info "Downloaded only \"#{pkg_name}\" package.. OK" + end + @log.info " [path : #{file_local_path.join(", ")}]" + + return file_local_path + end + + public + # download source package + def download_source(pkg_name, os) + + # get source file path + src_path = get_attr_from_pkg(pkg_name, os, "src_path") + if src_path.nil? or src_path.empty? then + @log.error "#{pkg_name} package does not have source" + return nil + end + file_url = nil + + addr_arr = @server_addr.split('/') + if addr_arr[-2].eql? "snapshots" then + surl = @server_addr + "/../.." + src_path + else + surl = @server_addr + src_path + end + + # download file + filename = src_path.split('/')[-1] + if not FileDownLoader.download(surl, @location) then + @log.error "Failed download #{pkg_name} source" + return nil + end + file_local_path = File.join(@location, filename) + @log.info "Downloaded source of #{pkg_name} package.. OK" + @log.info " [path : #{file_local_path}]" + + return file_local_path + end + + public + # download dependent source + def download_dep_source(file_name) + + file_url = nil + + addr_arr = @server_addr.split('/') + if addr_arr[-2].eql? "snapshots" then + file_url = @server_addr + "/../../source/" + file_name + else + file_url = @server_addr + "/source/#{file_name}" + end + if not FileDownLoader.download(file_url, @location) then + @log.error "Failed download #{file_name}" + return nil + end + file_local_path = File.join(@location, file_name) + @log.info "Downloaded \"#{file_name}\" source file.. OK" + @log.info " [path : #{file_local_path}]" + + return file_local_path + end + + public + # check archive file + def check_archive_file(file_name) + + result = false + filename = "archive_pkg_list" + local_file_path = File.join(CONFIG_PATH, filename) + if File.exist? local_file_path then + File.open(local_file_path, "r") do |f| + f.each_line do |l| + if l.strip.eql? file_name.strip then + result = true + break + end + end + end + end + return result + end + + public + # upload package + def upload(ip, port, ftp_addr, ftp_port, ftp_username, ftp_passwd, binary_path_list) + + # check ip and port + if ip.nil? or port.nil? then + @log.error "Ip and port should be set." + return nil + end + + # check binary path list + if binary_path_list.nil? or binary_path_list.empty? then + @log.error "Binary package path should be set." + return nil + end + + # upload file + binary_list = [] + binary_path_list.each do |bpath| + filename = File.basename(bpath) + client = BuildCommClient.create(ip, port) + + if client.nil? then + @log.error "Failed to create BuildCommClient instance.." + return nil + end + + @log.info "Send ready REQ.. [UPLOAD]" + result = client.send("UPLOAD") + if not result then + @log.error "Failed to send ready REQ.." + return nil + end + + begin + result = client.send_file(ftp_addr, ftp_port, ftp_username, ftp_passwd, bpath) + rescue => e + @log.error "FTP failed to put file (exception)" + @log.error "#{e.message}" + @log.error e.backtrace.inspect + return nil + end + + if not result then + @log.error "FTP failed to put file (result is false)" + return nil + end + + client.terminate + binary_list.push(filename) + end + + # register file + client = BuildCommClient.create(ip, port) + dist = get_distribution + if dist.empty? then + @log.error "Distribution is empty.." + return nil + end + + @log.info "Send register message.. [REGISTER,#{dist},#{binary_list.join(",")}]" + snapshot = nil + if client.send "REGISTER,#{dist},#{binary_list.join(",")}" then + output = client.read_lines do |l| + line = l.split(",") + if line[0].strip == "ERROR" then + @log.error l.strip + return nil + elsif line[0].strip == "SUCC" then + snapshot = line[1].strip + end + end + if not output then + @log.error "Failed to register" + return nil + end + end + + client.terminate + snapshot = @server_addr + "/snapshots/" + snapshot + @log.info "Registered successfully! [#{binary_path_list.join(",")}]" + if snapshot.empty? then + @log.error "Failed to generate snapshot" + end + + return snapshot + end + + private + # verify package before uploading + def verify_upload(pkg_name, pkg_path) + + manifest_file = "pkginfo.manifest" + uniq_name = Utils.create_uniq_name + path = Utils::HOME + "/tmp/#{uniq_name}" + if not File.exist? path then FileUtils.mkdir_p "#{path}" end + begin + if not FileInstaller.extract_a_file(pkg_path, manifest_file, path) then + @log.error "The \"pkginfo.manifest\" file does not exist in \"#{pkg_path}\"" + return false + end + manifest_path = File.join(path, manifest_file) + pkg = Parser.read_single_pkginfo_from manifest_path + FileUtils.rm_f(manifest_path) + FileUtils.remove_dir(path, true) + rescue Interrupt + @log.error "Client: Interrupted.." + FileUtils.rm_f(manifest_path) + FileUtils.remove_dir(path, true) + @log.info "Removed #{manifest_path}" + @log.info "Removed #{path}" + raise Interrupt + end + new_pkg_ver = pkg.version + new_pkg_install_dep_list = pkg.install_dep_list + os = pkg.os + + list = get_all_reverse_install_dependent_packages_remote(pkg_name, os, true) + + if not list.nil? then + list.each do |p| + ilist = get_attr_from_pkg(p, os, "install_dep_list") + if ilist.nil? then next end + ilist.each do |l| + if l.package_name.eql? pkg_name then + if not l.match? new_pkg_ver then + @log.error "\"#{p}\" package has following install dependency : #{l.package_name} (#{l.comp} #{l.base_version})" + return false + end + end + end + end + end + + if not new_pkg_install_dep_list.nil? then + new_pkg_install_dep_list.each do |l| + if not check_remote_pkg(l.package_name, os) then + @log.error "\"#{pkg_name}\" package has following install dependency : #{l.package_name} (#{l.comp} #{l.base_version}), but \"#{l.package_name}\" is not exist on server" + return false + end + rver = get_attr_from_pkg(l.package_name, os, "version") + if not l.match? rver then + @log.error "\"#{pkg_name}\" package has following install dependency : #{l.package_name} (#{l.comp} #{l.base_version})" + return false + end + end + end + + @log.info "Passed to verify packages for uploading.. OK" + return true + end + + private + # get distribution + def get_distribution() + server = @server_addr + if server.nil? or server.empty? then + @log.error "Server addr is nil" + return nil + end + + dist = "" + server_arr = server.split("/") + if server_arr.include? "snapshots" then + i = server_arr.index("snapshots") + dist = server_arr[i-1] + else dist = File.basename(server) end + + return dist + end + + public + # install package + # install all install dependency packages + def install(pkg_name, os, trace, force) + + if trace.nil? then trace = true end + if force.nil? then force = false end + + # check meta package + is_meta_pkg = check_meta_pkg(pkg_name, os) + if is_meta_pkg then trace = true end + + # compare package version with installed package's + pkg_ver = get_attr_from_pkg(pkg_name, os, "version") + if pkg_ver.nil? or pkg_ver.empty? then + @log.error "#{pkg_name} package does not exist in remote package list" + return false + end + + compare_result = compare_version_with_installed_pkg(pkg_name, pkg_ver) + if not force then + case compare_result + when -1 then + @log.warn "\"#{pkg_name}\" package version is bigger then remote package version" + return true + when 0 then + @log.warn "\"#{pkg_name}\" package version is same with remote package version" + return true + when 1, 2 then + end + end + + # if enable trace, create all dependent package list + if trace then + dependent_pkg_list = get_install_dependent_packages(pkg_name, os, true, force) + if dependent_pkg_list.nil? then + @log.error "Failed to get dependency for \"#{pkg_name}\" package" + return false + end + else + dependent_pkg_list = [pkg_name] + end + + # TODO: need to compare dependent package version + # install packages including dependent packages + dependent_pkg_list.each do |pkg| + if not install_pkg(pkg, os, force) then + @log.error "#{pkg} does not exist" + return false + end + add_pkg_info(pkg, os) + end + + # write installed package information to file + write_pkg_hash_to_file(nil) + + if trace then + @log.info "Installed \"#{pkg_name} [#{pkg_ver}]\" package with all dependent packages.. OK" + @log.info " [#{dependent_pkg_list.join(" -> ")}]" + else + @log.info "Install only \"#{pkg_name} [#{pkg_ver}]\" package.. OK" + end + return true + end + + public + # install local package (ignore dependent packages) + def install_local_pkg(pkg_path, force) + + file_name = File.basename(pkg_path) + pkg_name = file_name.split('_')[0] + + if not File.exist? pkg_path then + @log.error "\"#{pkg_path}\" file does not exist" + return false + end + filename = File.basename(pkg_path) + ext = File.extname(filename) + if not ext.eql? ".zip" then + @log.error "\"#{file_name}\" is not zip file. binary package file should have .zip ext" + return false + end + pkg_name = filename.split("_")[0] + type = "binary" + manifest_file = "pkginfo.manifest" + pkg_config_path = File.join(@location, PACKAGE_INFO_DIR, pkg_name) + + uniq_name = Utils.create_uniq_name + path = Utils::HOME + "/tmp/#{uniq_name}" + if not File.exist? path then FileUtils.mkdir_p "#{path}" end + begin + if not FileInstaller.extract_a_file(pkg_path, manifest_file, path) then + @log.error "pkginfo.manifest file does not exist in #{pkg_path}" + return false + end + manifest_path = File.join(path, manifest_file) + pkg = Parser.read_single_pkginfo_from manifest_path + new_pkg_ver = pkg.version + FileUtils.rm_f(manifest_path) + FileUtils.remove_dir(path, true) + rescue Interrupt + @log.error "Client: Interrupted.." + FileUtils.rm_f(manifest_path) + FileUtils.remove_dir(path, true) + @log.info "Removed #{mainfest_path}" + @log.info "Removed #{path}" + raise Interrupt + end + + compare_result = compare_version_with_installed_pkg(pkg_name, new_pkg_ver) + if not force then + case compare_result + when -1 then + @log.warn "\"#{pkg_name}\" package version is bigger then remote package version.." + return true + when 0 then + @log.warn "\"#{pkg_name}\" package version is same with remote package version.." + return true + when 1, 2 then + end + end + + if check_installed_pkg(pkg_name) then + uninstall(pkg_name, false) + end + + # install package + ret = FileInstaller.install(pkg_name, pkg_path, "binary", @location) + + add_local_pkg_info(pkg_name) + write_pkg_hash_to_file(nil) + + @log.info "Installed \"#{pkg_path} [#{new_pkg_ver}]\" file.. OK" + return true + end + + public + # upgrade package + def upgrade(os, trace) + + if trace.nil? then trace = true end + list = check_upgrade(os) + + if list.empty? or list.nil? then + @log.info "There is no packages for upgrading.." + return false + end + + list.each do |p| + if check_installed_pkg(p) then + if not uninstall(p, trace) then + @log.error "Failed to uninstall \"#{p}\" package.." + return false + end + end + + if not install(p, os, trace, false) then + @log.error "Failed to install \"#{p}\" package.." + return false + end + end + + @log.info "Upgraded packages from #{@server_addr}.. OK" + return true + end + + public + # check package which will be upgraded + def check_upgrade(os) + + update_pkgs = [] + installed_pkg_hash_key = get_installed_pkg_list_file_path() + installed_pkg_hash = installed_pkg_hash_loc[installed_pkg_hash_key] + remote_pkg_hash = pkg_hash_os[os] + + if remote_pkg_hash.nil? then + @log.error "There is no remote package list for #{os}. please pkg-cli update" + return nil + end + + if installed_pkg_hash.nil? then + @log.warn "There is no any installed package in \"#{@location}\"" + return remote_pkg_hash.keys + end + + arr_keys = installed_pkg_hash.keys + arr_keys.each do |k| + installed_ver = get_attr_from_installed_pkg(k, "version") + if not check_remote_pkg(k, os) then next end + remote_ver = get_attr_from_pkg(k, os, "version") + compare_result = compare_version_with_installed_pkg(k, remote_ver) + case compare_result + when -1 then next + when 0 then next + when 1 then + @log.output "\"#{k}\" package : #{installed_ver} -> #{remote_ver}" + update_pkgs.push(k) + end + end + + @log.info "Checked packages for upgrading.. OK" + return update_pkgs + end + + public + def get_default_server_addr() + filepath = "#{CONFIG_PATH}/config" + server_addr = nil + + if not File.exist? filepath then create_default_config(nil) end + if not File.exist? filepath then + @log.error "There is no default server address in #{filepath}" + return nil + end + + File.open filepath, "r" do |f| + f.each_line do |l| + if l.strip.start_with? "DEFAULT_SERVER_ADDR :" then + server_addr = l.split("DEFAULT_SERVER_ADDR :")[1].strip + break + else next end + end + end + + if server_addr.nil? then create_default_config(DEFAULT_SERVER_ADDR) end + return server_addr + end + + public + # get default path for installing + def get_default_inst_dir() + return Dir.pwd + end + + private + # create default config file (Utils::HOME/.build_tools/client/config) + def create_default_config(server_addr) + filepath = "#{CONFIG_PATH}/config" + if server_addr.nil? then server_addr = DEFAULT_SERVER_ADDR end + + if File.exist? filepath then + FileUtils.rm_f(filepath) + end + + if server_addr.strip.end_with? "/" then server_addr = server_addr.chop end + + File.open(filepath, "a+") do |file| + file.puts "DEFAULT_SERVER_ADDR : #{server_addr}" + end + end + + public + # uninstall package + # trace : if true, uninstall all dependent packages + def uninstall(pkg_name, trace) + + type = "binary" + pkg_list = [] + pkg_hash = nil + + if not check_installed_pkg(pkg_name) then + @log.error "\"#{pkg_name}\" package is not installed." + return false + end + + pkg_ver = get_attr_from_installed_pkg(pkg_name, "version") + + if trace then + pkg_list = get_all_reverse_install_dependent_packages(pkg_name, true) + if pkg_list.nil? then + @log.error "Failed to get \"#{pkg_name}\" package dependency information." + return false + end + else + pkg_list.push(pkg_name) + end + + pkg_list.each do |p| + if not check_installed_pkg(p) then next end + if not FileInstaller.uninstall(p, type, @location) then + @log.error "Failed uninstall \"#{pkg_name}\" package" + return false + end + pkg_hash = remove_pkg_info(p) + end + + if trace then + @log.info "Uninstalled \"#{pkg_name} [#{pkg_ver}]\" package with all dependent packages.. OK" + @log.info " [#{pkg_list.join(" -> ")}]" + else + @log.info "Uninstalled only \"#{pkg_name} [#{pkg_ver}]\" package.. OK" + end + + write_pkg_hash_to_file(nil) + return true + end + + public + # clean + def clean(force) + if not force then + puts "Do you really want to remove \"#{@location}\" path? [yes]" + input = $stdin.gets.strip + if input.upcase.eql? "YES" then + @log.info "Removed \"#{@location}\"" + else + @log.info "Canceled" + return + end + end + if File.exist? @location then FileUtils.rm_rf(@location) end + FileUtils.mkdir_p(@location) + @pkg_hash_os.clear + @installed_pkg_hash_loc.clear + @archive_pkg_list.clear + @log.info "Cleaned \"#{@location}\" path.. OK" + end + + public + # get reverse build dependent packages (just 1 depth) + def get_reverse_build_dependent_packages(pkg_name, os) + + result = [] + pkg_hash = @pkg_hash_os[os] + pkg_list = pkg_hash.values + pkg_list.each do |pkg| + pkg.build_dep_list.each do |dep| + if dep.package_name.eql? pkg_name and + not dep.target_os_list.nil? and + dep.target_os_list.include? os then + result.push(pkg) + end + end + end + + return result + end + + public + # get reverse source dependent packages (just 1 depth) + def get_reverse_source_dependent_packages(pkg_name) + + result = [] + for os in SUPPORTED_OS + pkg_hash = @pkg_hash_os[os] + pkg_list = pkg_hash.values + pkg_list.each do |pkg| + pkg.source_dep_list.each do |p| + if p.package_name.eql? pkg_name then + result.push(pkg) + end + end + end + end + + return result + end + + public + # get reverse install dependent packages (jush 1 depth) + def get_reverse_install_dependent_packages(pkg_name, os) + + result = [] + pkg_hash = @pkg_hash_os[os] + pkg_list = pkg_hash.values + pkg_list.each do |pkg| + pkg.install_dep_list.each do |p| + if p.package_name.eql? pkg_name then + result.push(pkg.package_name) + end + end + end + + return result + end + + public + # get all build dependent packages (considered build priority, and reverse) + def get_build_dependent_packages(pkg_name, os, reverse) + + if not check_remote_pkg(pkg_name, os) then return nil end + if reverse.nil? then reverse = true end + + @all_dep_list.clear + begin + get_build_dependency_arr(pkg_name, os, 0) + # in case of cross build dependency + rescue SystemStackError + @log.error "Failed to get dependency relation because #{pkg_name} package has cross install dependency." + return nil + end + + max = 0 + @all_dep_list.each do |p| + if p[0].to_i > max then + max = p[0].to_i + else next end + end + + result = [] + i = 0 + while i <= max + @all_dep_list.each do |p| + if p[0].to_i.eql? i then + d = p[1] + remote_os = get_attr_from_pkg(d.package_name, os, "os") + remote_ver = get_attr_from_pkg(d.package_name, os, "version") + if not d.target_os_list.include? remote_os then + @log.error "\"#{pkg_name}\" package needs \"#{d.package_name}\" #{d.target_os_list.to_s}, but \"#{d.package_name}\" (#{remote_os}) package is in server" + return nil + end + if not d.match? remote_ver then + @log.error "\"#{pkg_name}\" package needs \"#{d.package_name}\" #{d.comp} #{d.base_version}, but \"#{d.package_name}\" (#{remote_ver}) package is in server" + return nil + else result.push(d.package_name) end + end + end + i = i + 1 + end + + @log.info "Get build dependent packages for #{pkg_name} package.. OK" + if reverse then return result.reverse.uniq.push(pkg_name) + else return result.uniq.insert(0, pkg_name) end + end + + public + # get all install dependent packages (considered install priority, reverse, and force) + # reverse : return reverse result + # force : install package force + def get_install_dependent_packages(pkg_name, os, reverse, force) + + if not check_remote_pkg(pkg_name, os) then return nil end + if reverse.nil? then reverse = true end + + @all_dep_list.clear + begin + get_install_dependency_arr(pkg_name, os, force, 0) + # in case of cross build dependency + rescue SystemStackError + @log.error "Failed to get dependency relation because #{pkg_name} package has cross install dependency." + return nil + end + + max = 0 + @all_dep_list.each do |p| + if p[0].to_i > max then + max = p[0].to_i + else next end + end + + result = [] + i = 0 + while i <= max + @all_dep_list.each do |p| + if p[0].to_i.eql? i then + d = p[1] + remote_ver = get_attr_from_pkg(d.package_name, os, "version") + if not d.match? remote_ver then + @log.error "\"#{pkg_name}\" package needs \"#{d.package_name}\" #{d.comp} #{d.base_version}, but \"#{d.package_name}\" (#{remote_ver}) package is in server" + return nil + else result.push(d.package_name) end + end + end + i = i + 1 + end + + @log.info "Get install dependent packages for #{pkg_name} package.. OK" + if reverse then return result.reverse.uniq.push(pkg_name) + else return result.uniq.insert(0, pkg_name) end + end + + public + # get all reverse install dependent packages (considered reverse install priority for tracing uninstall) + def get_all_reverse_install_dependent_packages(pkg_name, reverse) + + if not check_installed_pkg(pkg_name) then return nil end + if reverse.nil? then reverse = true end + + begin + res = get_all_reverse_install_dependency_arr(pkg_name, 0) + rescue SystemStackError + @log.error "Failed to get dependency relation because #{pkg_name} package has cross install dependency." + return nil + end + res2 = res.split("::") + result = [] + res2.each do |r| + result.push(r.split(':')[1]) + end + + @log.info "Get all reverse install dependent packages for #{pkg_name} package.. OK" + if reverse then return result.reverse.uniq + else return result end + end + + public + # get all reverse remote dependent packages (considered reverse install priority for tracing uninstall) + def get_all_reverse_install_dependent_packages_remote(pkg_name, os, reverse) + #if not check_remote_pkg(pkg_name, os) then return nil end + if reverse.nil? then reverse = true end + + begin + res = get_all_reverse_install_dependency_arr_remote(pkg_name, os, 0) + rescue SystemStackError + @log.error "Failed to get dependency relation because #{pkg_name} package has cross install dependency." + return nil + end + res2 = res.split("::") + result = [] + res2.each do |r| + result.push(r.split(':')[1]) + end + + @log.info "Get all reverse install dependent packages for #{pkg_name} package.. OK" + if reverse then return result.reverse + else return result end + end + + public + # check package whether to exist in remote server + def check_remote_pkg(pkg_name, os) + + pkg_hash = @pkg_hash_os[os] + if pkg_hash.nil? then return false end + pkg = pkg_hash[pkg_name] + if pkg.nil? then + @log.warn "There is no \"#{pkg_name}\" remote package information in list" + return false + end + + return true + end + + public + # check package whether to exist in installed packages + def check_installed_pkg(pkg_name) + + installed_pkg_hash_key = get_installed_pkg_list_file_path() + pkg_hash = @installed_pkg_hash_loc[installed_pkg_hash_key] + if pkg_hash.nil? then return false end + pkg = pkg_hash[pkg_name] + + if pkg.nil? then return false end + return true + end + + public + # get attribute from installed package + def get_attr_from_installed_pkg(pkg_name, attr) + + if not check_installed_pkg(pkg_name) then return nil end + pkg = get_installed_pkg_from_list(pkg_name) + + if pkg.nil? then return nil end + + case attr + when "version" then return pkg.version + when "source" then return pkg.source + when "src_path" then return pkg.src_path + when "os" then return pkg.os + when "build_dep_list" then return pkg.build_dep_list + when "install_dep_list" then return pkg.install_dep_list + when "attribute" then return pkg.attribute + end + end + + public + # get attribute from remote package + def get_attr_from_pkg(pkg_name, os, attr) + + if not check_remote_pkg(pkg_name, os) then return nil end + pkg = get_pkg_from_list(pkg_name, os) + + if pkg.nil? then return nil end + + case attr + when "path" then return pkg.path + when "source" then return pkg.source + when "version" then return pkg.version + when "src_path" then return pkg.src_path + when "os" then return pkg.os + when "build_dep_list" then return pkg.build_dep_list + when "install_dep_list" then return pkg.install_dep_list + when "attribute" then return pkg.attribute + end + end + + public + # show a package information + def show_pkg_info(pkg_name, os) + if not check_remote_pkg(pkg_name, os) then + @log.error "\"#{pkg_name}\" package does not exist" + return "" + end + + pkg = get_pkg_from_list(pkg_name, os) + return pkg.to_s + end + + public + # show all packages information + def show_pkg_list(os) + pkg_hash = @pkg_hash_os[os] + if pkg_hash.nil? then + @log.error "\"#{os}\" package list does not exist" + return "" + end + + pkg_all_list = [] + pkg_list = pkg_hash.values + pkg_list.each do |p| + pkg_all_list.push([p.package_name, p.version, p.description]) + end + return pkg_all_list.sort + end + + public + # show installed package information + def show_installed_pkg_info(pkg_name) + + if not check_installed_pkg(pkg_name) then + @log.error "\"#{pkg_name}\" package does not exist" + return "" + end + + pkg = get_installed_pkg_from_list(pkg_name) + return pkg.to_s + end + + public + # show all installed packages information + def show_installed_pkg_list() + + file_path = get_installed_pkg_list_file_path() + pkg_hash = @installed_pkg_hash_loc[file_path] + if pkg_hash.nil? then + @log.error "Installed package list does not exist" + return nil + end + pkg_all_list = [] + pkg_list = pkg_hash.values + pkg_list.each do |p| + pkg_all_list.push([p.package_name, p.version, p.description]) + end + return pkg_all_list.sort + end + + private + def get_build_dependency_arr(pkg_name, os, n) + pkg_hash = @pkg_hash_os[os] + pkg = pkg_hash[pkg_name] + + if pkg.nil? then + @log.error "\"#{pkg_name}\" package does not exist in server. please check it" + return + end + + # if package is already installed, skip tracing dependency + if check_installed_pkg(pkg_name) then + # compare version with installed package version + new_pkg_ver = get_attr_from_pkg(pkg_name, os, "version") + compare_result = compare_version_with_installed_pkg(pkg_name, new_pkg_ver) + if compare_result == -1 or compare_result == 0 then return end + end + + pkg.build_dep_list.each do |l| + @all_dep_list.push([n, l]) + get_build_dependency_arr(l.package_name, os, n+1) + end + + return + end + + private + def get_install_dependency_arr(pkg_name, os, force, n) + + pkg_hash = @pkg_hash_os[os] + pkg = pkg_hash[pkg_name] + + if pkg.nil? then + @log.error "\"#{pkg_name}\" package does not exist in server. please check it" + return + end + + # if package is already installed, skip tracing dependency + if check_installed_pkg(pkg_name) then + # compare version with installed package version + new_pkg_ver = get_attr_from_pkg(pkg_name, os, "version") + compare_result = compare_version_with_installed_pkg(pkg_name, new_pkg_ver) + if not force then + if compare_result == -1 or compare_result == 0 then return end + end + end + + pkg.install_dep_list.each do |l| + @all_dep_list.push([n, l]) + get_install_dependency_arr(l.package_name, os, force, n+1) + end + + return + end + + private + def get_all_reverse_install_dependency_arr(pkg_name, n) + + s = "#{n}:#{pkg_name}" + installed_pkg_hash_key = get_installed_pkg_list_file_path() + pkg_hash = @installed_pkg_hash_loc[installed_pkg_hash_key] + pkg_list = pkg_hash.values + pkg_list.each do |pkg| + pkg.install_dep_list.each do |l| + if l.package_name.eql? pkg_name then + s = s + "::" + get_all_reverse_install_dependency_arr(pkg.package_name, n+1) + end + end + end + + return s + end + + private + def get_all_reverse_install_dependency_arr_remote(pkg_name, os, n) + + s = "#{n}:#{pkg_name}" + pkg_hash = @pkg_hash_os[os] + pkg_list = pkg_hash.values + pkg_list.each do |pkg| + pkg.install_dep_list.each do |l| + if l.package_name.eql? pkg_name then + s = s + "::" + get_all_reverse_install_dependency_arr_remote(pkg.package_name, os, n+1) + end + end + end + + return s + end + + public + def get_pkg_from_list(pkg_name, os) + + pkg_hash = @pkg_hash_os[os] + if pkg_hash.nil? then return nil end + + pkg = pkg_hash[pkg_name] + + return pkg + end + + private + def get_installed_pkg_from_list(pkg_name) + + installed_pkg_hash_key = get_installed_pkg_list_file_path() + pkg_hash = @installed_pkg_hash_loc[installed_pkg_hash_key] + pkg = pkg_hash[pkg_name] + if pkg.nil? then return nil end + + return pkg + end + + private + # install a package to @location after uninstalling and downloading + def install_pkg(pkg_name, os, force) + + new_pkg_ver = "" + + # install remote server package file + if not check_remote_pkg(pkg_name, os) then + @log.error "\"#{pkg_name}\" package does not exist in remote server" + return false + end + path = get_attr_from_pkg(pkg_name, os, "path") + # type should be binary. type = "binary" + # below code should be changed + type = path.split('/')[-2] + new_pkg_ver = get_attr_from_pkg(pkg_name, os, "version") + + # compare version with installed package versiona + compare_result = compare_version_with_installed_pkg(pkg_name, new_pkg_ver) + if not force then + case compare_result + when -1 then + @log.warn "\"#{pkg_name}\" package version is bigger then remote package version" + return true + when 0 then + @log.warn "\"#{pkg_name}\" package version is same with remote package version" + return true + end + end + + # if package is already installed, then uninstall it + if check_installed_pkg(pkg_name) then + if not uninstall(pkg_name, false) then + @log.error "Failed to uninstall \"#{pkg_name}\"" + return false + end + end + + # download package file + # change download location temporary (back to the origin path after downloading) + loc_back = @location + uniq_name = Utils.create_uniq_name + tmppath = Utils::HOME + "/tmp/#{uniq_name}" + FileUtils.mkdir_p "#{tmppath}" + begin + @location = tmppath + _file_local_path = download(pkg_name, os, false) + if _file_local_path.nil? then + FileUtils.remove_dir(tmppath, true) + return false + end + file_local_path = _file_local_path[0] + @location = loc_back + if file_local_path.nil? then + FileUtils.remove_dir(tmppath, true) + return false + end + + # install package + ret = FileInstaller.install(pkg_name, file_local_path, type, @location) + FileUtils.rm_f(file_local_path) + FileUtils.remove_dir(tmppath, true) + rescue Interrupt + @log.error "Client: Interrupted.." + FileUtils.rm_f(file_local_path) + FileUtils.remove_dir(tmppath, true) + @log.info "Removed #{file_local_path}" + @log.info "Removed #{tmppath}" + raise Interrupt + end + return ret + end + + private + def compare_version_with_installed_pkg(pkg_name, new_pkg_ver) + + if check_installed_pkg_list_file() then + create_installed_pkg_hash() + if check_installed_pkg(pkg_name) then + installed_pkg_ver = get_attr_from_installed_pkg(pkg_name, "version") + compare_result = Utils.compare_version(installed_pkg_ver, new_pkg_ver) + return compare_result + end + end + + return 2 + end + + private + def remove_pkg_info(pkg_name) + + pkg_hash = {} + installed_pkg_hash_key = get_installed_pkg_list_file_path() + if @installed_pkg_hash_loc.has_key? installed_pkg_hash_key then + pkg_hash = @installed_pkg_hash_loc[installed_pkg_hash_key] + if pkg_hash.include? pkg_name then + pkg_hash.delete(pkg_name) + end + @installed_pkg_hash_loc[installed_pkg_hash_key] = pkg_hash + else return nil end + + @log.info "Removed information for \"#{pkg_name}\" package.. OK" + return pkg_hash + end + + private + def add_pkg_info(pkg_name, os) + + pkg_hash = {} + installed_pkg_hash_key = get_installed_pkg_list_file_path() + if @installed_pkg_hash_loc.has_key? installed_pkg_hash_key then + pkg_hash = @installed_pkg_hash_loc[installed_pkg_hash_key] + pkg_hash[pkg_name] = get_pkg_from_list(pkg_name, os) + else pkg_hash[pkg_name] = get_pkg_from_list(pkg_name, os) end + @installed_pkg_hash_loc[installed_pkg_hash_key] = pkg_hash + + @log.info "Added information for \"#{pkg_name}\" package.. OK" + return pkg_hash + end + + private + # add package manifest info + def add_local_pkg_info(pkg_name) + + config_path = File.join(@location, PACKAGE_INFO_DIR, "#{pkg_name}") + pkg = read_pkginfo_file(pkg_name, config_path) + + if pkg.nil? then + @log.error "Failed to read pkginfo.manifest file" + return nil + end + + pkg_hash = {} + installed_pkg_hash_key = get_installed_pkg_list_file_path() + if @installed_pkg_hash_loc.has_key? installed_pkg_hash_key then + pkg_hash = @installed_pkg_hash_loc[installed_pkg_hash_key] + pkg_hash[pkg_name] = pkg + else pkg_hash[pkg_name] = pkg end + @installed_pkg_hash_loc[installed_pkg_hash_key] = pkg_hash + + @log.info "Added information for \"#{pkg_name}\" package.. OK" + return pkg_hash + end + + private + # read package manifet info + def read_pkginfo_file(pkg_name, path) + + file_path = File.join(path, "pkginfo.manifest") + pkg = Parser.read_single_pkginfo_from file_path + + if pkg.nil? then + @log.error "Failed to read manifest file : #{file_path}" + return nil + end + + @log.info "Added information for \"#{pkg_name}\" package.. OK" + return pkg + end + + private + # from_server : if true, update from server + def create_remote_pkg_hash(from_server) + + for os in SUPPORTED_OS + filename = PKG_LIST_FILE_PREFIX + os + file_url = @server_addr + "/" + filename + local_file_path = File.join(CONFIG_PATH, filename) + if from_server then + if not FileDownLoader.download(file_url, CONFIG_PATH) then + return false + end + end + local_file_path = File.join(CONFIG_PATH, filename) + if File.exist? local_file_path then + pkg_hash = Parser.read_repo_pkg_list_from local_file_path + @pkg_hash_os[os] = pkg_hash + else + @pkg_hash_os[os] = {} + end + end + + filename = "archive_pkg_list" + file_url = @server_addr + "/" + filename + if from_server then + if not FileDownLoader.download(file_url, CONFIG_PATH) then + @log.warn "Server does not have \"#{filename}\" file. This error can be ignored." + end + end + local_file_path = File.join(CONFIG_PATH, filename) + if File.exist? local_file_path then + File.open(local_file_path, "r") do |f| + f.each_line do |l| + @archive_pkg_list.push(l.strip) + end + end + end + + return true + end + + private + # create installed package hash + def create_installed_pkg_hash() + + config_path = File.join(@location, PACKAGE_INFO_DIR) + if not File.directory? config_path then return end + + installed_pkg_hash_key = get_installed_pkg_list_file_path() + if @installed_pkg_hash_loc.has_key? installed_pkg_hash_key then return + else + file_path = installed_pkg_hash_key + if not File.exist? file_path then + #raise RuntimeError, "#{file_path} file does not exist" + return + end + pkg_hash = Parser.read_repo_pkg_list_from file_path + @installed_pkg_hash_loc[installed_pkg_hash_key] = pkg_hash + end + end + + private + # check to exist installed package list file + def check_installed_pkg_list_file() + + if @location.nil? then raise RuntimeError, "#{@location} path does not exist" end + file_path = get_installed_pkg_list_file_path() + if File.exist? file_path then return true + else return false end + end + + private + # get installed package list file path + def get_installed_pkg_list_file_path() + + file_full_path = File.join(@location, PACKAGE_INFO_DIR, INSTALLED_PKG_LIST_FILE) + return file_full_path + end + + private + # write package hash to file + def write_pkg_hash_to_file(pkg_hash) + + file_path = get_installed_pkg_list_file_path() + if pkg_hash.nil? then + pkg_hash = @installed_pkg_hash_loc[file_path] + end + if not pkg_hash.nil? then + config_path = File.join(@location, PACKAGE_INFO_DIR) + if not File.exist? config_path then FileUtils.mkdir_p "#{config_path}" end + if File.exist? file_path then File.delete(file_path) end + File.open(file_path, "a+") do |file| + file.puts "ORIGIN : #{@server_addr}" + file.puts "\n" + pkg_list = pkg_hash.values + pkg_list.each do |pkg| + pkg.print_to_file(file) + file.puts "\n" + end + end + end + @log.info "Write package informations to \"#{file_path}\".. OK" + end + + private + def check_meta_pkg(pkg_name, os) + if not check_remote_pkg(pkg_name, os) then return false end + + attr = get_attr_from_pkg(pkg_name, os, "attribute") + if attr.nil? or attr.empty? then return false end + if attr[0].strip.upcase.eql? "META" then return true + else return false end + end +end diff --git a/src/pkg_server/clientOptParser.rb b/src/pkg_server/clientOptParser.rb new file mode 100644 index 0000000..f3cbb57 --- /dev/null +++ b/src/pkg_server/clientOptParser.rb @@ -0,0 +1,202 @@ +=begin + + clientOptParser.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require 'optparse' +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common" +require "utils" + +def set_default( options ) + if options[:t].nil? then options[:t] = false end + if options[:f].nil? then options[:f] = false end + if options[:v].nil? then options[:v] = false end +end + +def option_error_check( options ) + + case options[:cmd] + + when "update" then + + when "clean" then + + when "upgrade" then + + when "check-upgrade" then + + when "download" then + if options[:pkg].nil? or options[:pkg].empty? then + raise ArgumentError, "Usage: pkg-cli download -P [-o ] [-l ] [-u ] [--trace]" + end + + when "install" then + if options[:pkg].nil? or options[:pkg].empty? then + raise ArgumentError, "Usage: pkg-cli install -P [-o ] [-l ] [-u ] [--trace] [--force]" + end + + when "install-file" then + if options[:pkg].nil? or options[:pkg].empty? then + raise ArgumentError, "Usage: pkg-cli install-lpkg -P [-l ] [--force]" + end + + when "uninstall" then + if options[:pkg].nil? or options[:pkg].empty? then + raise ArgumentError, "Usage: pkg-cli uninstall -P [-l ] [--trace]" + end + + when "show-rpkg" then + if options[:pkg].nil? or options[:pkg].empty? then + raise ArgumentError, "Usage: pkg-cli show-rpkg -P [-o ] [-u ]" + end + + when "list-rpkg" then + + when "show-lpkg" then + if options[:pkg].nil? or options[:pkg].empty? then + raise ArgumentError, "Usage: pkg-cli show-lpkg -P [-l ]" + end + + when "list-lpkg" then + + when "build-dep" then + if options[:pkg].nil? or options[:pkg].empty? then + raise ArgumentError, "Usage: pkg-cli build-dep -P [-o ]" + end + + when "install-dep" then + if options[:pkg].nil? or options[:pkg].empty? then + raise ArgumentError, "Usage: pkg-cli install-dep -P [-o ]" + end + + else + raise ArgumentError, "Input is incorrect : #{options[:cmd]}" + end +end + +def option_parse + options = {} + banner = "Requiest service to package-server and control packages service command-line tool." + "\n" \ + + "\n" + "Usage: pkg-cli [OPTS] or pkg-cli -h" + "\n" \ + + "\n" + "Subcommands:" + "\n" \ + + "\t" + "update Update to the latest package in your SDK environment." + "\n" \ + + "\t" + "clean Delete the package in your SDK environment." + "\n" \ + + "\t" + "download Download the package in your SDK environment." + "\n" \ + + "\t" + "install Download the package from package-server and install the package in your SDK environment." + "\n" \ + + "\t" + "install-file Install the package in your SDK environment." + "\n" \ + + "\t" + "uninstall Uninstall the package in your SDK environment." + "\n" \ + + "\t" + "upgrade Upgrade your SDK environment." + "\n" \ + + "\t" + "check-upgrade Check packages to upgrade." + "\n" \ + + "\t" + "show-rpkg Show the package in the package-server." + "\n" \ + + "\t" + "list-rpkg Show the all packages in the package-server." + "\n" \ + + "\t" + "show-lpkg Show the package in your SDK environment." + "\n" \ + + "\t" + "list-lpkg Show the all packages in your SDK environment." + "\n" \ + + "\n" + "Subcommand usage:" + "\n" \ + + "\t" + "pkg-cli update [-u ]" + "\n" \ + + "\t" + "pkg-cli clean [-l ] [--force]" + "\n" \ + + "\t" + "pkg-cli download -P [-o ] [-l ] [-u ] [--trace]" + "\n" \ + + "\t" + "pkg-cli install -P [-o ] [-l ] [-u ] [--trace] [--force]" + "\n" \ + + "\t" + "pkg-cli install-file -P [-l ] [--force]" + "\n" \ + + "\t" + "pkg-cli uninstall -P [-l ] [--trace]" + "\n" \ + + "\t" + "pkg-cli upgrade [-l ] [-o ] [-u ] [--trace]" + "\n" \ + + "\t" + "pkg-cli check-upgrade [-l ] [-o ] [-u ]" + "\n" \ + + "\t" + "pkg-cli show-rpkg -P [-o ] [-u ]" + "\n" \ + + "\t" + "pkg-cli list-rpkg [-o ] [-u ]" + "\n" \ + + "\t" + "pkg-cli show-lpkg -P [-l ]" + "\n" \ + + "\t" + "pkg-cli list-lpkg [-l ]" + "\n" \ + + "\n" + "Options:" + "\n" + + optparse = OptionParser.new(nil, 32, ' '*8) do|opts| + # Set a banner, displayed at the top + # of the help screen. + + opts.banner = banner + + opts.on( '-P', '--pkg ', 'package name or package file name' ) do |name| + options[:pkg] = name + end + + opts.on( '-o', '--os ', 'target operating system: linux/windows/darwin' ) do |os| + options[:os] = os + end + + opts.on( '-u', '--url ', 'package server url: http://127.0.0.1/dibs/unstable' ) do |url| + options[:url] = url + end + + opts.on( '-l', '--loc ', 'install/download location' ) do |loc| + options[:loc] = loc + end + + opts.on( '--trace', 'enable trace dependent packages' ) do + options[:t] = true + end + + opts.on( '--force', 'enable force' ) do + options[:f] = true + end + + opts.on( '-h', '--help', 'display manual' ) do + puts opts + exit + end + + opts.on( '-v', '--version', 'display version' ) do + puts "DIBS(Distributed Intelligent Build System) version 1.2.0" + exit + end + end + + cmd = ARGV[0] + if cmd.eql? "update" or cmd.eql? "download" or + cmd.eql? "install" or cmd.eql? "show-rpkg" or + cmd.eql? "list-rpkg" or + cmd.eql? "uninstall" or cmd.eql? "show-lpkg" or + cmd.eql? "list-lpkg" or + cmd.eql? "install-file" or cmd.eql? "clean" or + cmd.eql? "upgrade" or cmd.eql? "check-upgrade" or + cmd.eql? "build-dep" or cmd.eql? "install-dep" or + cmd =~ /(-v)|(--version)/ or + cmd =~ /(help)|(-h)|(--help)/ then + + if cmd.eql? "help" then + V[0] = "-h" + end + options[:cmd] = ARGV[0] + else + raise ArgumentError, "Usage: pkg-cli [OPTS] or pkg-cli -h" + end + + optparse.parse! + + set_default options + + # option error check + option_error_check options + + return options +end + diff --git a/src/pkg_server/distribution.rb b/src/pkg_server/distribution.rb new file mode 100644 index 0000000..63eab93 --- /dev/null +++ b/src/pkg_server/distribution.rb @@ -0,0 +1,594 @@ +=begin + + distribution.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require 'fileutils' +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common" +require "parser" +require "installer" + +class Distribution + attr_accessor :name, :location, :server_url, :lock_file_name + + # constant + SUPPORTED_OS = ["linux", "windows", "darwin"] + PKG_LIST_FILE_PREFIX = "pkg_list_" + ARCHIVE_PKG_FILE = "archive_pkg_list" + + def initialize( name, location, server_url, pkg_server ) + + @name = name + @location = location + @server_url = server_url + @log = pkg_server.log + @integrity = pkg_server.integrity + @lock_file_name = "#{location}/.lock_file" + @snapshot_info_file = "#{location}/snapshot.info" + @pkg_hash_os = {} + @archive_pkg_list = [] + @snapshot_hash = [] + + @log.info "Distribution class[#{name}] initialize " + + initialize_pkg_list() + end + + def register (file_path, pkg) + if pkg.nil? then + raise RuntimeError, "package file does not contain pkginfo.manifest: [#{file_path}]" + end + + exist_pkg = @pkg_hash_os[pkg.os][pkg.package_name] + + # version check and if existing version is higher then upload version? + if not exist_pkg.nil? + if not ( Utils.compare_version( exist_pkg.version, pkg.version ).eql? 1 ) then + raise RuntimeError, "existing package's version is higher than register package : [#{pkg.package_name}] in [#{pkg.os}]" + end + end + + # modified pkg class + pkg.origin = "local" + pkg.source = "" + pkg.path = "/binary/" + File.basename( file_path ) + # TODO: windows and mac : sha256sum + if Utils::HOST_OS.eql? "linux" then + pkg.checksum = `sha256sum #{file_path}`.split(" ")[0] + end + pkg.size = `du -b #{file_path}`.split[0].strip + + @pkg_hash_os[pkg.os][pkg.package_name] = pkg + + return pkg + end + + def register_for_test (file_path, pkg) + if pkg.nil? then + raise RuntimeError, "package file does not contain pkginfo.manifest: [#{file_path}]" + end + + # modified pkg class + pkg.origin = "local" + pkg.source = "" + pkg.path = "/temp/" + File.basename( file_path ) + # TODO: windows and mac : sha256sum + if Utils::HOST_OS.eql? "linux" then + pkg.checksum = `sha256sum #{file_path}`.split(" ")[0] + end + pkg.size = `du -b #{file_path}`.split[0].strip + + return pkg + end + + def register_archive_pkg( archive_pkg ) + if not @archive_pkg_list.include? archive_pkg then + @archive_pkg_list.push archive_pkg + else + @log.error("archive package already exist : [#{archive_pkg}]", Log::LV_USER) + end + end + + def generate_snapshot(name, base_snapshot, from_cmd) + # if name is nil or empty then create uniq name + if name.nil? or name.empty? then + name = Utils.create_uniq_name + end + + # check base snapshot exist + if File.exist? "#{@location}/snapshots/#{name}" then + raise "Snapshot is already exist: #{name}" + end + + FileUtils.mkdir "#{@location}/snapshots/#{name}" + + # base_snapshot_path + if base_snapshot.empty? then + snapshot_path = @location + else + snapshot_path = "#{@location}/snapshots/#{base_snapshot.strip}" + end + + # copy package list + for os in SUPPORTED_OS + FileUtils.copy( "#{snapshot_path}/#{PKG_LIST_FILE_PREFIX}#{os}", \ + "#{@location}/snapshots/#{name}/#{PKG_LIST_FILE_PREFIX}#{os}" ) + end + + # copy archive package list + FileUtils.copy( "#{snapshot_path}/#{ARCHIVE_PKG_FILE}", \ + "#{@location}/snapshots/#{name}/#{ARCHIVE_PKG_FILE}" ) + + File.open(@snapshot_info_file, "a") do |f| + f.puts "name : #{name}" + f.puts "time : #{Time.now.strftime("%Y%m%d%H%M%S")}" + if from_cmd then + f.puts "type : manual" + else + f.puts "type : auto" + end + f.puts "path : /snapshots/#{name}" + f.puts + end + + @log.output( "snapshot is generated : #{@location}/snapshots/#{name}", Log::LV_USER) + return name + end + + def sync( force, os ) + # check distribution's server_url + if @server_url.empty? then + @log.error("This distribution has not remote server", Log::LV_USER) + return + end + + # generate client class + client = Client.new( @server_url, "#{@location}/binary", @log ) + client.update + + # error check + if client.pkg_hash_os[os].nil? then + raise "Package list can't generated. url is #{@server_url}. os is #{os}" + end + + server_pkg_name_list = client.pkg_hash_os[os].keys + local_pkg_name_list = @pkg_hash_os[os].keys + full_pkg_name_list = server_pkg_name_list + local_pkg_name_list + + full_pkg_name_list.each do |pkg_name| + sync_package( pkg_name, client, os, force ) + end + + write_pkg_list(os) + end + + def sync_archive_pkg + client = Client.new( @server_url, "#{@location}/source", @log ) + client.update + + download_list = client.archive_pkg_list - @archive_pkg_list + download_list.each do |pkg| + file = client.download_dep_source(pkg) + if file.nil? + @log.error("Can't download archive package [#{pkg}]", Log::LV_USER) + else + @archive_pkg_list.push pkg + end + end + + write_archive_pkg_list() + end + + def clean( snapshot_list ) + file_list = [] + used_archive_list = [] + + # collect remaining file's name from current package server version + for os in SUPPORTED_OS + @pkg_hash_os[os].each_value{ |pkg| + file_list.push(pkg.path.sub("/binary/","")) + + pkg.source_dep_list.each do |source_dep| + if @archive_pkg_list.include? source_dep.package_name then + used_archive_list.push source_dep.package_name + else + @log.error("Can't find dependency source package : #{source_dep.package_name}") + end + end + } + end + + # remain only used archive package + @archive_pkg_list = used_archive_list.uniq + write_archive_pkg_list + + # collect remaning file's name from snapshot list + for snapshot in snapshot_list + for os in SUPPORTED_OS + pkg_list = Parser.read_repo_pkg_list_from "#{@location}/snapshots/#{snapshot}/#{PKG_LIST_FILE_PREFIX}#{os}" + + pkg_list.each_value{ |pkg| + file_list.push(pkg.path.sub("/binary/","")) + } + end + + used_archive_list = used_archive_list + read_archive_pkg_list( snapshot ) + end + + file_list.uniq! + used_archive_list.uniq! + + # remove unused binary file + Dir.new( @location + "/binary" ).each do |file| + if file.start_with? "." then next end + + if not file_list.include? file then + FileUtils.rm "#{@location}/binary/#{file}" + end + end + + # remove unused archive file + Dir.new( @location + "/source" ).each do |file| + if file.start_with? "." then next end + + if not used_archive_list.include? file then + FileUtils.rm "#{@location}/source/#{file}" + end + end + + # remove unused snapshot + Dir.new( @location + "/snapshots" ).each do |snapshot| + if snapshot.start_with? "." then next end + + if not snapshot_list.include? snapshot then + FileUtils.rm_rf "#{@location}/snapshots/#{snapshot}" + end + end + clean_snapshot_info_file(snapshot_list) + end + + def write_pkg_list( os ) + + File.open( "#{@location}/#{PKG_LIST_FILE_PREFIX}#{os}", "w" ) do |f| + @pkg_hash_os[os].each_value do |pkg| + # insert package information to file + pkg.print_to_file(f) + # insert empty line to file + f.puts + end + end + end + + # input: package file path(zip file) + # return: pkg + def get_package_from_file(file_path) + tmp_dir = @location + "/" + Utils.create_uniq_name + + FileInstaller.set_logger(@log) + + #if file extension is .zip then check pkginfo.manifest + if File.extname(file_path).eql? ".zip" then + FileUtils.mkdir tmp_dir + + ret = FileInstaller.extract_a_file(file_path, "pkginfo.manifest", tmp_dir) + else + return nil + end + + # if pkginfo.manifest file exist + if not ret.nil? then + pkg = Parser.read_single_pkginfo_from "#{tmp_dir}/pkginfo.manifest" + + FileUtils.rm_rf tmp_dir + return pkg + # if pkginfo.manifest file does not exist + else + FileUtils.rm_rf tmp_dir + return nil + end + end + + def remove_pkg( pkg_name_list, os, recursive ) + if os.eql? "all" then os_list = SUPPORTED_OS + else os_list = [ os ] + end + + for package_name in pkg_name_list + removed_flag = false + + for os in os_list + if @pkg_hash_os[os].key?(package_name) then + @log.info( "remove package [#{package_name}] in #{os}", Log::LV_USER) + @pkg_hash_os[os].delete(package_name) + removed_flag = true + end + end + + if not removed_flag then + if @archive_pkg_list.include? package_name then + @archive_pkg_list.delete package_name + else + @log.error( "Can't find package: [#{package_name}]", Log::LV_USER) + end + end + end + + # check install dependency integrity + if @integrity.eql? "YES" then + @log.info "integrity check" + check_integrity + else + @log.info "skip integrity check" + end + + + # update pkg_list file + for os in SUPPORTED_OS + write_pkg_list(os) + end + write_archive_pkg_list + end + + def remove_snapshot( snapshot_list ) + remain_snapshot = [] + removed_snapshot = [] + + # remove unused snapshot + Dir.new( @location + "/snapshots" ).each do |snapshot| + if snapshot.start_with? "." then next end + + if snapshot_list.include? snapshot then + FileUtils.rm_rf "#{@location}/snapshots/#{snapshot}" + snapshot_list.delete snapshot + removed_snapshot.push snapshot + else + remain_snapshot.push snapshot + end + end + + if not snapshot_list.empty? then + @log.output( "snapshot not exist : #{snapshot_list.join(",")}", Log::LV_USER ) + end + + if not removed_snapshot.empty? then + @log.output( "snapshot removed: #{removed_snapshot.join(",")}", Log::LV_USER ) + end + + clean_snapshot_info_file(remain_snapshot) + end + + def check_integrity + @log.info "check server pkg's install dependency integrity" + + for os in SUPPORTED_OS + for pkg in @pkg_hash_os[os].each_value + check_package_integrity(pkg) + end + end + end + + def check_package_integrity(pkg) + error_msg = "[#{pkg.package_name}]'s install dependency not matched in " + os = pkg.os + + for dep in pkg.install_dep_list + if @pkg_hash_os[os].has_key? dep.package_name then + target_pkg = @pkg_hash_os[os][dep.package_name] + else + raise RuntimeError,(error_msg + dep.to_s) + end + + # check package's version + if not dep.match? target_pkg.version then + raise RuntimeError,(error_msg + dep.to_s) + end + + end + + error_msg = "[#{pkg.package_name}]'s build dependency not matched in " + for dep in pkg.build_dep_list + if dep.target_os_list.length == 0 then + build_dep_os = os + else + build_dep_os = dep.target_os_list[0] + end + + if @pkg_hash_os[build_dep_os].has_key? dep.package_name then + target_pkg = @pkg_hash_os[build_dep_os][dep.package_name] + else + raise RuntimeError,(error_msg + dep.to_s) + end + + # check package's version + if not dep.match? target_pkg.version then + raise RuntimeError,(error_msg + dep.to_s) + end + end + + error_msg = "[#{pkg.package_name}]'s source dependency not matched in " + for dep in pkg.source_dep_list + if not @archive_pkg_list.include? dep.package_name then + raise RuntimeError,(error_msg + dep.to_s) + end + end + end + + def read_archive_pkg_list( snapshot_name ) + pkg_list = [] + + if snapshot_name.empty? + file_name = @location + "/" + ARCHIVE_PKG_FILE + else + file_name = @location + "/snapshots/" + snapshot_name + "/" + ARCHIVE_PKG_FILE + end + + if File.exist? file_name + File.open(file_name, "r") do |f| + f.each_line do |l| + pkg_list.push(l.strip) + end + end + end + + return pkg_list + end + + def write_archive_pkg_list() + File.open( "#{@location}/#{ARCHIVE_PKG_FILE}", "w" ) do |f| + @archive_pkg_list.each do |pkg| + f.puts(pkg) + end + end + end + + def initialize_pkg_list + # read package_list file + for os in SUPPORTED_OS + @pkg_hash_os[os] = {} + pkg_list_file = "#{@location}/#{PKG_LIST_FILE_PREFIX}#{os}" + + if File.exist? pkg_list_file then + @pkg_hash_os[os] = Parser.read_repo_pkg_list_from( pkg_list_file ) + end + end + + # read archive package_list file + @archive_pkg_list = read_archive_pkg_list("") + end + + # PRIVATE METHODS/VARIABLES + private + + def sync_package( pkg_name, client, os, force ) + server_pkg = client.pkg_hash_os[os][pkg_name] + local_pkg = @pkg_hash_os[os][pkg_name] + + # if server and local has package + if ( not server_pkg.nil? ) and ( not local_pkg.nil? ) then + version_cmp = Utils.compare_version( local_pkg.version, server_pkg.version ) + if ( version_cmp.eql? 0 ) then + # version is same then skip update + return + end + if ( local_pkg.origin.eql? "local" ) then + if not force then + # local_pkg is generated from local and not force mode then skip update + return + end + end + + sync_package2( server_pkg, client, os, force ) + # if package exist only server + elsif ( not server_pkg.nil? ) then + sync_package2( server_pkg, client, os, force ) + # if package exist only local + elsif ( not local_pkg.nil? ) then + # if local pkg is generated from local then skip + if local_pkg.origin.eql? "local" then + next + end + + # package remove + @pkg_hash_os[os].delete(pkg_name) + else + raise RuntimeError,"hash merge error!" + end + end + + def sync_package2( pkg, client, os, force ) + pkg_name = pkg.package_name + + # package update + file_path_list = client.download( pkg_name, os, false ) + + # file download error check + if file_path_list.nil? or file_path_list.empty? then + @log.error("Can't download package file [#{pkg_name}]", Log::LV_USER) + return + else + file_path = file_path_list[0] + end + + # update pkg class + pkg.path = "/binary/#{File.basename(file_path)}" + pkg.origin = client.server_addr + @pkg_hash_os[os][pkg_name] = pkg + + end + + def clean_snapshot_info_file(snapshot_list) + if not File.exist?(@snapshot_info_file) + @log.error "Can not find snapshot info file" + return + end + + # modify snapshot info File + f = File.open(@snapshot_info_file, "r") + info_lines = [] + save_flag = false + f.each_line do |l| + if l.start_with? "name :" then + if snapshot_list.include? l.split(":")[1].strip then + save_flag = true + else + save_flag = false + end + end + + if save_flag then + info_lines.push l + end + end + f.close + + f = File.open(@snapshot_info_file, "w") + info_lines.each do |i| + f.puts i + end + f.close + end + + def get_all_reverse_depends_pkgs(pkg, checked_list) + depends_list = [] + + for os in SUPPORTED_OS + @pkg_hash_os[os].each_value{ |dpkg| + if dpkg.install_dep_list.include? pkg or \ + dpkg.build_dep_list.include? pkg then + depends_list.push opkg + end + + } + end + + depends_list.each do |dpkg| + checked_list.push dpkg + rdepends_list = get_all_reverse_depends_pkgs( dpkg, checked_list ) + end + + return rdepends_list + end +end diff --git a/src/pkg_server/downloader.rb b/src/pkg_server/downloader.rb new file mode 100644 index 0000000..17288fb --- /dev/null +++ b/src/pkg_server/downloader.rb @@ -0,0 +1,68 @@ +=begin + + downloader.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common" +require "utils" + +class FileDownLoader + + @@log = nil + + def FileDownLoader.set_logger(logger) + @@log = logger + end + + def FileDownLoader.download(url, path) + ret = false + + if not File.directory? path then + @@log.error "\"#{path}\" does not exist" + return ret + end + + is_remote = Utils.is_url_remote(url) + filename = url.split('/')[-1] + + fullpath = File.join(path, filename) + + if is_remote then + ret = Utils.execute_shell_with_log( "wget #{url} -O #{fullpath} -nv", @@log ) + else + if not File.exist? url then + @@log.error "\"#{url}\" file does not exist" + return false + else + ret = system "cp #{url} #{fullpath}" + end + end + + # need verify + return ret + end +end + diff --git a/src/pkg_server/installer.rb b/src/pkg_server/installer.rb new file mode 100644 index 0000000..e19010c --- /dev/null +++ b/src/pkg_server/installer.rb @@ -0,0 +1,365 @@ +=begin + + installer.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +$LOAD_PATH.unshift File.dirname(__FILE__) +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common" +require "packageServerConfig" +require "log" +require "utils" +if Utils::HOST_OS.eql? "windows" then + require "rubygems" + require "zip/zip" +end + +class FileInstaller + + CONFIG_PATH = "#{PackageServerConfig::CONFIG_ROOT}/client" + PACKAGE_INFO_DIR = ".info" + + @@log = nil + + def FileInstaller.set_logger(logger) + @@log = logger + end + + def FileInstaller.install(package_name, package_file_path, type, target_path) + + if not File.exist? package_file_path then + @@log.error "\"#{package_file_path}\" file does not exist." + return false + end + + case type + # install script when binary package + when "binary" then + uniq_name = Utils.create_uniq_name + path = Utils::HOME + "/tmp/#{uniq_name}" + # windows has limitation for file path length + if Utils::HOST_OS.eql? "windows" then + drive = Utils::HOME.split("/")[0] + path = "#{drive}/#{uniq_name}" + end + if not File.exist? path then FileUtils.mkdir_p "#{path}" end + + if File.directory? path then + log = "##### create temporary dir : #{path} #####\n" + else + log = "##### [Failed] create temporary dir : #{path} #####\n" + return false + end + + begin + log = log + "##### extract file : #{package_file_path} #####\n" + log = log + extract_file(package_name, package_file_path, path, target_path) + move_dir(package_name, path, target_path) + + log = log + "##### execute install script #####\n" + log = log + execute_install_script(package_name, path, target_path) + + log = log + "##### move remove script #####\n" + move_remove_script(package_name, path, target_path) + + log = log + "##### remove temporary dir : #{path} #####\n" + Utils.execute_shell("rm -rf #{path}") + rescue Interrupt + @@log.error "FileInstaller: Interrupted.." + Utils.execute_shell("rm -rf #{path}") + @@log.info "Removed #{path}" + raise Interrupt + end + + target_config_path = target_path + "/#{PACKAGE_INFO_DIR}/#{package_name}" + if not File.exist? target_config_path then FileUtils.mkdir_p(target_config_path) end + pkg_inst_log = "#{package_name}_inst.log" + pkg_inst_log_path = File.join(target_config_path, pkg_inst_log) + + File.open(pkg_inst_log_path, "a+") do |f| + f.puts log + end + + when "source" then + end + + # need verify + return true; + end + + def FileInstaller.move_remove_script(package_name, path, target_path) + target_path = target_path + "/#{PACKAGE_INFO_DIR}/#{package_name}" + if not File.exist? target_path then FileUtils.mkdir_p(target_path) end + script_file_prefix = "#{path}/remove.*" + script_file = Dir.glob(script_file_prefix)[0] + + if not script_file.nil? then + FileUtils.mv(script_file, target_path) + end + end + + + def FileInstaller.execute_install_script(package_name, path, target_path) + script_file_prefix = "#{path}/install.*" + script_file = Dir.glob(script_file_prefix)[0] + log = "" + + if not script_file.nil? then + @@log.info "Execute \"#{script_file}\" file" + if Utils::HOST_OS.eql? "windows" then + cmd = "set INSTALLED_PATH=\"#{target_path}\"& #{script_file}" + else + cmd = "INSTALLED_PATH=\"#{target_path}\" #{script_file}" + end + log = `#{cmd}` + end + return log + end + + def FileInstaller.execute_remove_script(package_name, target_path) + info_path = target_path + "/#{PACKAGE_INFO_DIR}/#{package_name}" + if not File.directory? info_path then + return false + end + + script_file_prefix = "#{info_path}/remove.*" + script_file = Dir.glob(script_file_prefix)[0] + log = "" + + if not script_file.nil? then + @@log.info "Execute \"#{script_file}\" file" + if Utils::HOST_OS.eql? "windows" then + cmd = "set INSTALLED_PATH=\"#{target_path}\"& #{script_file}" + else + cmd = "INSTALLED_PATH=\"#{target_path}\" #{script_file}" + end + log = `#{cmd}` + end + end + + def FileInstaller.remove_pkg_files(package_name, target_path) + list_path = target_path + "/#{PACKAGE_INFO_DIR}/#{package_name}" + + if not File.directory? list_path then + return false + end + + list_file_name = "#{list_path}/#{package_name}.list" + list_file = Dir.glob(list_file_name)[0] + directories = [] + + if not list_file.nil? then + File.open(list_file, "r") do |file| + file.each_line do |f| + f = f.strip + if f.nil? or f.empty? then next end + file_path = File.join(target_path, f) + if File.directory? file_path then + if File.symlink? file_path then + File.unlink file_path + next + end + entries = Dir.entries(file_path) + if entries.include? "." then entries.delete(".") end + if entries.include? ".." then entries.delete("..") end + if entries.empty? or entries.nil? then + begin + Dir.rmdir(file_path) + rescue SystemCallError + @@log.warn "\"#{file_path}\" directory is not empty" + end + else directories.push(file_path) end + elsif File.file? file_path then FileUtils.rm_f(file_path) + elsif File.symlink? file_path then File.unlink file_path + # if files are already removed by remove script, + else @@log.warn "\"#{file_path}\" does not exist" end + end + end + + directories.reverse.each do |path| + entries = Dir.entries(path) + if entries.include? "." then entries.delete(".") end + if entries.include? ".." then entries.delete("..") end + if entries.empty? or entries.nil? then + begin + Dir.rmdir(path) + rescue SystemCallError + @@log.warn "\"#{file_path}\" directory is not empty" + end + else next end + end + end + Utils.execute_shell("rm -rf #{list_path}") + return true + end + + def FileInstaller.uninstall(package_name, type, target_path) + case type + when "binary" then + execute_remove_script(package_name, target_path) + remove_pkg_files(package_name, target_path) + when "source" then + end + + return true + end + + def FileInstaller.move_dir(package_name, source_path, target_path) + config_path = File.join(target_path, PACKAGE_INFO_DIR, package_name) + Utils.execute_shell_return("cp -r #{source_path}/data/* #{target_path}") + FileUtils.cp "#{source_path}/pkginfo.manifest", config_path + end + + def FileInstaller.extract_file(package_name, package_file_path, path, target_path) + dirname = File.dirname(package_file_path) + filename = File.basename(package_file_path) + ext = File.extname(filename) + + target_config_path = target_path + "/#{PACKAGE_INFO_DIR}/#{package_name}" + if not File.exist? target_config_path then FileUtils.mkdir_p(target_config_path) end + pkg_file_list = "#{package_name}.list" + pkg_file_list_path = File.join(target_config_path, pkg_file_list) + temp_pkg_file_list = "temp_file_list" + temp_pkg_file_list_path = File.join(target_config_path, "temp_file_list") + + show_file_list_command = nil + extrach_file_list_command = nil + + case ext + when ".zip" then + show_file_list_command = "zip -sf #{package_file_path}" + extract_file_list_command = "unzip -o \"#{package_file_path}\" -d \"#{path}\"" + when ".tar" then + # path should be unix path if it is used in tar command + _package_file_path = Utils.get_unix_path(package_file_path) + _path = Utils.get_unix_path(path) + show_file_list_command = "tar -tf #{_package_file_path}" + extract_file_list_command = "tar xf \"#{_package_file_path}\" -C \"#{_path}\"" + else + @@log.error "\"#{filename}\" is not supported." + return nil + end + + system "#{show_file_list_command} > #{temp_pkg_file_list_path}" + File.open(pkg_file_list_path, "a+") do |targetfile| + File.open(temp_pkg_file_list_path, "r") do |sourcefile| + sourcefile.each_line do |l| + if l.strip.start_with? "data/" then + ml = l.strip[5..-1] + targetfile.puts ml + else next end + end + end + end + File.delete(temp_pkg_file_list_path) + + case ext + when ".zip" then + if Utils::HOST_OS.eql? "windows" then + log = unzip_file(package_file_path, path) + else + log = `#{extract_file_list_command}` + end + when ".tar" then + log = `#{extract_file_list_command}` + end + + @@log.info "Extracted \"#{filename}\" file.. OK" + if log.nil? then log = "" end + return log + end + + def FileInstaller.extract_a_file(package_file_path, target_file, path) + dirname = File.dirname(package_file_path) + filename = File.basename(package_file_path) + ext = File.extname(filename) + + case ext + when ".zip" then + if not path.nil? then + extract_file_command = "unzip -x #{package_file_path} #{target_file} -d #{path}" + else + extract_file_command = "unzip -x #{package_file_path} #{target_file}" + end + when ".tar" then + # path should be unix path if it is used in tar command + _package_file_path = Utils.get_unix_path(package_file_path) + _path = Utils.get_unix_path(path) + if not path.nil? then + extract_file_command = "tar xf #{_package_file_path} -C #{_path} #{target_file}" + else + extract_file_command = "tar xf #{_package_file_path} #{target_file}" + end + end + + system "#{extract_file_command}" + + if not path.nil? then + target_file_path = File.join(path, target_file) + else + target_file_path = target_file + end + + if File.exist? target_file_path then + @@log.info "Extracted \"#{target_file}\" file.." + return true + else + @@log.warn "Failed to extracted \"#{target_file}\" file.." + return false + end + end + + def FileInstaller.unzip_file(zipfile, dest) + log = "" + Zip::ZipFile.open(zipfile) do |zip_file| + zip_file.each do |f| + f_path = File.join(dest, f.name) + FileUtils.mkdir_p(File.dirname(f_path)) + if File.exist?(f_path) then + log = log + "[Warn] Exist file : #{f_path}\n" unless f_path.end_with? "/" + else + zip_file.extract(f, f_path) + if not f_path.end_with? "/" then + log = log + "[info] Extracted file : #{f_path}\n" + end + end + end + end + return log + end + + def FileInstaller.unzip_a_file(zipfile, file, dest) + Zip::ZipFile.open(zipfile) do |zip_file| + zip_file.each do |f| + if f.name.strip == file then + f_path = File.join(dest, f.name) + FileUtils.mkdir_p(File.dirname(f_path)) + zip_file.extract(f, f_path) unless File.exist?(f_path) + break + end + end + end + end +end diff --git a/src/pkg_server/packageServer.rb b/src/pkg_server/packageServer.rb new file mode 100644 index 0000000..d64ebd1 --- /dev/null +++ b/src/pkg_server/packageServer.rb @@ -0,0 +1,638 @@ +=begin + + packageServer.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require 'fileutils' +$LOAD_PATH.unshift File.dirname(__FILE__) +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common" +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/build_server" +require "BuildComm" +require "packageServerLog" +require "packageServerConfig" +require "distribution" +require "SocketRegisterListener" +require "client" +require "utils" +require "mail" + +class PackageServer + attr_accessor :id, :location, :log, :integrity + attr_accessor :finish, :port + attr_accessor :incoming_path + + # constant + SUPPORTED_OS = ["linux", "windows", "darwin"] + + # initialize + def initialize (id) + @location = "" + @distribution_list = [] + # distribution name -> server_url hash + @dist_to_server_url = {} + @integrity = "YES" + @finish = false + @port = 3333 + @test_time=0 #test time in mili-seconds + @lock_file=nil + + update_config_information(id) + + if not File.exist?( PackageServerConfig::SERVER_ROOT ) + FileUtils.mkdir_p( PackageServerConfig::SERVER_ROOT ) + end + @log = PackageServerLog.new( @log_file_path ) + + server_information_initialize() + end + + # create + def create (id, dist_name, server_url, loc = nil ) + update_config_information(id) + + if loc.nil? or loc.empty? then + @location = Dir.pwd + "/" + @id + else + @location = File.join(loc, @id) + end + + # error check : check for already exist in server @id + if File.exist? @config_dir + raise RuntimeError, "Server create fail. server id [#{@id}] is already exist" + end + + # name check + if dist_name.strip.eql? "distribution.info" then + raise RuntimeError, "id \"distribution.info\" is not available" + end + + # create locking file + @lock_file = Utils.file_lock(PackageServerConfig::LOCK_FILE) + + # create server config directory + FileUtils.mkdir_p @config_dir + FileUtils.mkdir_p @incoming_path + + if (not server_url.empty?) and \ + (not Utils.is_url_remote(server_url)) and \ + (not Utils.is_absolute_path(server_url)) then + # if server_url is local server address then generate absoulte path + server_url = File.join(Utils::WORKING_DIR, server_url) + end + + # create server configure file + File.open( @config_file_path, "w" ) do |f| + f.puts "location : #{@location}" + f.puts "integrity check : YES" + f.puts "server_url : #{dist_name} -> #{server_url}" + end + + # create location's directory + FileUtils.mkdir_p "#{@location}" + + create_distribution_struct( dist_name, server_url ) + Utils.file_unlock(@lock_file) + + @log.output( "package server [#{@id}] created successfully", Log::LV_USER ) + end + + def register( file_path_list, dist_name, snapshot, test_flag ) + @log.info "package register in server" + distribution = get_distribution( dist_name ) + + # distribution lock + @lock_file = Utils.file_lock(distribution.lock_file_name) + + updated_os_list = [] + registed_package_list = [] + binary_pkg_file_path_list = [] + archive_pkg_file_path_list = [] + snapshot_name = "" + + file_path_list.each do |f| + # error check for file exist + if not File.exist? f + raise RuntimeError, "package file does not exist [#{f}]" + end + + pkg = distribution.get_package_from_file(f) + + # binary package + if not pkg.nil? then + updated_pkg = register_package(distribution, pkg, f, test_flag) + + updated_os_list.push updated_pkg.os + registed_package_list.push updated_pkg + binary_pkg_file_path_list.push f + # archive package + else + if test_flag then + @log.error("archive package does not using test mode", Log::LV_USER) + return + end + + file_name = File.basename(f) + distribution.register_archive_pkg(file_name) + archive_pkg_file_path_list.push f + end + end + + # check install dependency integrity + if not test_flag and @integrity.eql? "YES" then + registed_package_list.each do |pkg| + distribution.check_package_integrity(pkg) + end + end + + # move file to package server + binary_pkg_file_path_list.each do |l| + if test_flag then + FileUtils.cp( l, "#{distribution.location}/temp/" ) + else + FileUtils.cp( l, "#{distribution.location}/binary/" ) + end + end + + archive_pkg_file_path_list.each do |l| + FileUtils.mv( l, "#{distribution.location}/source/" ) + end + + # write package list for updated os + updated_os_list.uniq! + updated_os_list.each do |os| + distribution.write_pkg_list( os ) + end + + # register archive pakcage list. + distribution.write_archive_pkg_list() + + # send email + if test_flag then + msg_list = [] + + registed_package_list.each { |p| + msg_list.push("%-30s: %08s" % [ p.package_name.strip, p.version.strip ] ) + } + # email just remote package server + # Mail.send_package_registe_mail( msg_list, @id ) + end + + # if snapshot mode is true then generate snapshot + if snapshot or test_flag then + @log.info "generaging snapshot" + snapshot_name = distribution.generate_snapshot("", "", false) + end + + Utils.file_unlock(@lock_file) + @log.output( "package registed successfully", Log::LV_USER) + + return snapshot_name + end + + def generate_snapshot( snpashot_name, dist_name, base_snapshot ) + @log.info "generating snapshot" + distribution = get_distribution( dist_name ) + + @lock_file = Utils.file_lock(distribution.lock_file_name) + + snapshot_name = distribution.generate_snapshot( snpashot_name, base_snapshot, true) + + Utils.file_unlock(@lock_file) + + return snapshot_name + end + + def sync( dist_name, mode ) + @log.info "sync from server" + distribution = get_distribution( dist_name ) + + if distribution.server_url.empty? then + @log.error( "This distribution has not remote server", Log::LV_USER) + return + end + + @lock_file = Utils.file_lock(distribution.lock_file_name) + distribution.sync( mode, "linux" ) + distribution.sync( mode, "windows" ) + distribution.sync( mode, "darwin" ) + distribution.sync_archive_pkg + Utils.file_unlock(@lock_file) + + @log.output( "package server [#{@id}]'s distribution [#{dist_name}] has been synchronized.", Log::LV_USER ) + end + + def add_distribution( dist_name, server_url, clone ) + @lock_file = Utils.file_lock(PackageServerConfig::LOCK_FILE) + + # error check : check for already exist in server directory + if @dist_to_server_url.keys.include? dist_name.strip then + Utils.file_unlock(@lock_file) + raise RuntimeError, "distribution already exist : #{dist_name}" + end + + # name check + if dist_name.strip.eql? "distribution.info" then + Utils.file_unlock(@lock_file) + raise RuntimeError, "id \"distribution.info\" is not available" + end + + # modify server url + if (not server_url.empty?) and (not Utils.is_url_remote(server_url)) + # if server_url is local server address then generate absoulte path + if not Utils.is_absolute_path( server_url ) then + if server_url.end_with?("/") then + server_url = Utils::WORKING_DIR + server_url + else + server_url = Utils::WORKING_DIR + "/" + server_url + end + end + end + + add_dist_for_config_file(dist_name, server_url, clone) + create_distribution_struct( dist_name, server_url ) + + Utils.file_unlock(@lock_file) + @log.output( "distribution [#{dist_name}] added successfully", Log::LV_USER ) + end + + def remove_server() + @log.info( "Package server [#{@id}] will be removed and all server information delete", Log::LV_USER) + + @lock_file = Utils.file_lock(PackageServerConfig::LOCK_FILE) + if File.exist? @config_file_path then + File.open @config_file_path do |f| + f.each_line do |l| + if l.start_with?( "location : ") then + location= l.split(" : ")[1] + FileUtils.rm_rf l.split(" : ")[1].strip + @log.info( "server location removed : #{location}", Log::LV_USER) + end + end + end + else + @log.error( "Can't find server information : #{@id}", Log::LV_USER) + end + + FileUtils.rm_rf @config_dir + FileUtils.rm_rf @log_file_path + + Utils.file_unlock(@lock_file) + @log.output( "package server [#{@id}] removed successfully", Log::LV_USER ) + end + + def remove_dist( dist_name ) + @log.info "remove distribution in server" + distribution = get_distribution( dist_name ) + + @lock_file = Utils.file_lock(PackageServerConfig::LOCK_FILE) + + # modify config file + config_file = File.readlines(@config_file_path) + File.open(@config_file_path, 'w') do |f| + config_file.each { |line| + f.puts(line) if not line =~ /server_url : #{dist_name} ->/ + } + end + + # modify info file + config_file = File.readlines("#{@location}/distribution.info") + File.open("#{@location}/distribution.info", 'w') do |f| + remove_flag = false + config_file.each { |line| + if line.start_with? "name :" then + if line.split(':')[1].strip.eql? dist_name then + remove_flag = true + else + remove_flag = false + end + + end + + # rewrite information for not remove distribution + if not remove_flag then + f.puts line + end + } + end + + # remove distribution directory + FileUtils.rm_rf distribution.location + + # remove distribution struct + @distribution_list.delete distribution + + Utils.file_unlock(@lock_file) + end + + def remove_pkg( dist_name, pkg_name_list, os, recursive ) + @log.info "package remove in server" + distribution = get_distribution( dist_name ) + + @lock_file = Utils.file_lock(PackageServerConfig::LOCK_FILE) + + distribution.remove_pkg(pkg_name_list, os, recursive) + + Utils.file_unlock(@lock_file) + @log.output( "package removed successfully", Log::LV_USER ) + end + + def remove_snapshot( dist_name, snapshot_list ) + @log.info "remove snapshot in server" + distribution = get_distribution( dist_name ) + + @lock_file = Utils.file_lock(PackageServerConfig::LOCK_FILE) + + distribution.remove_snapshot(snapshot_list) + + Utils.file_unlock(@lock_file) + end + + def clean( dist_name, snapshot_list ) + @log.info "pakcage server clean" + distribution = get_distribution( dist_name ) + + @lock_file = Utils.file_lock(PackageServerConfig::LOCK_FILE) + + distribution.clean( snapshot_list ) + + # remove incoming dir + FileUtils.rm_rf incoming_path + FileUtils.mkdir incoming_path + + Utils.file_unlock(@lock_file) + end + + # start server daemon + def start( port ) + # set job request listener + @log.info "Setting listener..." + + # set port number. default port is 3333 + @port = port + + listener = SocketRegisterListener.new(self) + listener.start + + # main loop + @log.info "Entering main loop..." + if @test_time > 0 then start_time = Time.now end + while( not @finish ) + # sleep + if @test_time > 0 then + curr_time = Time.now + if (curr_time - start_time).to_i > @test_time then + puts "Test time is elapsed!" + break + end + else + sleep 1 + end + end + end + + # stop server daemon + def stop( port ) + # set port number. default port is 3333 + @port = port + @finish = false + + client = BuildCommClient.create("127.0.0.1", @port) + if client.nil? then + raise RuntimeError, "Server does not listen in #{@port} port" + end + client.send("STOP") + ret = client.receive_data + if ret[0].strip.eql? "SUCC" then + @log.output( "Package server is stopped", Log::LV_USER) + else + @log.output( "Package server return error message", Log::LV_USER) + end + client.terminate + + end + + def self.list_id + @@log = PackageServerLog.new( "#{PackageServerConfig::SERVER_ROOT}/.log" ) + + d = Dir.new( PackageServerConfig::SERVER_ROOT ) + s = d.select {|f| not f.start_with?(".") } + s.sort! + + @@log.output( "=== server ID list ===", Log::LV_USER) + s.each do |id| + @@log.output( id, Log::LV_USER) + end + end + + def self.list_dist( id ) + @@log = PackageServerLog.new( "#{PackageServerConfig::SERVER_ROOT}/.log" ) + + @@log.output( "=== ID [#{id}]'s distribution list ===", Log::LV_USER) + + # read package id information + config_file_path = "#{PackageServerConfig::SERVER_ROOT}/#{id}/config" + if not File.exist? config_file_path + raise RuntimeError, "[#{id}] is not server ID" + end + + File.open config_file_path do |f| + f.each_line do |l| + if l.start_with?( "server_url : ") and l.include?( "->" ) then + @@log.output( l.split(" : ")[1].split("->")[0], Log::LV_USER) + end + end + end + end + + def get_default_dist_name() + if @distribution_list.empty? then + raise RuntimeError,"Server [#{@id}] does not have distribution" + end + return @distribution_list[0].name + end + + def reload_dist_package() + # create locking file + @lock_file = Utils.file_lock(PackageServerConfig::LOCK_FILE) + @distribution_list.each do |dist| + dist.initialize_pkg_list + end + Utils.file_unlock(@lock_file) + end + + def release_lock_file + if not @lock_file.nil? then + Utils.file_unlock(@lock_file) + end + end + + # PRIVATE METHODS/VARIABLES + private + + def server_information_initialize + # if id is nil or empty then find default id + if @id.nil? or @id.empty? + d = Dir.new( PackageServerConfig::SERVER_ROOT ) + s = d.select {|f| not f.start_with?(".") } + if s.length.eql? 1 then + @log.info "using default server ID [#{s[0]}]" + @id = s[0] + else + raise RuntimeError, "package server ID is invalid. input server ID using -i option" + end + end + + # read package id information + if File.exist? @config_file_path + File.open @config_file_path do |f| + f.each_line do |l| + if l.start_with?( "location :") then + @location = l.split(" :")[1].strip + elsif l.start_with?( "integrity check :") then + @integrity = l.split(" :")[1].strip.upcase + elsif l.start_with?( "server_url :" ) then + info = l.split(" :")[1].split("->") + @dist_to_server_url[info[0].strip] = info[1].strip + else + @log.error "server config file has invalid information [#{l}]" + end + end + end + end + + @dist_to_server_url.each do |dist_name, server_url| + @distribution_list.push Distribution.new( dist_name, "#{@location}/#{dist_name}", server_url, self ) + end + end + + def get_distribution( dist_name ) + if dist_name.nil? or dist_name.empty? then + dist_name = get_default_dist_name() + end + if dist_name.empty? then + raise RuntimeError,"Can't find distribution information" + end + + @distribution_list.each do |dist| + if dist.name.eql? dist_name.strip + return dist + end + end + + raise RuntimeError, "Can't find distribution [ #{dist_name} ]" + end + + def create_distribution_struct( dist_name, server_url ) + if File.exist? "#{@location}/#{dist_name}" + raise RuntimeError, "distribution directory already exist [#{@location}/#{dist_name}]" + end + + FileUtils.mkdir "#{@location}/#{dist_name}" + FileUtils.mkdir "#{@location}/#{dist_name}/binary" + FileUtils.mkdir "#{@location}/#{dist_name}/source" + FileUtils.mkdir "#{@location}/#{dist_name}/temp" + FileUtils.mkdir "#{@location}/#{dist_name}/snapshots" + File.open("#{@location}/#{dist_name}/snapshot.info", "w") do |f| end + + # generate distribution + distribution = Distribution.new( dist_name, "#{@location}/#{dist_name}", server_url, self ) + + # add dist + @distribution_list.push distribution + + if not server_url.empty? then + @log.info "generate package server using remote package server [#{server_url}]" + + if Utils.is_url_remote(server_url) then + @log.info "[#{dist_name}] distribution creation. using remote server [#{server_url}]" + else + @log.info "[#{dist_name}] distribution creation. using local server [#{server_url}]" + end + + distribution.sync( false, "linux" ) + distribution.sync( false, "windows" ) + distribution.sync( false, "darwin" ) + distribution.sync_archive_pkg + else + @log.info "generate package server do not using remote package server" + + # write_pkg_list for empty file + distribution.write_pkg_list( "linux" ) + distribution.write_pkg_list( "windows" ) + distribution.write_pkg_list( "darwin" ) + distribution.write_archive_pkg_list() + end + + # add dist information to .info file + File.open("#{@location}/distribution.info", "a") do |f| + f.puts "name : #{dist_name}" + f.puts "time : #{Time.now.strftime("%Y%m%d%H%M%S")}" + f.puts + end + + end + + def register_package(distribution, pkg, file_path, test_flag) + # get package class using bianry file + if pkg.nil? or pkg.package_name.empty? then + raise "[#{file_path}]'s pkginfo.manifest file is incomplete." + end + + if not test_flag then + # error check + if pkg.package_name.empty? or pkg.version.empty? \ + or pkg.os.empty? or pkg.maintainer.empty? then + raise "[#{file_path}]'s pkginfo.manifest file is incomplete." + end + + updated_pkg = distribution.register(file_path, pkg ) + else + updated_pkg = distribution.register_for_test(file_path, pkg ) + end + + return updated_pkg + end + + def add_dist_for_config_file(dist_name, server_url, clone) + File.open( @config_file_path, "a" ) do |f| + if clone then + @log.info "add distribution using [#{server_url}] in clone mode" + f.puts "server_url : #{dist_name} -> " + else + @log.info "add distribution using [#{server_url}]" + f.puts "server_url : #{dist_name} -> #{server_url}" + end + end + end + + def update_config_information(id) + @id = id + @config_dir = "#{PackageServerConfig::SERVER_ROOT}/#{@id}" + @config_file_path = "#{@config_dir}/config" + @incoming_path = "#{@config_dir}/incoming" + @log_file_path = "#{PackageServerConfig::SERVER_ROOT}/.#{@id}.log" + end +end diff --git a/src/pkg_server/packageServerConfig.rb b/src/pkg_server/packageServerConfig.rb new file mode 100644 index 0000000..7e19000 --- /dev/null +++ b/src/pkg_server/packageServerConfig.rb @@ -0,0 +1,36 @@ +=begin + + serverConfig.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common" +require "utils" + +class PackageServerConfig + CONFIG_ROOT = "#{Utils::HOME}/.build_tools" + SERVER_ROOT = "#{PackageServerConfig::CONFIG_ROOT}/pkg_server" + LOCK_FILE = "#{PackageServerConfig::SERVER_ROOT}/.server_loc" +end diff --git a/src/pkg_server/packageServerLog.rb b/src/pkg_server/packageServerLog.rb new file mode 100644 index 0000000..d9c4619 --- /dev/null +++ b/src/pkg_server/packageServerLog.rb @@ -0,0 +1,46 @@ +=begin + + packageServerLog.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__)) + "/common" +require "log" +require "logger" + +class PackageServerLog < Log + + def initialize(path) + super(path) + @second_out = $stdout + end + + protected + def output_extra(msg) + @second_out.puts msg + end + + +end diff --git a/src/pkg_server/serverOptParser.rb b/src/pkg_server/serverOptParser.rb new file mode 100644 index 0000000..f26b5be --- /dev/null +++ b/src/pkg_server/serverOptParser.rb @@ -0,0 +1,236 @@ +=begin + + serverOptParser.rb + +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +Contact: +Taejun Ha +Jiil Hyoun +Donghyuk Yang +DongHee Yang + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Contributors: +- S-Core Co., Ltd +=end + +require 'optparse' +$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common" +require "utils" + +def set_default( options ) + options[:id] = "" + options[:dist] = "" + options[:url] = "" + options[:os] = "all" + options[:pkgs] = [] + options[:snaps] = [] + options[:bsnap] = "" + options[:port] = "3333" + options[:gensnap] = false + options[:force] = false + options[:test] = false + options[:clone] = false + options[:recursive] = false +end + +def option_error_check( options ) + + case options[:cmd] + when "create" + if options[:id].empty? or options[:dist].empty? then + raise ArgumentError, "Usage: pkg-svr create -n -d [-u ] [-l ] " + end + when "remove" + if options[:id].empty? then + raise ArgumentError, "Usage: pkg-svr remove -n " + end + when "remove-pkg" + if options[:pkgs].empty? then + raise ArgumentError, "Usage: pkg-svr remove-pkg -n -d -P [-o ]" + "\n" \ + end + when "remove-snapshot" + if options[:snaps].empty? then + raise ArgumentError, "Usage: pkg-svr remove-snapshot -n -d -s " + end + when "add-dist" + if options[:id].empty? or options[:dist].empty? then + raise ArgumentError, "Usage: pkg-svr add-dist -n -d [-u ] [--clone] " + end + when "remove-dist" + if options[:id].empty? or options[:dist].empty? then + raise ArgumentError, "Usage: pkg-svr remove-dist -n -d " + end + when "register" + if options[:pkgs].empty? then + raise ArgumentError, "Usage: pkg-svr register -n -d -P [--gen] [--test] " + end + when "gen-snapshot" + if options[:snaps].empty? then + raise ArgumentError, "Usage: pkg-svr gen-snapshot -n -d -s [-b ]" + end + when "start" + if options[:port].empty? then + raise ArgumentError, "Usage: pkg-svr start -n -p " + end + when "stop" + if options[:port].empty? then + raise ArgumentError, "Usage: pkg-svr stop -n -p " + end + when "sync" + when "list" + when "clean" + else + raise ArgumentError, "Input is incorrect : #{options[:cmd]}" + end +end + +def option_parse + options = {} + banner = "Package-server administer service command-line tool." + "\n" \ + + "\n" + "Usage: pkg-svr [OPTS] or pkg-svr -h" + "\n" \ + + "\n" + "Subcommands:" + "\n" \ + + "\t" + "create Create a package-server." + "\n" \ + + "\t" + "add-dist Add a distribution to package-server." + "\n" \ + + "\t" + "register Register a package in package-server." + "\n" \ + + "\t" + "remove Remove a package-server." + "\n" \ + + "\t" + "remove-dist Remove a distribution to package-server." + "\n" \ + + "\t" + "remove-snapshot Remove a snapshot in package-server." + "\n" \ + + "\t" + "gen-snapshot Generate a snapshot in package-server." + "\n" \ + + "\t" + "sync Synchronize the package-server from parent package server." + "\n" \ + + "\t" + "start Start the package-server." + "\n" \ + + "\t" + "stop Stop the package-server." + "\n" \ + + "\t" + "clean Delete unneeded package files in package-server." + "\n" \ + + "\t" + "list Show all pack" + "\n" \ + + "\n" + "Subcommand usage:" + "\n" \ + + "\t" + "pkg-svr create -n -d [-u ] [-l ] " + "\n" \ + + "\t" + "pkg-svr add-dist -n -d [-u ] [--clone] " + "\n" \ + + "\t" + "pkg-svr register -n -d -P [--gen] [--test] " + "\n" \ + + "\t" + "pkg-svr remove -n " + "\n" \ + + "\t" + "pkg-svr remove-dist -n -d " + "\n" \ + + "\t" + "pkg-svr remove-pkg -n -d -P [-o ] " + "\n" \ + + "\t" + "pkg-svr remove-snapshot -n -d -s " + "\n" \ + + "\t" + "pkg-svr gen-snapshot -n -d -s [-b ] " + "\n" \ + + "\t" + "pkg-svr sync -n -d [--force] " + "\n" \ + + "\t" + "pkg-svr clean -n -d [-s ] " + "\n" \ + + "\t" + "pkg-svr start -n -p " + "\n" \ + + "\t" + "pkg-svr stop -n -p " + "\n" \ + + "\t" + "pkg-svr list [-n ] " + "\n" \ + + "\n" + "Options:" + "\n" + + optparse = OptionParser.new(nil, 32, ' '*8) do|opts| + # Set a banner, displayed at the top + # of the help screen. + + opts.banner = banner + + opts.on( '-n', '--name ', 'package server name' ) do|name| + options[:id] = name + end + + opts.on( '-d', '--dist ', 'package server distribution' ) do|dist| + options[:dist] = dist + end + + opts.on( '-u', '--url ', 'remote server url: http://127.0.0.1/dibs/unstable' ) do|url| + options[:url] = url + end + + opts.on( '-o', '--os ', 'target operating system: linux/windows/darwin' ) do|os| + options[:os] = os + end + + opts.on( '-P', '--pkgs ', 'package file path list' ) do|pkgs| + list = pkgs.tr(" \t","").split(",") + list.each do |l| + if l.start_with? "~" then l = Utils::HOME + l.delete("~") end + options[:pkgs].push l + end + end + + opts.on( '-s', '--snapshot ', 'a snapshot name or snapshot list' ) do|snaplist| + options[:snaps] = snaplist.split(",") + end + + opts.on( '-b', '--base ', 'base snapshot name' ) do|bsnap| + options[:bsnap] = bsnap + end + + opts.on( '-l', '--loc ', 'server location' ) do|loc| + options[:loc] = loc + end + + opts.on( '-p', '--port ', 'port number' ) do|port| + options[:port] = port + end + + opts.on( '--recursive', 'remove all depends packages' ) do + options[:recursive] = true + end + + opts.on( '--clone', 'clone mode' ) do + options[:clone] = true + end + + opts.on( '--force', 'force update pkg file' ) do + options[:force] = true + end + + opts.on( '--test', 'upload for test' ) do + options[:test] = true + end + + opts.on( '--gen', 'generate snapshot' ) do + options[:gensnap] = true + end + + opts.on( '-h', '--help', 'display manual' ) do + puts opts + exit + end + + opts.on( '-v', '--version', 'display version' ) do + puts "DIBS(Distributed Intelligent Build System) version 1.2.0" + exit + end + end + + cmd = ARGV[0] + + if cmd.eql? "create" or cmd.eql? "register" or cmd.eql? "sync" \ + or cmd.eql? "gen-snapshot" or cmd.eql? "add-dist" \ + or cmd.eql? "remove" or cmd.eql? "remove-dist" \ + or cmd.eql? "remove-pkg" or cmd.eql? "remove-snapshot" \ + or cmd.eql? "start" or cmd.eql? "stop" or cmd.eql? "clean" \ + or cmd.eql? "list" \ + or cmd =~ /(-v)|(--version)/ \ + or cmd =~ /(help)|(-h)|(--help)/ then + if cmd.eql? "help" then ARGV[0] = "-h" end + options[:cmd] = ARGV[0] + else + raise ArgumentError, "Usage: pkg-svr [OPTS] or pkg-svr -h" + end + + # default value setting + set_default options + + optparse.parse! + + # option error check + option_error_check options + + return options +end + diff --git a/test/b/b b/test/b/b new file mode 100644 index 0000000..6178079 --- /dev/null +++ b/test/b/b @@ -0,0 +1 @@ +b diff --git a/test/b/package/build.linux b/test/b/package/build.linux new file mode 100755 index 0000000..83e5a6c --- /dev/null +++ b/test/b/package/build.linux @@ -0,0 +1,27 @@ +#!/bin/bash -e + +clean () +{ + rm -rf $SRCDIR/*.zip + rm -rf $SRCDIR/*.tar.gz +} + +build() +{ + if [ "`cat $ROOTDIR/c`" = "ca" ] + then + echo "B: `cat $ROOTDIR/c` == ca ... ok" + else + echo "B: `cat $ROOTDIR/c` != ca ... fail" + exit 1 + fi +} + +install() +{ + mkdir -p $SRCDIR/package/b.package.linux/data + cp $SRCDIR/b $SRCDIR/package/b.package.linux/data +} + +$1 +echo "$1 success" diff --git a/test/b/package/pkginfo.manifest b/test/b/package/pkginfo.manifest new file mode 100644 index 0000000..a164fd8 --- /dev/null +++ b/test/b/package/pkginfo.manifest @@ -0,0 +1,7 @@ +Package: b +Version: 11 +OS: linux +Maintainer: xxx +Build-host-os: linux +Build-dependency: c [linux] +Source: b diff --git a/test/bin/bin_0.0.0_linux.zip b/test/bin/bin_0.0.0_linux.zip new file mode 100644 index 0000000000000000000000000000000000000000..9880da1e42ac1986bbbe9bf1b83e51dfec0c1056 GIT binary patch literal 620 zcmWIWW@h1H00I5ZRSsYVlwf6$VMs|VNz@Mw;bdUmRleFEgi9;985mh!Ff%ZKi2xMs z>yUv!>vv06zJ%s%PS>MrH8|cae|y0vT78nwfqVD1 zgo;m1d{AvayS#N*yVzI1@FTDK6em4jvrTROt~*A2M_w-N>ug(AVCVJl@p)V3jZcnG z&}Dohl+9kI_&7oSp`h^gW#9UX7F#cJ+JZycwC~m~jQQ1kleQAi(g}5kx}+o)r@C zXdXp33N_dvMghZ*VM(Js%qUFfuR*08J>!PS4Cs%h$_I z%*#wmEiM6@6_|R~AB54|lG^Xcb;v-#^}D4jUxM>pFAc3cSH}YTTxX-)xgJK0)zz27 zVy_%MF#G?%XYmVP9+cWS*>uv5*#Z}X|9OS3TD#+p5ue9P)jrPlZ3T8k4G7CL7 zR&?iC=B*<8qIF7hZHv24O6X(xt8Qf-%_WP^>)LLdRT+9|t-5t*T(3h}YIRlr{nTroteN2~b37q4T!(>-E^Mu-`J->JZycwC~m~jQR1kl$YAi(g}5ky0So)r@G zXkJA(3N_#%Mgc>RVM(Js%qUc`f6c;x4EB{WH#7ScFlaC^003{mKPCVG literal 0 HcmV?d00001 diff --git a/test/build-cli-01.testcase b/test/build-cli-01.testcase new file mode 100644 index 0000000..87b1d38 --- /dev/null +++ b/test/build-cli-01.testcase @@ -0,0 +1,21 @@ +#PRE-EXEC +#EXEC +../build-cli -h +#POST-EXEC +#EXPECT +Usage: build-cli {build|resolve|query|cancel} ... + build-cli build -N -d [-o ] [-w ] [--async] + build-cli resolve -N -d [-o ] [-w ] [--async] + build-cli query -d + build-cli cancel -j -d [-w ] + build-cli register -P -d -t [-w ] + -N, --project project name + -d, --address build server address: 127.0.0.1:2224 + -o, --os target operating system: linux/windows/darwin + --async asynchronous job + -j, --job job number + -w, --passwd password for managing project + -P, --pkg package file path + -t, --ftp ftp server url: ftp://dibsftp:dibsftp@127.0.0.1 + -h, --help display manual + -v, --version display version diff --git a/test/build-cli-02.testcase b/test/build-cli-02.testcase new file mode 100644 index 0000000..f7c7d9b --- /dev/null +++ b/test/build-cli-02.testcase @@ -0,0 +1,15 @@ +#PRE-EXEC +#EXEC +../build-cli query -d 127.0.0.1:2223 +#POST-EXEC +#EXPECT +HOST-OS: +MAX_WORKING_JOBS: + +* FTP * +FTP_ADDR: +FTP_USERNAME: + +* PROJECT(S) * + +* JOB(S) * diff --git a/test/build-cli-03.testcase b/test/build-cli-03.testcase new file mode 100644 index 0000000..4a0e998 --- /dev/null +++ b/test/build-cli-03.testcase @@ -0,0 +1,29 @@ +#PRE-EXEC +#EXEC +../build-cli build -N testa -d 127.0.0.1:2223 +#POST-EXEC +#EXPECT +Info: Added new job +Info: Initializing job... +Info: Checking package version ... +Info: Checking build dependency ... +Info: Invoking a thread for building Job +Info: New Job +Info: Started to build this job... +Info: JobBuilder +Info: Downloding client is initializing... +Info: Installing dependent packages... +Info: Downloading dependent source packages... +Info: Make clean... +Info: Make build... +Warn: Failed on build script: "save_cache" +Warn: Saving cache failed... +Info: Make install... +Info: Generatiing pkginfo.manifest... +Info: Zipping... +Info: Creating package file ... a_0.0.3_linux.zip +Info: Checking reverse build dependency ... +Info: Uploading ... +Info: Upload succeeded. Sync local pkg-server again... +Info: Snapshot: +Info: Job is completed! diff --git a/test/build-cli-04.testcase b/test/build-cli-04.testcase new file mode 100644 index 0000000..005f79c --- /dev/null +++ b/test/build-cli-04.testcase @@ -0,0 +1,7 @@ +#PRE-EXEC +#EXEC +../build-cli build -N non_exist_project -d 127.0.0.1:2223 +#POST-EXEC +#EXPECT +Error: Requested project does not exist! +Info: Check project name using "query" command option ! diff --git a/test/build-cli-05.testcase b/test/build-cli-05.testcase new file mode 100644 index 0000000..b879e3e --- /dev/null +++ b/test/build-cli-05.testcase @@ -0,0 +1,6 @@ +#PRE-EXEC +#EXEC +../build-cli build -N testa -d 172.21.111.217:1111 +#POST-EXEC +#EXPECT +Connection to server failed! diff --git a/test/build-cli-06.testcase b/test/build-cli-06.testcase new file mode 100644 index 0000000..10e5e88 --- /dev/null +++ b/test/build-cli-06.testcase @@ -0,0 +1,6 @@ +#PRE-EXEC +#EXEC +../build-cli build -N testa -d 111.11q.111.111:1111 +#POST-EXEC +#EXPECT +Connection to server failed! diff --git a/test/build-cli-07.testcase b/test/build-cli-07.testcase new file mode 100644 index 0000000..b61616c --- /dev/null +++ b/test/build-cli-07.testcase @@ -0,0 +1,11 @@ +#PRE-EXEC +echo "testa project is already built and uploaded in previeous testcase" +#EXEC +../build-cli build -N testa -d 127.0.0.1:2223 +#POST-EXEC +#EXPECT +Info: Added new job +Info: Initializing job... +Info: Checking package version ... +Error: Version must be increased : +Error: Job is stopped by ERROR diff --git a/test/build-cli-08.testcase b/test/build-cli-08.testcase new file mode 100644 index 0000000..5213524 --- /dev/null +++ b/test/build-cli-08.testcase @@ -0,0 +1,31 @@ +#PRE-EXEC +echo "Assume testa project is already built and uploaded in previeous testcase" +#EXEC +../build-cli build -N testb -d 127.0.0.1:2223 +#POST-EXEC +#EXPECT +Info: Added new job +Info: Initializing job... +Info: Checking package version ... +Info: Checking build dependency ... +Info: Invoking a thread for building Job +Info: New Job +Info: Started to build this job... +Info: JobBuilder +Info: Downloding client is initializing... +Info: Installing dependent packages... +Info: * a +Info: Downloading dependent source packages... +Info: Make clean... +Info: Make build... +Warn: Failed on build script: "save_cache" +Warn: Saving cache failed... +Info: Make install... +Info: Generatiing pkginfo.manifest... +Info: Zipping... +Info: Creating package file +Info: Checking reverse build dependency ... +Info: Uploading ... +Info: Upload succeeded. Sync local pkg-server again... +Info: Snapshot: +Info: Job is completed! diff --git a/test/build-cli-09.testcase b/test/build-cli-09.testcase new file mode 100644 index 0000000..bf6a6a8 --- /dev/null +++ b/test/build-cli-09.testcase @@ -0,0 +1,14 @@ +#PRE-EXEC +echo "Assume testa/testb project is already built and uploaded in previeous testcase" +../pkg-svr remove-pkg -n pkgsvr01 -d unstable -P b +../pkg-svr remove-pkg -n pkgsvr01 -d unstable -P a +#EXEC +../build-cli build -N testb -d 127.0.0.1:2223 +#POST-EXEC +#EXPECT +Info: Added new job +Info: Initializing job... +Info: Checking package version ... +Info: Checking build dependency ... +Error: The package "a" for build-dependency is not found +Error: Job is stopped by ERROR diff --git a/test/build-cli-10.testcase b/test/build-cli-10.testcase new file mode 100644 index 0000000..ef3b16f --- /dev/null +++ b/test/build-cli-10.testcase @@ -0,0 +1,29 @@ +#PRE-EXEC +#EXEC +../build-cli build -N testa -d 127.0.0.1:2223 -o linux +#POST-EXEC +#EXPECT +Info: Added new job +Info: Initializing job... +Info: Checking package version ... +Info: Checking build dependency ... +Info: Invoking a thread for building Job +Info: New Job +Info: Started to build this job... +Info: JobBuilder +Info: Downloding client is initializing... +Info: Installing dependent packages... +Info: Downloading dependent source packages... +Info: Make clean... +Info: Make build... +Warn: Failed on build script: "save_cache" +Warn: Saving cache failed... +Info: Make install... +Info: Generatiing pkginfo.manifest... +Info: Zipping... +Info: Creating package file ... a_0.0.3_linux.zip +Info: Checking reverse build dependency ... +Info: Uploading ... +Info: Upload succeeded. Sync local pkg-server again... +Info: Snapshot: +Info: Job is completed! diff --git a/test/build-cli-11.testcase b/test/build-cli-11.testcase new file mode 100644 index 0000000..b779317 --- /dev/null +++ b/test/build-cli-11.testcase @@ -0,0 +1,10 @@ +#PRE-EXEC +#EXEC +../build-cli build -N testa -d 127.0.0.1:2223 -o windows +#POST-EXEC +#EXPECT +Info: Added new job +Info: Initializing job... +Info: Checking package version ... +Error: No servers that are able to build your packages. +Error: Job is stopped by ERROR diff --git a/test/build-cli-12.testcase b/test/build-cli-12.testcase new file mode 100644 index 0000000..9ca6ab4 --- /dev/null +++ b/test/build-cli-12.testcase @@ -0,0 +1,7 @@ +#PRE-EXEC +#EXEC +../build-cli build -N testa -d 127.0.0.1:2223 -o unknown_os +#POST-EXEC +#EXPECT +We have no plan to Buld OS "unknown_os" + please check your option OS diff --git a/test/build-cli-13.testcase b/test/build-cli-13.testcase new file mode 100644 index 0000000..139f370 --- /dev/null +++ b/test/build-cli-13.testcase @@ -0,0 +1,34 @@ +#PRE-EXEC +echo "Assume that testc project has the password (1111)" +echo "Assume that testa,testb which are depended by testc are built and uploaded" +../build-cli build -N testa -d 127.0.0.1:2223 +../build-cli build -N testb -d 127.0.0.1:2223 +#EXEC +../build-cli build -N testc -d 127.0.0.1:2223 -w 1111 +#POST-EXEC +#EXPECT +Info: Added new job +Info: Initializing job... +Info: Checking package version ... +Info: Checking build dependency ... +Info: Invoking a thread for building Job +Info: New Job +Info: Started to build this job... +Info: JobBuilder +Info: Downloding client is initializing... +Info: Installing dependent packages... +Info: * a +Info: Downloading dependent source packages... +Info: Make clean... +Info: Make build... +Warn: Failed on build script: "save_cache" +Warn: Saving cache failed... +Info: Make install... +Info: Generatiing pkginfo.manifest... +Info: Zipping... +Info: Creating package file ... c_0.0.3_linux.zip +Info: Checking reverse build dependency ... +Info: Uploading ... +Info: Upload succeeded. Sync local pkg-server again... +Info: Snapshot: +Info: Job is completed! diff --git a/test/build-cli-14.testcase b/test/build-cli-14.testcase new file mode 100644 index 0000000..01e1aa6 --- /dev/null +++ b/test/build-cli-14.testcase @@ -0,0 +1,9 @@ +#PRE-EXEC +echo "Assume that testc project has the password (1111)" +echo "Assume that testa,testb which are depended by testc are built and uploaded" +#EXEC +../build-cli build -N testc -d 127.0.0.1:2223 +#POST-EXEC +#EXPECT +Error: Project's password is not matched! +Error: Use -w option to input your project password diff --git a/test/build-cli-15.testcase b/test/build-cli-15.testcase new file mode 100644 index 0000000..fde1d4d --- /dev/null +++ b/test/build-cli-15.testcase @@ -0,0 +1,9 @@ +#PRE-EXEC +echo "Assume that testc project has the password (1111)" +echo "Assume that testa,testb which are depended by testc are built and uploaded" +#EXEC +../build-cli build -N testc -d 127.0.0.1:2223 -w 2222 +#POST-EXEC +#EXPECT +Error: Project's password is not matched! +Error: Use -w option to input your project password diff --git a/test/build-cli-16.testcase b/test/build-cli-16.testcase new file mode 100644 index 0000000..de3933c --- /dev/null +++ b/test/build-cli-16.testcase @@ -0,0 +1,8 @@ +#PRE-EXEC +../pkg-svr remove-pkg -n pkgsvr01 -d unstable -P c +#EXEC +../build-cli build -N testc -d 127.0.0.1:2223 -w 1111 --async +#POST-EXEC +#EXPECT +Info: Added new job +Info: Above job(s) will be processed asynchronously! diff --git a/test/build-cli-17.testcase b/test/build-cli-17.testcase new file mode 100644 index 0000000..c4b5bd7 --- /dev/null +++ b/test/build-cli-17.testcase @@ -0,0 +1,40 @@ +#PRE-EXEC +../pkg-svr remove-pkg -n pkgsvr01 -d unstable -P c +../pkg-svr remove-pkg -n pkgsvr01 -d unstable -P b +../pkg-svr remove-pkg -n pkgsvr01 -d unstable -P a +#EXEC +../build-cli build -N testa -d 127.0.0.1:2223 --async +sleep 1 +../build-cli build -N testb -d 127.0.0.1:2223 +#POST-EXEC +#EXPECT +Info: Added new job +Info: Above job(s) will be processed asynchronously! +Info: Added new job +Info: Initializing job... +Info: Checking package version ... +Info: Waiting for finishing following jobs: +Info: * +Info: Invoking a thread for building Job +Info: New Job +Info: Checking build dependency ... +Info: Started to build this job... +Info: JobBuilder +Info: Downloding client is initializing... +Info: Installing dependent packages... +Info: * a +Info: Downloading dependent source packages... +Info: Make clean... +Info: Make build... +Warn: Failed on build script: "save_cache" +Warn: Saving cache failed... +Info: Make install... +Info: Generatiing pkginfo.manifest... +Info: Zipping... +Info: Creating package file ... +Info: Checking reverse build dependency ... +Info: Uploading ... +Info: Upload succeeded. Sync local pkg-server again... +Info: Snapshot: +Info: Job is completed! + diff --git a/test/build-cli-18.testcase b/test/build-cli-18.testcase new file mode 100644 index 0000000..5a35f88 --- /dev/null +++ b/test/build-cli-18.testcase @@ -0,0 +1,32 @@ +#PRE-EXEC +../build-cli build -N testa -d 127.0.0.1:2223 +../build-cli build -N testb -d 127.0.0.1:2223 +../build-cli build -N testc -d 127.0.0.1:2223 -w 1111 +#EXEC +rm -rf git01/a +cd git01;tar xvf a_new.tar.gz +../build-cli build -N testa -d 127.0.0.1:2223 +#POST-EXEC +#EXPECT +Info: Added new job +Info: Initializing job... +Info: Checking package version ... +Info: Invoking a thread for building Job +Info: New Job +Info: Checking build dependency ... +Info: Started to build this job... +Info: JobBuilder +Info: Downloding client is initializing... +Info: Installing dependent packages... +Info: Downloading dependent source packages... +Info: Make clean... +Info: Make build... +Warn: Failed on build script: "save_cache" +Warn: Saving cache failed... +Info: Make install... +Info: Generatiing pkginfo.manifest... +Info: Zipping... +Info: Creating package file ... a_0.0.4_linux.zip +Info: Checking reverse build dependency ... +Info: * Checking reverse-build ... testc +Error: Job is stopped by ERROR diff --git a/test/build-svr-01.testcase b/test/build-svr-01.testcase new file mode 100644 index 0000000..e345367 --- /dev/null +++ b/test/build-svr-01.testcase @@ -0,0 +1,11 @@ +#PRE-EXEC +rm -rf ~/.build_tools/build_server/testserver3 +rm -rf buildsvr01 +mkdir buildsvr01 +#EXEC +cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132 +#POST-EXEC +../build-svr remove -n testserver3 +rm -rf buildsvr01 +#EXPECT +Created new build server: "testserver3" diff --git a/test/build-svr-02.testcase b/test/build-svr-02.testcase new file mode 100644 index 0000000..57784f0 --- /dev/null +++ b/test/build-svr-02.testcase @@ -0,0 +1,27 @@ +#PRE-EXEC +#EXEC +../build-svr -h +#POST-EXEC +#EXPECT +Usage: build-svr {create|remove|start|stop|add-svr|add-prj|fullbuild|help} ... + build-svr create -n -u -d -t + build-svr remove -n + build-svr start -n -p + build-svr stop -n + build-svr add-svr -n -d + build-svr add-prj -n -N [-g ] [-b ] [-P ] [-w ] [-o ] + build-svr register -n -P + build-svr fullbuild -n + -n, --name build server name + -u, --url package server url: http://127.0.0.1/dibs/unstable + -d, --address server address: 127.0.0.1:2224 + -p, --port server port number: 2224 + -P, --pkg package file path or name + -o, --os ex) linux,windows + -N, --pname project name + -g, --git git repository + -b, --branch git branch + -w, --passwd password for managing project + -t, --ftp ftp server url: ftp://dibsftp:dibsftp@127.0.0.1 + -h, --help display this information + -v, --version display version diff --git a/test/build-svr-03.testcase b/test/build-svr-03.testcase new file mode 100644 index 0000000..6038be5 --- /dev/null +++ b/test/build-svr-03.testcase @@ -0,0 +1,13 @@ +#PRE-EXEC +rm -rf buildsvr01 +mkdir buildsvr01 +cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132 +#EXEC +../build-svr add-svr -n testserver3 -d 127.0.0.1:2223 +cat ~/.build_tools/build_server/testserver3/friends +#POST-EXEC +../build-svr remove -n testserver3 +rm -rf buildsvr01 +#EXPECT +Friend server is added successfully! +127.0.0.1,2223 diff --git a/test/build-svr-04.testcase b/test/build-svr-04.testcase new file mode 100644 index 0000000..5a7d65e --- /dev/null +++ b/test/build-svr-04.testcase @@ -0,0 +1,13 @@ +#PRE-EXEC +rm -rf ~/.build_tools/build_server/testserver3 +rm -rf buildsvr01 +mkdir buildsvr01 +cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132 +#EXEC +echo "TEST_TIME=3" >> ~/.build_tools/build_server/testserver3/server.cfg +../build-svr start -n testserver3 -p 2223 +#POST-EXEC +../build-svr remove -n testserver3 +rm -rf buildsvr01 +#EXPECT +Test time is elapsed! diff --git a/test/build-svr-05.testcase b/test/build-svr-05.testcase new file mode 100644 index 0000000..634cb10 --- /dev/null +++ b/test/build-svr-05.testcase @@ -0,0 +1,14 @@ +#PRE-EXEC +mkdir buildsvr01 +rm -rf ~/.build_tools/build_server/testserver3 +cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132 +../build-svr start -n testserver3 -p 2223 & +#EXEC +sleep 1 +../build-svr stop -n testserver3 +sleep 1 +#POST-EXEC +../build-svr remove -n testserver3 +rm -rf buildsvr01 +#EXPECT +Server will be down! diff --git a/test/build-svr-06.testcase b/test/build-svr-06.testcase new file mode 100644 index 0000000..b0f302a --- /dev/null +++ b/test/build-svr-06.testcase @@ -0,0 +1,10 @@ +#PRE-EXEC +mkdir buildsvr01 +cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132 +#EXEC +../build-svr stop -n testserver3 +#POST-EXEC +../build-svr remove -n testserver3 +rm -rf buildsvr01 +#EXPECT +Server is not running! diff --git a/test/build-svr-07.testcase b/test/build-svr-07.testcase new file mode 100644 index 0000000..856e52b --- /dev/null +++ b/test/build-svr-07.testcase @@ -0,0 +1,9 @@ +#PRE-EXEC +mkdir buildsvr01 +cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132 +#EXEC +../build-svr remove -n testserver3 +#POST-EXEC +rm -rf buildsvr01 +#EXPECT +Removed the server diff --git a/test/build-svr-08.testcase b/test/build-svr-08.testcase new file mode 100644 index 0000000..c18ffa2 --- /dev/null +++ b/test/build-svr-08.testcase @@ -0,0 +1,12 @@ +#PRE-EXEC +rm -rf ~/.build_tools/build_server/testserver3 +rm -rf buildsvr01 +mkdir buildsvr01 +cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132 +#EXEC +cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132 +#POST-EXEC +../build-svr remove -n testserver3 +rm -rf buildsvr01 +#EXPECT +Creating server failed. The server id is already exist diff --git a/test/build-svr-09.testcase b/test/build-svr-09.testcase new file mode 100644 index 0000000..0554f0b --- /dev/null +++ b/test/build-svr-09.testcase @@ -0,0 +1,6 @@ +#PRE-EXEC +#EXEC +../build-svr remove -n testserverxx +#POST-EXEC +#EXPECT +does not exist! diff --git a/test/build-svr-10.testcase b/test/build-svr-10.testcase new file mode 100644 index 0000000..126e55f --- /dev/null +++ b/test/build-svr-10.testcase @@ -0,0 +1,6 @@ +#PRE-EXEC +#EXEC +../build-svr start -n testserverxx +#POST-EXEC +#EXPECT +does not exist! diff --git a/test/build-svr-11.testcase b/test/build-svr-11.testcase new file mode 100644 index 0000000..5766c2a --- /dev/null +++ b/test/build-svr-11.testcase @@ -0,0 +1,11 @@ +#PRE-EXEC +rm -rf buildsvr01 +mkdir buildsvr01 +cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132 +#EXEC +../build-svr add-prj -n testserver3 -N testa -g test_git -b test_branch +#POST-EXEC +../build-svr remove -n testserver3 +rm -rf buildsvr01 +#EXPECT +Adding project succeeded! diff --git a/test/build-svr-12.testcase b/test/build-svr-12.testcase new file mode 100644 index 0000000..69e3cd5 --- /dev/null +++ b/test/build-svr-12.testcase @@ -0,0 +1,6 @@ +#PRE-EXEC +#EXEC +../build-svr add-prj -n testserverxxx -N testa -g test_git -b test_branch +#POST-EXEC +#EXPECT +does not exist! diff --git a/test/build-svr-13.testcase b/test/build-svr-13.testcase new file mode 100644 index 0000000..110677a --- /dev/null +++ b/test/build-svr-13.testcase @@ -0,0 +1,11 @@ +#PRE-EXEC +rm -rf buildsvr01 +mkdir buildsvr01 +cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132 +#EXEC +../build-svr add-prj -n testserver3 -N testa -g test_git -b test_branch -w 1111 +cat buildsvr01/projects/testa/build | grep PASSWD +#POST-EXEC +#EXPECT +Adding project succeeded! +PASSWD=1111 diff --git a/test/build-svr-14.testcase b/test/build-svr-14.testcase new file mode 100644 index 0000000..c5b9788 --- /dev/null +++ b/test/build-svr-14.testcase @@ -0,0 +1,11 @@ +#PRE-EXEC +rm -rf buildsvr01 +mkdir buildsvr01 +cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132 +#EXEC +../build-svr add-prj -n testserver3 -N testx -g test_git -b test_branch -o linux +#POST-EXEC +../build-svr remove -n testserver3 +rm -rf buildsvr01 +#EXPECT +Adding project succeeded! diff --git a/test/build-svr-15.testcase b/test/build-svr-15.testcase new file mode 100644 index 0000000..7574a81 --- /dev/null +++ b/test/build-svr-15.testcase @@ -0,0 +1,19 @@ +#PRE-EXEC +rm -rf buildsvr01 +mkdir buildsvr01 +cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132 +#EXEC +../build-svr register -n testserver3 -P bin/bin_0.0.0_linux.zip +#POST-EXEC +../build-svr remove -n testserver3 +rm -rf buildsvr01 +#EXPECT +Info: Initializing job... +Info: Checking package version ... +Info: Invoking a thread for REGISTER Job +Info: New Job +Info: Checking reverse build dependency ... +Info: Uploading ... +Info: Upload succeeded. Sync local pkg-server again... +Info: Snapshot: +Info: Job is completed! diff --git a/test/build-svr-16.testcase b/test/build-svr-16.testcase new file mode 100644 index 0000000..d2ade40 --- /dev/null +++ b/test/build-svr-16.testcase @@ -0,0 +1,15 @@ +#PRE-EXEC +rm -rf buildsvr01 +mkdir buildsvr01 +cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132 +../build-svr register -n testserver3 -P bin/bin_0.0.0_linux.zip +#EXEC +../build-svr register -n testserver3 -P bin/bin_0.0.0_linux.zip +#POST-EXEC +../build-svr remove -n testserver3 +rm -rf buildsvr01 +#EXPECT +Info: Initializing job... +Info: Checking package version ... +Error: Version must be increased : +Error: Job is stopped by ERROR diff --git a/test/buildcli.testsuite b/test/buildcli.testsuite new file mode 100644 index 0000000..14565e3 --- /dev/null +++ b/test/buildcli.testsuite @@ -0,0 +1,18 @@ +build-cli-01.testcase +build-cli-02.testcase +build-cli-03.testcase +build-cli-04.testcase +build-cli-05.testcase +build-cli-06.testcase +build-cli-07.testcase +build-cli-08.testcase +build-cli-09.testcase +build-cli-10.testcase +build-cli-11.testcase +build-cli-12.testcase +build-cli-13.testcase +build-cli-14.testcase +build-cli-15.testcase +build-cli-16.testcase +build-cli-17.testcase +build-cli-18.testcase diff --git a/test/buildserver.testsuite b/test/buildserver.testsuite new file mode 100644 index 0000000..bc1f423 --- /dev/null +++ b/test/buildserver.testsuite @@ -0,0 +1,14 @@ +build-svr-01.testcase +build-svr-02.testcase +build-svr-03.testcase +build-svr-04.testcase +build-svr-05.testcase +build-svr-06.testcase +build-svr-07.testcase +build-svr-08.testcase +build-svr-09.testcase +build-svr-10.testcase +build-svr-11.testcase +build-svr-12.testcase +build-svr-13.testcase +build-svr-14.testcase diff --git a/test/buildsvr.init b/test/buildsvr.init new file mode 100755 index 0000000..43cf053 --- /dev/null +++ b/test/buildsvr.init @@ -0,0 +1,19 @@ +#!/bin/sh +rm -rf buildsvr01 +mkdir buildsvr01 +cd buildsvr01 +../../build-svr remove -n testserver3 +../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://tmax:tmax@172.21.111.217 +cd .. +cd git01 +tar xvf a.tar.gz +tar xvf b.tar.gz +tar xvf c.tar.gz +tar xvf d.tar.gz +cd .. +../build-svr add-prj -n testserver3 -N testa -g `pwd`/git01/a -b master +../build-svr add-prj -n testserver3 -N testb -g `pwd`/git01/b -b master +../build-svr add-prj -n testserver3 -N testc -g `pwd`/git01/c -b master -w 1111 +../build-svr add-prj -n testserver3 -N testd -g `pwd`/git01/d -b master +../build-svr add-prj -n testserver3 -N teste -P bin +../build-svr start -n testserver3 -p 2223 diff --git a/test/c/c b/test/c/c new file mode 100644 index 0000000..16fc679 --- /dev/null +++ b/test/c/c @@ -0,0 +1 @@ +ca diff --git a/test/c/package/build.linux b/test/c/package/build.linux new file mode 100755 index 0000000..b774e2d --- /dev/null +++ b/test/c/package/build.linux @@ -0,0 +1,21 @@ +#!/bin/bash -e + +clean () +{ + rm -rf $SRCDIR/*.zip + rm -rf $SRCDIR/*.tar.gz +} + +build () +{ + echo "C: clean build (no dependency) ok" +} + +install () +{ + mkdir -p $SRCDIR/package/c.package.linux/data + cp $SRCDIR/c $SRCDIR/package/c.package.linux/data +} + +$1 +echo "$1 success" diff --git a/test/c/package/pkginfo.manifest b/test/c/package/pkginfo.manifest new file mode 100644 index 0000000..ede7a91 --- /dev/null +++ b/test/c/package/pkginfo.manifest @@ -0,0 +1,6 @@ +Package: c +Version: 11 +OS: linux +Build-host-os: linux +Maintainer: xx +Source: c diff --git a/test/git01/a.tar.gz b/test/git01/a.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..be4b4ef3a53a61b24b8f2161af558b1acf77c3b8 GIT binary patch literal 14112 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 eH<$eXZM&1-|CyJ(}PK7y$rk?nSQv literal 0 HcmV?d00001 diff --git a/test/git01/a_new.tar.gz b/test/git01/a_new.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..25a6ba2a415123bc726b6b4af8374c195a584e5a GIT binary patch literal 16165 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 literal 0 HcmV?d00001 diff --git a/test/git01/b.tar.gz b/test/git01/b.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..6d263a1719f9ae22a8c9103fc94be121a467da1b GIT binary patch literal 13951 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

3e~ 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 Z1r$&~0RN)tcGMAJK2g7F)LYyK~xAu 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 literal 0 HcmV?d00001 diff --git a/test/packageserver.testsuite b/test/packageserver.testsuite new file mode 100644 index 0000000..d63bc7e --- /dev/null +++ b/test/packageserver.testsuite @@ -0,0 +1,23 @@ +packageserver01.testcase +packageserver02.testcase +packageserver03.testcase +packageserver04.testcase +packageserver05.testcase +packageserver06.testcase +packageserver07.testcase +packageserver08.testcase +packageserver09.testcase +packageserver10.testcase +packageserver11.testcase +packageserver12.testcase +packageserver13.testcase +packageserver14.testcase +packageserver15.testcase +packageserver16.testcase +packageserver17.testcase +packageserver18.testcase +packageserver19.testcase +packageserver20.testcase +packageserver21.testcase +packageserver22.testcase +packageserver23.testcase diff --git a/test/packageserver01.testcase b/test/packageserver01.testcase new file mode 100644 index 0000000..9d83383 --- /dev/null +++ b/test/packageserver01.testcase @@ -0,0 +1,32 @@ +#PRE-EXEC +#EXEC +../pkg-svr -h +#POST-EXEC +#EXPECT +Usage: pkg-svr {create|register|gen-snapshot|sync|add-dist|spkg-path|remove|remove-pkg|list|help} ... + pkg-svr create -i -d [-u ] [-l ] + pkg-svr add-dist -i -d [-u ] [-c] + pkg-svr remove -i + pkg-svr register -i -d -p -s [-g] [-t] + pkg-svr remove-pkg -i -d -p + pkg-svr gen-snapshot -i -d -n [-b ] + pkg-svr sync -i -d [-f] + pkg-svr spkg-path -i -d -s + pkg-svr list [-i ] + -i, --id package server id + -d, --dist package server distribution + -u, --url remote server address + -o, --os target operating system + -p + --bpackage binary package file path list + -s + --spackage source package file path + -g, --generate snapshot is generate + -n, --sname snapshot name + -b base snapshot name + --bsnapshot + -l, --location server location + -f, --force force update pkg file + -t, --test upload for test + -c, --clone clone mode + -h, --help display this information diff --git a/test/packageserver02.testcase b/test/packageserver02.testcase new file mode 100644 index 0000000..dd533bd --- /dev/null +++ b/test/packageserver02.testcase @@ -0,0 +1,6 @@ +#PRE-EXEC +#EXEC +../pkg-svr create -i temp_local -d unstable +#POST-EXEC +#EXPECT +package server [temp_local] created successfully diff --git a/test/packageserver03.testcase b/test/packageserver03.testcase new file mode 100644 index 0000000..e858351 --- /dev/null +++ b/test/packageserver03.testcase @@ -0,0 +1,6 @@ +#PRE-EXEC +#EXEC +../pkg-svr create -i temp_remote -d unstable -u http://172.21.111.177/tmppkgsvr/tmp +#POST-EXEC +#EXPECT +package server [temp_remote] created successfully diff --git a/test/packageserver04.testcase b/test/packageserver04.testcase new file mode 100644 index 0000000..f2539ca --- /dev/null +++ b/test/packageserver04.testcase @@ -0,0 +1,6 @@ +#PRE-EXEC +#EXEC +../pkg-svr create -i temp_remote_dup -d unstable -u temp_remote/unstable +#POST-EXEC +#EXPECT +package server [temp_remote_dup] created successfully diff --git a/test/packageserver05.testcase b/test/packageserver05.testcase new file mode 100644 index 0000000..a66a040 --- /dev/null +++ b/test/packageserver05.testcase @@ -0,0 +1,6 @@ +#PRE-EXEC +#EXEC +../pkg-svr add-dist -i temp_local -d stable +#POST-EXEC +#EXPECT +distribution [stable] added successfully diff --git a/test/packageserver06.testcase b/test/packageserver06.testcase new file mode 100644 index 0000000..9f9e917 --- /dev/null +++ b/test/packageserver06.testcase @@ -0,0 +1,6 @@ +#PRE-EXEC +#EXEC +../pkg-svr sync -i temp_remote -d unstable +#POST-EXEC +#EXPECT +package server [temp_remote]'s distribution [unstable] has the synchronization. diff --git a/test/packageserver07.testcase b/test/packageserver07.testcase new file mode 100644 index 0000000..1b7d84c --- /dev/null +++ b/test/packageserver07.testcase @@ -0,0 +1,6 @@ +#PRE-EXEC +#EXEC +../pkg-svr sync -i temp_remote_dup -d unstable -f +#POST-EXEC +#EXPECT +package server [temp_remote_dup]'s distribution [unstable] has the synchronization. diff --git a/test/packageserver08.testcase b/test/packageserver08.testcase new file mode 100644 index 0000000..9ecc71a --- /dev/null +++ b/test/packageserver08.testcase @@ -0,0 +1,6 @@ +#PRE-EXEC +#EXEC +../pkg-svr gen-snapshot -i temp_remote +#POST-EXEC +#EXPECT +snapshot is generated : diff --git a/test/packageserver09.testcase b/test/packageserver09.testcase new file mode 100644 index 0000000..547b101 --- /dev/null +++ b/test/packageserver09.testcase @@ -0,0 +1,6 @@ +#PRE-EXEC +#EXEC +../pkg-svr gen-snapshot -i temp_remote -d unstable +#POST-EXEC +#EXPECT +snapshot is generated : diff --git a/test/packageserver10.testcase b/test/packageserver10.testcase new file mode 100644 index 0000000..34ca9b6 --- /dev/null +++ b/test/packageserver10.testcase @@ -0,0 +1,6 @@ +#PRE-EXEC +#EXEC +../pkg-svr gen-snapshot -i temp_remote -d unstable -n test +#POST-EXEC +#EXPECT +snapshot is generated : diff --git a/test/packageserver11.testcase b/test/packageserver11.testcase new file mode 100644 index 0000000..a7ba031 --- /dev/null +++ b/test/packageserver11.testcase @@ -0,0 +1,6 @@ +#PRE-EXEC +#EXEC +../pkg-svr gen-snapshot -i temp_remote -d unstable -n test2 -b test +#POST-EXEC +#EXPECT +snapshot is generated : diff --git a/test/packageserver12.testcase b/test/packageserver12.testcase new file mode 100644 index 0000000..758b515 --- /dev/null +++ b/test/packageserver12.testcase @@ -0,0 +1,6 @@ +#PRE-EXEC +#EXEC +../pkg-svr gen-snapshot -i temp_remote -d unstable -o all -n test3 +#POST-EXEC +#EXPECT +snapshot is generated : diff --git a/test/packageserver13.testcase b/test/packageserver13.testcase new file mode 100644 index 0000000..017edb2 --- /dev/null +++ b/test/packageserver13.testcase @@ -0,0 +1,6 @@ +#PRE-EXEC +#EXEC +../pkg-svr create -i temp_remote_snap -d unstable -u temp_remote/unstable/snapshots/test +#POST-EXEC +#EXPECT +package server [temp_remote_snap] created successfully diff --git a/test/packageserver14.testcase b/test/packageserver14.testcase new file mode 100644 index 0000000..62d6676 --- /dev/null +++ b/test/packageserver14.testcase @@ -0,0 +1,7 @@ +#PRE-EXEC +cp test_server_pkg_file/smart-build-interface* ./ +#EXEC +../pkg-svr register -i temp_remote -d unstable -p smart-build-interface_1.20.1_linux.zip -s smart-build-interface_1.20.1.tar.gz -g +#POST-EXEC +#EXPECT +package registed successfully diff --git a/test/packageserver15.testcase b/test/packageserver15.testcase new file mode 100644 index 0000000..351d6aa --- /dev/null +++ b/test/packageserver15.testcase @@ -0,0 +1,6 @@ +#PRE-EXEC +#EXEC +../pkg-svr register -i temp_remote -d unstable -p smart-build-interface_1.20.1_linux.zip -s smart-build-interface_1.20.1.tar.gz -g +#POST-EXEC +#EXPECT +existing package's version is higher than register package diff --git a/test/packageserver16.testcase b/test/packageserver16.testcase new file mode 100644 index 0000000..a70d250 --- /dev/null +++ b/test/packageserver16.testcase @@ -0,0 +1,7 @@ +#PRE-EXEC +cp test_server_pkg_file/smart-build-interface* ./ +#EXEC +../pkg-svr register -i temp_remote_dup -d unstable -p ./temp_remote/unstable/binary/smart-build-interface_1.20.1_linux.zip -s ./temp_remote/unstable/source/smart-build-interface_1.20.1.tar.gz -g -t +#POST-EXEC +#EXPECT +package registed successfully diff --git a/test/packageserver17.testcase b/test/packageserver17.testcase new file mode 100644 index 0000000..75ca498 --- /dev/null +++ b/test/packageserver17.testcase @@ -0,0 +1,7 @@ +#PRE-EXEC +cp test_server_pkg_file/smart-build-interface* ./ +#EXEC +../pkg-svr remove-pkg -i temp_local -d unstable -p smart-build-interface +#POST-EXEC +#EXPECT +package removed successfully diff --git a/test/packageserver18.testcase b/test/packageserver18.testcase new file mode 100644 index 0000000..431b64d --- /dev/null +++ b/test/packageserver18.testcase @@ -0,0 +1,7 @@ +#PRE-EXEC +cp test_server_pkg_file/smart-build-interface* ./ +#EXEC +../pkg-svr list +#POST-EXEC +#EXPECT +temp_remote_snap diff --git a/test/packageserver19.testcase b/test/packageserver19.testcase new file mode 100644 index 0000000..d144662 --- /dev/null +++ b/test/packageserver19.testcase @@ -0,0 +1,7 @@ +#PRE-EXEC +#EXEC +../pkg-svr list -i temp_local +#POST-EXEC +rm smart-build-interface_1.20.1* +#EXPECT +unstable diff --git a/test/packageserver20.testcase b/test/packageserver20.testcase new file mode 100644 index 0000000..4747a48 --- /dev/null +++ b/test/packageserver20.testcase @@ -0,0 +1,7 @@ +#PRE-EXEC +#EXEC +../pkg-svr remove -i temp_local -f +#POST-EXEC +YES +#EXPECT +package server [temp_local] removed successfully diff --git a/test/packageserver21.testcase b/test/packageserver21.testcase new file mode 100644 index 0000000..2fc8eb9 --- /dev/null +++ b/test/packageserver21.testcase @@ -0,0 +1,7 @@ +#PRE-EXEC +#EXEC +../pkg-svr remove -i temp_remote -f +#POST-EXEC +YES +#EXPECT +package server [temp_remote] removed successfully diff --git a/test/packageserver22.testcase b/test/packageserver22.testcase new file mode 100644 index 0000000..f63decb --- /dev/null +++ b/test/packageserver22.testcase @@ -0,0 +1,7 @@ +#PRE-EXEC +#EXEC +../pkg-svr remove -i temp_remote_dup -f +#POST-EXEC +YES +#EXPECT +package server [temp_remote_dup] removed successfully diff --git a/test/packageserver23.testcase b/test/packageserver23.testcase new file mode 100644 index 0000000..c92b0b9 --- /dev/null +++ b/test/packageserver23.testcase @@ -0,0 +1,7 @@ +#PRE-EXEC +#EXEC +../pkg-svr remove -i temp_remote_snap -f +#POST-EXEC +YES +#EXPECT +package server [temp_remote_snap] removed successfully diff --git a/test/pkg-cli-checkupgrade.testcase b/test/pkg-cli-checkupgrade.testcase new file mode 100644 index 0000000..f9a19be --- /dev/null +++ b/test/pkg-cli-checkupgrade.testcase @@ -0,0 +1,11 @@ +#PRE-EXEC +rm -rf pkgcli01 +mkdir pkgcli01 +#EXEC +../pkg-cli install -p base-ide-product -u http://172.21.111.132/testserver3/unstable -l pkgcli01 +../pkg-cli check-upgrade -l pkgcli01 -u http://172.21.111.132/testserver2/unstable +#POST-EXEC +rm -rf pkgcli01 +#EXPECT +"base-ide-product" package : 0.20.8 -> +Info: Checked packages for upgrading.. OK diff --git a/test/pkg-cli-clean-f.testcase b/test/pkg-cli-clean-f.testcase new file mode 100644 index 0000000..fd4543d --- /dev/null +++ b/test/pkg-cli-clean-f.testcase @@ -0,0 +1,11 @@ +#PRE-EXEC +rm -rf pkgcli01 +mkdir pkgcli01 +#EXEC +../pkg-cli install -p nativeapp-eplugin -u http://172.21.111.132/testserver3/unstable -t -l pkgcli01 +../pkg-cli clean -l pkgcli01 -f +../pkg-cli list-lpkg -l pkgcli01 +#POST-EXEC +rm -rf pkgcli01 +#EXPECT +Info: There is no any package. diff --git a/test/pkg-cli-download-t.testcase b/test/pkg-cli-download-t.testcase new file mode 100644 index 0000000..6d7263b --- /dev/null +++ b/test/pkg-cli-download-t.testcase @@ -0,0 +1,13 @@ +#PRE-EXEC +rm -rf pkgcli01 +mkdir pkgcli01 +#EXEC +../pkg-cli download -p nativeapp-eplugin -u http://172.21.111.132/testserver3/unstable -t -l pkgcli01 +ls pkgcli01 +#POST-EXEC +rm -rf pkgcli01 +#EXPECT +base-ide-product_0.20.8_linux.zip +common-eplugin_0.20.6_linux.zip +nativeapp-eplugin_0.20.4_linux.zip +nativecommon-eplugin_0.20.1_linux.zip diff --git a/test/pkg-cli-download.testcase b/test/pkg-cli-download.testcase new file mode 100644 index 0000000..e4f6b2c --- /dev/null +++ b/test/pkg-cli-download.testcase @@ -0,0 +1,10 @@ +#PRE-EXEC +rm -rf pkgcli01 +mkdir pkgcli01 +#EXEC +cd pkgcli01; ../../pkg-cli download -p base-ide-product -u http://172.21.111.132/testserver3/unstable +ls pkgcli01 +#POST-EXEC +rm -rf pkgcli01 +#EXPECT +base-ide-product_0.20.8_linux.zip diff --git a/test/pkg-cli-install-f.testcase b/test/pkg-cli-install-f.testcase new file mode 100644 index 0000000..7794646 --- /dev/null +++ b/test/pkg-cli-install-f.testcase @@ -0,0 +1,11 @@ +#PRE-EXEC +rm -rf pkgcli01 +mkdir pkgcli01 +#EXEC +../pkg-cli install -p base-ide-product -u http://172.21.111.132/testserver2/unstable -l pkgcli01 +../pkg-cli install -p base-ide-product -u http://172.21.111.132/testserver3/unstable -l pkgcli01 -f +../pkg-cli list-lpkg -l pkgcli01 +#POST-EXEC +rm -rf pkgcli01 +#EXPECT +base-ide-product (0.20.8) diff --git a/test/pkg-cli-install-t.testcase b/test/pkg-cli-install-t.testcase new file mode 100644 index 0000000..00d2734 --- /dev/null +++ b/test/pkg-cli-install-t.testcase @@ -0,0 +1,13 @@ +#PRE-EXEC +rm -rf pkgcli01 +mkdir pkgcli01 +#EXEC +../pkg-cli install -p nativeapp-eplugin -u http://172.21.111.132/testserver3/unstable -t -l pkgcli01 +../pkg-cli list-lpkg -l pkgcli01 +#POST-EXEC +rm -rf pkgcli01 +#EXPECT +base-ide-product (0.20.8) +common-eplugin (0.20.6) +nativeapp-eplugin (0.20.4) +nativecommon-eplugin (0.20.1) diff --git a/test/pkg-cli-install.testcase b/test/pkg-cli-install.testcase new file mode 100644 index 0000000..31ac836 --- /dev/null +++ b/test/pkg-cli-install.testcase @@ -0,0 +1,10 @@ +#PRE-EXEC +rm -rf pkgcli01 +mkdir pkgcli01 +#EXEC +../pkg-cli install -p base-ide-product -u http://172.21.111.132/testserver3/unstable -l pkgcli01 +../pkg-cli list-lpkg -l pkgcli01 +#POST-EXEC +rm -rf pkgcli01 +#EXPECT +base-ide-product (0.20.8) diff --git a/test/pkg-cli-installfile-f.testcase b/test/pkg-cli-installfile-f.testcase new file mode 100644 index 0000000..810ad2f --- /dev/null +++ b/test/pkg-cli-installfile-f.testcase @@ -0,0 +1,13 @@ +#PRE-EXEC +rm -rf pkgcli01 +mkdir pkgcli01 +#EXEC +../pkg-cli install -p base-ide-product -u http://172.21.111.132/testserver2/unstable -l pkgcli01 +../pkg-cli download -p base-ide-product -u http://172.21.111.132/testserver3/unstable +../pkg-cli install-file -p base-ide-product_0.20.8_linux.zip -l pkgcli01 -f +../pkg-cli list-lpkg -l pkgcli01 +#POST-EXEC +rm -f base-ide-product_0.20.8_linux.zip +rm -rf pkgcli01 +#EXPECT +base-ide-product (0.20.8) diff --git a/test/pkg-cli-installfile.testcase b/test/pkg-cli-installfile.testcase new file mode 100644 index 0000000..ebdb5de --- /dev/null +++ b/test/pkg-cli-installfile.testcase @@ -0,0 +1,12 @@ +#PRE-EXEC +rm -rf pkgcli01 +mkdir pkgcli01 +#EXEC +../pkg-cli download -p base-ide-product -u http://172.21.111.132/testserver3/unstable +../pkg-cli install-file -p base-ide-product_0.20.8_linux.zip -l pkgcli01 +../pkg-cli list-lpkg -l pkgcli01 +#POST-EXEC +rm -f base-ide-product_0.20.8_linux.zip +rm -rf pkgcli01 +#EXPECT +base-ide-product (0.20.8) diff --git a/test/pkg-cli-listlpkg.testcase b/test/pkg-cli-listlpkg.testcase new file mode 100644 index 0000000..31ac836 --- /dev/null +++ b/test/pkg-cli-listlpkg.testcase @@ -0,0 +1,10 @@ +#PRE-EXEC +rm -rf pkgcli01 +mkdir pkgcli01 +#EXEC +../pkg-cli install -p base-ide-product -u http://172.21.111.132/testserver3/unstable -l pkgcli01 +../pkg-cli list-lpkg -l pkgcli01 +#POST-EXEC +rm -rf pkgcli01 +#EXPECT +base-ide-product (0.20.8) diff --git a/test/pkg-cli-listrpkg.testcase b/test/pkg-cli-listrpkg.testcase new file mode 100644 index 0000000..6a74ae7 --- /dev/null +++ b/test/pkg-cli-listrpkg.testcase @@ -0,0 +1,6 @@ +#PRE-EXEC +#EXEC +../pkg-cli list-rpkg -u http://172.21.111.132/testserver3/unstable +#POST-EXEC +#EXPECT +base-ide-product (0.20.8) diff --git a/test/pkg-cli-showlpkg.testcase b/test/pkg-cli-showlpkg.testcase new file mode 100644 index 0000000..dbee48c --- /dev/null +++ b/test/pkg-cli-showlpkg.testcase @@ -0,0 +1,12 @@ +#PRE-EXEC +rm -rf pkgcli01 +mkdir pkgcli01 +#EXEC +../pkg-cli install -p base-ide-product -u http://172.21.111.132/testserver3/unstable -l pkgcli01 +../pkg-cli show-lpkg -p base-ide-product -l pkgcli01 +#POST-EXEC +rm -rf pkgcli01 +#EXPECT +Package : base-ide-product +Version : 0.20.8 +OS : linux diff --git a/test/pkg-cli-showrpkg.testcase b/test/pkg-cli-showrpkg.testcase new file mode 100644 index 0000000..443aa3e --- /dev/null +++ b/test/pkg-cli-showrpkg.testcase @@ -0,0 +1,8 @@ +#PRE-EXEC +#EXEC +../pkg-cli show-rpkg -p base-ide-product -u http://172.21.111.132/testserver3/unstable +#POST-EXEC +#EXPECT +Package : base-ide-product +Version : 0.20.8 +OS : linux diff --git a/test/pkg-cli-source.testcase b/test/pkg-cli-source.testcase new file mode 100644 index 0000000..64053ad --- /dev/null +++ b/test/pkg-cli-source.testcase @@ -0,0 +1,10 @@ +#PRE-EXEC +rm -rf pkgcli01 +mkdir pkgcli01 +#EXEC +cd pkgcli01; ../../pkg-cli source -p base-ide-product -u http://172.21.111.132/testserver3/unstable +ls pkgcli01 +#POST-EXEC +rm -rf pkgcli01 +#EXPECT +product_0.20.8.tar.gz diff --git a/test/pkg-cli-uninstall-t.testcase b/test/pkg-cli-uninstall-t.testcase new file mode 100644 index 0000000..749815f --- /dev/null +++ b/test/pkg-cli-uninstall-t.testcase @@ -0,0 +1,11 @@ +#PRE-EXEC +rm -rf pkgcli01 +mkdir pkgcli01 +#EXEC +../pkg-cli install -p nativeapp-eplugin -u http://172.21.111.132/testserver3/unstable -l pkgcli01 -t +../pkg-cli uninstall -p base-ide-product -l pkgcli01 -t +../pkg-cli list-lpkg -l pkgcli01 +#POST-EXEC +rm -rf pkgcli01 +#EXPECT +Info: There is no any package. diff --git a/test/pkg-cli-uninstall.testcase b/test/pkg-cli-uninstall.testcase new file mode 100644 index 0000000..10e7647 --- /dev/null +++ b/test/pkg-cli-uninstall.testcase @@ -0,0 +1,11 @@ +#PRE-EXEC +rm -rf pkgcli01 +mkdir pkgcli01 +#EXEC +../pkg-cli install -p base-ide-product - http://172.21.111.132/testserver3/unstable -l pkgcli01 +../pkg-cli uninstall -p base-ide-product -l pkgcli01 +../pkg-cli list-lpkg -l pkgcli01 +#POST-EXEC +rm -rf pkgcli01 +#EXPECT +Info: There is no any package. diff --git a/test/pkg-cli-update.testcase b/test/pkg-cli-update.testcase new file mode 100644 index 0000000..3c6fa52 --- /dev/null +++ b/test/pkg-cli-update.testcase @@ -0,0 +1,6 @@ +#PRE-EXEC +#EXEC +../pkg-cli update -u http://172.21.111.132/testserver3/unstable +#POST-EXEC +#EXPECT +Update package list from "http://172.21.111.132/testserver3/unstable".. OK diff --git a/test/pkg-cli-upgrade.testcase b/test/pkg-cli-upgrade.testcase new file mode 100644 index 0000000..493d947 --- /dev/null +++ b/test/pkg-cli-upgrade.testcase @@ -0,0 +1,11 @@ +#PRE-EXEC +rm -rf pkgcli01 +mkdir pkgcli01 +#EXEC +../pkg-cli install -p base-ide-product -u http://172.21.111.132/testserver3/unstable -l pkgcli01 +../pkg-cli upgrade -l pkgcli01 -u http://172.21.111.132/testserver2/unstable +../pkg-cli list-lpkg -l pkgcli01 +#POST-EXEC +rm -rf pkgcli01 +#EXPECT +base-ide-product (0.20.14) diff --git a/test/pkg-cli.testsuite b/test/pkg-cli.testsuite new file mode 100644 index 0000000..21c2fe0 --- /dev/null +++ b/test/pkg-cli.testsuite @@ -0,0 +1,18 @@ +pkg-cli-update.testcase +pkg-cli-listrpkg.testcase +pkg-cli-showrpkg.testcase +pkg-cli-download.testcase +pkg-cli-download-t.testcase +pkg-cli-source.testcase +pkg-cli-install.testcase +pkg-cli-install-t.testcase +pkg-cli-install-f.testcase +pkg-cli-uninstall.testcase +pkg-cli-uninstall-t.testcase +pkg-cli-installfile.testcase +pkg-cli-installfile-f.testcase +pkg-cli-listlpkg.testcase +pkg-cli-showlpkg.testcase +pkg-cli-checkupgrade.testcase +pkg-cli-upgrade.testcase +pkg-cli-clean-f.testcase diff --git a/test/pkg-list b/test/pkg-list new file mode 100644 index 0000000..cf64628 --- /dev/null +++ b/test/pkg-list @@ -0,0 +1,24 @@ +Package : A +Version : 0.1.0 +OS : linux +Build-host-os :linux | windows | darwin +Maintainer : taejun.ha +Path : binary/A_0.1.0_linux.zip +Origin : remote +SHA256 : 52b400554f2a29dec46144af649181cf287c000b4feb65de72055ed9f11924a9 + +Package: B +Version : 0.2.0 +OS : linux +Build-host-os :linux | windows | darwin +Maintainer : taejun.ha +Install-dependency : C, D, E +Build-dependency : F (>= 1.0.0.20101221), E (>= 1.0.0.20101221) +Source-dependency : D, scratchbox-aquila-simulator-rootstrap [ linux |windows ](>= 1.0.0.20101221), scratchbox-core [windows|darwin](>= 1.0.17) +Path : +Source : Origin +From-server? : true +SHA256 : your_checksum +Description : this is my first +project +descriotion diff --git a/test/pkginfo.manifest b/test/pkginfo.manifest new file mode 100644 index 0000000..ebace22 --- /dev/null +++ b/test/pkginfo.manifest @@ -0,0 +1,35 @@ +Package : your_package +Version : your_version +OS : linux +Build-host-os:linux | windows | darwin +Maintainer : your_name name +Install-dependency : codecoverage, rootstrap-slp-device-1.0, slp-ide +Build-dependency : scratchbox-aquila-device-rootstrap (>= 1.0.0.20101221), scratchbox-aquila-simulator-rootstrap (>= 1.0.0.20101221), scratchbox-core (>= 1.0.17) +Build-src-dependency : scratchbox-aquila-device-rootstrap (>= 1.0.0.20101221) [linux|windows], scratchbox-aquila-simulator-rootstrap [ linux |windows ](>= 1.0.0.20101221), scratchbox-core [windows|darwin](>= 1.0.17) +Description : this is my first +project : +descriotion : +Attribute : +Install-script : +Remove-script : +Category : +Conflicts : +Source : origin + +Package : your_package +Version : your_version +OS : windows +Build-host-os:linux | windows | darwin +Maintainer : your_name name +Install-dependency : codecoverage, rootstrap-slp-device-1.0, slp-ide +Build-dependency : scratchbox-aquila-device-rootstrap (>= 1.0.0.20101221), scratchbox-aquila-simulator-rootstrap (>= 1.0.0.20101221), scratchbox-core (>= 1.0.17) +Build-src-dependency : scratchbox-aquila-device-rootstrap (>= 1.0.0.20101221) [linux|windows], scratchbox-aquila-simulator-rootstrap [ linux |windows ](>= 1.0.0.20101221), scratchbox-core [windows|darwin](>= 1.0.17) +Description : this is my first +project : +descriotion : +Attribute : +Install-script : +Remove-script : +Category : +Conflicts : +Source : origin diff --git a/test/pkgsvr.init b/test/pkgsvr.init new file mode 100755 index 0000000..54e6fbe --- /dev/null +++ b/test/pkgsvr.init @@ -0,0 +1,5 @@ +#!/bin/sh +rm -rf ~/.build_tools/pkg_server/pkgsvr01 +rm -rf `pwd`/pkgsvr01 +../pkg-svr create -n pkgsvr01 -d unstable +../pkg-svr start -n pkgsvr01 diff --git a/test/regression.rb b/test/regression.rb new file mode 100755 index 0000000..0a8b8b4 --- /dev/null +++ b/test/regression.rb @@ -0,0 +1,202 @@ +#!/usr/bin/ruby +$success_cases=[] +$failure_cases=[] +$testcases=[] + +$total_cnt = 0 + +testCaseName = "" +resultCheck = "" +resultFlag = "" +resultCmdCount = 0 + + +class TestCase + attr_accessor :name, :pre_exec_cmds, :exec_cmds, :post_exec_cmds, :expected_results + def initialize(name) + @name = name + @pre_exec_cmds = [] + @exec_cmds = [] + @post_exec_cmds = [] + @expected_results = [] + end + + def is_succeeded?(results) + @expected_results.each do |e| + found = false + results.each do |r| + if r.include? e then + found = true + break + end + end + if not found then return false end + end + + return true + end +end + + +# parse +def parse_testcase(file_name) + # create + tcase = TestCase.new( file_name ) + + # parse + File.open(file_name,"r") do |f| + status="START" + f.each_line do |l| + ln = l.strip + if ln == "#PRE-EXEC" or ln == "#EXEC" or + ln == "#POST-EXEC" or ln == "#EXPECT" then + + status = ln + else + case status + when "#PRE-EXEC" + tcase.pre_exec_cmds.push ln + when "#EXEC" + tcase.exec_cmds.push ln + when "#POST-EXEC" + tcase.post_exec_cmds.push ln + when "#EXPECT" + tcase.expected_results.push ln + else + # ignore + end + end + end + end + + return tcase +end + + +# test execution +def execute( file_name ) + printf("#{file_name} ... ") + STDOUT.flush + + # parse + tcase = parse_testcase( file_name ) + + # pre-exec + tcase.pre_exec_cmds.each do |cmd| + fork_p = false + if cmd[-1,1] == "&" then + cmd = cmd[0..-2] + fork_p = true + end + + # get result + if not fork_p then + IO.popen("#{cmd} 2>&1") { |io| + # io.each do |line| + # puts "---> #{line}" + # end + } + else + IO.popen("#{cmd} 2>&1 &") { |io| + # io.each do |line| + # puts "---> #{line}" + # end + } + end + #`#{cmd}` + end + + # exec + results = [] + tcase.exec_cmds.each do |cmd| + fork_p = false + hidden_p = false + if cmd[-1,1] == "&" then + cmd = cmd[0..-2] + fork_p = true + end + if cmd[0,1] == ">" then + cmd = cmd[1..-1] + hidden_p = true + end + # get result + if fork_p then + IO.popen("#{cmd} 2>&1 &") { |io| + io.each do |line| + if not hidden_p then + results.push line.strip + #puts "---> #{line}" + end + end + } + else + IO.popen("#{cmd} 2>&1") { |io| + io.each do |line| + if not hidden_p then + results.push line.strip + #puts "---> #{line}" + end + end + } + end + end + + # check expected result + if tcase.is_succeeded?(results) then + puts "SUCCESS" + $success_cases.push file_name + else + puts "FAIL" + $failure_cases.push file_name + results.each do |l| + puts ">" + l + end + end + + # post-exec + tcase.post_exec_cmds.each do |cmd| + # get result + IO.popen("#{cmd} 2>&1") { |io| + } + #`#{cmd}` + end +end + + +#test_list file open +if (ARGV.size() == 0) + testsuite_name = "list.txt" +else + testsuite_name = ARGV.shift +end + +# execute testsuite +puts +puts "Regression Test Start " +puts "==================================" + +File.open( testsuite_name ) do |f| + f.each_line do |line| + $testcases.push("#{line.strip}") + execute(line.strip) + end +end + +# print result +puts +puts "Regression Test Result" +puts "----------------------" +puts "Total Test Case : #{$testcases.count}" +puts "Test Success : #{$success_cases.count}" +puts "Test Errors : #{$failure_cases.count}" +puts + +if $failure_cases.count != 0 then + puts "Test Fail Files" + puts "---------------" + $failure_cases.each do |name| + puts name + end + puts +end + diff --git a/test/test.sh b/test/test.sh new file mode 100755 index 0000000..e765f43 --- /dev/null +++ b/test/test.sh @@ -0,0 +1,5 @@ +#!/bin/sh +./regression.rb pkg-cli.testsuite +./regression.rb packageserver.testsuite +./regression.rb buildserver.testsuite +./regression.rb buildcli.testsuite diff --git a/test/test_bserver.rb b/test/test_bserver.rb new file mode 100755 index 0000000..f652e52 --- /dev/null +++ b/test/test_bserver.rb @@ -0,0 +1,27 @@ +#!/usr/bin/ruby + +require File.dirname(__FILE__) + "/../src/common/utils" +require File.dirname(__FILE__) + "/../src/build_server/BuildServerController" +$SERVER_CONFIG_ROOT = Utils::HOME + "/.tizen_build_server" + +BuildServerController.remove_server("mbs_server_temp") +BuildServerController.create_server("mbs_server_temp", Utils::WORKING_DIR, "http://172.21.111.132/pkgserver/unstable","pkgserver","pkgserver") +BuildServerController.add_friend_server("mbs_server_temp", "172.21.111.177", 2222) +=begin +#case ARGV[0] +# when "create" then +# pkg_server.create "temp", "unstable", "http://172.21.111.132/pkgserver/", "unstable" +# when "register" then +# #pkg_server.register "/home/taejun/project/sdk-build/test/smart-build-interface_0.19.1_linux.zip", "unstable", "-g" +# pkg_server.register "/home/taejun/project/sdk-build/test/smart-build-interface_0.19.1_linux.zip", "unstable", "" +# when "snapshot" then + pkg_server.snapshot_generate "", "unstable", "", "", "" + when "sync" then + # pkg_server.sync "unstable", "force" + pkg_server.sync "unstable", "" + when "add_distribution" then + pkg_server.add_distribution "test_stable", "stable" + else + puts "First input error : #{ARGV[0]}" +end +=end diff --git a/test/test_bserver2-1.rb b/test/test_bserver2-1.rb new file mode 100755 index 0000000..ce30e36 --- /dev/null +++ b/test/test_bserver2-1.rb @@ -0,0 +1,28 @@ +#!/usr/bin/ruby + +require File.dirname(__FILE__) + "/../src/common/utils" +require File.dirname(__FILE__) + "/../src/build_server/BuildServerController" +$SERVER_CONFIG_ROOT = Utils::HOME + "/.tizen_build_server" + +File.open("#{$SERVER_CONFIG_ROOT}/temp/.request","w") do |f| + f.puts("GIT,gerrithost:/slp/sdk/public/native/toolchain/smart-build-interface,master,linux") + f.puts("GIT,gerrithost:/slp/sdk/public/native/toolchain/sbi-slp-public-plugin,master,linux") +end +=begin +#case ARGV[0] +# when "create" then +# pkg_server.create "temp", "unstable", "http://172.21.111.132/pkgserver/", "unstable" +# when "register" then +# #pkg_server.register "/home/taejun/project/sdk-build/test/smart-build-interface_0.19.1_linux.zip", "unstable", "-g" +# pkg_server.register "/home/taejun/project/sdk-build/test/smart-build-interface_0.19.1_linux.zip", "unstable", "" +# when "snapshot" then + pkg_server.snapshot_generate "", "unstable", "", "", "" + when "sync" then + # pkg_server.sync "unstable", "force" + pkg_server.sync "unstable", "" + when "add_distribution" then + pkg_server.add_distribution "test_stable", "stable" + else + puts "First input error : #{ARGV[0]}" +end +=end diff --git a/test/test_bserver2.rb b/test/test_bserver2.rb new file mode 100755 index 0000000..85a95aa --- /dev/null +++ b/test/test_bserver2.rb @@ -0,0 +1,28 @@ +#!/usr/bin/ruby + +require File.dirname(__FILE__) + "/../src/common/utils" +require File.dirname(__FILE__) + "/../src/build_server/BuildServerController" +$SERVER_CONFIG_ROOT = Utils::HOME + "/.build_tools/build_server" +$BUILD_SERVER_HOST_OS = "linux" + +obj=BuildServerController.get_server("mbs_server_temp") +puts obj.friend_servers[0].id +BuildServerController.start_server("mbs_server_temp") +=begin +#case ARGV[0] +# when "create" then +# pkg_server.create "temp", "unstable", "http://172.21.111.132/pkgserver/", "unstable" +# when "register" then +# #pkg_server.register "/home/taejun/project/sdk-build/test/smart-build-interface_0.19.1_linux.zip", "unstable", "-g" +# pkg_server.register "/home/taejun/project/sdk-build/test/smart-build-interface_0.19.1_linux.zip", "unstable", "" +# when "snapshot" then + pkg_server.snapshot_generate "", "unstable", "", "", "" + when "sync" then + # pkg_server.sync "unstable", "force" + pkg_server.sync "unstable", "" + when "add_distribution" then + pkg_server.add_distribution "test_stable", "stable" + else + puts "First input error : #{ARGV[0]}" +end +=end diff --git a/test/test_bserver2c.rb b/test/test_bserver2c.rb new file mode 100755 index 0000000..0d59deb --- /dev/null +++ b/test/test_bserver2c.rb @@ -0,0 +1,25 @@ +#!/usr/bin/ruby + +require File.dirname(__FILE__) + "/../src/build_server/BuildServerController" + +BuildServerController.build_git("mbs_server","gerrithost:/slp/sdk/public/native/toolchain/smart-build-interface","origin/unstable","linux", nil) + +#BuildServerController.build_local("temp","/home/bluleo78/git/sbi-slp-public-plugin/toolchains/public/gdb_build","linux") +=begin +#case ARGV[0] +# when "create" then +# pkg_server.create "temp", "unstable", "http://172.21.111.132/pkgserver/", "unstable" +# when "register" then +# #pkg_server.register "/home/taejun/project/sdk-build/test/smart-build-interface_0.19.1_linux.zip", "unstable", "-g" +# pkg_server.register "/home/taejun/project/sdk-build/test/smart-build-interface_0.19.1_linux.zip", "unstable", "" +# when "snapshot" then + pkg_server.snapshot_generate "", "unstable", "", "", "" + when "sync" then + # pkg_server.sync "unstable", "force" + pkg_server.sync "unstable", "" + when "add_distribution" then + pkg_server.add_distribution "test_stable", "stable" + else + puts "First input error : #{ARGV[0]}" +end +=end diff --git a/test/test_bserver3.rb b/test/test_bserver3.rb new file mode 100755 index 0000000..94caec7 --- /dev/null +++ b/test/test_bserver3.rb @@ -0,0 +1,12 @@ +#!/usr/bin/ruby + +require File.dirname(__FILE__) + "/../src/common/utils" +require File.dirname(__FILE__) + "/../src/build_server/BuildServerController" +$SERVER_CONFIG_ROOT = Utils::HOME + "/.tizen_build_server" +$BUILD_SERVER_HOST_OS = "linux" + +obj=BuildServerController.get_server("temp") +File.open("#{$SERVER_CONFIG_ROOT}/temp/.request","w") do |f| +# f.puts("LOCAL,/home/bluleo78/git/sbi-slp-public-plugin/toolchains/public/gdb_build,linux,/home/bluleo78/test/test/unstable") +end +BuildServerController.start_server("temp") diff --git a/test/test_bserver3c.rb b/test/test_bserver3c.rb new file mode 100755 index 0000000..28b1564 --- /dev/null +++ b/test/test_bserver3c.rb @@ -0,0 +1,28 @@ +#!/usr/bin/ruby + +require File.dirname(__FILE__) + "/../src/common/utils" +require File.dirname(__FILE__) + "/../src/build_server/BuildServerController" +$SERVER_CONFIG_ROOT = Utils::HOME + "/.tizen_build_server" + +#BuildServerController.build_git("temp","gerrithost:/slp/sdk/public/native/toolchain/smart-build-interface","origin/unstable","linux") +sleep 5 + +BuildServerController.build_local("temp","/home/bluleo78/git/sbi-slp-public-plugin/toolchains/public/gdb_build","linux","/home/bluleo78/test/test/unstable") +=begin +#case ARGV[0] +# when "create" then +# pkg_server.create "temp", "unstable", "http://172.21.111.132/pkgserver/", "unstable" +# when "register" then +# #pkg_server.register "/home/taejun/project/sdk-build/test/smart-build-interface_0.19.1_linux.zip", "unstable", "-g" +# pkg_server.register "/home/taejun/project/sdk-build/test/smart-build-interface_0.19.1_linux.zip", "unstable", "" +# when "snapshot" then + pkg_server.snapshot_generate "", "unstable", "", "", "" + when "sync" then + # pkg_server.sync "unstable", "force" + pkg_server.sync "unstable", "" + when "add_distribution" then + pkg_server.add_distribution "test_stable", "stable" + else + puts "First input error : #{ARGV[0]}" +end +=end diff --git a/test/test_client.rb b/test/test_client.rb new file mode 100755 index 0000000..68d5ba2 --- /dev/null +++ b/test/test_client.rb @@ -0,0 +1,57 @@ +#!/usr/bin/ruby + +require File.dirname(__FILE__) + "/../src/pkg_server/client" +require File.dirname(__FILE__) + "/../src/pkg_server/serverConfig" + +### Client.new("server","dist","snapshot","location") + +# local server +#cl = Client.new("/home/yangttak/test-packageserver") + +# remote server +cl = Client.new("http://172.21.111.132/pkgserver/unstable", "/home/yangttak/build_root") +#cl.update() +result = cl.get_install_dependent_packages("cross-arm-gcc-4.5", "linux", true) +puts "----" +puts result + +result = cl.get_install_dependent_packages("cross-arm-gcc-4.5", "linux", false) +puts "----" +puts result + +result = cl.get_build_dependent_packages("tizen-image-creator", "linux", true) +puts "----" +puts result +#cl.upload("pkgserver", "first", "unstable", nil, "/home/yangttak/test0208/sdk-build/test/test_downloader.rb") +#cl.install_local_pkg("/home/yangttak/test0208/sdk-build/smart-build-interface_0.20.0_linux.zip", "linux") +#cl.show_pkg_info("tizen-ide", "linux") + +#cl = Client.new("http://172.21.111.132/pkgserver/unstable/snapshot/snapshot3-linux", "/tmp/client-test") +#cl.update() +#result = cl.get_install_dependent_packages("smart-build-interface", "linux") +#puts result + +# if location is nil +#cl = Client.new("http://172.21.111.132/pkgserver/unstable", nil) + +# if server addr is nil +#cl = Client.new(nil, "/tmp/client-test") + +# install package list +#cl.download("base-toolchain", "windows") + +# test install different veriosn package +#cl = Client.new("http://172.21.111.132/pkgserver/unstable/snapshot/snapshot2-linux", "/tmp/client-test") +#cl.install("tizen-ide", "linux") +#cl.install("smart-build-interface", "linux") + + +#cl = Client.new("http://172.21.111.132/pkgserver/unstable", "/tmp/client-test") +#result = cl.get_build_dependent_packages("mpfr", "linux") +#puts result +#result = cl.get_install_dependent_packages("arm-linux-gnueabi-gdb-7.2", "linux") +#puts result +#result = cl.get_install_dependent_packages("smart-build-interface", "linux") +#puts result + + diff --git a/test/test_downloader.rb b/test/test_downloader.rb new file mode 100755 index 0000000..008dd1c --- /dev/null +++ b/test/test_downloader.rb @@ -0,0 +1,12 @@ +#!/usr/bin/ruby + +require File.dirname(__FILE__) + "/../src/pkg_server/downloader" +require File.dirname(__FILE__) + "/../src/pkg_server/serverConfig" + +### FileDownLoader.download(source url, target path) + +# download local package +# FileDownLoader.download("/home/yangttak/gmp-5.0.1.tar.gz", ".") + +# download remote package +FileDownLoader.download("http://172.21.111.132/pkgserver/unstable/source/gmp-5.0.1.tar.gz", $download_temp) diff --git a/test/test_installer.rb b/test/test_installer.rb new file mode 100755 index 0000000..66d86b4 --- /dev/null +++ b/test/test_installer.rb @@ -0,0 +1,10 @@ +#!/usr/bin/ruby + +require File.dirname(__FILE__) + "/../src/pkg_server/downloader" +require File.dirname(__FILE__) + "/../src/pkg_server/installer" +require File.dirname(__FILE__) + "/../src/pkg_server/serverConfig" + +FileDownLoader.download("http://172.21.111.132/pkgserver/unstable/source/gmp-5.0.1.tar.gz", $download_temp) + +### FileInstaller.install(package_name, source_file_path, package_type, target_path) +FileInstaller.install("gmp","#{$download_temp}/gmp-5.0.1.tar.gz", "binary", $build_root) diff --git a/test/test_pkglist_parser.rb b/test/test_pkglist_parser.rb new file mode 100755 index 0000000..c299f7f --- /dev/null +++ b/test/test_pkglist_parser.rb @@ -0,0 +1,9 @@ +#!/usr/bin/ruby +require '../src/common/parser' +require '../src/common/package' + +alist = Parser.read_pkg_list "pkg-list" +a_list = alist.values +a_list.each do |l| + l.print +end diff --git a/test/test_server b/test/test_server new file mode 100755 index 0000000..bcc9bb6 --- /dev/null +++ b/test/test_server @@ -0,0 +1,66 @@ +#!/bin/sh + +echo "============ remove 1 ==============" +../pkg-svr remove -n temp_local +echo "============ remove 2 ==============" +../pkg-svr remove -n temp_remote +echo "============ remove 3 ==============" +../pkg-svr remove -n temp_remote_dup +echo "============ remove 4 ==============" +../pkg-svr remove -n temp_remote_snap +echo "============ create 1 ==============" +../pkg-svr create -n temp_local -d unstable +echo "============ create 2 ==============" +../pkg-svr create -n temp_remote -d unstable +echo "============ create 3 ==============" +../pkg-svr create -n temp_remote_dup -d unstable -u temp_remote/unstable +echo "============ add dist 1 ==============" +../pkg-svr add-dist -n temp_local -d stable +echo "============ sync 1 ==============" +../pkg-svr sync -n temp_remote -d unstable +echo "============ sync 2 ==============" +../pkg-svr sync -n temp_remote_dup -d unstable --force +echo "============ gen snapshot 1 ==============" +../pkg-svr gen-snapshot -n temp_remote +echo "============ gen snapshot 2 ==============" +../pkg-svr gen-snapshot -n temp_remote -d unstable +echo "============ gen snapshot 3 ==============" +../pkg-svr gen-snapshot -n temp_remote -d unstable -s test +echo "============ gen snapshot 4 ==============" +../pkg-svr gen-snapshot -n temp_remote -d unstable -s test2 -b test +echo "============ gen snapshot 5 ==============" +../pkg-svr gen-snapshot -n temp_remote -d unstable -o linux +echo "============ gen snapshot 6 ==============" +../pkg-svr gen-snapshot -n temp_remote -d unstable -o windows +echo "============ gen snapshot 7 ==============" +../pkg-svr gen-snapshot -n temp_remote -d unstable -o darwin +echo "============ gen snapshot 8 ==============" +../pkg-svr gen-snapshot -n temp_remote -d unstable -o all +echo "============ gen snapshot 9 ==============" +../pkg-svr gen-snapshot -n temp_remote -d unstable -o all -P test_server_pkg_file/smart-build-interface_1.20.1_linux.zip -s test3 +echo "============ create 4 ==============" +../pkg-svr create -n temp_remote_snap -d unstable -u temp_remote/unstable/snapshots/test +echo "============ register 1 ==============" +cp test_server_pkg_file/smart-build-interface_*_linux.zip ./ +../pkg-svr register -n temp_local -d unstable -P smart-build-interface_1.20.1_linux.zip +echo "============ register 2 ==============" +cp test_server_pkg_file/smart-build-interface_*_linux.zip ./ +../pkg-svr register -n temp_remote -d unstable -P smart-build-interface_1.20.1_linux.zip --gen +echo "============ register 3 ==============" +cp test_server_pkg_file/smart-build-interface_*_linux.zip ./ +../pkg-svr register -n temp_remote_dup -d unstable -P smart-build-interface_1.20.1_linux.zip --gen --test +echo "============ register 4 ==============" +cp test_server_pkg_file/archive.zip ./ +../pkg-svr register -n temp_local -d unstable -A archive.zip +echo "============ remove 3 ==============" +../pkg-svr remove-pkg -n temp_local -d unstable -P smart-build-interface +echo "============ clean 1 ==============" +../pkg-svr clean -n temp_local -d unstable +echo "============ clean 2 ==============" +../pkg-svr clean -n temp_remote -d unstable -s test,test2,test3 +echo "============ list 1 ==============" +../pkg-svr list +echo "============ list 2 ==============" +../pkg-svr list -n temp_local +#../pkg-svr remove -n temp + diff --git a/test/test_server.rb b/test/test_server.rb new file mode 100755 index 0000000..b573a82 --- /dev/null +++ b/test/test_server.rb @@ -0,0 +1,24 @@ +#!/usr/bin/ruby + +require File.dirname(__FILE__) + "/../src/common/utils" +require File.dirname(__FILE__) + "/../src/pkg_server/packageServer" + +pkg_server = PackageServer.new "temp" + +case ARGV[0] + when "create" then + pkg_server.create "temp", "unstable", "http://172.21.111.132/pkgserver/", "unstable" + when "register" then + #pkg_server.register "/home/taejun/project/sdk-build/test/smart-build-interface_0.19.1_linux.zip", "unstable", "-g" + pkg_server.register "/home/taejun/project/sdk-build/test/smart-build-interface_0.19.1_linux.zip", "unstable", "" + when "snapshot" then + pkg_server.snapshot_generate "", "unstable", "", "", "" + when "sync" then + # pkg_server.sync "unstable", "force" + pkg_server.sync "unstable", "" + when "add_distribution" then + pkg_server.add_distribution "test_stable", "stable" + else + puts "First input error : #{ARGV[0]}" +end + diff --git a/test/test_server_pkg_file/archive.zip b/test/test_server_pkg_file/archive.zip new file mode 100644 index 0000000000000000000000000000000000000000..140bd05bd7f6f55d6ea86f41bc75c8257b3b8150 GIT binary patch literal 308 zcmWIWW@Zs#U|`^2U~gOFFm;+sLmiN}0f+?{WEcvv(=+qZ^7V2P^D@&?i%UX7I2oAt zimvkq;nE6j21b?_%nS@*qO|uQ7n326%lp4we-2E$I$LSpH?>6pALX*I^{!jFM7JY8 z{|0Nm9GjYP{~5u@%=s+YC;YEmiqY!7-nMkYH;I#TJ&n~j)?NLT`da**z#ECkSGV6@ zbP!(Y%K9>nmF>=%bNo9>6+?Uf?=PRS_|xh$+``Pl%=T=*mJ~eV=WNM)zAwO=kx7mj pmro>s{$XHX1mY!)AQq;-SRwvG^HYE~D;r2XBM^oG=@TFh0{|WrWfA}Y literal 0 HcmV?d00001 diff --git a/test/test_server_pkg_file/smart-build-interface_1.20.1_linux.zip b/test/test_server_pkg_file/smart-build-interface_1.20.1_linux.zip new file mode 100644 index 0000000000000000000000000000000000000000..140bd05bd7f6f55d6ea86f41bc75c8257b3b8150 GIT binary patch literal 308 zcmWIWW@Zs#U|`^2U~gOFFm;+sLmiN}0f+?{WEcvv(=+qZ^7V2P^D@&?i%UX7I2oAt zimvkq;nE6j21b?_%nS@*qO|uQ7n326%lp4we-2E$I$LSpH?>6pALX*I^{!jFM7JY8 z{|0Nm9GjYP{~5u@%=s+YC;YEmiqY!7-nMkYH;I#TJ&n~j)?NLT`da**z#ECkSGV6@ zbP!(Y%K9>nmF>=%bNo9>6+?Uf?=PRS_|xh$+``Pl%=T=*mJ~eV=WNM)zAwO=kx7mj pmro>s{$XHX1mY!)AQq;-SRwvG^HYE~D;r2XBM^oG=@TFh0{|WrWfA}Y literal 0 HcmV?d00001 diff --git a/test/test_utils.rb b/test/test_utils.rb new file mode 100755 index 0000000..4945064 --- /dev/null +++ b/test/test_utils.rb @@ -0,0 +1,7 @@ +#!/usr/bin/ruby + +require File.dirname(__FILE__) + "/../src/common/utils" + +result = Utils.compare_version("5.2", "5.0.1") +puts result + diff --git a/test/tpkg/.log b/test/tpkg/.log new file mode 100644 index 0000000..5bb7d9b --- /dev/null +++ b/test/tpkg/.log @@ -0,0 +1,31 @@ +# Logfile created on Tue Feb 07 04:41:32 +0900 2012 by logger.rb/22285 +I, [2012-02-07T04:41:32.501856 #8938] INFO -- : option parsing start +I, [2012-02-07T04:41:32.502027 #8938] INFO -- : option is : +I, [2012-02-07T04:41:32.502149 #8938] INFO -- : option parsing end +I, [2012-02-07T04:41:58.085604 #8964] INFO -- : option parsing start +I, [2012-02-07T04:41:58.085807 #8964] INFO -- : option is : -u,http://172.21.111.132/testserver/unstable +I, [2012-02-07T04:41:58.085997 #8964] INFO -- : option parsing end +I, [2012-02-07T04:42:23.693462 #9000] INFO -- : option parsing start +I, [2012-02-07T04:42:23.693562 #9000] INFO -- : option is : -u,http://172.21.111.132/testserver/unstable +I, [2012-02-07T04:42:23.693652 #9000] INFO -- : option parsing end +I, [2012-02-07T04:56:31.754070 #10355] INFO -- : option parsing start +I, [2012-02-07T04:56:31.754269 #10355] INFO -- : option is : -u,http://172.21.111.132/testserver/unstable +I, [2012-02-07T04:56:31.754475 #10355] INFO -- : option parsing end +I, [2012-02-07T05:00:28.494119 #10628] INFO -- : option parsing start +I, [2012-02-07T05:00:28.494318 #10628] INFO -- : option is : -u,http://172.21.111.132/testserver/unstable +I, [2012-02-07T05:00:28.494519 #10628] INFO -- : option parsing end +I, [2012-02-07T05:05:54.803965 #11007] INFO -- : option parsing start +I, [2012-02-07T05:05:54.804057 #11007] INFO -- : option is : -u,http://172.21.111.132/testserver/unstable +I, [2012-02-07T05:05:54.804147 #11007] INFO -- : option parsing end +I, [2012-02-07T05:11:20.088453 #11415] INFO -- : option parsing start +I, [2012-02-07T05:11:20.088549 #11415] INFO -- : option is : -u,http://172.21.111.132/testserver/unstable +I, [2012-02-07T05:11:20.088641 #11415] INFO -- : option parsing end +I, [2012-02-07T05:12:13.094058 #11504] INFO -- : option parsing start +I, [2012-02-07T05:12:13.094152 #11504] INFO -- : option is : -u,http://172.21.111.132/testserver/unstable +I, [2012-02-07T05:12:13.094241 #11504] INFO -- : option parsing end +I, [2012-02-07T05:32:29.151717 #12638] INFO -- : option parsing start +I, [2012-02-07T05:32:29.151917 #12638] INFO -- : option is : -u,http://172.21.111.132/testserver/unstable +I, [2012-02-07T05:32:29.152123 #12638] INFO -- : option parsing end +I, [2012-02-07T05:43:03.812225 #12775] INFO -- : option parsing start +I, [2012-02-07T05:43:03.813711 #12775] INFO -- : option is : -u,http://172.21.111.132/testserver/unstable +I, [2012-02-07T05:43:03.816670 #12775] INFO -- : option parsing end diff --git a/test/tpkg/package/build.linux b/test/tpkg/package/build.linux new file mode 100755 index 0000000..42d402e --- /dev/null +++ b/test/tpkg/package/build.linux @@ -0,0 +1,40 @@ +#!/bin/sh -x +# clean +clean() +{ + rm -rf $SRCDIR/*.zip + rm -rf $SRCDIR/*.tar.gz + rm -rf $SRCDIR/*.package.linux +} + +# build +build() +{ + touch own + touch two + touch three + touch four +} + +# install +install() +{ + build + + BIN_DIR=$SRCDIR/package + mkdir -p $BIN_DIR/pkgone.package.linux + mkdir -p $BIN_DIR/pkgtwo.package.linux + mkdir -p $BIN_DIR/pkgthree.package.linux + mkdir -p $BIN_DIR/pkgfour.package.linux + mv own $BIN_DIR/pkgone.package.linux + mv two $BIN_DIR/pkgtwo.package.linux + mv three $BIN_DIR/pkgthree.package.linux + mv four $BIN_DIR/pkgfour.package.linux +} + + + +[ "$1" = "clean" ] && clean +[ "$1" = "build" ] && build +[ "$1" = "install" ] && install +exit 0 diff --git a/test/tpkg/package/pkgfour.install b/test/tpkg/package/pkgfour.install new file mode 100644 index 0000000..1a24852 --- /dev/null +++ b/test/tpkg/package/pkgfour.install @@ -0,0 +1 @@ +#!/bin/sh diff --git a/test/tpkg/package/pkgfour.remove b/test/tpkg/package/pkgfour.remove new file mode 100644 index 0000000..1a24852 --- /dev/null +++ b/test/tpkg/package/pkgfour.remove @@ -0,0 +1 @@ +#!/bin/sh diff --git a/test/tpkg/package/pkginfo.manifest b/test/tpkg/package/pkginfo.manifest new file mode 100644 index 0000000..eab9277 --- /dev/null +++ b/test/tpkg/package/pkginfo.manifest @@ -0,0 +1,71 @@ +Package : pkgone +Version : 0.1.0 +OS : linux | windows +Mintainer : pkgone owner +Install-dependency : pkgtwo (>= 0.2.0) [linux | windows], pkgthree (<= 0.3.0 ) [linux] +Build-dependency : pkgtwo (>= 0.2.0) [linux | windows], pkgthree (<= 0.3.0 ) [linux] +Source-dependency : tpkg +# this is commant +Attribute : hi +Category : my Category +Conflict : pkgfour +Install-script : pkgone.install +Remove-script : pkgone.remove +Source : tpkg +Description : first test package +-- +it will increase + +Package : pkgtwo +Version : 0.2.0 +OS : linux | windows +Mintainer : pkgone owner +Install-dependency : pkgone (>= 0.1.0) [linux | windows], pkgthree (<= 0.3.0 ) [linux] +Build-dependency : pkgone (>= 0.1.0) [linux | windows], pkgthree (<= 0.3.0 ) [linux] +Source-dependency : tpkg +# this is commant +Attribute : E +Category : ouu Category +Conflict : pkgfour +Install-script : pkgtwo.install +Remove-script : pkgtwo.remove +Source : tpkg +Description : second test package +-- +it will increase + +Package : pkgthree +Version : 0.3.0 +OS : linux | darwin +Mintainer : pkgone owner +Install-dependency : pkgtwo (>= 0.2.0) [linux | windows] +Build-dependency : pkgtwo (>= 0.2.0) [linux | windows], pkgone (<= 0.1.0 ) [linux] +Source-dependency : tpkg +# this is commant +Attribute : sam +Category : sam Category +Conflict : pkgfour +Install-script : pkgthree.install +Remove-script : pkgthree.remove +Source : tpkg +Description : 3rd test package +-- +it will increase + +Package : pkgfour +Version : 0.4.0 +OS : linux | darwin +Mintainer : pkgone owner +Install-dependency : pkgthree (<= 0.3.0 ) [linux] +Build-dependency : pkgone (>= 0.1.0) [linux | windows], pkgthree (<= 0.3.0 ) [linux] +Source-dependency : tpkg +# this is commant +Attribute : i for +Category : you Category +Conflict : pkgfour +Install-script : pkgfour.install +Remove-script : pkgfour.remove +Source : tpkg +Description : 4th test package +-- +it will increase diff --git a/test/tpkg/package/pkgone.install b/test/tpkg/package/pkgone.install new file mode 100644 index 0000000..1a24852 --- /dev/null +++ b/test/tpkg/package/pkgone.install @@ -0,0 +1 @@ +#!/bin/sh diff --git a/test/tpkg/package/pkgone.remove b/test/tpkg/package/pkgone.remove new file mode 100644 index 0000000..1a24852 --- /dev/null +++ b/test/tpkg/package/pkgone.remove @@ -0,0 +1 @@ +#!/bin/sh diff --git a/test/tpkg/package/pkgthree.install b/test/tpkg/package/pkgthree.install new file mode 100644 index 0000000..1a24852 --- /dev/null +++ b/test/tpkg/package/pkgthree.install @@ -0,0 +1 @@ +#!/bin/sh diff --git a/test/tpkg/package/pkgthree.remove b/test/tpkg/package/pkgthree.remove new file mode 100644 index 0000000..1a24852 --- /dev/null +++ b/test/tpkg/package/pkgthree.remove @@ -0,0 +1 @@ +#!/bin/sh diff --git a/test/tpkg/package/pkgtwo.install b/test/tpkg/package/pkgtwo.install new file mode 100644 index 0000000..1a24852 --- /dev/null +++ b/test/tpkg/package/pkgtwo.install @@ -0,0 +1 @@ +#!/bin/sh diff --git a/test/tpkg/package/pkgtwo.remove b/test/tpkg/package/pkgtwo.remove new file mode 100644 index 0000000..1a24852 --- /dev/null +++ b/test/tpkg/package/pkgtwo.remove @@ -0,0 +1 @@ +#!/bin/sh diff --git a/tizen-ide/get_ide_sources.sh b/tizen-ide/get_ide_sources.sh new file mode 100755 index 0000000..6a04459 --- /dev/null +++ b/tizen-ide/get_ide_sources.sh @@ -0,0 +1,275 @@ +#!/bin/bash + +############################################################### +## Variables +############################################################### + +START_PATH=~+ ## like `pwd` +SCRIPT_NAME=$0 +SCRIPT_OPERATION=$1 +ARG1=$2 +ARG2=$3 +ARG3=$4 +GIT_PORT=29419 +CONTINUE=n +GIT_LIST=" +/sdk/ide/common-eplugin +/sdk/ide/eventinjector-eplugin +/sdk/ide/nativecommon-eplugin +/sdk/ide/nativeappcommon-eplugin +/sdk/ide/nativeapp-eplugin +/sdk/ide/nativecpp-eplugin +/sdk/ide/nativecpp-ext-eplugin +/sdk/ide/native-sample +/sdk/ide/nativeplatform-eplugin +/sdk/ide/unittest-eplugin +/sdk/ide/native-gui-builder-eplugin +/sdk/gui-builder/native-gui-builder +/sdk/ide/profiler-eplugin +/sdk/ide/codecoverage-eplugin +/sdk/ide/assignmenttracing-eplugin +/sdk/ide/codehiding-eplugin +/sdk/ide/telephony-eplugin +/sdk/ide/webapp-eplugin +/sdk/ide/product +" + + +############################################################### +## Usage output functions +############################################################### + +function usage() { + echo "Usage : ${SCRIPT_NAME##*/} []"; echo + echo "The most commonly used script commands are :" + echo " clone Clone git sources about Tizen SDK" + echo " pull Pull git sources about Tizen SDK" + echo " checkout checkout git sources about Tizen SDK"; echo + exit 1 +} + +function usage_pull() { + echo "Usage : ${SCRIPT_NAME##*/} pull : Git pull in current directory"; + echo "Usage : ${SCRIPT_NAME##*/} pull : Git pull in source directory"; + + draw_line + echo " Ex1) \$ ${SCRIPT_NAME} pull"; echo + echo " Ex2) \$ ${SCRIPT_NAME} pull $(pwd)/tizen-ide-sources"; echo + exit 1 +} + +function usage_checkout() { + echo "Usage : ${SCRIPT_NAME##*/} checkout : Git checkout in current directory"; + echo "Usage : ${SCRIPT_NAME##*/} checkout : Git checkout in source directory"; + + draw_line + echo " Ex1) \$ ${SCRIPT_NAME} checkout develop"; echo + echo " Ex2) \$ ${SCRIPT_NAME} checkout develop $(pwd)/tizen-ide-sources"; echo + exit 1 +} + +function usage_clone() { + draw_line + echo "Usage : 1) ${SCRIPT_NAME##*/} clone : Git clone in curreut directory"; echo + echo " 2) ${SCRIPT_NAME##*/} clone : Git clone in destination directory" + draw_line + echo " Ex1) \$ ${SCRIPT_NAME} clone develop gerrithost" + echo " Ex2) \$ ${SCRIPT_NAME} clone release http://develop.tizen.org/git:2039 /home/usr/work/git" + exit 1 +} + + +############################################################### +## Processing Functions +############################################################### + +function draw_line() { + echo; echo "==========================================================================="; echo; +} + +## Error Check Function +function isError() { + ERROR_CODE=$? + + if [ ${ERROR_CODE} == 0 ]; then + echo "[ $1 : Done ]"; + else + echo "[ $1 : Fail (ErrorCode : ${ERROR_CODE}) ]" + if [ ${CONTINUE} == "n" ]; then + input=0 + while [ ${input} != "y" -a ${input} != "n" -a ${input} != "a" ]; do + echo "Continue? y: Yes, n: No, a: Yes to all" + read input + if [ ${input} == "n" ]; then + exit ${ERROR_CODE} + elif [ ${input} == "a" ]; then + CONTINUE=y + echo ${CONTINUE} + fi + done + fi + fi +} + +## Cloning git +function git_clone() { + GIT_PATH=$1 + GIT_NAME=${GIT_PATH##*/} + + ## ARG1 : + ## ARG2 : + ## ARG3 : + git clone -b ${ARG1} ${ARG2}:${GIT_PATH} ${ARG3}/${GIT_NAME} + isError "Cloned ${GIT_NAME}" + scp -p -P ${GIT_PORT} ${ARG2}:hooks/commit-msg ${ARG3}/${GIT_NAME}/.git/hooks/ + isError "Generate change-id ${GIT_NAME}" +} + +## Cloning git all +function git_clone_all() { + draw_line; echo "Git clone sources"; draw_line + + for GIT_EACH in ${GIT_LIST} + do + git_clone ${GIT_EACH} + done +} + +## Pulling git +function git_pull() { + GIT_PATH=$1 + GIT_NAME=${GIT_PATH##*/} + + ## ARG1 : + cd ${ARG1}/${GIT_NAME} + isError "Found git directory ( ${ARG1}/${GIT_NAME} )" + git pull + isError "Pulled ${GIT_NAME}" +} + +## Pulling git all +function git_pull_all() { + draw_line; echo "Git pull sources"; draw_line + + cd ${ARG1} + isError "Checked source directory ( ${ARG1} )" + + for GIT_EACH in ${GIT_LIST} + do + git_pull ${GIT_EACH} + done + + cd ${START_PATH} +} + +## Checking out git +function git_checkout() { + GIT_PATH=$1 + GIT_NAME=${GIT_PATH##*/} + + ## ARG1 : + cd ${ARG2}/${GIT_NAME} + isError "Found git directory ( ${ARG2}/${GIT_NAME} )" + git checkout ${ARG1} + isError "Checkout ${GIT_NAME}" +} + +## Checking out git all +function git_checkout_all() { + draw_line; echo "Git checkout"; draw_line + + cd ${ARG2} + isError "Checked source directory ( ${ARG1} )" + + for GIT_EACH in ${GIT_LIST} + do + git_checkout ${GIT_EACH} + done + + cd ${START_PATH} +} + +## Command git +function git_command() { + GIT_PATH=$1 + GIT_NAME=${GIT_PATH##*/} + + ## ARG1 : + cd ${ARG1}/${GIT_NAME} + isError "Found git directory ( ${ARG1}/${GIT_NAME} )" + git ${SCRIPT_OPERATION} + isError "Pulled ${GIT_NAME}" +} + +## Command git all +function git_command_all() { + draw_line; echo "Git ${SCRIPT_OPERATION}"; draw_line + + cd ${ARG1} + isError "Checked source directory ( ${ARG1} )" + + for GIT_EACH in ${GIT_LIST} + do + git_command ${GIT_EACH} + done + + cd ${START_PATH} +} + +############################################################### +## Begin script +############################################################### + +case ${SCRIPT_OPERATION} in + ## process "clone" operation + clone) + if [ "$#" == 4 ]; then + git_clone_all + elif [ "$#" == 3 ]; then + ARG3=$(pwd) + git_clone_all + else + usage_clone + fi + ;; + + ## process "pull" operation + pull) + if [ "$#" == 2 ]; then + git_pull_all + elif [ "$#" == 1 ]; then + ARG1=$(pwd) + git_pull_all + else + usage_pull + fi + ;; + + ## process "checkout" operation + checkout) + if [ "$#" == 3 ]; then + git_checkout_all + elif [ "$#" == 2 ]; then + ARG2=$(pwd) + git_checkout_all + else + usage_checkout + fi + ;; + + ## process default + *) + if [ "$#" == 1 ]; then + ARG1=$(pwd) + git_command_all + else + usage + fi + ;; +esac + +echo "[ Finished process ]" + +############################################################### +## End script +############################################################### -- 2.34.1