pax_global_header00006660000000000000000000000064147733150750014526gustar00rootroot0000000000000052 comment=3bb9cc173085891b6665a4d31b8a79abbe0bd99d debomatic-0.40/000077500000000000000000000000001477331507500134005ustar00rootroot00000000000000debomatic-0.40/.readthedocs.yaml000066400000000000000000000001471477331507500166310ustar00rootroot00000000000000version: 2 build: os: ubuntu-22.04 tools: python: "3.12" sphinx: configuration: docs/conf.py debomatic-0.40/AUTHORS000066400000000000000000000003641477331507500144530ustar00rootroot00000000000000Maintainers: Luca Falavigna Contributors: David Futcher Alessio Treglia Karl Goetz Leo Iannacone Mattia Rizzolo debomatic-0.40/COPYING000066400000000000000000001045141477331507500144400ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . debomatic-0.40/ChangeLog000066400000000000000000000056661477331507500151670ustar00rootroot000000000000000.40 "ema" (2025-04-02) * mmdebstrap backend instead of schroot * Port to setuptools * Several bugfixes 0.26 "melting" (2022-07-10) * Several bugfixes 0.25 "lockdown" (2021-01-26) * Allow to build packages with a different user than root * Several bugfixes 0.24 "novemberrain" (2018-11-04) * Several bugfixes 0.23 "Mogendorf" (2018-05-01) * Private repositories * Periodic trigger of modules * New RemovePackages module * New RemoveChroots module * New UpdateChroots module * Several bugfixes 0.22 "onekill" (2016-11-08) * Oneshot mode * Improved local repository handling * Several bugfixes 0.21 "criss-cross" (2015-10-07) * Cross-build support * New kill command * Several bugfixes 0.20 "dayafter" (2015-04-26) * sbuild backend instead of pbuilder * New binnmu command 0.13 "mol" (2014-10-16) * Improved modules subsystem * New Autopkgtest module * New Blhc module * New SourceUpload module * Several bugfixes 0.12 "blind" (2014-05-30) * Converted to Python 3 * New builddep command * Support building for foreign architectures * Per-packagedir lock files * Chroot maintenance hooks * Improved logging subsystem * Improved Repository module * systemd support * Several bugfixes 0.11 "lazy" (2013-06-05) * Piuparts module * Log verbosity increased * Several bugfixes 0.10 "antwerp" (2012-04-01) * Massive code refactorization * Documentation has been rewritten from scratch * New configuration file format * Local package repository support * Support rebuilding packages available in other distributions * Support for pbuilder/cowbuilder hooks * Support for porter uploads * Support for distribution mappings * PEP-8 syntax 0.9 "bafana" (2011-02-06) * Mailer support * Package rebuild support * Distribution blacklist support * Module blacklist support * Improved support for 3.0 package format * Improved locking mechanism * Several bugfixes 0.8 "daking" (2010-02-04) * Cowbuilder support * Commands files support * More modules available * Internazionalization * Documentation converted to reStructuredText * Several bugfixes 0.7 "Developer Domain" (2009-09-02) * More modules available * Compatibility with newer releases of related software * Several bugfixes 0.6 "bobbo" (2009-01-27) * Modules support * Code reorganization * Several bugfixes 0.5 "soyuzzo" (2008-06-26) * Tarballs are dowloaded automatically by mirror * GPG support for .changes file signatures * Improved documentation * Several bugfixes 0.4 "alcor" (2007-11-29) * Modular design * inotify support * New locking management * Packagequeue * Several bugfixes 0.3 "embrace" (2007-07-28) * Concurrent build processes * New daemonization routine * New documentation * Several bugfixes 0.2.1 (2007-05-26) * Lintian/Linda support * Several bugfixes 0.2 "TOTU" (2007-05-13) * Generic Debian-based distribution support * .changes file support * Simple priority mechanism to provide build order 0.1 "march madness" (2007-03-14) * First stable release * Basic features: automatic package building, chroot updates debomatic-0.40/Debomatic/000077500000000000000000000000001477331507500152675ustar00rootroot00000000000000debomatic-0.40/Debomatic/__init__.py000066400000000000000000000015641477331507500174060ustar00rootroot00000000000000# Deb-o-Matic # # Copyright (C) 2007-2025 Luca Falavigna # # Author: Luca Falavigna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option), any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. from gettext import install install("debomatic") class dom: pass debomatic-0.40/Debomatic/build.py000066400000000000000000000571241477331507500167510ustar00rootroot00000000000000# Deb-o-Matic # # Copyright (C) 2007-2025 Luca Falavigna # Copyright (C) 2010 Alessio Treglia # # Author: Luca Falavigna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option), any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. import os from ast import literal_eval from contextlib import contextmanager from logging import debug, error, info from re import findall, match, sub from subprocess import Popen, check_output from threading import Semaphore from time import strftime from urllib.request import Request, urlopen from urllib.error import HTTPError, URLError from Debomatic import dom from .gpg import GPG from .modules import Module from .exceptions import DebomaticError class BuildTask: def __init__(self, build, package, version, distribution, queue): self._build = build self._package = package self._version = version self._distribution = distribution self._queue = queue self._pid = 0 def __enter__(self): for task in self._queue: if self.match(task._package, task._version, task._distribution): info(_('Build already scheduled for ' 'package %(package)s_%(version)s in %(dist)s') % {'package': self._package, 'version': self._version, 'dist': self._distribution}) self._skip_removal() raise DebomaticError self._queue.append(self) return self def __exit__(self, type, value, tb): if self in self._queue: self._queue.remove(self) def _skip_removal(self): for pkgfile in set(self._build.files): if os.path.isfile(pkgfile): for build in [x._build for x in self._queue if x._build != self]: if pkgfile in build.files: self._build.files.remove(pkgfile) debug(_('Skipping removal of file %s') % pkgfile) def get_pid(self): return self._pid @contextmanager def set_pid(self, pid): self._pid = pid try: yield finally: self._pid = 0 def match(self, package, version, distribution): return (self._package == package and self._version == version and self._distribution == distribution) class Build: def __init__(self, changesfile=None, package=None, distribution=None, binnmu=None, extrabd=None, maintainer=None, origin=None, uploader=None): self.buildtask = None self.changesfile = changesfile self.package = package self.suite = None self.distribution = distribution self.binnmu = binnmu self.extrabd = extrabd self.maintainer = maintainer self.origin = origin self.uploader = uploader self.files = set() self.incoming = dom.opts.get('debomatic', 'incoming') self.hostarchitecture = None self.dpr = False def _build(self): self._parse_distribution() if self.distribution in dom.opts.get('distributions', 'blacklist'): self._remove_files() error(_('Distribution %s is disabled') % self.distribution) raise DebomaticError if dom.opts.has_section('crossbuild'): if dom.opts.getboolean('crossbuild', 'crossbuild'): self.hostarchitecture = dom.opts.get('crossbuild', 'hostarchitecture') try: if self.changesfile: package = os.path.basename(self.changesfile).split('_')[0] version = os.path.basename(self.changesfile).split('_')[1] else: package, version = self.package with BuildTask(self, package, version, self.suite, dom.buildqueue) as bt: self.buildtask = bt self._fetch_files() self._setup_chroot() self._build_package() except DebomaticError: self._remove_files() def _build_package(self): uploader_email = '' packageversion = os.path.splitext(os.path.basename(self.dscfile))[0] builddir = os.path.join(self.poolpath, 'pool', packageversion) os.makedirs(builddir, exist_ok=True) if self.uploader: uploader_email = self.uploader[1].decode('utf-8') architecture = dom.opts.get('debomatic', 'architecture') if architecture == 'system': b_arch = check_output(['dpkg-architecture', '-qDEB_BUILD_ARCH']) architecture = b_arch.strip().decode('utf-8') mod = Module() mod.args.architecture = architecture mod.args.directory = self.poolpath mod.args.distribution = self.distribution mod.args.dists = dom.dists mod.args.dsc = self.dscfile mod.args.files = self.files mod.args.package = packageversion mod.args.uploader = uploader_email mod.args.hostarchitecture = self.hostarchitecture mod.execute_hook('pre_build') info(_('Building %s') % os.path.basename(self.dscfile)) command = ['sbuild', '--chroot-mode=unshare', '-A', '-s', '-d', self.distribution, f'--arch={architecture}', '-c', f'{self.distribution}-{architecture}-debomatic', '--no-run-lintian', self.dscfile] if self.hostarchitecture: command.pop(6) command.insert(6, '--host=%s' % self.hostarchitecture) suite = dom.dists.get(self.distribution, 'suite') if self.distribution != suite: command.insert(-1, '--build-dep-resolver=aspcud') command.insert(-1, ('--aspcud-criteria=-removed,-changed,-new,' '-count(solution,APT-Release:=/%s/)' % self.distribution)) if self.distribution != self.suite: command.insert(-1, '--build-dep-resolver=aspcud') command.insert(-1, ('--aspcud-criteria=-removed,-changed,-new,' '-count(solution,APT-Release:=/%s/)' % self.suite)) if self.extrabd: for extrabd in self.extrabd: command.insert(-1, '--add-depends=%s' % extrabd) command.insert(-1, '--build-dep-resolver=aspcud') if self.changesfile: with open(self.upload, 'r') as fd: data = fd.read() for file in findall(r'\s\w{32}\s\d+\s\S+\s\S+\s(.*)', data): if '.orig.' in file: command.insert(-1, '--force-orig-source') break try: command.insert(-1, '--debbuildopt=-v%s~' % findall(r' \S+ \((\S+)\) \S+; ', data)[-1]) except IndexError: pass with open(os.path.join(self.incoming, self.changesfile)) as fd: data = fd.read() for resolver in findall(r'Debomatic-Resolver: (\S+)', data): command.insert(-1, '--build-dep-resolver=%s' % resolver) if self.binnmu: command.insert(-1, '--binNMU=%s' % self.binnmu[0]) command.insert(-1, '--make-binNMU=%s' % self.binnmu[1]) command.insert(-1, '--no-arch-all') buildlog = '%s+b%s_%s.build' % (packageversion, self.binnmu[0], architecture) else: buildlog = '%s_%s.build' % (packageversion, architecture) if self.hostarchitecture: buildlog = sub(r'(.*_)\S+(\.build)', '\\1%s\\2' % self.hostarchitecture, buildlog) if self.maintainer: command.remove('-A') command.remove('-s') command.insert(-1, '--maintainer=%s' % self.maintainer) ext = {'.gz': 'gzip', '.bz2': 'bzip2', '.xz': 'xz'} for file in self.files: if os.path.isfile(file): if findall(r'(.*\.debian\..*)', file): try: command.insert(-1, '--debbuildopt=-Z%s' % ext[os.path.splitext(file)[1]]) except IndexError: pass for sbuildcommand in self._commands(self.distribution, architecture, packageversion): command.insert(-1, sbuildcommand) if self.dpr: if dom.opts.get('dpr', 'repository'): command.insert(-1, '--extra-repository=%s' % (dom.opts.get('dpr', 'repository') % {'dist': os.path.basename(self.poolpath)})) with open(os.devnull, 'w') as fd: try: buildlink = os.path.join( builddir, f'{packageversion}.buildlog') if os.path.exists(buildlink): os.unlink(buildlink) os.symlink(buildlog, buildlink) process = Popen(command, stdout=fd, stderr=fd, cwd=builddir, start_new_session=True) with self.buildtask.set_pid(process.pid): process.wait() if process.returncode: info(_("Build of %s failed") % os.path.basename(self.dscfile)) else: info(_("Build of %s successful") % os.path.basename(self.dscfile)) mod.args.success = True except OSError: error(_('Invocation of sbuild failed')) mod.execute_hook('post_build') self._remove_files() debug(_('Build of %s complete') % os.path.basename(self.dscfile)) def _commands(self, distribution, architecture, packageversion): commands = [] types = ('pre-build-commands', 'chroot-setup-commands', 'build-deps-failed-commands', 'starting-build-commands', 'build-failed-commands', 'finished-build-commands', 'chroot-cleanup-commands', 'post-build-commands') commandsdir = dom.opts.get('chroots', 'commands') if os.path.isdir(commandsdir): for type in types: if os.path.isdir(os.path.join(commandsdir, type)): for command in os.listdir(os.path.join(commandsdir, type)): commandfile = os.path.join(commandsdir, type, command) if os.access(commandfile, os.X_OK): commands.append('--%s=%s %s %s %s' % (type, commandfile, packageversion, distribution, architecture)) if commands: commands.append('--log-external-command-output') commands.append('--log-external-command-error') return commands def _fetch_files(self): def _download_files(mirror, component, package, file, filepath): request = Request('%s/pool/%s/%s/%s/%s' % (mirror, component, findall(r'^lib\S|^\S', package)[0], package, file)) try: debug(_('Requesting URL %s') % request.get_full_url()) data = urlopen(request).read() with open(filepath, 'wb') as fd: fd.write(data) except (HTTPError, URLError): pass dscfile = None components = dom.dists.get(self.origin, 'components').split() if self.changesfile: package = os.path.basename(self.changesfile).split('_')[0] for filename in self.files: if filename.endswith('.dsc'): dscfile = filename self.dscfile = os.path.join(self.incoming, dscfile) break if not dscfile: self._remove_files() error(_('Bad .changes file: %s') % self.changesfile) raise DebomaticError else: package = self.package[0] version = sub(r'^\d+\:', '', self.package[1]) dscfile = '%s_%s.dsc' % (package, version) if not dom.dists.has_section(self.origin): error(_('Distribution %s not configured') % self.distribution) raise DebomaticError self.dscfile = os.path.join(self.incoming, dscfile) if not os.path.isfile(self.dscfile): debug(_('Downloading missing %s') % dscfile) for component in components: _download_files(dom.dists.get(self.origin, 'mirror'), component, package, dscfile, self.dscfile) if os.path.isfile(self.dscfile): break if self.dscfile and os.path.isfile(self.dscfile): self.files.add(self.dscfile) debug(_('File %s added') % self.dscfile) else: error(_('Unable to fetch %s') % dscfile) raise DebomaticError with open(self.dscfile, 'r') as fd: data = fd.read() for entry in findall(r'\s\w{32}\s\d+\s(\S+)', data): if not os.path.isfile(os.path.join(self.incoming, entry)): debug(_('Downloading missing %s') % entry) for component in dom.dists.get(self.origin, 'components').split(): _download_files(dom.dists.get(self.origin, 'mirror'), component, package, entry, os.path.join(self.incoming, entry)) if os.path.isfile(os.path.join(self.incoming, entry)): break if os.path.isfile(os.path.join(self.incoming, entry)): if not (os.path.join(self.incoming, entry)) in self.files: entry = os.path.join(self.incoming, entry) self.files.add(entry) debug(_('File %s added') % entry) else: error(_('Unable to fetch %s') % entry) raise DebomaticError def _lock_chroot(self, chrootname): if chrootname not in dom.chroots: dom.chroots[chrootname] = Semaphore() dom.chroots[chrootname].acquire() def _map_distribution(self): if dom.opts.has_section('dpr'): if dom.opts.getboolean('dpr', 'dpr'): self.suite = self.distribution if match(r'%s-\S+-\S+' % dom.opts.get('dpr', 'prefix'), self.suite): self.dpr = True self.distribution = '-'.join( self.distribution.split('-')[2:]) if self.origin == self.suite: self.origin = self.distribution if dom.opts.has_option('distributions', 'mapper'): try: mapper = literal_eval(dom.opts.get('distributions', 'mapper')) except SyntaxError: pass else: if self.distribution in mapper: debug(_('%(mapped)s mapped as %(mapper)s') % {'mapped': self.distribution, 'mapper': mapper[self.distribution]}) self.distribution = mapper[self.distribution] if self.origin and self.origin in mapper: debug(_('%(mapped)s mapped as %(mapper)s') % {'mapped': self.origin, 'mapper': mapper[self.origin]}) self.origin = mapper[self.origin] def _parse_distribution(self): if not self.distribution: try: with open(self.upload, 'r') as fd: data = fd.read() except IOError: error(_('Unable to open %s') % self.upload) raise DebomaticError try: dist = findall(r'Distribution:\s+(\S+)', data)[0] self.distribution = dist.lower() except IndexError: error(_('Bad .changes file: %s') % self.upload) raise DebomaticError self.poolpath = os.path.join(self.incoming, self.distribution) self._map_distribution() if not dom.dists.has_section(self.distribution): error(_('Distribution %s not configured') % self.distribution) raise DebomaticError if self.origin: if not dom.dists.has_section(self.origin): error(_('Distribution %s not configured') % self.origin) raise DebomaticError else: self.origin = self.distribution if not self.suite: self.suite = self.distribution def _remove_files(self): for pkgfile in self.files: if os.path.isfile(pkgfile): os.remove(pkgfile) debug(_('File %s removed') % pkgfile) def _setup_chroot(self): action = None self.buildpath = os.path.join(self.incoming, self.distribution) os.makedirs(self.buildpath, exist_ok=True) os.makedirs(self.poolpath, exist_ok=True) architecture = dom.opts.get('debomatic', 'architecture') if architecture == 'system': b_arch = check_output(['dpkg-architecture', '-qDEB_BUILD_ARCH']) architecture = b_arch.strip().decode('utf-8') chrootname = '%s-%s-debomatic' % (self.distribution, architecture) self._lock_chroot(chrootname) chroot = os.path.expanduser(f'~/.cache/sbuild/{chrootname}.tar.zst') if not os.path.isfile(chroot): action = 'create' mod = Module() mod.args.architecture = architecture mod.args.action = action mod.args.directory = self.buildpath mod.args.distribution = self.distribution mod.args.dists = dom.dists mod.execute_hook('pre_chroot') for d in ('logs', 'pool'): os.makedirs(os.path.join(self.buildpath, d), exist_ok=True) if action: logfile = ('%s/logs/%s.%s' % (self.buildpath, self.distribution, strftime('%Y%m%d_%H%M%S'))) target = dom.dists.get(self.distribution, 'suite') with open(logfile, 'w') as fd: try: debug(_('Creating chroot %(dist)s-%(arch)s-debomatic') % {'dist': self.distribution, 'arch': architecture}) components = ','.join(dom.dists.get(self.distribution, 'components').split()) command = ['mmdebstrap', '--mode=unshare', f'--arch={architecture}', f'--components={components}', target, chroot, dom.dists.get(self.distribution, 'mirror')] if dom.dists.has_option(self.distribution, 'extrapackages'): packages = dom.dists.get(self.distribution, 'extrapackages').split() command.insert(-3, '--include=%s' % ','.join(packages)) packages = '--include=%s' % ','.join(packages) if dom.dists.has_option(self.distribution, 'extramirrors'): extramirrors = dom.dists.get( self.distribution, 'extramirrors') command.append(f'{extramirrors}') if dom.opts.has_section('repository'): keyring = dom.opts.get('repository', 'keyring') keyring_chroot = os.path.dirname(keyring) command.append('--setup-hook=mkdir -p ' f'$1/{keyring}') command.append('--setup-hook=copy-in ' f'{keyring} {keyring_chroot}') command.append('--aptopt=' 'Acquire::https::Verify-Peer ' '"false"') process = Popen(command, stdout=fd, stderr=fd) with self.buildtask.set_pid(process.pid): process.wait() if process.returncode: error(_('Failed creating %(dist)s-%(arch)s-debomatic') % {'dist': self.distribution, 'arch': architecture}) mod.execute_hook('post_chroot') os.unlink(chroot) self._unlock_chroot(chrootname) raise DebomaticError except OSError: error(_('Unable to launch mmdebstrap')) mod.execute_hook('post_chroot') self._unlock_chroot(chrootname) raise DebomaticError mod.args.success = True mod.execute_hook('post_chroot') self._unlock_chroot(chrootname) def _unlock_chroot(self, chrootname): if chrootname in dom.chroots: dom.chroots[chrootname].release() def run(self): if self.changesfile: self.upload = os.path.join(self.incoming, self.changesfile) self.files.add(self.upload) debug(_('File %s added') % self.upload) info(_('Processing %s') % self.changesfile) try: with open(self.upload, 'r') as fd: data = fd.read() except IOError: error(_('Unable to open %s') % self.upload) raise DebomaticError try: for entry in findall(r'\s\w{32}\s\d+\s\S+\s\S+\s(.*)', data): entry = os.path.join(self.incoming, entry) self.files.add(entry) debug(_('File %s added') % entry) except IndexError: error(_('Bad .changes file: %s') % self.upload) raise DebomaticError try: with GPG(self.upload) as gpg: try: self.uploader = gpg.check() except DebomaticError: self._remove_files() error(gpg.error()) raise DebomaticError try: self._build() except DebomaticError: self._remove_files() error(_('Build of %s failed') % self.changesfile) except (IOError, DebomaticError): pass else: try: self._build() except DebomaticError: self._remove_files() error(_('Build of %s failed') % '_'.join(self.package)) debomatic-0.40/Debomatic/commands.py000066400000000000000000000132601477331507500174440ustar00rootroot00000000000000# Deb-o-Matic # # Copyright (C) 2007-2025 Luca Falavigna # # Author: Luca Falavigna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option), any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. import os from glob import glob from logging import debug, error, info from re import findall from signal import SIGTERM from Debomatic import dom from .build import Build from .exceptions import DebomaticError from .gpg import GPG class Command(): def __init__(self, commandfile): self.incoming = dom.opts.get('debomatic', 'incoming') self.cmdfile = os.path.join(self.incoming, commandfile) self._process_command() def _process_command(self): info(_('Processing %s') % os.path.basename(self.cmdfile)) try: with GPG(self.cmdfile) as gpg: try: self.uploader = gpg.check() except DebomaticError: os.remove(self.cmdfile) error(gpg.error()) return except IOError: return with open(self.cmdfile, 'r') as fd: cmd = fd.read() os.remove(self.cmdfile) cmd_nmu = findall(r'\s?binnmu\s+(\S+_\S+) (\S+) (\d+) "(.*)" (.*)', cmd) cmd_builddep = findall(r'\s?builddep\s+(\S+_\S+) (\S+) (.*)', cmd) cmd_kill = findall(r'\s?kill\s+(\S+_\S+) (\S+)', cmd) cmd_porter = findall(r'\s?porter\s+(\S+_\S+) (\S+) (.*)', cmd) cmd_rebuild = findall(r'\s?rebuild\s+(\S+_\S+) (\S+) ?(\S*)', cmd) cmd_rm = findall(r'\s?rm\s+(.*)', cmd) if cmd_nmu: self._process_binnmu(cmd_nmu) if cmd_builddep: self._process_builddep(cmd_builddep) if cmd_kill: self._process_kill(cmd_kill) if cmd_porter: self._process_porter(cmd_porter) if cmd_rebuild: self._process_rebuild(cmd_rebuild) if cmd_rm: self._process_rm(cmd_rm) def _process_binnmu(self, packages): debug(_('Performing a binNMU build')) for _package in packages: package = _package[0].split('_') distribution = _package[1] binnmu = _package[2] changelog = _package[3] maintainer = _package[4] b = Build(package=package, distribution=distribution, binnmu=(binnmu, changelog), maintainer=maintainer, uploader=self.uploader) if dom.pool.schedule(b.run): debug(_('Thread for %s scheduled') % '_'.join(package)) def _process_builddep(self, packages): debug(_('Performing a package rebuild with extra dependencies')) for _package in packages: package = _package[0].split('_') distribution = _package[1] extrabd = [x.strip() for x in _package[2].split(',')] b = Build(package=package, distribution=distribution, extrabd=extrabd, uploader=self.uploader) if dom.pool.schedule(b.run): debug(_('Thread for %s scheduled') % '_'.join(package)) def _process_kill(self, builds): debug(_('Killing build task')) for _build in builds: package, version = _build[0].split('_') distribution = _build[1] for task in dom.buildqueue: if task.match(package, version, distribution): pid = task.get_pid() if pid: os.kill(pid, SIGTERM) debug(_('Build killed for %(package)s_' '%(version)s in %(dist)s') % {'package': package, 'version': version, 'distribution': distribution}) def _process_porter(self, packages): debug(_('Performing a porter build')) for _package in packages: package = _package[0].split('_') distribution = _package[1] maintainer = _package[2] b = Build(package=package, distribution=distribution, maintainer=maintainer, uploader=self.uploader) if dom.pool.schedule(b.run): debug(_('Thread for %s scheduled') % '_'.join(package)) def _process_rebuild(self, packages): debug(_('Performing a package rebuild')) for _package in packages: package = _package[0].split('_') distribution = _package[1] origin = _package[2] if _package[2] else distribution b = Build(package=package, distribution=distribution, origin=origin, uploader=self.uploader) if dom.pool.schedule(b.run): debug(_('Thread for %s scheduled') % '_'.join(package)) def _process_rm(self, filesets): debug(_('Removing files')) for files in filesets: for pattern in files.split(): pattern = os.path.basename(pattern) for absfile in glob(os.path.join(self.incoming, pattern)): debug(_('Removing %s') % absfile) os.remove(absfile) debomatic-0.40/Debomatic/configuration.py000066400000000000000000000125511477331507500205140ustar00rootroot00000000000000# Deb-o-Matic # # Copyright (C) 2015-2025 Luca Falavigna # # Author: Luca Falavigna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option), any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. import os from ast import literal_eval from configparser import NoOptionError from logging import error from Debomatic import dom from .exceptions import DebomaticConffileError core = {'debomatic': {'incoming': str, 'architecture': str, 'threads': int, 'inotify': bool, 'sleep': int, 'interval': int, 'logfile': str, 'loglevel': str}, 'distributions': {'list': str, 'blacklist': str, 'mapper': dict}, 'chroots': {'commands': str}, 'gpg': {'gpg': bool, 'keyring': str}, 'modules': {'modules': bool, 'path': str, 'threads': int, 'blacklist': str}} optional = {'crossbuild': {'crossbuild': bool, 'hostarchitecture': str}, 'dpr': {'dpr': bool, 'prefix': str, 'repository': str}} modules = {'autopkgtest': {'options': str}, 'blhc': {'options': str}, 'buildcleaner': {'testbuild': bool}, 'lintian': {'options': str}, 'mailer': {'sender': str, 'server': str, 'port': int, 'tls': bool, 'authrequired': bool, 'user': str, 'passwd': str, 'success': str, 'failure': str, 'lintian': bool}, 'piuparts': {'options': str}, 'repository': {'gpgkey': str, 'keyring': str}} dists = {'suite': str, 'mirror': str, 'components': str, '_extramirrors': str, '_extrapackages': str} class Parser: def __init__(self): pass def _validate(self, option, section, configtype, element, conffile): if not element.has_option(section, option): if not option.startswith('_'): error(_('Set "%(option)s" in section "%(section)s" ' 'in %(conffile)s') % {'option': option.strip('_'), 'section': section, 'conffile': conffile}) raise DebomaticConffileError fubar = False try: if configtype == int: _option = element.getint(section, option) elif configtype == bool: _option = element.getboolean(section, option) elif configtype == dict: _option = literal_eval(element.get(section, option)) else: _option = element.get(section, option) assert isinstance(_option, configtype) except NoOptionError: if not option.startswith('_'): fubar = True except (AssertionError, ValueError): fubar = True finally: if fubar: error(_('Option "%(option)s" in section "%(section)s" ' 'must be %(type)s' % {'option': option, 'section': section, 'type': configtype.__name__})) raise DebomaticConffileError def parse_configfiles(self): if not self.conffile: error(_('Configuration file has not been specified')) raise DebomaticConffileError if not os.path.isfile(self.conffile): error(_('Configuration file %s does not exist') % self.conffile) raise DebomaticConffileError dom.opts.read(self.conffile) for section in core: if not dom.opts.has_section(section): error(_('Section "%(section)s" missing in %(conffile)s') % {'section': section, 'conffile': self.conffile}) raise DebomaticConffileError for option in core[section]: self._validate(option, section, core[section][option], dom.opts, self.conffile) for section in optional: if dom.opts.has_section(section): for option in optional[section]: self._validate(option, section, optional[section][option], dom.opts, self.conffile) for section in modules: if dom.opts.has_section(section): for option in modules[section]: self._validate(option, section, modules[section][option], dom.opts, self.conffile) distfile = dom.opts.get('distributions', 'list') if not os.path.isfile(distfile): error(_('Distribution file %s does not exist') % distfile) raise DebomaticConffileError dom.dists.read(distfile) for dist in dom.dists.sections(): for option in dists: self._validate(option, dist, dists[option], dom.dists, distfile) debomatic-0.40/Debomatic/debomatic.py000066400000000000000000000150011477331507500175650ustar00rootroot00000000000000# Deb-o-Matic # # Copyright (C) 2007-2025 Luca Falavigna # # Author: Luca Falavigna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option), any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. import os from argparse import ArgumentParser from configparser import ConfigParser from fcntl import flock, LOCK_EX, LOCK_NB, LOCK_UN from logging import basicConfig as log, debug, error, getLogger, warning from logging import ERROR, WARNING, INFO, DEBUG from time import sleep from Debomatic import dom from .build import Build from .commands import Command from .configuration import Parser from .exceptions import DebomaticConffileError, DebomaticError from .modules import Module from .process import Process, ThreadPool, Timer class Debomatic(Parser, Process): def __init__(self): self.daemonize = True self.oneshot = False self.setlog('%(levelname)s: %(message)s') self.conffile = None dom.opts = ConfigParser() dom.dists = ConfigParser() parser = ArgumentParser() parser.add_argument('-c', '--configfile', metavar='file', type=str, nargs=1, help='configuration file for Deb-o-Matic') parser.add_argument('-i', '--interactive', action='store_true', help='launch Deb-o-Matic in interactive mode') parser.add_argument('-o', '--oneshot', metavar='file', type=str, nargs=1, help='launch Deb-o-Matic for one build') parser.add_argument('-q', '--quit', action='store_true', help='terminate Deb-o-Matic processes') args = parser.parse_args() if args.configfile: self.conffile = args.configfile[0] if args.interactive: self.daemonize = False if args.oneshot: self.oneshot = args.oneshot[0] try: self.parse_configfiles() except DebomaticConffileError: exit(1) self.incoming = dom.opts.get('debomatic', 'incoming') if not os.path.isdir(self.incoming): error(_('Unable to access %s directory') % self.incoming) exit(1) dom.pool = ThreadPool(dom.opts.getint('debomatic', 'threads')) dom.periodic_event = Timer(dom.opts.getint('debomatic', 'interval'), self.periodic_event) dom.buildqueue = [] dom.chroots = {} self.logfile = dom.opts.get('debomatic', 'logfile') if args.quit: self.shutdown() exit() self.setlog('%(levelname)s: %(message)s', dom.opts.get('debomatic', 'loglevel')) self.mod_sys = Module() self.mod_sys.execute_hook('on_start') try: self.startup() except DebomaticError: error(_('Another instance is running, aborting')) exit(1) def launcher(self): if self.oneshot: self.queue_files([self.oneshot]) else: self.queue_files() if dom.opts.getboolean('debomatic', 'inotify'): try: self.launcher_inotify() except ImportError: self.launcher_timer() else: self.launcher_timer() def launcher_inotify(self): import pyinotify class PE(pyinotify.ProcessEvent, Debomatic): def __init__(self, parent): self.parent = parent def process_IN_CLOSE_WRITE(self, event): if (event.name.endswith('.changes') or event.name.endswith('commands')): self.parent.queue_files([event.name]) wm = pyinotify.WatchManager() notifier = pyinotify.Notifier(wm, PE(self)) wm.add_watch(self.incoming, pyinotify.IN_CLOSE_WRITE) debug(_('Inotify loop started')) notifier.loop() def launcher_timer(self): debug(_('Timer loop started')) while True: sleep(dom.opts.getint('debomatic', 'sleep')) self.queue_files() def queue_files(self, filelist=None): if filelist: filelist = [os.path.join(self.incoming, os.path.basename(f)) for f in filelist] for f in filelist: if not os.path.isfile(f): filelist.remove(f) else: try: filelist = os.listdir(self.incoming) except OSError: error(_('Unable to access %s directory') % self.incoming) exit(1) for filename in filelist: if filename.endswith('.changes'): with open(os.path.join(self.incoming, filename)) as fd: try: flock(fd, LOCK_EX | LOCK_NB) flock(fd, LOCK_UN) except IOError: pass else: b = Build(changesfile=filename) dom.pool.schedule(b.run) debug(_('Thread for %s scheduled') % filename) elif filename.endswith('.commands'): Command(filename) if self.oneshot: self.shutdown() def setlog(self, fmt, level='info'): loglevels = {'error': ERROR, 'warning': WARNING, 'info': INFO, 'debug': DEBUG} level = level.lower() if level not in loglevels: warning(_('Log level not valid, defaulting to "info"')) level = 'info' self.loglevel = loglevels[level] old_log = getLogger() if old_log.handlers: for handler in old_log.handlers: old_log.removeHandler(handler) log(level=self.loglevel, format=fmt) def periodic_event(self): self.mod_sys.args.opts = dom.opts self.mod_sys.args.directory = self.incoming self.mod_sys.execute_hook('periodic') debomatic-0.40/Debomatic/exceptions.py000066400000000000000000000016131477331507500200230ustar00rootroot00000000000000# Deb-o-Matic # # Copyright (C) 2015-2025 Luca Falavigna # # Author: Luca Falavigna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option), any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. class DebomaticConffileError(Exception): pass class DebomaticError(Exception): pass debomatic-0.40/Debomatic/gpg.py000066400000000000000000000052361477331507500164240ustar00rootroot00000000000000# Deb-o-Matic # # Copyright (C) 2007-2025 Luca Falavigna # # Author: Luca Falavigna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option), any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. import os from fcntl import flock, LOCK_EX, LOCK_NB, LOCK_UN from re import findall, DOTALL from subprocess import Popen, PIPE from Debomatic import dom from .exceptions import DebomaticError class GPG: def __init__(self, file): self._file = file self._error = None if dom.opts.has_option('gpg', 'gpg'): self._gpg = dom.opts.getboolean('gpg', 'gpg') else: self._gpg = False self._sig = None def __enter__(self): self._fd = open(self._file, 'r') flock(self._fd, LOCK_EX | LOCK_NB) return self def __exit__(self, exc_type, exc_value, traceback): flock(self._fd, LOCK_UN) self._fd.close() def _check_signature(self): if dom.opts.has_option('gpg', 'keyring'): self._keyring = dom.opts.get('gpg', 'keyring') if not os.path.isfile(self._keyring): self._keyring = None self._error = _('Keyring not found') raise DebomaticError gpgresult = Popen(['gpgv', '--keyring', self._keyring, self._file], stderr=PIPE).communicate()[1] signature = findall(b'Good signature from "(.*) <(.*)>.*"', gpgresult) if signature: self._sig = signature[0] else: self._error = _('No valid signatures found') raise DebomaticError def _strip_signature(self): with open(self._file, 'r') as fd: data = fd.read() with open(self._file, 'w') as fd: try: fd.write(findall('\n\n(.*?)\n\n?-', data, DOTALL)[0]) except IndexError: pass def check(self): if self._gpg: self._check_signature() if self._sig: self._strip_signature() return self._sig def error(self): return self._error debomatic-0.40/Debomatic/modules.py000066400000000000000000000233401477331507500173130ustar00rootroot00000000000000# Deb-o-Matic # # Copyright (C) 2008-2009 David Futcher # Copyright (C) 2012-2025 Luca Falavigna # # Author: David Futcher # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option), any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. import os from glob import glob from logging import debug from sys import path from graphlib import TopologicalSorter as TS, CycleError from Debomatic import dom from .process import ModulePool class ModuleArgs(): def __init__(self): self.opts = dom.opts self.action = None self.architecture = None self.directory = None self.distribution = None self.dists = None self.dsc = None self.files = None self.package = None self.success = False self.uploader = None self.hostarchitecture = None class Module(): def __init__(self): self.args = ModuleArgs() self._use_modules = False if dom.opts.has_option('modules', 'modules'): if dom.opts.getboolean('modules', 'modules'): self._use_modules = True if dom.opts.has_option('modules', 'path'): mod_path = dom.opts.get('modules', 'path') for p in mod_path.split(':'): path.append(p) else: self._use_modules = False modules = set() try: for p in mod_path.split(':'): modules |= set([os.path.splitext(os.path.basename(m))[0] for m in glob(os.path.join(p, '*.py'))]) except OSError: self._use_modules = False if not modules: self._use_modules = False if self._use_modules: self._instances = {} for module in modules: try: _class = 'DebomaticModule_%s' % module _mod = __import__(module) self._instances[module] = getattr(_mod, _class)() self._instances[module]._modulename = module self._instances[module]._disabled = False self._instances[module]._depends = set() self._instances[module]._after = set() debug(_('Module %s loaded') % module) except (NameError, SyntaxError): pass self._set_relationships() self._set_blacklisted() self._disable_modules() debug(_('Modules will be executed in this order: %s') % ', '.join([m for m in self._sort_modules() if not self._instances[m]._disabled])) def _disable_modules(self): for module in self._sort_modules(): missing = set() missing_after = set() for dep in self._instances[module]._depends: if dep in self._instances: if self._instances[dep]._disabled: missing.add(dep) else: missing.add(dep) for dep in self._instances[module]._after: if dep in self._instances: if self._instances[dep]._disabled: missing_after.add(dep) else: missing_after.add(dep) if missing: self._instances[module]._disabled = True debug(_('%(mod)s module disabled, needs %(missing)s') % {'mod': module, 'missing': ', '.join(missing)}) if missing_after: for dep in missing_after: self._instances[module]._after.remove(dep) def _launcher(self, hook): func, args, module, hookname, dependencies = hook debug(_('Executing hook %(hook)s from module %(mod)s') % {'hook': hookname, 'mod': module}) func(args) def _set_blacklisted(self): blist = set() if dom.opts.has_option('modules', 'blacklist'): _blacklist = dom.opts.get('modules', 'blacklist') blist = set(_blacklist.split()) for module in self._instances: if module in blist: self._instances[module]._disabled = True debug(_('Module %s is blacklisted') % module) def _set_relationships(self): for module in self._instances: try: deps = getattr(self._instances[module], 'dependencies') if deps: for dep in deps: self._instances[module]._depends.add(dep) except AttributeError: pass try: afters = getattr(self._instances[module], 'after') if afters: for after in afters: self._instances[module]._after.add(after) except AttributeError: pass try: befores = getattr(self._instances[module], 'before') if befores: for before in befores: if before in self._instances: self._instances[before]._after.add(module) except AttributeError: pass try: if getattr(self._instances[module], 'first'): deps = (self._instances[module]._depends.union( self._instances[module]._after)) if deps: self._instances[module]._disabled = True debug(_('Cannot execute %(mod)s as %(order)s module, ' 'dependencies found: %(deps)s') % {'mod': module, 'order': 'first', 'deps': ', '.join(deps)}) else: for instance in self._instances: self._instances[instance]._after.add(module) except AttributeError: pass try: if getattr(self._instances[module], 'last'): deps = [m for m in self._instances if module in self._instances[m]._after or module in self._instances[m]._depends] if deps: self._instances[module]._disabled = True debug(_('Cannot execute %(mod)s as %(order)s module, ' 'dependencies found: %(deps)s') % {'mod': module, 'order': 'last', 'deps': ', '.join(deps)}) else: for instance in self._instances: self._instances[module]._after.add(instance) except AttributeError: pass if module in self._instances[module]._depends: self._instances[module]._depend.remove(module) if module in self._instances[module]._after: self._instances[module]._after.remove(module) def _sort_modules(self): modules = {} for instance in self._instances: if not self._instances[instance]._disabled: _deps = self._instances[instance]._depends _afters = self._instances[instance]._after modules[instance] = _deps.union(_afters) try: return [m for m in TS(modules).static_order() if m in self._instances] except CycleError as e: circular = set(e.args[1]) for instance in circular: self._instances[instance]._disabled = True debug(_('Circular dependencies found, disabled modules: %s') % ', '.join(circular)) return self._sort_modules() def execute_hook(self, hook): hooks = [] if self._use_modules: for module in self._sort_modules(): if self._instances[module]._disabled: continue dependencies = set() instance = self._instances[module] for dep in instance._depends.union(instance._after): if dep in self._instances: if (dep in instance._after and self._instances[dep]._disabled): continue try: if getattr(self._instances[dep], hook): dependencies.add(dep) except AttributeError: continue try: hooks.append((getattr(instance, hook), self.args, module, hook, dependencies)) except AttributeError: pass if dom.opts.has_option('modules', 'threads'): workers = dom.opts.getint('modules', 'threads') else: workers = 1 debug(_('%s hooks launched') % hook) modulepool = ModulePool(workers) for hk in hooks: modulepool.schedule(self._launcher, hk) modulepool.shutdown() debug(_('%s hooks finished') % hook) debomatic-0.40/Debomatic/process.py000066400000000000000000000151041477331507500173200ustar00rootroot00000000000000# Deb-o-Matic # # Copyright (C) 2011-2025 Luca Falavigna # # Author: Luca Falavigna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option), any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. import os from concurrent.futures import as_completed, ThreadPoolExecutor from atexit import register as on_exit from fcntl import flock, LOCK_EX, LOCK_NB, LOCK_UN from hashlib import sha256 from logging import basicConfig as log, error, getLogger, info from signal import signal, SIGINT, SIGTERM from sys import stdin, stdout, stderr from threading import Timer as _Timer from time import sleep from Debomatic import dom from .exceptions import DebomaticError class Process: def __init__(self): pass def _daemonize(self): try: pid = os.fork() if pid > 0: exit() except OSError as e: error(_('Error entering daemon mode: %s') % e.strerror) exit() os.chdir('/') os.setsid() os.umask(0) stdout.flush() stderr.flush() si = open(os.devnull, 'r') so = open(os.devnull, 'a+') se = open(os.devnull, 'a+') os.dup2(si.fileno(), stdin.fileno()) os.dup2(so.fileno(), stdout.fileno()) os.dup2(se.fileno(), stderr.fileno()) on_exit(self._quit) old_log = getLogger() if old_log.handlers: for handler in old_log.handlers: old_log.removeHandler(handler) log(filename=self.logfile, level=self.loglevel, format='%(asctime)s %(levelname)-8s %(message)s') self._set_pid() def _get_pid(self): self.pidfile = ( f'/tmp/debomatic-{self._sha256(self.incoming)}') try: with open(self.pidfile, 'r') as fd: self.pid = int(fd.read().strip()) except (IOError, ValueError): self.pid = None def _lock(self, wait=False): self.fd = None self.lockfile = ( f'/tmp/debomatic-{self._sha256(self.incoming)}.lock') try: self.fd = open(self.lockfile, 'w') flags = LOCK_EX if wait else LOCK_EX | LOCK_NB flock(self.fd, flags) except (OSError, IOError) as ex: if self.fd: self.fd.close() raise ex def _notify_systemd(self): try: import systemd.daemon systemd.daemon.notify('READY=1') except (ImportError, SystemError): pass def _quit(self, signum=None, frame=None): info(_('Waiting for threads to complete...')) dom.periodic_event.cancel() dom.pool.shutdown() self.mod_sys.execute_hook('on_quit') self._unlock() os.unlink(self.pidfile) exit() def _set_pid(self): self.pidfile = ( f'/tmp/debomatic-{self._sha256(self.incoming)}') pid = str(os.getpid()) with open(self.pidfile, 'w+') as fd: fd.write('%s\n' % pid) def _sha256(self, value): lock_sha = sha256() lock_sha.update(value.encode('utf-8')) return lock_sha.hexdigest() def _unlock(self): if self.fd: flock(self.fd, LOCK_UN) self.fd.close() self.fd = None if os.path.isfile(self.lockfile): os.unlink(self.lockfile) def shutdown(self): self._get_pid() if not self.pid: return info(_('Waiting for threads to complete...')) try: dom.periodic_event.cancel() os.kill(self.pid, SIGTERM) self._lock(wait=True) except OSError as err: err = str(err) if err.find('No such process') > 0: if os.path.exists(self.pidfile): os.unlink(self.pidfile) else: error(err) def startup(self): try: self._lock() except (OSError, IOError): error(_('Another instance is running, aborting')) raise DebomaticError self._set_pid() signal(SIGINT, self._quit) signal(SIGTERM, self._quit) if self.daemonize: self._daemonize() self._notify_systemd() dom.periodic_event.start() self.launcher() class ModulePool: def __init__(self, workers=1): self._jobs = {} self._pool = ThreadPoolExecutor(workers) def _launch(self, func, hook, dependencies): if dependencies: for dependency in dependencies: while True: if dependency in self._jobs.keys(): self._jobs[dependency].result() break else: sleep(0.1) func(hook) def schedule(self, func, hook): innerfunc, args, module, hookname, dependencies = hook job = self._pool.submit(self._launch, func, hook, dependencies) self._jobs[module] = job def shutdown(self): for job in as_completed([self._jobs[j] for j in self._jobs]): job.result() self._pool.shutdown() class ThreadPool: def __init__(self, workers=1): self._jobs = [] self._pool = ThreadPoolExecutor(workers) def _finish(self, job): try: self._jobs.remove(job) except ValueError: pass try: e = job.exception() if e: raise e except Exception as e: error(str(e), exc_info=True) def schedule(self, func): job = self._pool.submit(func) job.add_done_callback(self._finish) self._jobs.append(job) def shutdown(self): for job in as_completed(self._jobs): job.result() self._pool.shutdown() class Timer(_Timer): def run(self): while not self.finished.is_set(): self.finished.wait(self.interval) if not self.finished.is_set(): self.function(*self.args, **self.kwargs) self.finished.set() debomatic-0.40/debomatic000077500000000000000000000016261477331507500152620ustar00rootroot00000000000000#!/usr/bin/python3 # Deb-o-Matic # # Copyright (C) 2007-2025 Luca Falavigna # # Author: Luca Falavigna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option), any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. from Debomatic import debomatic if __name__ == "__main__": debomatic.Debomatic() debomatic-0.40/docs/000077500000000000000000000000001477331507500143305ustar00rootroot00000000000000debomatic-0.40/docs/Makefile000066400000000000000000000035621477331507500157760ustar00rootroot00000000000000#!/usr/bin/make # Copyright (C) 2012-2025 Luca Falavigna # # Author: Luca Falavigna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option), any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = _build PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .PHONY: help clean latex latexpdf help: @echo "Please use \`make ' where is one of" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " latexpdf to make LaTeX files and run them through pdflatex" clean: -rm -rf $(BUILDDIR) latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @echo "Run \`make' in that directory to run these through (pdf)latex" \ "(use \`make latexpdf' here to do that automatically)." latexpdf: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through pdflatex..." $(MAKE) -C $(BUILDDIR)/latex all-pdf @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." debomatic-0.40/docs/conf.py000066400000000000000000000030261477331507500156300ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # Copyright (C) 2012-2025 Luca Falavigna # # Author: Luca Falavigna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option), any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. # # Deb-o-Matic documentation build configuration file extensions = [] templates_path = ['_templates'] source_suffix = '.rst' master_doc = 'index' project = 'Deb-o-Matic' copyright = '2007-2025, Luca Falavigna' version = '0.40' release = '0.40' exclude_patterns = ['_build'] pygments_style = 'sphinx' html_theme = 'default' html_static_path = ['_static'] html_use_index = True htmlhelp_basename = 'Deb-o-Maticdoc' latex_documents = [ ('index', 'Deb-o-Matic.tex', 'Deb-o-Matic Documentation', 'Luca Falavigna', 'manual', 'True')] latex_elements = { 'classoptions': ',oneside', 'babel': '\\usepackage[english]{babel}'} man_pages = [ ('index', 'deb-o-matic', 'Deb-o-Matic Documentation', ['Luca Falavigna'], 1)] debomatic-0.40/docs/configuration.rst000066400000000000000000000245341477331507500177410ustar00rootroot00000000000000Configuration ============= Configuration file ------------------ Deb-o-Matic configuration file is the most important file within Deb-o-Matic infrastructure. It defines almost every option needed by Deb-o-Matic. It is divided into five sections: ``debomatic``, which contains the general options needed for Deb-o-Matic to work; ``distributions``, which contains all the details related to the distributions Deb-o-Matic can build package for; ``chroots``, which contains the options related to the creation of the chroots used to build packages; ``gpg``, which contains the options related to GPG signature checking; ``modules``, which contains the options related to module handling. Other sections are optionally defined by each single module, their details will be discussed in the :doc:`modules` section. .. CAUTION:: Configuration file must be formatted with `Python ConfigParser`_ syntax. debomatic section ................. This section is mandatory, Deb-o-Matic refuses to start if one of these options is missing from the configuration file. Also, Deb-o-Matic needs to be restarted to pick any change to one of these options. * ``incoming`` This option indicates the directory where Deb-o-Matic expects to find source packages to build, and in which it will store chroots, build logs, and resulting packages. Suggested value: ``/incoming`` .. CAUTION:: Make sure chosen directory exists before launching Deb-o-Matic, otherwise it will refuse to start. * ``architecture`` This option indicates the architecture to build package for. To build packages for the same architecture of the running system, ``system`` can be used instead of specifying the exact one. Suggested value: ``system`` * ``threads`` This option indicates the maximum concurrent builds that can be executed. If more build tasks are scheduled, they will be blocked until a slot becomes available again. More concurrent builds require more CPU cycles, so you may want to try different configurations to fit your needs. ``threads`` takes an integer as parameter. Suggested value: ``3`` * ``inotify`` This option indicates whether to enable inotify support, or not. inotify will notify Deb-o-Matic about the availability of a new task, and will immediately start a new thread according to the requested task. If ``python3-pyinotify`` is not available, Deb-o-Matic will fall back to a timer-based method, where new tasks will be analyzed periodically. ``inotify`` takes True or False as parameter. Suggested value: ``True`` * ``sleep`` This option indicates the number of seconds between two consecutive checks for new packages or commands to process. This option is only useful if inotify support is disabled, or is not available. ``sleep`` takes an integer as parameter. Suggested value: ``60`` * ``interval`` This option indicates the number of seconds between two consecutive triggers for scheduled actions performed by modules. ``interval`` takes an integer as parameter. Suggested value: ``3600`` * ``logfile`` This option indicates which file will be used to store information and warning messages issued by Deb-o-Matic during its execution. Suggested value: ``/var/log/debomatic.log`` * ``loglevel`` This option indicates which kind of debug messages will be displayed. There are four levels: ``error``, ``warning``, ``info``, and ``debug``. Suggested value: ``info`` distributions section ..................... This section is mandatory, Deb-o-Matic refuses to start if one of these options is missing from the configuration file. Also, Deb-o-Matic needs to be restarted to pick any change to one of these options. * ``list`` This option indicates the path of the distribution configuration file. More on those files will be discussed in the `Distributions file section`_. Suggested value: ``/etc/debomatic/distributions`` .. CAUTION:: Make sure chosen directory exists before launching Deb-o-Matic, otherwise it will refuse to start. * ``blacklist`` This option indicates a list of distributions that are not allowed to accept new packages to build. Files targeted for a blacklisted distribution will be automatically deleted. Option must define a space-separated distribution names matching the ones listed in the `Distributions file section`_. Suggested value: ``(blank field)`` * ``mapper`` This option indicates a list of distributions that, even if they are not defined by a distribution file (see `Distributions file section`_), can build packages on top of another distribution. This is particularly useful to indicate distribution aliases (such as ``sid <=> unstable``) or subsets (such as ``vivid-proposed => vivid``). Option must define a `Python dictionary`_ where keys are the distributions indicated by the packages, and values are the distributions on which build packages upon. Suggested value: ``{'sid': 'unstable'}`` chroots section ............... This section is mandatory, Deb-o-Matic refuses to start if one of these options is missing from the configuration file. Also, Deb-o-Matic needs to be restarted to pick any change to one of these options. * ``commands`` This option indicates the directory where sbuild commands are stored. Commands are executable scripts which are processed by sbuild during various build phases. Please refer to the sbuild (1) man page for additional details. At the moment, Deb-o-Matic provides a script to disable Internet connection within the chroot on Linux systems to avoid accessing remote resources during the build phase, and another one to increase the speed of unpacking of the dependencies in the chroots. Suggested value: ``/usr/share/debomatic/sbuildcommands`` .. CAUTION:: This directory needs to be bind mounted in the chroot for the scripts to be launched correctly. It is possible to do so by adjusting the sbuild configuration file. crossbuild section .................. This section is optional, Deb-o-Matic will start normally if this section is missing in the configuration file. Also, Deb-o-Matic needs to be restarted to pick any change to one of these options. * ``crossbuild`` This option indicates whether to enable cross-build support, or not. * ``hostarchitecture`` This option indicates which host architecture to use when building source packages. .. CAUTION:: The architecture must have cross-compilation at compiler lever, otherwise it will not be possible to cross-compile source packages. dpr section ........... This section is optional, Deb-o-Matic will start normally if this section is missing in the configuration file. Also, Deb-o-Matic needs to be restarted to pick any change to one of these options. * ``dpr`` This option indicates whether to enable private repositories, or not. Suggested value: ``False`` * ``prefix`` This option indicates the common prefix of all private repositories. Suggested value: ``dpr`` * ``repository`` This option indicates the APT string of a local APT repository which is added at build time, useful in combination with the Repository module. The string must contain two ``%%(dist)s`` arguments which allows to specify dynamically the private repository name, for example: *deb http://debomatic.repository/debomatic/%%(dist)s %%(dist)s main* gpg section ........... This section is mandatory, Deb-o-Matic refuses to start if one of these options is missing from the configuration file. Also, Deb-o-Matic needs to be restarted to pick any change to one of these options. ``gnupg`` package is required for these options to be effective. * ``gpg`` This option indicates whether to enable signature checking support, or not. If enabled, Deb-o-Matic will delete unsigned files and files with signatures not available in its keyring. ``gpg`` takes True or False as parameter. Suggested value: ``False`` * ``keyring`` This option indicates the gnupg keyring file in which Deb-o-Matic will look for valid and trusted GPG keys. Suggested value: ``/etc/debomatic/debomatic.gpg`` .. CAUTION:: Make sure keyring file exists and is populated with trusted keys if GPG support is enabled, otherwise no tasks will be processed. modules section ............... This section is mandatory, Deb-o-Matic refuses to start if one of these options is missing from the configuration file. Also, Deb-o-Matic needs to be restarted to pick any change to one of these options. More on modules handling will be discussed in the :doc:`modules` section. * ``modules`` This option indicates whether to enable module loading, or not. ``modules`` takes True or False as parameter. Suggested value: ``True`` * ``path`` This option indicates the directory where Deb-o-Matic expects to find modules. Multiple directories can be listed, separated with a colon (``:``). Suggested value: ``/usr/share/debomatic/modules`` * ``threads`` This option indicates how many modules Deb-o-Matic should launch in parallel. ``threads`` takes an integer as parameter. Suggested value: ``5`` * ``blacklist`` This option indicates a list of modules that are not allowed to be executed during build process. Option must define a space-separated module names matching the ones listed in the :doc:`modules` section. Suggested value: ``AutoPkgTest Blhc Lintian Mailer Piuparts`` Distributions file ------------------ This file is populated by sections, each of them named after a distribution to build packages for. Every section can define five options. * ``suite`` This option indicates the base suite to create the chroot for. Normally, it is equal to its distribution, but there are some exceptions (for instance, experimental's suite is unstable). This option is mandatory. * ``mirror`` This option indicates the mirror site which contains the primary package archive of the distribution. This option is mandatory. * ``components`` This option contains a space-delimited list of components to use. This option is mandatory. * ``extramirrors`` This option indicates additional mirrors to add in the chroot. More than one additional mirror can be defined, separated by a newline. This option is optional. * ``extrapackages`` This option contains a space-delimited list of additional packages to install in the chroot during its creation. This option is optional. .. Links .. _Python ConfigParser: http://docs.python.org/library/configparser.html .. _Python dictionary: http://docs.python.org/library/stdtypes.html#mapping-types-dict .. _Distributions file section: #distributions-file debomatic-0.40/docs/debomatic.1000066400000000000000000000026241477331507500163450ustar00rootroot00000000000000.TH debomatic 1 2015-01-15 "debomatic" .SH NAME debomatic \- Automatic build machine for Debian source packages .SH SYNOPSIS .B debomatic \fB-c|--config\fR \fIconffile\fR [\fB\-i|--interactive\fR] [\fB-q|--quit\fR] .SH DESCRIPTION This tool provides a simple build machine for Debian source packages. It is designed to be very simple to use and self-sufficient during package build process and chroot updates. It support almost every Debian-based distribution, given its repositories follow standard Debian repository structure. .PP sbuild and an active Internet connection (broadband is suggested) are required in order for debomatic to work properly. .PP You have to run it using root privileges due to the chroot creation process. .SH OPTIONS .TP .B -c, --config\fR \fIconffile\fR You have to specify a configuration file for debomatic to work. .TP .B -i, --interactive By default, debomatic runs in full daemon mode and it detaches itself from its parent. If you do not want this, you can use this option and debomatic will run in interactive mode. .TP .B -q, --quit Terminate running debomatic instance or remove obsolete locks left. .SH COPYRIGHT This manual page is Copyright 2007-2025 Luca Falavigna . Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License, Version 3 or any later version published by the Free Software Foundation. debomatic-0.40/docs/index.rst000066400000000000000000000002441477331507500161710ustar00rootroot00000000000000.. include:: introduction.rst .. toctree:: :hidden: :maxdepth: 2 introduction requisites installation configuration run upload modules debomatic-0.40/docs/installation.rst000066400000000000000000000033411477331507500175640ustar00rootroot00000000000000Installation ============ Installation from Debian/Ubuntu repository ------------------------------------------ Deb-o-Matic is available in Debian and Ubuntu repositories, so you can launch the following command to install Deb-o-Matic on your system: *sudo apt-get install debomatic* Depending on your Debian or Ubuntu release, you could not have the latest version. It is usually suggested to use the latest one to obtain new features and bugfixes. You may want to check `Deb-o-Matic home page`_ from time to time to see whether a new release is available. Installation of the release tarball ----------------------------------- If the version in Debian/Ubuntu repositories is not the one you are looking for, you can download a release tarball from `Deb-o-Matic download page`_. Unpack the release tarball, enter the new created directory, and launch the following command: *sudo python3 setup.py install* If everything went smoothly, you should be able to launch debomatic from your terminal's command line. Installation of Git snapshots ----------------------------- If you want to test bleeding-edge features, or want to be always up-to-date with the latest and greatest Deb-o-Matic versions, you can download development snapshots directly from upstream `Git`_ repository. Open a terminal and launch the following command: *git clone https://github.com/debomatic/debomatic.git* You can follow the instructions described in the `previous section`_ to install Deb-o-Matic on your system. .. Links .. _Deb-o-Matic home page: https://debomatic.github.io/ .. _Deb-o-Matic download page: https://github.com/debomatic/debomatic/releases .. _Git: https://github.com/debomatic/debomatic .. _previous section: #installation-of-the-release-tarball debomatic-0.40/docs/introduction.rst000066400000000000000000000033521477331507500176060ustar00rootroot00000000000000Deb-o-Matic =========== What is Deb-o-Matic? --------------------- Deb-o-Matic is an easy to use utility to build Debian source packages, meant to help developers to automate the building of their packages with a tool that requires limited user interaction and a simple configuration. It provides some useful features such as automatic chroot creation, rebuild of source packages, post-build checks, and much more. It is also extendible with modules that are loaded and executed during the build phases. Why Deb-o-Matic? ---------------- When the author started to contribute to the Debian and Ubuntu development, he was running a 10-year-old PC and had a poor network connectivity. Downloading lots of packages had always been a nightmare, `Canonical's PPAs`_ were always busy compiling other packages because of the limited resources invested at the time, and `wanna-build`_ was (and still is) too complex to set up for relatively simple workflows. A brand new software was created to help building source packages to avoid the burden of the compilation, without wasting too much time configuring complex software to work. Deb-o-Matic was born! A group of Debian and Ubuntu developers started to use it as their primary build machine to avoid playing with sbuild and long builds. Some of them still use Deb-o-Matic to build their packages. Over time, Deb-o-Matic has been used by some FLOSS projects too. For example, Scilab Enterprises uses Deb-o-Matic to build Scilab in a transparent and automatic way. Every 5 minutes, a cronjob checks if any new commit happened and start a built process through Deb-o-Matic. .. Links .. _Canonical's PPAs: https://help.launchpad.net/Packaging/PPA .. _wanna-build: https://anonscm.debian.org/cgit/mirror/wanna-build.git/ debomatic-0.40/docs/modules.rst000066400000000000000000000142171477331507500165370ustar00rootroot00000000000000Modules ======= Autopkgtest ----------- This module allows adt-run to be executed if source package declares a Testsuite against autopkgtest. It creates a report in the same directory of the resulting files. Parameters .......... .. CAUTION:: These parameters must be listed under the ``autopkgtest`` section. Make sure you create it in your configuration file. * ``options`` This option indicates the extra options to pass to adt-run. Suggested value: ``--no-built-binaries`` Blhc ---- This module allows blhc to be executed, checking the build log of built packages for missing hardening flags. In order for this module to work properly, ``blhc`` package must be installed. Parameters .......... .. CAUTION:: These parameters must be listed under the ``blhc`` section. Make sure you create it in your configuration file. * ``options`` This option indicates the extra options to pass to blhc. Suggested value: ``--all`` BuildCleaner ------------ This modules deletes obsolete files created during previous builds to avoid picking obsolete files by mistake. It currently deletes these files: * \*.deb * \*.udeb * \*.ddeb * \*.gz * \*.bz2 * \*.xz * \*.dsc * \*.build * \*.contents * \*.lintian * \*.piuparts * \*.changes * \*.autopkgtest * \*.bhlc Parameters .......... .. CAUTION:: These parameters must be listed under the ``buildcleaner`` section. Make sure you create it in your configuration file. * ``testbuild`` This option indicates whether to remove binary packages immediately after build has completed. Useful for test builds, where it is not important to keeo binaries for a long period of time. Suggested value: ``False`` Contents -------- This module scans binary packages and stores their content in a ``.contents`` file created in the same directory of the resulting files. In order for this module to work properly, ``debc`` tool from ``devscripts`` must be available. DateStamp --------- This module displays timestamps of when a package started to build, when it finished, and the build elapsed time. Timestamps are stored in a ``.datestamp`` file created in the same directory of the resultinf files. Lintian ------- This module allows lintian to be executed, checking the built packages for errors and warnings, and creates a report in the same directory of the resulting files. In order for this module to work properly, ``lintian`` package must be installed. Parameters .......... .. CAUTION:: These parameters must be listed under the ``lintian`` section. Make sure you create it in your configuration file. * ``options`` This option indicates the extra options to pass to lintian. Suggested value: ``-iIE --pedantic`` Mailer ------ This module allows to send emails about the status of the builds. Body of the email will contain an excerpt of the build log to easily see failures or potential problems. .. CAUTION:: Make sure signature checking support is enabled before trying to use this module, otherwise it will not work as it relies on the address provided in the GPG key to obtain the email address to send messages to. Parameters .......... .. CAUTION:: These parameters must be listed under the ``mailer`` section. Make sure you create it in your configuration file. * ``sender`` This option indicates the email address used to send the emails from. * ``server`` This option indicates the SMTP server used to send the emails. * ``port`` This option indicates the SMTP port on which the SMTP server listens to. * ``tls`` This option indicates whether to enable TLS mode, or not. * ``authrequired`` This option indicates whether the SMTP server requires authentication, or not. * ``user`` This option indicates the user name to be passed to the SMTP server. * ``pass`` This option indicates the password to be passed to the SMTP server. * ``success`` This option indicates the template to be used to report successful builds. * ``failure`` This option indicates the template to be used to report failed builds. * ``lintian`` This option indicates whether the lintian log is to be attached after the build log, or not. Piuparts -------- This module allows piuparts to be executed, checking the built packages for potential problems, and creates a report in the same directory of the resulting files. In order for this module to work properly, ``piuparts`` package must be installed. Parameters .......... .. CAUTION:: These parameters must be listed under the ``piuparts`` section. Make sure you create it in your configuration file. * ``options`` This option indicates the extra options to pass to piuparts. Suggested value: ``--log-level=info`` RemoveChroots ------------- This module allows to remove chroots after a certain amount of days. Parameters .......... .. CAUTION:: These parameters must be listed under the ``removechroots`` section. Make sure you create it in your configuration file. * ``days`` This option indicates the number of days after which chroots are removed. RemovePackages -------------- This module allows to remove built packages after a certain amount of days. Parameters .......... .. CAUTION:: These parameters must be listed under the ``removepackages`` section. Make sure you create it in your configuration file. * ``days`` This option indicates the number of days after which build packages are removed from the pool directory. Repository ---------- This module allows the creation of a simple repository of Debian binary packages, which is refreshed each time a build is performed, allowing to build packages build-depending on previously built ones. In order for this module to work properly, ``apt-ftparchive`` tool from ``apt-utils`` package must be available. Parameters .......... .. CAUTION:: These parameters must be listed under the ``repository`` section. Make sure you create it in your configuration file. * ``gpgkey`` This option indicates the GPG ID used to sign the Release file of the repository. * ``keyring`` This option indicates the path where to look for the GPG keyring used to sign the Release file of the repository. SourceUpload ------------ This module allows the creation of a .sourceupload.changes file to be used to upload source-only uploads to the Debian archive. debomatic-0.40/docs/requisites.rst000066400000000000000000000021131477331507500172540ustar00rootroot00000000000000Requisites ========== Build and installation requirements ----------------------------------- In order to build and install Deb-o-Matic, the following packages are required: * python3 (>= 3.9) The following packages are required to install documentation and translations: * python3-sphinx * texlive-latex-base * texlive-latex-recommended * texlive-fonts-recommended * texlive-latex-extra * gettext * latexmk Runtime requirements -------------------- In order to be able to run Deb-o-Matic, the following packages are required: * python3 (>= 3.9) * sbuild (>= 0.67.0-1) * mmdebstrap To enable additional features, you may want to install these packages: * python3-pyinotify (>= 0.8.6) * gpgv (>= 2.1) * debian-archive-keyring * ubuntu-archive-keyring or ubuntu-keyring * lintian * piuparts (>= 1.5.0) * autopkgtest (>= 4.0) * blhc * devscripts * apt-utils * gnupg (>= 2.1) An Internet connection is also required, broadband access is recommended because underlying programs will fetch a lot of megabytes from remote locations in order to create the chroots or satisfy build dependencies. debomatic-0.40/docs/run.rst000066400000000000000000000065411477331507500156740ustar00rootroot00000000000000Run Deb-o-Matic =============== Launch Deb-o-Matic ------------------ Deb-o-Matic needs root privileges to be executed, otherwise it refuses to start. In order to launch it, you can use the following command: *sudo debomatic -c debomatic.conf* with ``debomatic.conf`` being the configuration file as described in the :doc:`configuration` section. Make sure this file exists, otherwise Deb-o-Matic will refuse to start. Interactive mode ................ Deb-o-Matic will try to enter daemon mode automatically. If that is not possible, Deb-o-Matic will be executed in interactive mode, and will be bound to the shell that executed it, as a regular process. It is also possible to force interactive mode by passing ``-i`` or ``--interactive`` option while invoking ``debomatic`` command: *sudo debomatic -c debomatic.conf -i* This is particularly useful for debugging purposes. Oneshot mode ............ Deb-o-Matic will try to build all files found in the ``incoming`` directory. Alternatively, it is possible to attempt to build a single file by passing ``-o`` or ``--oneshot`` option while invoking ``debomatic`` command, following by the file name of the package to build, which must be located in the ``incoming`` directory: *sudo debomatic -c debomatic.conf -o package_version_source.changes* Stop Deb-o-Matic ---------------- In order to stop Deb-o-Matic, you should pass ``-q`` or ``--quit`` option to ``debomatic``: *sudo debomatic -c debomatic.conf -q* Deb-o-Matic will not terminate child processes immediately, but will wait for them to end first, so it could take a while to completely stop a Deb-o-Matic instance. .. CAUTION:: Deb-o-Matic uses a rather strong locking mechanism, so it is not recommended to terminate debomatic process with ``kill`` command. Using service command --------------------- If you installed Deb-o-Matic using Debian package, you could start, stop, and restart Deb-o-Matic with the following commands, respectively: *sudo service debomatic start* *sudo service debomatic stop* *sudo service debomatic restart* You will need to adjust configuration stored in ``/etc/default/debomatic`` file to manage Deb-o-Matic with this method, though. In particular, you will have to set ``DEBOMATIC_AUTOSTART`` variable to 1. Service configuration ..................... In order to start Deb-o-Matic with ``service`` command, you must adjust some parameters defined in ``/etc/default/debomatic`` file. * ``DEBOMATIC_AUTOSTART`` This option indicates whether to execute Deb-o-Matic at system boot. Default value is set to ``0`` to avoid accidental executions without a sane configuration. It must be set to ``1`` in order to launch Deb-o-Matic. * ``DEBOMATIC_CONFIG_FILE`` This option indicates the configuration file Deb-o-Matic is going to use. * ``DEBOMATIC_OPTS`` This option allows to pass extra options to Deb-o-Matic. Using systemctl command ----------------------- If you installed Deb-o-Matic using Debian package, and your system does use of systemd as default init, you could start, stop, and restart Deb-o-Matic with the following commands, respectively: *sudo systemctl start debomatic* *sudo systemctl stop debomatic* *sudo systemctl restart debomatic* systemd unit file is configured to look for ``/etc/debomatic/debomatic.conf`` as its default configuration file. You can change this path by providing a systemd override file. debomatic-0.40/docs/upload.rst000066400000000000000000000167451477331507500163630ustar00rootroot00000000000000Upload packages and commands ======================= Prepare source packages ----------------------- Deb-o-Matic will take into account both source only uploads and source and binary uploads, while it will discard binary only uploads. Source only uploads are recommended to avoid waste of bandwidth, so make sure you create packages by passing ``-S`` flag to ``debuild`` or ``dpkg-buildpackage``. Then, packages must be copied or uploaded into the directory specified by the ``incoming`` option in the configuration file to let Deb-o-Matic process them. In order to save bandwidth while uploading your packages, you could want to avoid including upstream tarball in the .changes file if it is already available in the distribution mirrors, Deb-o-Matic will fetch it automatically for you. In order to do so, you have to pass ``-sd`` flag to ``debuild`` or ``dpkg-buildpackage``. Multiple uploads of the same packages are allowed, Deb-o-Matic will overwrite previous builds with new, fresh files. User-defined fields ................... sbuild uses several resolvers to determine and install build-dependencies inside the chroots. Sometimes it is desirable to override the default resolver to perform some advanced tasks (e.g. using a specific version of a package which apt-based resolver cannot pick automatically. In order to do so, you must define the ``XC-Debomatic-Resolver`` in the source stanza of your ``control file``. For instance, if you want to use the aptitude resolver, you must use the following syntax: *XC-Debomatic-Resolver: aptitude* Prepare command files --------------------- Deb-o-Matic provides an interface to perform specific tasks into the Deb-o-Matic ``incoming`` directory such as removing uploaded files or rebuilding packages. These operations are handled by commands stored in ``.commands`` files, and uploaded into Deb-o-Matic ``incoming`` directory by using ``dcut`` utility, or by hand. Using dcut is usually simpler, just launch the following command: *dcut -U mydebomatic commandfile.commands* where ``mydebomatic`` is a dput host as described in dput.cf (5) man page, and ``commandfile.commands`` is the file containing the commands to be executed by Deb-o-Matic. Multiple commands can be stored in a single ``.commands`` file, but it is usually safer to issue a single command per file. .. CAUTION:: If signature checking support is enabled, .commands files must be signed by a known key, otherwise they will be deleted and no action will be taken. Remove packages ............... It could happen some files are kept into Deb-o-Matic ``incoming`` directory, and you would like to remove them. In order to do so, you must use the ``rm`` command: *echo "rm foo\*" > foo.commands* where ``foo*`` is a regular expression matching the files you want to remove. Rebuild packages ................ You could want to rebuild a package already in the mirrors to see whether it compiles with newer packages, to analyze its content, and so on. In order to do so, you must use the ``rebuild`` command: *echo "rebuild foo_version dist" > foo.commands* where ``foo`` is the name of the source package you want to rebuild, ``version`` is the version of the package you want to rebuild, and ``dist`` is the distribution which rebuild the package for. Deb-o-Matic can also rebuild packages available in other distributions. The syntax is similar, you just have to indicate which distribution to pick packages from: *echo "rebuild foo_version dist origin" > foo.commands* where ``origin`` is the distribution to pick packages from. .. CAUTION:: Make sure packages are available in the distribution mirrors, otherwise they cannot be downloaded and processed by Deb-o-Matic. Porter uploads .............. You could want to prepare a porter upload, a binary-only upload which generates architecture dependent binaries only. Additional information can be found in `Debian Developer's Reference`_. In order to do so, you must use the ``porter`` command: *echo "porter foo_version dist John Doe " > foo.commands* where ``foo`` is the name of the source package you want to rebuild, ``version`` is the version of the package you want to rebuild, ``dist`` is the distribution which rebuild package for, and the rest of the string is the address to be used as maintainer field, which is usually the developer who is preparing the upload. .. CAUTION:: Make sure packages are available in the distribution mirrors, otherwise they cannot be downloaded and processed by Deb-o-Matic. Binary NMU uploads .................. You could want to prepare a binary NMU (or binNMU) upload, a binary-only upload which generates architecture dependent binaries only, together with a changelog entry describing why the upload was needed. Additional information can be found in `Debian Developer's Reference`_. In order to do so, you must use the ``binnmu`` command: *echo "binnmu foo_version dist binNMU_version \"changelog\" John Doe " > foo.commands* where ``foo`` is the name of the source package you want to rebuild, ``version`` is the version of the package you want to rebuild, ``dist`` is the distribution which rebuild package for, ``binNMU_version`` is the progressive binNMU number, ``changelog`` is the reason why the upload was prepared (enclosed in quotation marks), and the rest of the string is the address to be used as maintainer field, which is usually the developer who is preparing the upload. .. CAUTION:: Make sure packages are available in the distribution mirrors, otherwise they cannot be downloaded and processed by Deb-o-Matic. Rebuild packages with extra build-dependencies .............................................. You could want to rebuild a package already in the mirrors also adding a specific build-dependency to see whether it compiles with a newer library version. In order to do so, you must use the ``builddep`` command: *echo "builddep foo_version dist extrapackage (>= packageversion)"* *> foo.commands* where ``extrapackage`` is the name of the package you want to install before the compilation takes place, and ``packageversion`` is the optional version of the package you want to install. More than one package can be defined, separated by commas. .. CAUTION:: Make sure packages are available in the distribution mirrors, otherwise they cannot be downloaded and processed by Deb-o-Matic. Killing builds .............. You could want to terminate a build you erroneously uploaded, or you do not want it to complete to avoid wasting too many resources. In order to do so, you must use the ``kill`` command: *echo "kill foo_version dist " > foo.commands* where ``foo`` is the name of the source package you want to terminate its build, ``version`` is its version, and ``dist`` is the distribution the package is being built for. Private repositories -------------------- Deb-o-Matic can create private repositories, separated from the standard suites, to be able to upload packages in an isolated environment without risking to pollute builds with other packages, or to create specialized repositories for specific purposes. Deb-o-Matic Private Repositories can be created dynamically by uploading a package or a command file for a specific suite which has this syntax: *prefix-name-distribution* where ``prefix`` is the defined prefix name, ``name`` is an arbitrary name chosen by the uploader, and ``distribution`` is the target distribution to build packages from. .. Links .. _Debian Developer's Reference: https://www.debian.org/doc/manuals/developers-reference/pkgs.html#porter-guidelines debomatic-0.40/etc/000077500000000000000000000000001477331507500141535ustar00rootroot00000000000000debomatic-0.40/etc/debomatic/000077500000000000000000000000001477331507500161025ustar00rootroot00000000000000debomatic-0.40/etc/debomatic/debomatic.conf000066400000000000000000000030301477331507500206740ustar00rootroot00000000000000[debomatic] incoming: /incoming architecture: system threads: 3 inotify: True sleep: 60 interval: 3600 logfile: /var/log/debomatic.log loglevel: info [distributions] list: /etc/debomatic/distributions blacklist: mapper: {'sid': 'unstable', 'rc-buggy': 'experimental', 'trixie': 'testing', 'bookworm': 'stable', 'bullseye': 'oldstable', 'proposed-updates': 'stable', 'oldstable-proposed-updates': 'oldstable', 'bookworm-security': 'stable', 'bullseye-security': 'oldstable', 'bookworm-backports-sloppy': 'bookworm-backports', 'bullseye-backports-sloppy': 'bullseye-backports'} [chroots] commands: /usr/share/debomatic/sbuildcommands [crossbuild] crossbuild: False hostarchitecture: None [dpr] dpr: False prefix: dpr repository: [gpg] gpg: False keyring: /etc/debomatic/debomatic.gpg [modules] modules: True path: /usr/share/debomatic/modules threads: 5 blacklist: AutoPkgTest Blhc Lintian Mailer Piuparts Repository [autopkgtest] options = --no-built-binaries [blhc] options: --all [buildcleaner] testbuild: False [lintian] options: -i -I -E --pedantic [mailer] sender: debomatic@localhost server: localhost port: 25 tls: False authrequired: False user: user passwd: pass success: /etc/debomatic/mailer/build_success.mail-template failure: /etc/debomatic/mailer/build_failure.mail-template lintian: False [piuparts] options: --log-level=info [removechroots] days: 7 [removepackages] days: 15 [repository] gpgkey: 0x12345678 keyring: /etc/debomatic/keyring debomatic-0.40/etc/debomatic/distributions000066400000000000000000000060401477331507500207270ustar00rootroot00000000000000# Debian [unstable] suite: unstable mirror: http://deb.debian.org/debian components: main contrib non-free non-free-firmware [experimental] suite: unstable mirror: http://deb.debian.org/debian components: main contrib non-free non-free-firmware extramirrors: deb http://deb.debian.org/debian experimental main contrib non-free non-free-firmware [testing] suite: testing mirror: http://deb.debian.org/debian components: main contrib non-free non-free-firmware [stable] suite: stable mirror: http://deb.debian.org/debian components: main contrib non-free non-free-firmware extramirrors: deb http://deb.debian.org/debian-security stable-security main contrib non-free non-free-firmware deb http://deb.debian.org/debian stable-updates main contrib non-free non-free-firmware [oldstable] suite: oldstable mirror: http://deb.debian.org/debian components: main contrib non-free extramirrors: deb http://deb.debian.org/debian-security oldstable/updates main contrib non-free deb http://deb.debian.org/debian oldstable-updates main contrib non-free [stable-backports] suite: stable mirror: http://deb.debian.org/debian components: main contrib non-free non-free-firmware extramirrors: deb http://deb.debian.org/debian-security stable-security main contrib non-free non-free-firmware deb http://deb.debian.org/debian stable-updates main contrib non-free non-free-firmware deb http://deb.debian.org/debian stable-backports main contrib non-free non-free-firmware [oldstable-backports] suite: oldstable mirror: http://deb.debian.org/debian components: main contrib non-free extramirrors: deb http://deb.debian.org/debian-security oldstable/updates main contrib non-free deb http://deb.debian.org/debian oldstable-updates main contrib non-free deb http://deb.debian.org/debian oldstable-backports main contrib non-free # Ubuntu [plucky] suite: plucky mirror: http://archive.ubuntu.com/ubuntu components: main restricted universe multiverse extrapackages: pkgbinarymangler [oracular] suite: oracular mirror: http://archive.ubuntu.com/ubuntu components: main restricted universe multiverse extramirrors: deb http://archive.ubuntu.com/ubuntu oracular-updates main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu oracular-security main restricted universe multiverse extrapackages: pkgbinarymangler [noble] suite: noble mirror: http://archive.ubuntu.com/ubuntu components: main restricted universe multiverse extramirrors: deb http://archive.ubuntu.com/ubuntu noble-updates main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu noble-security main restricted universe multiverse extrapackages: pkgbinarymangler [jammy] suite: jammy mirror: http://archive.ubuntu.com/ubuntu components: main restricted universe multiverse extramirrors: deb http://archive.ubuntu.com/ubuntu jammy-updates main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu jammy-security main restricted universe multiverse extrapackages: pkgbinarymangler debomatic-0.40/etc/debomatic/mailer/000077500000000000000000000000001477331507500173535ustar00rootroot00000000000000debomatic-0.40/etc/debomatic/mailer/build_failure.mail-template000066400000000000000000000002751477331507500246420ustar00rootroot00000000000000From: %(sender)s To: %(uploader)s Subject: %(package)s failed to build The package %(package)s you have uploaded failed to build. Here is an excerpt from the build log: -- %(buildlog)s debomatic-0.40/etc/debomatic/mailer/build_success.mail-template000066400000000000000000000003571477331507500246640ustar00rootroot00000000000000From: %(sender)s To: %(uploader)s Subject: %(package)s has been built successfully The package %(package)s you have uploaded was built successfully. Here is an excerpt from the build log: -- %(buildlog)s Lintian log: -- %(lintian)s debomatic-0.40/etc/default/000077500000000000000000000000001477331507500155775ustar00rootroot00000000000000debomatic-0.40/etc/default/debomatic000066400000000000000000000004121477331507500174460ustar00rootroot00000000000000# Start debomatic on boot? DEBOMATIC_AUTOSTART=0 # Which file should be used as the configuration file for debomatic. DEBOMATIC_CONFIG_FILE='/etc/debomatic/debomatic.conf' # What extra options to give debomatic. # Use -n to prevent backgrounding DEBOMATIC_OPTS='' debomatic-0.40/etc/init.d/000077500000000000000000000000001477331507500153405ustar00rootroot00000000000000debomatic-0.40/etc/init.d/debomatic000077500000000000000000000027411477331507500172210ustar00rootroot00000000000000#! /bin/sh ### BEGIN INIT INFO # Provides: debomatic # Required-Start: $remote_fs # Required-Stop: $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Package autobuilder # Description: Automatic build machine for Debian source packages. ### END INIT INFO NAME=debomatic [ -r /etc/default/$NAME ] && . /etc/default/$NAME DAEMON=/usr/bin/debomatic DAEMON_ARGS="-c $DEBOMATIC_CONFIG_FILE $DEBOMATIC_OPTS" SCRIPTNAME=/etc/init.d/$NAME [ -x "$DAEMON" ] || exit 0 [ "$DEBOMATIC_AUTOSTART" = 0 ] && exit 0 . /lib/lsb/init-functions do_start() { $DAEMON $DAEMON_ARGS } do_stop() { $DAEMON -c $DEBOMATIC_CONFIG_FILE -q } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; restart|force-reload) log_daemon_msg "Restarting $NAME" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) log_end_msg 1 ;; esac ;; status) status_of_proc /usr/bin/$NAME $NAME ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2 exit 3 ;; esac : debomatic-0.40/modules/000077500000000000000000000000001477331507500150505ustar00rootroot00000000000000debomatic-0.40/modules/AutoPkgTest.py000066400000000000000000000131671477331507500176440ustar00rootroot00000000000000# Deb-o-Matic - AutoPkgTest module # # Copyright (C) 2014 Leo Iannacone # Copyright (C) 2015-2025 Luca Falavigna # # Authors: Leo Iannacone # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option), any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. # # Run autpkgtest and stores output on top of the built # package in the pool directory. # # Can be configured by adding this section to the config file: # # [autopkgtest] # options: [adt-run options] # import os from subprocess import call from shutil import copyfile, rmtree class DebomaticModule_AutoPkgTest: def __init__(self): self.adt = '/usr/bin/autopkgtest' self.options = [] self.changesfile = None self.after = ['Lintian'] def _set_up_testbed(self, args): """Performs: - check if dsc exists and declares a Testsuite - get autopkgtest options from the config - set up needed variables and files Returns True if test can be executed, False otherwise""" # check if dsc exists and it contains the Testsuite field autopkgtest_found = False for filename in os.listdir(self.resultdir): if filename.endswith('.dsc'): dsc = os.path.join(self.resultdir, filename) with open(dsc, 'r') as fd: for line in fd: if line.find('Testsuite: autopkgtest') >= 0: autopkgtest_found = True break if filename.endswith('_%s.changes' % args.architecture): self.changesfile = os.path.join(self.resultdir, filename) if not self.changesfile or not autopkgtest_found: return False # get autopkgtest options if args.opts.has_section('autopkgtest'): if args.opts.has_section('autopkgtest'): self.opts = args.opts.get('autopkgtest', 'options').split() # set up atd-run output dir self.resultdir_adt = os.path.join(self.resultdir, 'adt_out_dir') self.summary = 'log_summary' return True def post_build(self, args): if not args.success: return if not os.access(self.adt, os.X_OK): return if args.hostarchitecture: return self.resultdir = os.path.join(args.directory, 'pool', args.package) self.output = (os.path.join(self.resultdir, args.package) + '.autopkgtest') if not self._set_up_testbed(args): return tempfiles = set() for pkgfile in args.files: target = os.path.join(self.resultdir, os.path.basename(pkgfile)) if not os.path.exists(target): try: copyfile(pkgfile, target) tempfiles.add(target) except (IOError, OSError): pass output = open(self.output, 'w') def write_header(header): output.write('┌{:─^70}┐\n'.format('─')) output.write('│ {: <69}│\n'.format(header)) output.write('└{:─^70}┘\n'.format('─')) output.flush() def append_file(source, new_lines_at_the_end=True): if not source.startswith('/'): source = os.path.join(self.resultdir_adt, source) if os.path.isfile(source): with open(source, 'r') as fd: for line in fd: output.write(line) if new_lines_at_the_end: output.write('\n\n') output.flush() chrootname = f'{args.distribution}-{args.architecture}-debomatic' adt = [self.adt, '--apt-upgrade', '--output-dir', self.resultdir_adt, '--summary', os.path.join(self.resultdir_adt, self.summary), self.changesfile, '--', 'unshare', '-t', os.path.expanduser(f'~/.cache/sbuild/{chrootname}.tar.zst')] if self.options: adt.insert(-4, self.options) # write the current adt-run command write_header('Command') output.write(' '.join(adt)) output.write('\n\n\n') output.flush() # launch adt-run with open(os.devnull, 'w') as fd: call(adt, stdout=fd, stderr=fd) # build the log properly, first append the summary write_header('Tests summary') append_file(self.summary) # then the log write_header('Full log') append_file('log') # then the others all_files = [f for f in os.listdir(self.resultdir_adt) if os.path.isfile(os.path.join(self.resultdir_adt, f)) and f not in ['log', self.summary]] for curr_file in all_files: write_header('File: %s' % curr_file) append_file(curr_file, curr_file != all_files[-1]) output.close() # clean up the system if (os.path.isdir(self.resultdir_adt)): rmtree(self.resultdir_adt) for pkgfile in tempfiles: os.remove(pkgfile) debomatic-0.40/modules/Blhc.py000066400000000000000000000046461477331507500163040ustar00rootroot00000000000000# Deb-o-Matic - Blhc module # # Copyright (C) 2014 Mattia Rizzolo # Copyright (C) 2015-2025 Luca Falavigna # # Authors: Mattia Rizzolo # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option), any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. # # Stores blhc output on top of the built package in the pool directory. import os from glob import glob from subprocess import call from tempfile import NamedTemporaryFile from shutil import copyfile class DebomaticModule_Blhc: def __init__(self): self.blhc = '/usr/bin/blhc' def post_build(self, args): if not args.success: return if args.opts.has_section('blhc') and \ args.opts.has_option('blhc', 'options'): blhcopts = args.opts.get('blhc', 'options').strip().split() else: blhcopts = [] if args.hostarchitecture: architecture = args.hostarchitecture else: architecture = args.architecture resultdir = os.path.join(args.directory, 'pool', args.package) buildlog = glob(os.path.join(resultdir, '*_%s.build' % architecture))[0] blhclog = os.path.join(resultdir, args.package) + '.blhc' if os.access(buildlog, os.R_OK): if os.access(self.blhc, os.X_OK): cmd = [self.blhc] + blhcopts + [buildlog] with NamedTemporaryFile() as fd: exitcode = call(cmd, stdout=fd, stderr=fd) # Save bhlc log only if useful information has been # reported, discard output when exit status is: # 0: Buildlog is OK # 1: No compiler commands were found if exitcode not in [0, 1]: copyfile(fd.name, blhclog) return debomatic-0.40/modules/BuildCleaner.py000066400000000000000000000050201477331507500177500ustar00rootroot00000000000000# Deb-o-Matic - Package build path cleaner # # Copyright (C) 2009 Alessio Treglia # Copyright (C) 2009-2025 Luca Falavigna # # Authors: Alessio Treglia # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option), any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. # # Delete all files generated by previous build. import os class DebomaticModule_BuildCleaner: def __init__(self): self.after = ['Lintian', 'Piuparts'] self.before = ['Repository'] def pre_build(self, args): if args.opts.has_section('buildcleaner'): if args.opts.getboolean('buildcleaner', 'testbuild'): return exts_to_clean = ['.deb', '.ddeb', '.gz', '.bz2', '.xz', '.dsc', '.changes', '.build', '.buildlog', '.buildinfo', '.contents', '.lintian', '.piuparts', '.blhc', '.autopkgtest', '.udeb'] pkg_build_path = ('%(directory)s/pool/%(package)s' % {'directory': args.directory, 'package': args.package}) for filename in os.listdir(pkg_build_path): name, ext = os.path.splitext(filename) if ext in exts_to_clean: os.remove(os.path.join(pkg_build_path, filename)) def post_build(self, args): exts_to_clean = ['.deb', '.ddeb', '.udeb', '.changes', '.gz', '.bz2', '.xz', '.dsc'] pkg_build_path = ('%(directory)s/pool/%(package)s' % {'directory': args.directory, 'package': args.package}) if args.opts.has_section('buildcleaner'): if args.opts.getboolean('buildcleaner', 'testbuild'): for filename in os.listdir(pkg_build_path): name, ext = os.path.splitext(filename) if ext in exts_to_clean: os.remove(os.path.join(pkg_build_path, filename)) debomatic-0.40/modules/Contents.py000066400000000000000000000035361477331507500172260ustar00rootroot00000000000000# Deb-o-Matic - Contents module # # Copyright (C) 2009 Alessio Treglia # Copyright (C) 2010-2025 Luca Falavigna # # Authors: Alessio Treglia # Luca Falavigna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option), any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. # # Store debc output in the pool directory. import os from subprocess import call class DebomaticModule_Contents: def __init__(self): self.debc = '/usr/bin/debc' def post_build(self, args): if not args.success: return changes_file = None resultdir = os.path.join(args.directory, 'pool', args.package) contents_file = os.path.join(resultdir, args.package) + '.contents' if args.hostarchitecture: architecture = args.hostarchitecture else: architecture = args.architecture for filename in os.listdir(resultdir): if filename.endswith('.changes'): changes_file = os.path.join(resultdir, filename) break if changes_file and os.access(self.debc, os.X_OK): with open(contents_file, 'w') as fd: call([self.debc, '-a%s' % architecture, changes_file], stdout=fd) debomatic-0.40/modules/DateStamp.py000066400000000000000000000041341477331507500173060ustar00rootroot00000000000000# Deb-o-Matic - Date stamp module # # Copyright (C) 2008-2009 David Futcher # Copyright (C) 2008-2025 Luca Falavigna # # Authors: David Futcher # Luca Falavigna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option), any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. # # Displays build start and finish times into a file in the build directory from datetime import datetime from time import gmtime, mktime, strftime, time class DebomaticModule_DateStamp: def __init__(self): self.ts = '' self.begin = '' self.end = '' self.uploader = '' def pre_build(self, args): self.ts = ('%(directory)s/pool/%(package)s/%(package)s.datestamp' % {'directory': args.directory, 'package': args.package}) with open(self.ts, 'w') as fd: if args.uploader: self.uploader = args.uploader fd.write('Uploaded by %s\n' % self.uploader) self.begin = gmtime(time()) now = datetime.now().strftime('%A, %d %B %Y %H:%M') fd.write('Build started at %s\n' % now) def post_build(self, args): with open(self.ts, 'a') as fd: self.end = gmtime(time()) now = datetime.now().strftime('%A, %d %B %Y %H:%M') elapsed = strftime('%H:%M:%S', gmtime(mktime(self.end) - mktime(self.begin))) fd.write('Build finished at %s\n' % now) fd.write('Elapsed time: %s' % elapsed) debomatic-0.40/modules/Lintian.py000066400000000000000000000053501477331507500170230ustar00rootroot00000000000000# Deb-o-Matic - Lintian module # # Copyright (C) 2008-2009 David Futcher # Copyright (C) 2008-2025 Luca Falavigna # # Authors: David Futcher # Luca Falavigna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option), any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. # # Stores litian output on top of the built package in the pool directory. import os from shutil import copyfile from subprocess import call, PIPE class DebomaticModule_Lintian: def __init__(self): self.lintian = '/usr/bin/lintian' def post_build(self, args): if not args.success: return changesfile = None if args.opts.has_section('lintian'): lintopts = args.opts.get('lintian', 'options').strip() else: lintopts = [] mirror = args.dists.get(args.distribution, 'mirror') try: profile = mirror.split('/')[-1] except IndexError: profile = None if profile: lintopts += ' --profile %s' % profile resultdir = os.path.join(args.directory, 'pool', args.package) lintian = os.path.join(resultdir, args.package) + '.lintian' files = os.listdir(resultdir) for filename in files: if filename.endswith('.changes'): changesfile = os.path.join(resultdir, filename) break tempfiles = set() for file in [f for f in args.files if not f.endswith('.changes') and not f.endswith('.buildinfo')]: if not os.path.basename(file) in files: copyfile(file, os.path.join(resultdir, os.path.basename(file))) tempfiles.add(os.path.join(resultdir, os.path.basename(file))) if changesfile and os.access(self.lintian, os.X_OK): with open(lintian, 'w') as fd: call([self.lintian, '-V'], stdout=fd) fd.write('Options: %s\n\n' % lintopts) fd.flush() cmd = [self.lintian] + lintopts.split() + [changesfile] call(cmd, stdout=fd, stderr=PIPE) for file in tempfiles: os.remove(file) debomatic-0.40/modules/Mailer.py000066400000000000000000000104761477331507500166430ustar00rootroot00000000000000# Deb-o-Matic - Mailer module # # Copyright (C) 2010 Alessio Treglia # Copyright (C) 2015-2025 Luca Falavigna # # Authors: Alessio Treglia # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option), any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. # # Send a reply to the uploader once the build has finished. import os from glob import glob from re import findall, DOTALL from smtplib import SMTP from email.parser import Parser class DebomaticModule_Mailer: def __init__(self): self.after = ['Lintian'] def write_reply(self, template, buildlog, package): lintianoutput = 'No log' with open(template, 'r') as fd: if self.lintian: lintfile = os.path.join(self.resultdir, '%s.lintian' % package) if os.path.isfile(lintfile): with open(lintfile, 'r') as lintfd: lintianoutput = lintfd.read() params = {'sender': self.sender, 'uploader': self.uploader, 'package': package, 'buildlog': buildlog, 'lintian': lintianoutput} reply = fd.read() % params msg = Parser().parsestr(reply) return msg.as_string().encode('utf-8') def post_build(self, args): if not args.uploader: return template = None self.uploader = args.uploader self.resultdir = os.path.join(args.directory, 'pool', args.package) if args.opts.has_section('mailer'): self.sender = args.opts.get('mailer', 'sender') self.server = args.opts.get('mailer', 'server') self.port = args.opts.getint('mailer', 'port') self.tls = args.opts.getboolean('mailer', 'tls') self.auth = args.opts.getboolean('mailer', 'authrequired') self.user = args.opts.get('mailer', 'user') self.passwd = args.opts.get('mailer', 'passwd') self.success = args.opts.get('mailer', 'success') self.failure = args.opts.get('mailer', 'failure') self.lintian = args.opts.getboolean('mailer', 'lintian') for filename in os.listdir(self.resultdir): if filename.endswith('.changes'): template = self.success break if not template: template = self.failure try: if args.hostarchitecture: architecture = args.hostarchitecture else: architecture = args.architecture bp = glob(os.path.join(args.directory, 'pool', args.package, '*_%s.build' % architecture))[0] with open(bp, 'r', encoding='utf8') as fd: if args.success: data = findall('dpkg-buildpackage\n(.*)?\nBuild finished ', fd.read(), DOTALL) else: data = findall('(.*)?\n┌─*┐\n│ Cleanup', fd.read(), DOTALL) try: if len(data[0]) > 20: log = '\n'.join(data[0].split('\n')[-21:-1]) else: log = '\n'.join(data[0].split('\n')) except IndexError: return msg = self.write_reply(template, log, args.package) self.smtp = SMTP(self.server, self.port) self.smtp.ehlo() if args.opts.has_option('mailer', 'tls'): if args.opts.getboolean('mailer', 'tls'): self.smtp.starttls() if self.auth: self.smtp.login(self.user, self.passwd) self.smtp.sendmail(self.sender, self.uploader, msg) self.smtp.quit() except Exception as e: raise e debomatic-0.40/modules/Piuparts.py000066400000000000000000000045101477331507500172310ustar00rootroot00000000000000# Deb-o-Matic - PiuParts module # # Copyright (C) 2012 Leo Iannacone # Copyright (C) 2015-2025 Luca Falavigna # # Authors: Leo Iannacone # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option), any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. # # Check through piuparts if packages can be installed/upgraded/removed. import os from subprocess import call class DebomaticModule_Piuparts: def __init__(self): self.piuparts = '/usr/bin/piuparts' def post_build(self, args): if not args.success: return if not os.access(self.piuparts, os.X_OK): return if args.hostarchitecture: return if args.opts.has_section('piuparts'): options = args.opts.get('piuparts', 'options').strip().split() else: options = [] distribution = args.distribution mirror = args.dists.get(distribution, 'mirror') resultdir = os.path.join(args.directory, 'pool', args.package) for filename in os.listdir(resultdir): if filename.endswith('.changes'): log = os.path.join(resultdir, args.package) + '.piuparts' with open(log, 'a') as fd: cmd = [self.piuparts, '-I', '/build/.*', '-d', distribution, '-D', mirror.split('/')[-1], ('--bootstrapcmd=mmdebstrap --skip=check/empty ' f'--variant=minbase --arch={args.architecture}'), os.path.join(resultdir, filename)] for option in options: cmd.insert(-1, option) call(cmd, stdout=fd) break debomatic-0.40/modules/RemoveChroots.py000066400000000000000000000026111477331507500202210ustar00rootroot00000000000000# Deb-o-Matic - RemoveChroots module # # Copyright (C) 2018-2025 Luca Falavigna # # Authors: Luca Falavigna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option), any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. # # Remove chroots created long ago import os from glob import glob from pathlib import Path from time import time class DebomaticModule_RemoveChroots: def __init__(self): pass def periodic(self, args): ctime = time() if args.opts.has_section('removechroots'): delta = args.opts.getint('removechroots', 'days') * 24 * 60 * 60 for chroot in glob(f'{Path.home()}/.cache/sbuild/*-debomatic.*'): ptime = os.stat(chroot).st_mtime if ptime + delta < ctime: os.unlink(chroot) debomatic-0.40/modules/RemovePackages.py000066400000000000000000000041161477331507500203200ustar00rootroot00000000000000# Deb-o-Matic - RemovePackages module # # Copyright (C) 2018-2025 Luca Falavigna # # Authors: Luca Falavigna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option), any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. # # Remove packages built long ago import os from shutil import rmtree from time import time class DebomaticModule_RemovePackages: def __init__(self): pass def periodic(self, args): ctime = time() if args.opts.has_section('removepackages'): delta = args.opts.getint('removepackages', 'days') * 24 * 60 * 60 if os.path.isdir(args.directory): for suite in os.listdir(args.directory): element = os.path.join(args.directory, suite) pool = os.path.join(element, 'pool') if os.path.isdir(pool): for package in os.listdir(pool): package = os.path.join(pool, package) if os.path.isdir(package): ptime = os.stat(package).st_mtime if ptime + delta < ctime: rmtree(package) if not os.listdir(pool): rmtree(pool) if os.path.isdir(element): if not [f for f in os.listdir(element) if f != 'dists' and f != 'logs']: rmtree(element) debomatic-0.40/modules/Repository.py000066400000000000000000000143211477331507500176020ustar00rootroot00000000000000# Deb-o-Matic - Repository module # # Copyright (C) 2011-2025 Luca Falavigna # # Authors: Luca Falavigna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option), any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. # # Generate local repository of built packages import os from fcntl import flock, LOCK_EX, LOCK_NB, LOCK_SH, LOCK_UN from shutil import rmtree from stat import S_IRWXU, S_IRGRP, S_IXGRP, S_IROTH, S_IXOTH from subprocess import Popen, PIPE from tempfile import mkdtemp, mkstemp class DebomaticModule_Repository: def __init__(self): self.af = '/usr/bin/apt-ftparchive' self.gpg = '/usr/bin/gpg' def pre_build(self, args): self.update_repository(args) def post_build(self, args): self.update_repository(args) def pre_chroot(self, args): if args.action: self.update_repository(args) class Lock: def __init__(self, distribution, architecture): self._file = ('/tmp/debomatic-%s-%s.apt.lock' % (distribution, architecture)) self._skip = False def __enter__(self): self._fd = open(self._file, 'w') try: flock(self._fd, LOCK_EX | LOCK_NB) except IOError: flock(self._fd, LOCK_SH) self._skip = True return self def __exit__(self, exc_type, exc_value, traceback): flock(self._fd, LOCK_UN) self._fd.close() def skip(self): return self._skip def update_repository(self, args): if args.opts.has_section('repository'): gpgkey = args.opts.get('repository', 'gpgkey') keyring = args.opts.get('repository', 'keyring') else: return if not os.access(self.af, os.X_OK): return if not os.access(self.gpg, os.X_OK): return distribution = os.path.basename(args.directory) archive = args.directory pool = os.path.join(archive, 'pool') distslink = os.path.join(archive, 'dists', distribution) if not os.path.islink(distslink): if not os.path.isdir(os.path.join(archive, 'dists')): os.makedirs(os.path.join(archive, 'dists')) tmpdir = mkdtemp(prefix='.', dir=os.path.join(archive, 'dists')) os.symlink(tmpdir, distslink) dists = mkdtemp(prefix='.', dir=os.path.join(archive, 'dists')) for arch in [a for a in (args.architecture, args.hostarchitecture) if a is not None]: packages = os.path.join(dists, 'main', 'binary-%s' % arch) packages_file = os.path.join(packages, 'Packages') arch_release_file = os.path.join(packages, 'Release') release_file = os.path.join(dists, 'Release') release_gpg = os.path.join(dists, 'Release.gpg') inrelease_gpg = os.path.join(dists, 'InRelease') for dir in (pool, packages): if not os.path.isdir(dir): os.makedirs(dir) with self.Lock(distribution, arch) as lock: if not lock.skip(): with open(packages_file, 'w') as fd: Popen([self.af, '-a', arch, 'packages', 'pool'], stdout=fd, stderr=PIPE, cwd=archive).wait() with open(arch_release_file, 'w') as fd: fd.write('Origin: Deb-O-Matic\n') fd.write('Label: Deb-O-Matic\n') fd.write('Archive: %s\n' % distribution) fd.write('Component: main\n') fd.write('Architecture: %s\n' % arch) with open(release_file, 'w') as fd: afstring = 'APT::FTPArchive::Release::' Popen([self.af, '-qq', '-o', '%sOrigin=Deb-o-Matic' % afstring, '-o', '%sLabel=Deb-o-Matic' % afstring, '-o', '%sSuite=%s' % (afstring, distribution), '-o', '%sArchitectures=%s' % (afstring, arch), '-o', '%sComponents=main' % afstring, 'release', 'dists/%s' % os.path.basename(dists)], stdout=fd, stderr=PIPE, cwd=archive).wait() with open(release_file, 'r+') as fd: data = fd.read() fd.seek(0) fd.write(data.replace('MD5Sum', 'NotAutomatic: yes\nMD5Sum')) with open(release_gpg, 'w') as fd: Popen([self.gpg, '--no-default-keyring', '--homedir', keyring, '-u', gpgkey, '--yes', '-a', '-o', fd.name, '-b', release_file], cwd=archive).wait() with open(inrelease_gpg, 'w') as fd: Popen([self.gpg, '--no-default-keyring', '--homedir', keyring, '-u', gpgkey, '--yes', '-a', '-o', fd.name, '--clearsign', release_file], cwd=archive).wait() olddists = os.readlink(distslink) (tmp, tmplink) = mkstemp(prefix='.', dir=os.path.dirname(olddists)) os.close(tmp) os.unlink(tmplink) os.symlink(dists, tmplink) os.chmod(dists, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) os.rename(tmplink, distslink) try: rmtree(olddists) except FileNotFoundError: pass debomatic-0.40/modules/SourceUpload.py000066400000000000000000000036471477331507500200410ustar00rootroot00000000000000# Deb-o-Matic - SourceUpload module # # Copyright (C) 2014-2025 Luca Falavigna # # Authors: Luca Falavigna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option), any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. # # Allows uploading source-only packages to Debian archive import os from re import match, sub class DebomaticModule_SourceUpload: def post_build(self, args): if not args.success: return lines = [] changesfile = None resultdir = os.path.join(args.directory, 'pool', args.package) for filename in os.listdir(resultdir): if filename.endswith('.changes'): changesfile = os.path.join(resultdir, filename) break if changesfile: with open(changesfile, 'r') as fd: cf = fd.read() for line in cf.split('\n'): if match(r'.*?\S+_\S+_\S+\.u?deb', line): continue elif line.startswith('Architecture: '): lines.append('Architecture: source') else: lines.append(line) sourcecf = sub('_[^_]+?.changes', '_sourceupload.changes', changesfile) with open(sourcecf, 'w') as sourcecf: sourcecf.write('\n'.join(lines)) debomatic-0.40/po/000077500000000000000000000000001477331507500140165ustar00rootroot00000000000000debomatic-0.40/po/ast.po000066400000000000000000000143501477331507500151500ustar00rootroot00000000000000# Asturian translation for debomatic # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the debomatic package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: debomatic\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: 2010-01-06 21:11+0000\n" "Last-Translator: Xuacu Saturio \n" "Language-Team: Asturian \n" "Language: ast\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2021-01-26 16:43+0000\n" "X-Generator: Launchpad (build e00fb96b2e64b75333d0178ec15cb78e5aadb64d)\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr "Ficheru .changes incorreutu: %s" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "Nun pudo abrise %s" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:484 #, fuzzy msgid "Unable to launch mmdebstrap" msgstr "Nun se puede acceder al direutoriu %s" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "El ficheru de configuración %s nun esiste" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "Nun se puede acceder al direutoriu %s" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "Nun s'alcontró l'aniellu de claves" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "Nun s'atoparon robles válides" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "" debomatic-0.40/po/ca.po000066400000000000000000000143151477331507500147450ustar00rootroot00000000000000# Catalan translation for debomatic # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the debomatic package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: debomatic\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: 2012-01-09 22:08+0000\n" "Last-Translator: telenieko \n" "Language-Team: Catalan \n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2021-01-26 16:43+0000\n" "X-Generator: Launchpad (build e00fb96b2e64b75333d0178ec15cb78e5aadb64d)\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr "Fitxer .changes erroni: %s" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "No es pot obrir %s" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:484 #, fuzzy msgid "Unable to launch mmdebstrap" msgstr "Incapaç d'accedir el directori %s" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "El fitxer de configuració %s no existèix" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "Incapaç d'accedir el directori %s" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "Keyring no trobat" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "No s'han trobat signatures vàlides" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "" debomatic-0.40/po/cs.po000066400000000000000000000142451477331507500147710ustar00rootroot00000000000000# Czech translation for debomatic # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the debomatic package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: debomatic\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: 2010-05-09 16:54+0000\n" "Last-Translator: Roman Horník \n" "Language-Team: Czech \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2021-01-26 16:43+0000\n" "X-Generator: Launchpad (build e00fb96b2e64b75333d0178ec15cb78e5aadb64d)\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr "Špatný .changes soubor: %s" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "Nelze otevřít %s" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:484 #, fuzzy msgid "Unable to launch mmdebstrap" msgstr "Nelze otevřít adresář %s" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "Konfigurační soubor %s neexistuje" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "Nelze otevřít adresář %s" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "Klíčenka nenalezena" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "Žádný validní podpis" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "" debomatic-0.40/po/da.po000066400000000000000000000144621477331507500147510ustar00rootroot00000000000000# Danish translation for debomatic # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the debomatic package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: debomatic\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: 2012-10-21 19:36+0000\n" "Last-Translator: Joe Hansen \n" "Language-Team: Danish \n" "Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2021-01-26 16:43+0000\n" "X-Generator: Launchpad (build e00fb96b2e64b75333d0178ec15cb78e5aadb64d)\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "Distribution %s er deaktiveret" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "Bygger %s" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr "Ugylidg .changes-fil: %s" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "Kunne ikke hente %s" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "Kunne ikke åbne %s" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:484 #, fuzzy msgid "Unable to launch mmdebstrap" msgstr "Kunne ikke hente %s" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "Behandler %s" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "Konfigurationsfil er ikke angivet" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "Konfigurationsfil %s findes ikke" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "Kunne ikke tilgå %s-mappe" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "Nøglering blev ikke fundet" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "Ingen gyldige underskrifter fundet" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "Venter på at tråde bliver færdige ..." debomatic-0.40/po/de.po000066400000000000000000000146461477331507500147610ustar00rootroot00000000000000# German translation for debomatic # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the debomatic package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: debomatic\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: 2012-03-31 22:10+0000\n" "Last-Translator: Stefan Ebner \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2021-01-26 16:43+0000\n" "X-Generator: Launchpad (build e00fb96b2e64b75333d0178ec15cb78e5aadb64d)\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "Distribution %s ist deaktiviert" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "%s wird gebildet" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr "Schlechte .changes-Datei: %s" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "%s konnte nicht heruntergeladen werden" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "%s kann nicht geöffnet werden" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:484 #, fuzzy msgid "Unable to launch mmdebstrap" msgstr "%s konnte nicht heruntergeladen werden" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "%s wird verarbeitet" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "Konfigurationsdatei wurde nicht angegeben" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "Konfigurationsdatei %s existiert nicht" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "Auf Verzeichnis %s kann nicht zugegriffen werden" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "Schlüsselring nicht gefunden" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "Keine gültigen Signaturen gefunden" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "Warte bis die Threads beendet sind..." debomatic-0.40/po/debomatic.pot000066400000000000000000000132231477331507500164720ustar00rootroot00000000000000#, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr "" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:484 msgid "Unable to launch mmdebstrap" msgstr "" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "" debomatic-0.40/po/en_AU.po000066400000000000000000000201721477331507500153470ustar00rootroot00000000000000# English (Australia) translation for debomatic # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the debomatic package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: debomatic\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: 2016-10-15 08:44+0000\n" "Last-Translator: Luca Falavigna \n" "Language-Team: English (Australia) \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2021-01-26 16:43+0000\n" "X-Generator: Launchpad (build e00fb96b2e64b75333d0178ec15cb78e5aadb64d)\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "" "Build already scheduled for package %(package)s_%(version)s in %(dist)s" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "Skipping removal of file %s" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "Distribution %s is disabled" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "Building %s" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "Build of %s failed" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "Build of %s successful" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "Invocation of sbuild failed" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "Build of %s complete" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "Requesting URL %s" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr "Bad .changes file: %s" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "Distribution %s not configured" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "Downloading missing %s" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "File %s added" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "Unable to fetch %s" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "%(mapped)s mapped as %(mapper)s" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "Unable to open %s" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "File %s removed" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "Creating chroot %(dist)s-%(arch)s-debomatic" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "Failed creating %(dist)s-%(arch)s-debomatic" #: Debomatic/build.py:484 #, fuzzy msgid "Unable to launch mmdebstrap" msgstr "Unable to launch mmdebstrap" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "Processing %s" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "Performing a binNMU build" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "Thread for %s scheduled" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "Performing a package rebuild with extra dependencies" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "Killing build task" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "Build killed for %(package)s_%(version)s in %(dist)s" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "Performing a porter build" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "Performing a package rebuild" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "Removing files" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "Removing %s" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "Configuration file has not been specified" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "Configuration file %s does not exist" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "Section \"%(section)s\" missing in %(conffile)s" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "Distribution file %s does not exist" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "Unable to access %s directory" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "Another instance is running, aborting" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "Inotify loop started" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "Timer loop started" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "Log level not valid, defaulting to \"info\"" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "Keyring not found" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "No valid signatures found" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "Module %s loaded" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "Modules will be executed in this order: %s" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "%(mod)s module disabled, needs %(missing)s" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "Executing hook %(hook)s from module %(mod)s" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "Module %s is blacklisted" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "Circular dependencies found, disabled modules: %s" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "%s hooks launched" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "%s hooks finished" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "Error entering daemon mode: %s" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "Waiting for threads to complete..." #, python-format #~ msgid "schroot profile %s not found" #~ msgstr "schroot profile %s not found" #~ msgid "You must run Deb-o-Matic as root" #~ msgstr "You must run Deb-o-Matic as root" #~ msgid "Creating sbuild keys" #~ msgstr "Creating sbuild keys" #~ msgid "Failed to create sbuild keys" #~ msgstr "Failed to create sbuild keys" #, python-format #~ msgid "%s not found" #~ msgstr "%s not found" #, python-format #~ msgid "%s is not a valid GPG key" #~ msgstr "%s is not a valid GPG key" debomatic-0.40/po/en_GB.po000066400000000000000000000202041477331507500153260ustar00rootroot00000000000000# English (United Kingdom) translation for debomatic # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the debomatic package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: debomatic\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: 2016-10-15 08:44+0000\n" "Last-Translator: Luca Falavigna \n" "Language-Team: English (United Kingdom) \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2021-01-26 16:43+0000\n" "X-Generator: Launchpad (build e00fb96b2e64b75333d0178ec15cb78e5aadb64d)\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "" "Build already scheduled for package %(package)s_%(version)s in %(dist)s" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "Skipping removal of file %s" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "Distribution %s is disabled" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "Building %s" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "Build of %s failed" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "Build of %s successful" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "Invocation of sbuild failed" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "Build of %s complete" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "Requesting URL %s" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr "Bad .changes file: %s" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "Distribution %s not configured" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "Downloading missing %s" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "File %s added" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "Unable to fetch %s" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "%(mapped)s mapped as %(mapper)s" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "Unable to open %s" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "File %s removed" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "Creating chroot %(dist)s-%(arch)s-debomatic" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "Failed creating %(dist)s-%(arch)s-debomatic" #: Debomatic/build.py:484 #, fuzzy msgid "Unable to launch mmdebstrap" msgstr "Unable to launch mmdebstrap" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "Processing %s" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "Performing a binNMU build" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "Thread for %s scheduled" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "Performing a package rebuild with extra dependencies" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "Killing build task" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "Build killed for %(package)s_%(version)s in %(dist)s" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "Performing a porter build" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "Performing a package rebuild" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "Removing files" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "Removing %s" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "Configuration file has not been specified" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "Configuration file %s does not exist" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "Section \"%(section)s\" missing in %(conffile)s" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "Distribution file %s does not exist" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "Unable to access %s directory" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "Another instance is running, aborting" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "Inotify loop started" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "Timer loop started" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "Log level not valid, defaulting to \"info\"" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "Keyring not found" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "No valid signatures found" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "Module %s loaded" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "Modules will be executed in this order: %s" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "%(mod)s module disabled, needs %(missing)s" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "Executing hook %(hook)s from module %(mod)s" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "Module %s is blacklisted" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "Circular dependencies found, disabled modules: %s" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "%s hooks launched" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "%s hooks finished" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "Error entering daemon mode: %s" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "Waiting for threads to complete..." #, python-format #~ msgid "schroot profile %s not found" #~ msgstr "schroot profile %s not found" #~ msgid "You must run Deb-o-Matic as root" #~ msgstr "You must run Deb-o-Matic as root" #~ msgid "Creating sbuild keys" #~ msgstr "Creating sbuild keys" #~ msgid "Failed to create sbuild keys" #~ msgstr "Failed to create sbuild keys" #, python-format #~ msgid "%s not found" #~ msgstr "%s not found" #, python-format #~ msgid "%s is not a valid GPG key" #~ msgstr "%s is not a valid GPG key" debomatic-0.40/po/eo.po000066400000000000000000000142661477331507500147720ustar00rootroot00000000000000# Esperanto translation for debomatic # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the debomatic package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: debomatic\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: 2011-03-16 17:19+0000\n" "Last-Translator: Michael Moroni \n" "Language-Team: Esperanto \n" "Language: eo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2021-01-26 16:43+0000\n" "X-Generator: Launchpad (build e00fb96b2e64b75333d0178ec15cb78e5aadb64d)\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "Distribuaĵo %s estas malŝaltita" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr "Malbona dosiero .changes: %s" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "Ne povas obteni %s" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "Ne povas malfermi %s" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:484 #, fuzzy msgid "Unable to launch mmdebstrap" msgstr "Ne povas obteni %s" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "Agordfosiero %s ne ekzistas" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "Ne povas akiri dosierujon %s" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "" debomatic-0.40/po/es.po000066400000000000000000000163771477331507500150030ustar00rootroot00000000000000# Spanish translation for debomatic # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the debomatic package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: debomatic\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: 2016-12-12 14:52+0000\n" "Last-Translator: Adolfo Jayme \n" "Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2021-01-26 16:43+0000\n" "X-Generator: Launchpad (build e00fb96b2e64b75333d0178ec15cb78e5aadb64d)\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "La distribución %s está desactivada" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr "Archivo .changes incorrecto: %s" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "La distribución %s no está configurada" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "Se añadió el archivo %s" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "No se pudo abrir %s" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "Se quitó el archivo %s" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:484 #, fuzzy msgid "Unable to launch mmdebstrap" msgstr "No se pudo abrir mmdebstrap" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "Procesando %s" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "Establezca «%(option)s» en la sección «%(section)s» de %(conffile)s" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "La opción «%(option)s» de la sección «%(section)s» debe ser %(type)s" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "No se especificó el archivo de configuración" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "El archivo de configuración %s no existe" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "Falta la sección «%(section)s» en %(conffile)s" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "El archivo de distribución %s no existe" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "No se puede acceder al directorio %s" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "Se ha iniciado el bucle Inotify" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "Anillo de claves no encontrado" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "No se encontraron firmas válidas" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "Se cargó el módulo %s" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "Se ejecutarán los módulos en este orden: %s" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "" "Se encontraron dependencias circulares; se desactivaron los módulos: %s" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "Esperando hilos para completar..." #~ msgid "You must run Deb-o-Matic as root" #~ msgstr "Debe ejecutar Deb-o-Matic como superusuario" #~ msgid "Creating sbuild keys" #~ msgstr "Creando claves de sbuild" #~ msgid "Failed to create sbuild keys" #~ msgstr "No se pudieron crear las claves de sbuild" #, python-format #~ msgid "%s not found" #~ msgstr "No se encontró %s" #, python-format #~ msgid "%s is not a valid GPG key" #~ msgstr "%s no es una clave GPG válida" debomatic-0.40/po/fi.po000066400000000000000000000143271477331507500147630ustar00rootroot00000000000000# Finnish translation for debomatic # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the debomatic package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: debomatic\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: 2009-12-06 02:02+0000\n" "Last-Translator: Jarkko Oranen \n" "Language-Team: Finnish \n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2021-01-26 16:43+0000\n" "X-Generator: Launchpad (build e00fb96b2e64b75333d0178ec15cb78e5aadb64d)\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr "Epäkelpo .changes-tiedosto: %s" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "Tiedoston %s avaaminen ei onnistunut" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:484 #, fuzzy msgid "Unable to launch mmdebstrap" msgstr "Hakemistoa %s ei voitu lukea" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "Asetustiedosto %s ei ole olemassa" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "Hakemistoa %s ei voitu lukea" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "Avainnippua ei löytynyt" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "Kelvollisia allekirjoituksia ei löydy" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "" debomatic-0.40/po/fr.po000066400000000000000000000165251477331507500147760ustar00rootroot00000000000000# French translation for debomatic # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the debomatic package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: debomatic\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: 2016-04-28 10:15+0000\n" "Last-Translator: RM \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2021-01-26 16:43+0000\n" "X-Generator: Launchpad (build e00fb96b2e64b75333d0178ec15cb78e5aadb64d)\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "La distribution %s est désactivée" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "Compilation de %s" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "La compilation de %s a échoué" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "La compilation de %s a réussi" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "Compilation de %s terminée" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "Requête de l'URL %s" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr "Fichier .changes invalide : %s" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "La distribution %s n'est pas configurée" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "Téléchargement manquant %s" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "Fichier %s ajouté" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "Impossible de récupérer %s" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "%(mapped)s mappée en tant que %(mapper)s" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "Impossible d'ouvrir %s" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "Fichier %s supprimé" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:484 #, fuzzy msgid "Unable to launch mmdebstrap" msgstr "Impossible de lancer mmdebstrap" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "Traitement de %s" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "Suppression des fichiers" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "Suppression de %s" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "Le fichier de configuration n'a pas été spécifié" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "Le fichier de configuration %s n'existe pas" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "Le fichier de distribution %s n'existe pas" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "Impossible d'accéder au dossier %s" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "Une autre instance est en cours d'exécution, abandon" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "Trousseau de clés introuvable" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "Aucune signature valide disponible" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "Module %s chargé" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "Les modules seront exécutés dans cet ordre : %s" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "Exécution du crochet %(hook)s depuis le module %(mod)s" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "Le module %s est sur liste noire" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "" #~ msgid "You must run Deb-o-Matic as root" #~ msgstr "Vous devez exécuter Deb-o-Matic en tant que super-utilisateur" #~ msgid "Creating sbuild keys" #~ msgstr "Création des clés sbuild" #~ msgid "Failed to create sbuild keys" #~ msgstr "Impossible de créer les clés sbuild" #, python-format #~ msgid "%s not found" #~ msgstr "%s introuvable" #, python-format #~ msgid "%s is not a valid GPG key" #~ msgstr "%s n'est pas une clé GPG valide" debomatic-0.40/po/he.po000066400000000000000000000144201477331507500147530ustar00rootroot00000000000000# Hebrew translation for debomatic # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the debomatic package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: debomatic\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: 2010-04-12 16:44+0000\n" "Last-Translator: Yaron \n" "Language-Team: Hebrew \n" "Language: he\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2021-01-26 16:43+0000\n" "X-Generator: Launchpad (build e00fb96b2e64b75333d0178ec15cb78e5aadb64d)\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr "קובץ ה־‎.changes לא תקין: %s" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "לא ניתן לפתוח את %s" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:484 #, fuzzy msgid "Unable to launch mmdebstrap" msgstr "לא ניתן לגשת אל התיקייה %s" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "קובץ התצורה %s אינו קיים" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "לא ניתן לגשת אל התיקייה %s" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "צרור המפתחות לא נמצא" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "לא נמצאו חתימות תקניות" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "" debomatic-0.40/po/id.po000066400000000000000000000140171477331507500147550ustar00rootroot00000000000000# Indonesian translation for debomatic # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the debomatic package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: debomatic\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: 2009-12-05 08:04+0000\n" "Last-Translator: Iwan Setiawan \n" "Language-Team: Indonesian \n" "Language: id\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2021-01-26 16:43+0000\n" "X-Generator: Launchpad (build e00fb96b2e64b75333d0178ec15cb78e5aadb64d)\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr "" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:484 msgid "Unable to launch mmdebstrap" msgstr "" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "Berkas konfigurasi %s tidak ada" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "" debomatic-0.40/po/it.po000066400000000000000000000211311477331507500147700ustar00rootroot00000000000000# Italian translation for debomatic # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the debomatic package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: debomatic\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: 2016-10-15 08:45+0000\n" "Last-Translator: Luca Falavigna \n" "Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2021-01-26 16:43+0000\n" "X-Generator: Launchpad (build e00fb96b2e64b75333d0178ec15cb78e5aadb64d)\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "" "Compilazione già in corso per il pacchetto %(package)s_%(version)s in " "%(dist)s" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "Rimozione del file %s evitata" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "La distribuzione %s è disabilitata" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "Compilazione di %s" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "Compilazione di %s fallita" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "Compilazione di %s riuscita" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "Invocazione di sbuild non riuscita" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "Compilazione di %s completa" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "Richiesta dell'URL %s" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr "File .changes non valido: %s" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "La distribuzione %s non è configurata" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "Scaricamento del file mancante %s" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "File %s aggiunto" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "Impossibile scaricare %s" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "%(mapped)s mappata come %(mapper)s" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "Impossibile aprire %s" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "File %s rimosso" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "Creazione della chroot %(dist)s-%(arch)s-debomatic" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "Creazione di %(dist)s-%(arch)s-debomatic fallita" #: Debomatic/build.py:484 #, fuzzy msgid "Unable to launch mmdebstrap" msgstr "Impossibile eseguire mmdebstrap" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "Lavorazione di %s" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "Eseguendo una compilazione per binNMU" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "Thread per %s registrato" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "Esecuzione di una ricompilazione con dipendenze aggiuntive" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "Termine della compilazione in corso" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "Compilazione terminata per %(package)s_%(version)s in %(dist)s" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "Effettuazione di una compilazione porter" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "Effettuazione di una ricompilazione" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "Rimozione di fule" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "Rimozione di %s" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "Impostare \"%(option)s\" nella sezione \"%(section)s\" in %(conffile)s" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "" "L'opzione \"%(option)s\" nella sezione \"%(section)s\" deve essere di tipo " "%(type)s" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "Nessun file di configurazione specificato" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "Il file di configurazione %s non esiste" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "La sezione \"%(section)s\" manca in %(conffile)s" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "Il file di distribuzione %s non esiste" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "Impossibile accedere alla directory %s" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "Un'altra istanza è in esecuzione, impossibile continuare" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "Loop di inotify lanciato" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "Loop timer lanciato" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "Livello di log non valido, \"info\" viene usato come predefinito" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "Portachiavi non trovato" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "Nessuna firma valida trovata" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "Modulo %s caricato" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "I moduli saranno eseguiti in quest'ordine: %s" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "Il modulo %(mod)s è stato disabilitato, necessita di %(missing)s" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "Esecuzione dell'hook %(hook)s dal modulo %(mod)s" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "Il modulo %s è bloccato per il caricamento" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "" "Impossibile eseguire il modulo %(mod)s come \"%(order)s\", alcune dipendenze " "sono state trovate: %(deps)s" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "" "Alcune dipendenze circolari sono state trovate, moduli disabilitati: %s" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "Hook %s eseguiti" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "Hook %s terminati" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "Errore durante l'ingresso in modalità daemon: %s" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "In attesa del completamento dei processi..." #, python-format #~ msgid "schroot profile %s not found" #~ msgstr "Il profilo di schroot %s non è stato trovato" #~ msgid "You must run Deb-o-Matic as root" #~ msgstr "Deb-o-Matic deve essere eseguito come utente root" #~ msgid "Creating sbuild keys" #~ msgstr "Creazione delle chiavi di sbuild" #~ msgid "Failed to create sbuild keys" #~ msgstr "Impossibile creare le chiavi di sbuild" #, python-format #~ msgid "%s not found" #~ msgstr "%s non trovato" #, python-format #~ msgid "%s is not a valid GPG key" #~ msgstr "%s non è una chiave GPG valida" debomatic-0.40/po/ja.po000066400000000000000000000145211477331507500147530ustar00rootroot00000000000000# Japanese translation for debomatic # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the debomatic package. # Hideki Yamane (Debian-JP) , 2009. # msgid "" msgstr "" "Project-Id-Version: debomatic 0.7-1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: 2009-12-11 13:22+0000\n" "Last-Translator: Hideki Yamane \n" "Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2021-01-26 16:43+0000\n" "X-Generator: Launchpad (build e00fb96b2e64b75333d0178ec15cb78e5aadb64d)\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr "不正な .changes ファイル: %s" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "%s が開けません" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:484 #, fuzzy msgid "Unable to launch mmdebstrap" msgstr "%s ディレクトリにアクセスできません" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "設定ファイル %s が存在しません" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "%s ディレクトリにアクセスできません" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "キーリングが見つかりません" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "妥当な署名が見つかりませんでした" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "" debomatic-0.40/po/nl.po000066400000000000000000000143651477331507500150000ustar00rootroot00000000000000# Dutch translation for debomatic # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the debomatic package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: debomatic\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: 2010-10-06 18:55+0000\n" "Last-Translator: Johny Provoost \n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2021-01-26 16:43+0000\n" "X-Generator: Launchpad (build e00fb96b2e64b75333d0178ec15cb78e5aadb64d)\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "Distributie %s is uitgeschakeld" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr "Fout .changes bestand: %s" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "%s kan niet geopend worden" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:484 #, fuzzy msgid "Unable to launch mmdebstrap" msgstr "Niet in staat locatie %s te openen" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "Configuratiebestand %s bestaat niet" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "Niet in staat locatie %s te openen" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "Sleutelring niet gevonden" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "Geen geldige handtekening gevonden" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "" debomatic-0.40/po/pl.po000066400000000000000000000145621477331507500150010ustar00rootroot00000000000000# Polish translation for debomatic # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the debomatic package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: debomatic\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: 2012-10-21 22:02+0000\n" "Last-Translator: Stanisław Dac \n" "Language-Team: Polish \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2021-01-26 16:43+0000\n" "X-Generator: Launchpad (build e00fb96b2e64b75333d0178ec15cb78e5aadb64d)\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "Dystrybucja %s jest wyłączona" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "Buduję %s" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr "Nieprawidłowy plik .changes: %s" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "Nie można pozyskać %s" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "Nie można otworzyć %s" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:484 #, fuzzy msgid "Unable to launch mmdebstrap" msgstr "Nie można pozyskać %s" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "Przetwarzanie %s" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "Plik konfiguracyjny nie został określony" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "Plik konfiguracyjny %s nie istnieje" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "Nie można uzyskać dostępu do katalogu %s" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "Baza kluczy nie odnaleziona" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "Nie znaleziono prawidłowych podpisów" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "Czekam na ukończenie wątków..." debomatic-0.40/po/pt.po000066400000000000000000000207611477331507500150070ustar00rootroot00000000000000# Portuguese translation of debomatic # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the debomatic package. # # Américo Monteiro , 2014, 2015. msgid "" msgstr "" "Project-Id-Version: debomatic\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: 2021-01-26 16:28+0000\n" "Last-Translator: Luca Falavigna \n" "Language-Team: Portuguese \n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2021-01-26 16:43+0000\n" "X-Generator: Launchpad (build e00fb96b2e64b75333d0178ec15cb78e5aadb64d)\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "" "Compilação já agendada para o pacote %(package)s_%(version)s em %(dist)s" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "A saltar a remoção do ficheiro %s" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "Distribuição %s está desabilitada" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "A compilar %s" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "Falhou a compilação de %s" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "Compilação de %s bem-sucedida" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "Falhou a invocação de sbuild" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "Compilação de %s completa" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "A pedir URL %s" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr "Ficheiro .changes inválido: %s" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "Distribuição %s não configurada" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "A descarregar %s em falta" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "Ficheiro %s adicionado" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "Incapaz de obter %s" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "%(mapped)s mapeado como %(mapper)s" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "Incapaz de abrir %s" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "Removido ficheiro %s" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "A criar chroot %(dist)s-%(arch)s-debomatic" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "Falha ao criar %(dist)s-%(arch)s-debomatic" #: Debomatic/build.py:484 #, fuzzy msgid "Unable to launch mmdebstrap" msgstr "Incapaz de lançar mmdebstrap" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "A processar %s" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "A executar uma compilação binNMU" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "Thread para %s agendada" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "A executar uma recompilação de pacote com dependências extra" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "A matar a tarefa de compilação" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "Morta a compilação para %(package)s_%(version)s em %(dist)s" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "A executar uma compilação 'porter'" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "A executar uma recompilação de pacote" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "A remover ficheiros" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "A remover %s" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "Definir \"%(option)s\" na secção \"%(section)s\" em %(conffile)s" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "A opção \"%(option)s\" na secção \"%(section)s\" deve ser %(type)s" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "Ficheiro de configuração não foi especificado" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "Ficheiro de configuração %s não existente" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "Secção \"%(section)s\" em falta em %(conffile)s" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "Ficheiro de distribuição %s não existe" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "Incapaz de aceder ao directório %s" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "Está outra instância a correr, a abortar" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "Ciclo inotify iniciado" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "Ciclo temporizador iniciado" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "Nível de relatório não válido, a usar predefinição para \"info\"" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "Chaveiro não encontrado" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "Nenhuma assinatura válida encontrada" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "Módulo %s carregado" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "Módulos serão executados por esta ordem: %s" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "Modulo %(mod)s desactivado, precisa de %(missing)s" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "A executar hook %(hook)s a partir de módulo %(mod)s" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "O modulo %s está na lista negra" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "" "Incapaz de executar %(mod)s como modulo %(order)s, dependências encontradas: " "%(deps)s" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "Dependências circulares encontradas, módulos desactivados: %s" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "%s hooks lançados" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "%s hooks terminados" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "Erro ao entrar em modo daemon: %s" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "A aguardar que as threads terminem..." #, python-format #~ msgid "schroot profile %s not found" #~ msgstr "Perfil %s de schroot não encontrado" #~ msgid "You must run Deb-o-Matic as root" #~ msgstr "Você tem de correr o Deb-o-Matic como root" #~ msgid "Creating sbuild keys" #~ msgstr "A criar chaves de sbuild" #~ msgid "Failed to create sbuild keys" #~ msgstr "Falha ao criar chaves de sbuild" #, python-format #~ msgid "%s not found" #~ msgstr "%s não encontrado" #, python-format #~ msgid "%s is not a valid GPG key" #~ msgstr "%s não é uma chave GPG válida" debomatic-0.40/po/pt_BR.po000066400000000000000000000207611477331507500153720ustar00rootroot00000000000000# Portuguese translation of debomatic # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the debomatic package. # # Américo Monteiro , 2014, 2015. msgid "" msgstr "" "Project-Id-Version: debomatic\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: 2021-01-26 16:28+0000\n" "Last-Translator: Luca Falavigna \n" "Language-Team: Portuguese \n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2021-01-26 16:43+0000\n" "X-Generator: Launchpad (build e00fb96b2e64b75333d0178ec15cb78e5aadb64d)\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "" "Compilação já agendada para o pacote %(package)s_%(version)s em %(dist)s" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "A saltar a remoção do ficheiro %s" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "Distribuição %s está desabilitada" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "A compilar %s" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "Falhou a compilação de %s" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "Compilação de %s bem-sucedida" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "Falhou a invocação de sbuild" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "Compilação de %s completa" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "A pedir URL %s" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr "Ficheiro .changes inválido: %s" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "Distribuição %s não configurada" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "A descarregar %s em falta" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "Ficheiro %s adicionado" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "Incapaz de obter %s" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "%(mapped)s mapeado como %(mapper)s" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "Incapaz de abrir %s" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "Removido ficheiro %s" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "A criar chroot %(dist)s-%(arch)s-debomatic" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "Falha ao criar %(dist)s-%(arch)s-debomatic" #: Debomatic/build.py:484 #, fuzzy msgid "Unable to launch mmdebstrap" msgstr "Incapaz de lançar mmdebstrap" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "A processar %s" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "A executar uma compilação binNMU" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "Thread para %s agendada" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "A executar uma recompilação de pacote com dependências extra" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "A matar a tarefa de compilação" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "Morta a compilação para %(package)s_%(version)s em %(dist)s" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "A executar uma compilação 'porter'" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "A executar uma recompilação de pacote" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "A remover ficheiros" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "A remover %s" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "Definir \"%(option)s\" na secção \"%(section)s\" em %(conffile)s" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "A opção \"%(option)s\" na secção \"%(section)s\" deve ser %(type)s" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "Ficheiro de configuração não foi especificado" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "Ficheiro de configuração %s não existente" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "Secção \"%(section)s\" em falta em %(conffile)s" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "Ficheiro de distribuição %s não existe" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "Incapaz de aceder ao directório %s" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "Está outra instância a correr, a abortar" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "Ciclo inotify iniciado" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "Ciclo temporizador iniciado" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "Nível de relatório não válido, a usar predefinição para \"info\"" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "Chaveiro não encontrado" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "Nenhuma assinatura válida encontrada" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "Módulo %s carregado" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "Módulos serão executados por esta ordem: %s" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "Modulo %(mod)s desactivado, precisa de %(missing)s" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "A executar hook %(hook)s a partir de módulo %(mod)s" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "O modulo %s está na lista negra" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "" "Incapaz de executar %(mod)s como modulo %(order)s, dependências encontradas: " "%(deps)s" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "Dependências circulares encontradas, módulos desactivados: %s" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "%s hooks lançados" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "%s hooks terminados" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "Erro ao entrar em modo daemon: %s" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "A aguardar que as threads terminem..." #, python-format #~ msgid "schroot profile %s not found" #~ msgstr "Perfil %s de schroot não encontrado" #~ msgid "You must run Deb-o-Matic as root" #~ msgstr "Você tem de correr o Deb-o-Matic como root" #~ msgid "Creating sbuild keys" #~ msgstr "A criar chaves de sbuild" #~ msgid "Failed to create sbuild keys" #~ msgstr "Falha ao criar chaves de sbuild" #, python-format #~ msgid "%s not found" #~ msgstr "%s não encontrado" #, python-format #~ msgid "%s is not a valid GPG key" #~ msgstr "%s não é uma chave GPG válida" debomatic-0.40/po/pt_PT.po000066400000000000000000000206521477331507500154110ustar00rootroot00000000000000# Portuguese translation of debomatic # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the debomatic package. # # Américo Monteiro , 2014, 2015. msgid "" msgstr "" "Project-Id-Version: debomatic\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: 2015-08-30 14:27+0000\n" "Last-Translator: Américo Monteiro \n" "Language-Team: Portuguese \n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2021-01-26 16:43+0000\n" "X-Generator: Launchpad (build e00fb96b2e64b75333d0178ec15cb78e5aadb64d)\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "" "Compilação já agendada para o pacote %(package)s_%(version)s em %(dist)s" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "A saltar a remoção do ficheiro %s" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "Distribuição %s está desabilitada" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "A compilar %s" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "Falhou a compilação de %s" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "Compilação de %s completa" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "A pedir URL %s" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr "Ficheiro .changes inválido: %s" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "Distribuição %s não configurada" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "A descarregar %s em falta" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "Ficheiro %s adicionado" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "Incapaz de obter %s" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "%(mapped)s mapeado como %(mapper)s" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "Incapaz de abrir %s" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "Removido ficheiro %s" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "A criar chroot %(dist)s-%(arch)s-debomatic" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "Falha ao criar %(dist)s-%(arch)s-debomatic" #: Debomatic/build.py:484 #, fuzzy msgid "Unable to launch mmdebstrap" msgstr "Incapaz de lançar mmdebstrap" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "A processar %s" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "A executar uma compilação binNMU" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "Thread para %s agendada" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "A executar uma recompilação de pacote com dependências extra" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "A matar a tarefa de compilação" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "Morta a compilação para %(package)s_%(version)s em %(dist)s" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "A executar uma compilação 'porter'" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "A executar uma recompilação de pacote" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "A remover ficheiros" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "A remover %s" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "Definir \"%(option)s\" na secção \"%(section)s\" em %(conffile)s" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "A opção \"%(option)s\" na secção \"%(section)s\" deve ser %(type)s" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "Ficheiro de configuração não foi especificado" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "Ficheiro de configuração %s não existente" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "Secção \"%(section)s\" em falta em %(conffile)s" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "Ficheiro de distribuição %s não existe" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "Incapaz de aceder ao directório %s" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "Está outra instância a correr, a abortar" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "Ciclo inotify iniciado" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "Ciclo temporizador iniciado" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "Nível de relatório não válido, a usar predefinição para \"info\"" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "Chaveiro não encontrado" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "Nenhuma assinatura válida encontrada" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "Módulo %s carregado" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "Módulos serão executados por esta ordem: %s" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "Modulo %(mod)s desactivado, precisa de %(missing)s" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "A executar hook %(hook)s a partir de módulo %(mod)s" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "O modulo %s está na lista negra" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "" "Incapaz de executar %(mod)s como modulo %(order)s, dependências encontradas: " "%(deps)s" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "Dependências circulares encontradas, módulos desactivados: %s" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "%s hooks lançados" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "%s hooks terminados" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "Erro ao entrar em modo daemon: %s" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "A aguardar que as threads terminem..." #, python-format #~ msgid "schroot profile %s not found" #~ msgstr "Perfil %s de schroot não encontrado" #~ msgid "You must run Deb-o-Matic as root" #~ msgstr "Você tem de correr o Deb-o-Matic como root" #~ msgid "Creating sbuild keys" #~ msgstr "A criar chaves de sbuild" #~ msgid "Failed to create sbuild keys" #~ msgstr "Falha ao criar chaves de sbuild" #, python-format #~ msgid "%s not found" #~ msgstr "%s não encontrado" #, python-format #~ msgid "%s is not a valid GPG key" #~ msgstr "%s não é uma chave GPG válida" debomatic-0.40/po/ro.po000066400000000000000000000144151477331507500150030ustar00rootroot00000000000000# Romanian translation for debomatic # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the debomatic package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: debomatic\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: 2010-10-13 21:38+0000\n" "Last-Translator: Lucian Adrian Grijincu \n" "Language-Team: Romanian \n" "Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2021-01-26 16:43+0000\n" "X-Generator: Launchpad (build e00fb96b2e64b75333d0178ec15cb78e5aadb64d)\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "Distribuția %s este dezactivată" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr "Fișier .changes greșit: %s" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "Nu s-a putut deschide %s" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:484 #, fuzzy msgid "Unable to launch mmdebstrap" msgstr "Nu s-a putut accesa dosarul %s" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "Fișierul de configurare %s nu există" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "Nu s-a putut accesa dosarul %s" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "Inelul de chei nu a fost găsit" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "Nu s-a găsit nicio semnătură validă" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "" debomatic-0.40/po/ru.po000066400000000000000000000147031477331507500150110ustar00rootroot00000000000000# Russian translation for debomatic # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the debomatic package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: debomatic\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: 2012-11-30 11:57+0000\n" "Last-Translator: Eugene Roskin \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2021-01-26 16:43+0000\n" "X-Generator: Launchpad (build e00fb96b2e64b75333d0178ec15cb78e5aadb64d)\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "Распределение %s отключено" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "Сборка %s" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "Сборка %s завершена" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr "Плохой файл .changes: %s" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "Не удалось открыть %s" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:484 #, fuzzy msgid "Unable to launch mmdebstrap" msgstr "Нет доступа к каталогу %s" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "Обработка %s" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "Удаление файлов" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "Удаление %s" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "Файл настроек %s не существует" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "Нет доступа к каталогу %s" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "Брелок не найден" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "Не найдены допустимые подписи" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "" debomatic-0.40/po/sl.po000066400000000000000000000143151477331507500150000ustar00rootroot00000000000000# Slovenian translation for debomatic # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the debomatic package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: debomatic\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: 2010-02-05 06:10+0000\n" "Last-Translator: grofaty \n" "Language-Team: Slovenian \n" "Language: sl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2021-01-26 16:43+0000\n" "X-Generator: Launchpad (build e00fb96b2e64b75333d0178ec15cb78e5aadb64d)\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr "Pokvarjena .changes datoteka: %s" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "Ni mogoče odpreti %s" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:484 #, fuzzy msgid "Unable to launch mmdebstrap" msgstr "Ne morem dostopati do direktorija %s" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "Nastavitvena datoteka %s ne obstaja" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "Ne morem dostopati do direktorija %s" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "Zbirke ključev ni mogoče najti" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "Ne najdem veljavnih podpisov" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "" debomatic-0.40/po/sr.po000066400000000000000000000236421477331507500150110ustar00rootroot00000000000000# Serbian translation for debomatic # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the debomatic package. # FIRST AUTHOR , 2009. # Мирослав Николић , 2012—2016. msgid "" msgstr "" "Project-Id-Version: debomatic\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: 2016-10-15 08:43+0000\n" "Last-Translator: Luca Falavigna \n" "Language-Team: Serbian \n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2021-01-26 16:43+0000\n" "X-Generator: Launchpad (build e00fb96b2e64b75333d0178ec15cb78e5aadb64d)\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "Изградња је већ заказана за пакет %(package)s %(version)s у %(dist)s" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "Прескачем уклањање датотеке „%s“" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "Дистрибуција „%s“ је искључена" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "Изграђујем „%s“" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "Нисам успео да изградим „%s“" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "Успео сам да изградим „%s“" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "Нисам успео да призовем „sbuild“" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "Завршена је изградња „%s“" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "Потражујем адресу „%s“" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr "Лоша датотека измена (.changes): %s" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "Дистрибуција „%s“ није подешена" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "Преузимам недостајуће „%s“" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "Датотека „%s“ је додата" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "Не могу да довучем „%s“" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "%(mapped)s је мапирано као %(mapper)s" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "Не могу да отворим „%s“" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "Датотека „%s“ је уклоњена" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "Правим „chroot %(dist)s-%(arch)s-debomatic“" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "Нисам успео да направим „%(dist)s-%(arch)s-debomatic“" #: Debomatic/build.py:484 #, fuzzy msgid "Unable to launch mmdebstrap" msgstr "Не могу да покренем „mmdebstrap“" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "Обрађујем „%s“" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "Извршавам изградњу „binNMU“-а" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "Нит за „%s“ је заказана" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "Извршавам поновну изградњу пакета са додатним зависностима" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "Убијам задатак изградње" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "Изградња је убијена за „%(package)s_%(version)s“ у %(dist)s" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "Извршавам изградњу носача" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "Извршавам поновну изградњу пакета" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "Уклањам датотеке" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "Уклањам „%s“" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "Постављам „%(option)s“ у одељку „%(section)s“ у %(conffile)s" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "Опција „%(option)s“ у одељку „%(section)s“ мора бити „%(type)s“" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "Датотека подешавања није наведена" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "Датотека подешавања „%s“ не постоји" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "Одељак „%(section)s“ недостаје у „%(conffile)s“" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "Датотека дистрибуције „%s“ не постоји" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "Не могу да приступим директоријуму „%s“" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "Још један примерак је покренут, прекидам" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "Покренута је петља и-обавештајца" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "Покренута је петља одбројавача" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "Ниво дневника није исправан, подразумевам „info“" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "Нисам нашао привезак кључева" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "Нисам нашао исправан потпис" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "Модул „%s“ је учитан" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "Модули ће бити извршени овим редом: %s" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "Модул „%(mod)s“ је искључен, потребан је „%(missing)s“" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "Извршавам предворје „%(hook)s“ за модул „%(mod)s“" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "Модул „%s“ је на списку забрана" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "" "Не могу да извршим „%(mod)s“ као „%(order)s“ модул, нађох зависности: " "%(deps)s" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "Нађох кружне зависности, искључени модули: %s" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "„%s“ предворје је покренуто" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "„%s“ предворје је завршено" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "Грешка уласка у режим услужника: %s" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "Чекам на нити да заврше..." #, python-format #~ msgid "schroot profile %s not found" #~ msgstr "Нисам нашао „schroot“ профил %s" #~ msgid "You must run Deb-o-Matic as root" #~ msgstr "Морате покренути Деб-о-Матик као администратор" #~ msgid "Creating sbuild keys" #~ msgstr "Правим кључеве сбилд-а" #~ msgid "Failed to create sbuild keys" #~ msgstr "Нисам успео да направим кључеве сбилд-а" #, python-format #~ msgid "%s not found" #~ msgstr "Нисам нашао „%s“" #, python-format #~ msgid "%s is not a valid GPG key" #~ msgstr "„%s“ није исправан ГПГ кључ" debomatic-0.40/po/sv.po000066400000000000000000000143151477331507500150120ustar00rootroot00000000000000# Swedish translation for debomatic # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the debomatic package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: debomatic\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: 2009-12-29 10:05+0000\n" "Last-Translator: Daniel Nylander \n" "Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2021-01-26 16:43+0000\n" "X-Generator: Launchpad (build e00fb96b2e64b75333d0178ec15cb78e5aadb64d)\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr "Felaktig .changes fil: %s" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "Kunde inte öppna %s" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "" #: Debomatic/build.py:484 #, fuzzy msgid "Unable to launch mmdebstrap" msgstr "Har inte tillgång till %s mappen" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "Konfigurations filen %s finns inte" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "Har inte tillgång till %s mappen" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "Kunde inte hitta nyckelringen" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "Inga giltiga signaturer hittades" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "" debomatic-0.40/po/zh_CN.po000066400000000000000000000167061477331507500153710ustar00rootroot00000000000000# Chinese (Simplified) translation for debomatic # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the debomatic package. # Mo Zhou , 2017. # msgid "" msgstr "" "Project-Id-Version: debomatic\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-28 07:40+0100\n" "PO-Revision-Date: 2017-08-11 09:15+0000\n" "Last-Translator: Mo Zhou \n" "Language-Team: Chinese (Simplified) \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2021-01-26 16:43+0000\n" "X-Generator: Launchpad (build e00fb96b2e64b75333d0178ec15cb78e5aadb64d)\n" #: Debomatic/build.py:52 #, python-format msgid "Build already scheduled for package %(package)s_%(version)s in %(dist)s" msgstr "软件包 %(package)s_%(version)s 已经存在于 %(dist)s 的编译队列中" #: Debomatic/build.py:72 #, python-format msgid "Skipping removal of file %s" msgstr "跳过删除文件 %s" #: Debomatic/build.py:115 #, python-format msgid "Distribution %s is disabled" msgstr "%s 发行版已被禁用" #: Debomatic/build.py:158 #, python-format msgid "Building %s" msgstr "正在编译 %s" #: Debomatic/build.py:241 Debomatic/build.py:528 Debomatic/build.py:536 #, python-format msgid "Build of %s failed" msgstr "%s 编译失败" #: Debomatic/build.py:244 #, python-format msgid "Build of %s successful" msgstr "%s 编译成功" #: Debomatic/build.py:248 msgid "Invocation of sbuild failed" msgstr "" #: Debomatic/build.py:251 #, python-format msgid "Build of %s complete" msgstr "%s 编译结束" #: Debomatic/build.py:282 #, python-format msgid "Requesting URL %s" msgstr "正向URL %s 发送请求" #: Debomatic/build.py:300 Debomatic/build.py:390 Debomatic/build.py:514 #, python-format msgid "Bad .changes file: %s" msgstr ".changes 文件有错: %s" #: Debomatic/build.py:307 Debomatic/build.py:395 Debomatic/build.py:399 #, python-format msgid "Distribution %s not configured" msgstr "%s 发行版未配置" #: Debomatic/build.py:311 Debomatic/build.py:328 #, python-format msgid "Downloading missing %s" msgstr "正在下载缺失的 %s" #: Debomatic/build.py:320 Debomatic/build.py:340 Debomatic/build.py:500 #: Debomatic/build.py:512 #, python-format msgid "File %s added" msgstr "文件 %s 已添加" #: Debomatic/build.py:322 Debomatic/build.py:342 #, python-format msgid "Unable to fetch %s" msgstr "无法获取 %s" #: Debomatic/build.py:368 Debomatic/build.py:373 #, python-format msgid "%(mapped)s mapped as %(mapper)s" msgstr "%(mapped)s 被映射为 %(mapper)s" #: Debomatic/build.py:384 Debomatic/build.py:506 #, python-format msgid "Unable to open %s" msgstr "无法打开 %s" #: Debomatic/build.py:410 #, python-format msgid "File %s removed" msgstr "文件 %s 已删除" #: Debomatic/build.py:443 #, python-format msgid "Creating chroot %(dist)s-%(arch)s-debomatic" msgstr "正在创建 chroot %(dist)s-%(arch)s-debomatic" #: Debomatic/build.py:476 #, python-format msgid "Failed creating %(dist)s-%(arch)s-debomatic" msgstr "%(dist)s-%(arch)s-debomatic 创建失败" #: Debomatic/build.py:484 #, fuzzy msgid "Unable to launch mmdebstrap" msgstr "无法启动 mmdebstrap" #: Debomatic/build.py:501 Debomatic/commands.py:41 #, python-format msgid "Processing %s" msgstr "正在处理 %s" #: Debomatic/commands.py:76 msgid "Performing a binNMU build" msgstr "" #: Debomatic/commands.py:87 Debomatic/commands.py:98 Debomatic/commands.py:124 #: Debomatic/commands.py:135 Debomatic/debomatic.py:152 #, python-format msgid "Thread for %s scheduled" msgstr "%s 的线程已加入队列" #: Debomatic/commands.py:90 msgid "Performing a package rebuild with extra dependencies" msgstr "" #: Debomatic/commands.py:101 msgid "Killing build task" msgstr "" #: Debomatic/commands.py:110 #, python-format msgid "Build killed for %(package)s_%(version)s in %(dist)s" msgstr "" #: Debomatic/commands.py:116 msgid "Performing a porter build" msgstr "" #: Debomatic/commands.py:127 msgid "Performing a package rebuild" msgstr "" #: Debomatic/commands.py:138 msgid "Removing files" msgstr "" #: Debomatic/commands.py:143 #, python-format msgid "Removing %s" msgstr "" #: Debomatic/configuration.py:61 #, python-format msgid "Set \"%(option)s\" in section \"%(section)s\" in %(conffile)s" msgstr "" #: Debomatic/configuration.py:84 #, python-format msgid "Option \"%(option)s\" in section \"%(section)s\" must be %(type)s" msgstr "" #: Debomatic/configuration.py:92 msgid "Configuration file has not been specified" msgstr "未指明配置文件" #: Debomatic/configuration.py:95 #, python-format msgid "Configuration file %s does not exist" msgstr "配置文件 %s 不存在" #: Debomatic/configuration.py:100 #, python-format msgid "Section \"%(section)s\" missing in %(conffile)s" msgstr "" #: Debomatic/configuration.py:118 #, python-format msgid "Distribution file %s does not exist" msgstr "" #: Debomatic/debomatic.py:69 Debomatic/debomatic.py:139 #, python-format msgid "Unable to access %s directory" msgstr "无法访问 %s 目录" #: Debomatic/debomatic.py:87 Debomatic/process.py:148 msgid "Another instance is running, aborting" msgstr "发现另一实例正在运行,正在中止本实例" #: Debomatic/debomatic.py:119 msgid "Inotify loop started" msgstr "无限循环已启动" #: Debomatic/debomatic.py:123 msgid "Timer loop started" msgstr "时钟循环已启动" #: Debomatic/debomatic.py:165 msgid "Log level not valid, defaulting to \"info\"" msgstr "日志等级无效,退回默认值 \"info\"" #: Debomatic/gpg.py:55 msgid "Keyring not found" msgstr "未找到密钥环" #: Debomatic/gpg.py:63 msgid "No valid signatures found" msgstr "未找到有效的签名" #: Debomatic/modules.py:83 #, python-format msgid "Module %s loaded" msgstr "模块 %s 已载入" #: Debomatic/modules.py:89 #, python-format msgid "Modules will be executed in this order: %s" msgstr "各模块将会以该顺序执行: %s" #: Debomatic/modules.py:111 #, python-format msgid "%(mod)s module disabled, needs %(missing)s" msgstr "%(mod)s 模块已禁用,需要 %(missing)s" #: Debomatic/modules.py:119 #, python-format msgid "Executing hook %(hook)s from module %(mod)s" msgstr "正在从模块 %(mod)s 中执行钩子 %(hook)s" #: Debomatic/modules.py:131 #, python-format msgid "Module %s is blacklisted" msgstr "模块 %s 在黑名单中" #: Debomatic/modules.py:163 Debomatic/modules.py:179 #, python-format msgid "" "Cannot execute %(mod)s as %(order)s module, dependencies found: %(deps)s" msgstr "无法执行 %(mod)s 作为 %(order)s 模块,为此找到的依赖: %(deps)s" #: Debomatic/modules.py:207 #, python-format msgid "Circular dependencies found, disabled modules: %s" msgstr "发现循环依赖,为此禁用的模块:%s" #: Debomatic/modules.py:238 #, python-format msgid "%s hooks launched" msgstr "%s 钩子已启动" #: Debomatic/modules.py:243 #, python-format msgid "%s hooks finished" msgstr "%s 钩子已完成" #: Debomatic/process.py:47 #, python-format msgid "Error entering daemon mode: %s" msgstr "" #: Debomatic/process.py:99 Debomatic/process.py:131 msgid "Waiting for threads to complete..." msgstr "" #, python-format #~ msgid "schroot profile %s not found" #~ msgstr "Schroot 配置文件 %s 未找到" #~ msgid "You must run Deb-o-Matic as root" #~ msgstr "您必须以 root 权限运行 Deb-o-Matic" #~ msgid "Creating sbuild keys" #~ msgstr "正在创建 sbuild 键" #~ msgid "Failed to create sbuild keys" #~ msgstr "无法创建 sbuild 键" debomatic-0.40/sbuildcommands/000077500000000000000000000000001477331507500164045ustar00rootroot00000000000000debomatic-0.40/sbuildcommands/chroot-setup-commands/000077500000000000000000000000001477331507500226375ustar00rootroot00000000000000debomatic-0.40/sbuildcommands/chroot-setup-commands/apt-speedup000077500000000000000000000004241477331507500250140ustar00rootroot00000000000000#!/bin/sh # reference: https://wiki.debian.org/BuilddSetup cat << EOF > /etc/apt/apt.conf.d/99debomatic APT::Install-Recommends 0; Acquire::PDiffs "false"; Acquire::Languages "none"; DPkg::Options {"--force-unsafe-io";}; Acquire::CompressionTypes::Order { "gz"; "bz2"; } EOF debomatic-0.40/setup.py000066400000000000000000000052751477331507500151230ustar00rootroot00000000000000#!/usr/bin/python3 # Deb-o-Matic # # Copyright (C) 2007-2025 Luca Falavigna # # Author: Luca Falavigna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option), any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. import os from glob import glob from setuptools import setup from setuptools.command.build import build from setuptools.command.install import install from subprocess import call data_files = [] class Build(build, object): def run(self): super(Build, self).run() for po in glob(os.path.join('po', '*.po')): mo = os.path.join('locale', os.path.splitext(os.path.basename(po))[0], 'LC_MESSAGES/debomatic.mo') if not os.path.isdir(os.path.dirname(mo)): os.makedirs(os.path.dirname(mo)) call(['msgfmt', '-o', mo, po]) call(['make', '-C', 'docs', 'latexpdf']) class Install(install, object): def run(self): data_files.append(('share/debomatic', ['debomatic'])) data_files.append(('share/man/man1', ['docs/debomatic.1'])) data_files.append(('share/doc/debomatic', ['docs/_build/latex/Deb-o-Matic.pdf'])) self.add_content('modules', 'share/debomatic') self.add_content('etc', '/') self.add_content('usr', '/') self.add_content('sbuildcommands', 'share/debomatic') self.add_content('locale', 'share') super(Install, self).run() def add_content(self, rootdir, prefix): for root, subFolders, files in os.walk(rootdir): for file in files: data_files.append((os.path.join(prefix, root), [os.path.join(root, file)])) setup(name='debomatic', version='0.40', author='Luca Falavigna', author_email='dktrkranz@debian.org', description='Automatic build machine for Debian source packages', url='https://debomatic.github.io', license='GNU GPL', packages=['Debomatic'], data_files=data_files, cmdclass={'build': Build, 'install': Install}) debomatic-0.40/usr/000077500000000000000000000000001477331507500142115ustar00rootroot00000000000000debomatic-0.40/usr/lib/000077500000000000000000000000001477331507500147575ustar00rootroot00000000000000debomatic-0.40/usr/lib/systemd/000077500000000000000000000000001477331507500164475ustar00rootroot00000000000000debomatic-0.40/usr/lib/systemd/system/000077500000000000000000000000001477331507500177735ustar00rootroot00000000000000debomatic-0.40/usr/lib/systemd/system/debomatic.service000066400000000000000000000006701477331507500233070ustar00rootroot00000000000000[Unit] Description=Automatic build machine for Debian source package Documentation=https://deb-o-matic.readthedocs.io/ ConditionPathExists=/etc/debomatic/debomatic.conf [Service] Type=notify User=sbuild ExecStart=/usr/bin/debomatic -c /etc/debomatic/debomatic.conf -i ExecStop=/usr/bin/debomatic -c /etc/debomatic/debomatic.conf -q KillMode=process SendSIGKILL=no TimeoutStopSec=0 Restart=on-abnormal [Install] WantedBy=multi-user.target