Merge lp:~snappy-dev/snapcraft/core into lp:snapcraft

Proposed by roland wisdom
Status: Needs review
Proposed branch: lp:~snappy-dev/snapcraft/core
Merge into: lp:snapcraft
Diff against target: 17197 lines (+16068/-0)
191 files modified
.bzrignore (+14/-0)
.tarmac.sh (+2/-0)
COPYING (+674/-0)
HACKING.md (+48/-0)
README.md (+7/-0)
bin/snapcraft (+33/-0)
bin/snapcraft-coverage (+44/-0)
debian/changelog (+119/-0)
debian/compat (+1/-0)
debian/control (+59/-0)
debian/copyright (+22/-0)
debian/rules (+8/-0)
debian/snapcraft-examples.examples (+1/-0)
debian/snapcraft.install (+3/-0)
debian/source/format (+1/-0)
debian/source/options (+2/-0)
debian/tests/control (+11/-0)
debian/tests/runexamples (+2/-0)
debian/tests/runtests (+2/-0)
docs/intro.md (+95/-0)
docs/snapcraft-advanced-features.md (+188/-0)
docs/your-first-snap.md (+328/-0)
examples/downloader-with-wiki-parts/Makefile (+11/-0)
examples/downloader-with-wiki-parts/snapcraft.yaml (+17/-0)
examples/downloader-with-wiki-parts/test.c (+17/-0)
examples/godd/snapcraft.yaml (+20/-0)
examples/gopaste/Makefile (+8/-0)
examples/gopaste/gopaste (+10/-0)
examples/gopaste/snapcraft.yaml (+15/-0)
examples/java-hello-world/Makefile (+7/-0)
examples/java-hello-world/build.xml (+39/-0)
examples/java-hello-world/snapcraft.yaml (+17/-0)
examples/java-hello-world/src/oata/HelloWorld.java (+10/-0)
examples/java-hello-world/wrapper (+2/-0)
examples/libpipeline/Makefile (+11/-0)
examples/libpipeline/snapcraft.yaml (+19/-0)
examples/libpipeline/test.c (+18/-0)
examples/py2-project/Makefile (+8/-0)
examples/py2-project/sha3sum.py (+14/-0)
examples/py2-project/snapcraft.yaml (+20/-0)
examples/py3-project/sha3sum.py (+14/-0)
examples/py3-project/snapcraft.yaml (+18/-0)
examples/qmldemo/demo.qml (+9/-0)
examples/qmldemo/meta/package.yaml (+10/-0)
examples/qmldemo/meta/readme.md (+4/-0)
examples/qmldemo/snapcraft.yaml (+22/-0)
examples/ros/icon.svg (+1/-0)
examples/ros/snapcraft.yaml (+27/-0)
examples/ros/src/CMakeLists.txt (+47/-0)
examples/ros/src/beginner_tutorials/CMakeLists.txt (+39/-0)
examples/ros/src/beginner_tutorials/msg/Num.msg (+1/-0)
examples/ros/src/beginner_tutorials/package.xml (+42/-0)
examples/ros/src/beginner_tutorials/src/add_two_ints_client.cpp (+30/-0)
examples/ros/src/beginner_tutorials/src/add_two_ints_server.cpp (+23/-0)
examples/ros/src/beginner_tutorials/src/listener.cpp (+60/-0)
examples/ros/src/beginner_tutorials/src/talker.cpp (+87/-0)
examples/ros/src/beginner_tutorials/srv/AddTwoInts.srv (+4/-0)
examples/tomcat-maven-webapp/Makefile (+6/-0)
examples/tomcat-maven-webapp/snapcraft.yaml (+25/-0)
examples/tomcat-maven-webapp/tomcat-conf/catalina.policy (+250/-0)
examples/tomcat-maven-webapp/tomcat-conf/catalina.properties (+145/-0)
examples/tomcat-maven-webapp/tomcat-conf/context.xml (+36/-0)
examples/tomcat-maven-webapp/tomcat-conf/logging.properties (+64/-0)
examples/tomcat-maven-webapp/tomcat-conf/server.xml (+142/-0)
examples/tomcat-maven-webapp/tomcat-conf/tomcat-users.xml (+39/-0)
examples/tomcat-maven-webapp/tomcat-conf/tomcat-users.xsd (+43/-0)
examples/tomcat-maven-webapp/tomcat-conf/web.xml (+4664/-0)
examples/tomcat-maven-webapp/wrapper (+23/-0)
examples/webcam-webui/config.py (+60/-0)
examples/webcam-webui/setup.py (+16/-0)
examples/webcam-webui/snapcraft.yaml (+38/-0)
examples/webcam-webui/webcam-webui (+17/-0)
integration-tests/data/assemble/Makefile (+11/-0)
integration-tests/data/assemble/bin/assemble-echo (+2/-0)
integration-tests/data/assemble/bin/not-wrapped (+2/-0)
integration-tests/data/assemble/binary1 (+2/-0)
integration-tests/data/assemble/binary1.after (+5/-0)
integration-tests/data/assemble/service-start (+2/-0)
integration-tests/data/assemble/service-stop (+2/-0)
integration-tests/data/assemble/snapcraft.yaml (+20/-0)
integration-tests/data/assemble/snappy/package.yaml (+11/-0)
integration-tests/data/assemble/snappy/readme.md (+3/-0)
integration-tests/data/assemble/subdir/binary2 (+2/-0)
integration-tests/data/build-tools/Makefile (+6/-0)
integration-tests/data/build-tools/icon.svg (+1/-0)
integration-tests/data/build-tools/snapcraft.yaml (+15/-0)
integration-tests/data/bzr-head/snapcraft.yaml (+12/-0)
integration-tests/data/bzr-tag/snapcraft.yaml (+13/-0)
integration-tests/data/conflicts/Makefile (+8/-0)
integration-tests/data/conflicts/p2/Makefile (+8/-0)
integration-tests/data/conflicts/p2/test.c (+4/-0)
integration-tests/data/conflicts/snapcraft.yaml (+15/-0)
integration-tests/data/conflicts/test.c (+4/-0)
integration-tests/data/dependencies/p1/Makefile (+9/-0)
integration-tests/data/dependencies/p1/p1.c (+4/-0)
integration-tests/data/dependencies/p1/p1.h (+1/-0)
integration-tests/data/dependencies/p2/Makefile (+9/-0)
integration-tests/data/dependencies/p2/p2.c (+6/-0)
integration-tests/data/dependencies/p2/p2.h (+1/-0)
integration-tests/data/dependencies/p3/Makefile (+8/-0)
integration-tests/data/dependencies/p3/p3.c (+7/-0)
integration-tests/data/dependencies/snapcraft.yaml (+19/-0)
integration-tests/data/framework-policy/snapcraft.yaml (+14/-0)
integration-tests/data/git-branch/snapcraft.yaml (+13/-0)
integration-tests/data/git-head/snapcraft.yaml (+12/-0)
integration-tests/data/git-tag/snapcraft.yaml (+13/-0)
integration-tests/data/hg-branch/snapcraft.yaml (+13/-0)
integration-tests/data/hg-head/snapcraft.yaml (+12/-0)
integration-tests/data/hg-tag/snapcraft.yaml (+13/-0)
integration-tests/data/local-plugin/parts/plugins/x_local_plugin.py (+22/-0)
integration-tests/data/local-plugin/snapcraft.yaml (+11/-0)
integration-tests/data/local-source/Makefile (+7/-0)
integration-tests/data/local-source/snapcraft.yaml (+11/-0)
integration-tests/data/pip-requirements/icon.svg (+2/-0)
integration-tests/data/pip-requirements/requirements.txt (+1/-0)
integration-tests/data/pip-requirements/snapcraft.yaml (+14/-0)
integration-tests/data/pypi-config/config.py (+61/-0)
integration-tests/data/pypi-config/setup.py (+16/-0)
integration-tests/data/pypi-config/snapcraft.yaml (+16/-0)
integration-tests/data/simple-cmake/CMakeLists.txt (+3/-0)
integration-tests/data/simple-cmake/snapcraft.yaml (+11/-0)
integration-tests/data/simple-cmake/test.c (+4/-0)
integration-tests/data/simple-copy/snapcraft.yaml (+12/-0)
integration-tests/data/simple-copy/src (+1/-0)
integration-tests/data/simple-make-filesets/Makefile (+12/-0)
integration-tests/data/simple-make-filesets/snapcraft.yaml (+26/-0)
integration-tests/data/simple-make/Makefile (+8/-0)
integration-tests/data/simple-make/snapcraft.yaml (+11/-0)
integration-tests/data/simple-make/test.c (+4/-0)
integration-tests/data/simple-maven/my-app/pom.xml (+18/-0)
integration-tests/data/simple-maven/my-app/src/main/java/com/canonical/testapp/App.java (+13/-0)
integration-tests/data/simple-maven/my-app/src/main/resources/META-INF/application.properties (+1/-0)
integration-tests/data/simple-maven/my-app/src/test/java/com/canonical/testapp/AppTest.java (+38/-0)
integration-tests/data/simple-maven/snapcraft.yaml (+15/-0)
integration-tests/data/simple-scons/SConstruct (+22/-0)
integration-tests/data/simple-scons/main.c (+5/-0)
integration-tests/data/simple-scons/snapcraft.yaml (+13/-0)
integration-tests/data/simple-tar/snapcraft.yaml (+36/-0)
integration-tests/data/wiki/snapcraft.yaml (+16/-0)
integration-tests/manage.py (+20/-0)
integration-tests/runtests.sh (+75/-0)
integration-tests/units/examples.pxu (+10/-0)
integration-tests/units/jobs.pxu (+403/-0)
integration-tests/units/testplans.pxu (+9/-0)
runtests.sh (+123/-0)
schema/snapcraft.yaml (+128/-0)
setup.py (+39/-0)
snapcraft/__init__.py (+261/-0)
snapcraft/cmds.py (+409/-0)
snapcraft/common.py (+116/-0)
snapcraft/dirs.py (+30/-0)
snapcraft/help.py (+72/-0)
snapcraft/lifecycle.py (+373/-0)
snapcraft/log.py (+62/-0)
snapcraft/main.py (+148/-0)
snapcraft/manifest.txt (+110/-0)
snapcraft/meta.py (+249/-0)
snapcraft/plugins/ant.py (+63/-0)
snapcraft/plugins/autotools.py (+76/-0)
snapcraft/plugins/catkin.py (+275/-0)
snapcraft/plugins/cmake.py (+60/-0)
snapcraft/plugins/copy.py (+49/-0)
snapcraft/plugins/go.py (+77/-0)
snapcraft/plugins/jdk.py (+37/-0)
snapcraft/plugins/make.py (+38/-0)
snapcraft/plugins/maven.py (+81/-0)
snapcraft/plugins/python2.py (+144/-0)
snapcraft/plugins/python3.py (+143/-0)
snapcraft/plugins/qml.py (+119/-0)
snapcraft/plugins/roscore.py (+82/-0)
snapcraft/plugins/scons.py (+62/-0)
snapcraft/plugins/tar_content.py (+44/-0)
snapcraft/repo.py (+300/-0)
snapcraft/sources.py (+306/-0)
snapcraft/tests/__init__.py (+35/-0)
snapcraft/tests/fixture_setup.py (+29/-0)
snapcraft/tests/mock_plugin.py (+21/-0)
snapcraft/tests/test_base_plugin.py (+118/-0)
snapcraft/tests/test_cmds.py (+243/-0)
snapcraft/tests/test_common.py (+49/-0)
snapcraft/tests/test_copy_plugin.py (+75/-0)
snapcraft/tests/test_help.py (+38/-0)
snapcraft/tests/test_lifecycle.py (+243/-0)
snapcraft/tests/test_log.py (+87/-0)
snapcraft/tests/test_meta.py (+351/-0)
snapcraft/tests/test_repo.py (+111/-0)
snapcraft/tests/test_sources.py (+351/-0)
snapcraft/tests/test_wiki.py (+76/-0)
snapcraft/tests/test_yaml.py (+579/-0)
snapcraft/wiki.py (+71/-0)
snapcraft/yaml.py (+333/-0)
To merge this branch: bzr merge lp:~snappy-dev/snapcraft/core
Reviewer Review Type Date Requested Status
Snappy Developers Pending
Review via email: mp+423044@code.launchpad.net

Commit message

That’s good

Description of the change

Perfect

To post a comment you must log in.

Unmerged revisions

261. By Sergio Schvezov

Release changelog for 0.4

260. By Sergio Schvezov

Support combinations of --version, -v and version. Also order help by sergiusens approved by chipaca

259. By Sergio Schvezov

stat and chmod the actual file and not the target when removing suid/guid bits by sergiusens approved by elopio

258. By Sergio Schvezov

Fix path to binaries in the ros example by sergiusens approved by elopio

257. By Sergio Schvezov

Support --version with small note on snapcraft help by sergiusens approved by chipaca

256. By Sergio Schvezov

Listing plugins on help should not raise an exception by sergiusens approved by dholbach

255. By Daniel Holbach

Integrate all relevant information from https://developer.ubuntu.com/snappy/tutorials/build-snaps/ so it will be easier to maintain the docs for us. Fixed some other small issues along the way. by dholbach approved by sergiusens

254. By Sergio Schvezov

Adding a help command to get snapcraft help from the cli. by sergiusens approved by chipaca

253. By Sergio Schvezov

Add list-plugins by sergiusens approved by elopio,chipaca

252. By Sergio Schvezov

Plugins raise exception instead of true/false by sergiusens approved by elopio

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file '.bzrignore'
2--- .bzrignore 1970-01-01 00:00:00 +0000
3+++ .bzrignore 2022-05-19 22:01:22 +0000
4@@ -0,0 +1,14 @@
5+examples/*/parts/
6+examples/*/snap/
7+examples/*/stage/
8+examples/**/*.snap
9+tests/unit/parts/
10+tests/unit/snap/
11+tests/unit/stage/
12+build
13+dist
14+*.egg-info
15+.coverage**
16+htmlcov
17+__pycache__
18+docs/**.html
19
20=== added symlink '.gitignore'
21=== target is '.bzrignore'
22=== added file '.tarmac.sh'
23--- .tarmac.sh 1970-01-01 00:00:00 +0000
24+++ .tarmac.sh 2022-05-19 22:01:22 +0000
25@@ -0,0 +1,2 @@
26+#!/bin/sh
27+./runtests.sh
28
29=== added file 'COPYING'
30--- COPYING 1970-01-01 00:00:00 +0000
31+++ COPYING 2022-05-19 22:01:22 +0000
32@@ -0,0 +1,674 @@
33+ GNU GENERAL PUBLIC LICENSE
34+ Version 3, 29 June 2007
35+
36+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
37+ Everyone is permitted to copy and distribute verbatim copies
38+ of this license document, but changing it is not allowed.
39+
40+ Preamble
41+
42+ The GNU General Public License is a free, copyleft license for
43+software and other kinds of works.
44+
45+ The licenses for most software and other practical works are designed
46+to take away your freedom to share and change the works. By contrast,
47+the GNU General Public License is intended to guarantee your freedom to
48+share and change all versions of a program--to make sure it remains free
49+software for all its users. We, the Free Software Foundation, use the
50+GNU General Public License for most of our software; it applies also to
51+any other work released this way by its authors. You can apply it to
52+your programs, too.
53+
54+ When we speak of free software, we are referring to freedom, not
55+price. Our General Public Licenses are designed to make sure that you
56+have the freedom to distribute copies of free software (and charge for
57+them if you wish), that you receive source code or can get it if you
58+want it, that you can change the software or use pieces of it in new
59+free programs, and that you know you can do these things.
60+
61+ To protect your rights, we need to prevent others from denying you
62+these rights or asking you to surrender the rights. Therefore, you have
63+certain responsibilities if you distribute copies of the software, or if
64+you modify it: responsibilities to respect the freedom of others.
65+
66+ For example, if you distribute copies of such a program, whether
67+gratis or for a fee, you must pass on to the recipients the same
68+freedoms that you received. You must make sure that they, too, receive
69+or can get the source code. And you must show them these terms so they
70+know their rights.
71+
72+ Developers that use the GNU GPL protect your rights with two steps:
73+(1) assert copyright on the software, and (2) offer you this License
74+giving you legal permission to copy, distribute and/or modify it.
75+
76+ For the developers' and authors' protection, the GPL clearly explains
77+that there is no warranty for this free software. For both users' and
78+authors' sake, the GPL requires that modified versions be marked as
79+changed, so that their problems will not be attributed erroneously to
80+authors of previous versions.
81+
82+ Some devices are designed to deny users access to install or run
83+modified versions of the software inside them, although the manufacturer
84+can do so. This is fundamentally incompatible with the aim of
85+protecting users' freedom to change the software. The systematic
86+pattern of such abuse occurs in the area of products for individuals to
87+use, which is precisely where it is most unacceptable. Therefore, we
88+have designed this version of the GPL to prohibit the practice for those
89+products. If such problems arise substantially in other domains, we
90+stand ready to extend this provision to those domains in future versions
91+of the GPL, as needed to protect the freedom of users.
92+
93+ Finally, every program is threatened constantly by software patents.
94+States should not allow patents to restrict development and use of
95+software on general-purpose computers, but in those that do, we wish to
96+avoid the special danger that patents applied to a free program could
97+make it effectively proprietary. To prevent this, the GPL assures that
98+patents cannot be used to render the program non-free.
99+
100+ The precise terms and conditions for copying, distribution and
101+modification follow.
102+
103+ TERMS AND CONDITIONS
104+
105+ 0. Definitions.
106+
107+ "This License" refers to version 3 of the GNU General Public License.
108+
109+ "Copyright" also means copyright-like laws that apply to other kinds of
110+works, such as semiconductor masks.
111+
112+ "The Program" refers to any copyrightable work licensed under this
113+License. Each licensee is addressed as "you". "Licensees" and
114+"recipients" may be individuals or organizations.
115+
116+ To "modify" a work means to copy from or adapt all or part of the work
117+in a fashion requiring copyright permission, other than the making of an
118+exact copy. The resulting work is called a "modified version" of the
119+earlier work or a work "based on" the earlier work.
120+
121+ A "covered work" means either the unmodified Program or a work based
122+on the Program.
123+
124+ To "propagate" a work means to do anything with it that, without
125+permission, would make you directly or secondarily liable for
126+infringement under applicable copyright law, except executing it on a
127+computer or modifying a private copy. Propagation includes copying,
128+distribution (with or without modification), making available to the
129+public, and in some countries other activities as well.
130+
131+ To "convey" a work means any kind of propagation that enables other
132+parties to make or receive copies. Mere interaction with a user through
133+a computer network, with no transfer of a copy, is not conveying.
134+
135+ An interactive user interface displays "Appropriate Legal Notices"
136+to the extent that it includes a convenient and prominently visible
137+feature that (1) displays an appropriate copyright notice, and (2)
138+tells the user that there is no warranty for the work (except to the
139+extent that warranties are provided), that licensees may convey the
140+work under this License, and how to view a copy of this License. If
141+the interface presents a list of user commands or options, such as a
142+menu, a prominent item in the list meets this criterion.
143+
144+ 1. Source Code.
145+
146+ The "source code" for a work means the preferred form of the work
147+for making modifications to it. "Object code" means any non-source
148+form of a work.
149+
150+ A "Standard Interface" means an interface that either is an official
151+standard defined by a recognized standards body, or, in the case of
152+interfaces specified for a particular programming language, one that
153+is widely used among developers working in that language.
154+
155+ The "System Libraries" of an executable work include anything, other
156+than the work as a whole, that (a) is included in the normal form of
157+packaging a Major Component, but which is not part of that Major
158+Component, and (b) serves only to enable use of the work with that
159+Major Component, or to implement a Standard Interface for which an
160+implementation is available to the public in source code form. A
161+"Major Component", in this context, means a major essential component
162+(kernel, window system, and so on) of the specific operating system
163+(if any) on which the executable work runs, or a compiler used to
164+produce the work, or an object code interpreter used to run it.
165+
166+ The "Corresponding Source" for a work in object code form means all
167+the source code needed to generate, install, and (for an executable
168+work) run the object code and to modify the work, including scripts to
169+control those activities. However, it does not include the work's
170+System Libraries, or general-purpose tools or generally available free
171+programs which are used unmodified in performing those activities but
172+which are not part of the work. For example, Corresponding Source
173+includes interface definition files associated with source files for
174+the work, and the source code for shared libraries and dynamically
175+linked subprograms that the work is specifically designed to require,
176+such as by intimate data communication or control flow between those
177+subprograms and other parts of the work.
178+
179+ The Corresponding Source need not include anything that users
180+can regenerate automatically from other parts of the Corresponding
181+Source.
182+
183+ The Corresponding Source for a work in source code form is that
184+same work.
185+
186+ 2. Basic Permissions.
187+
188+ All rights granted under this License are granted for the term of
189+copyright on the Program, and are irrevocable provided the stated
190+conditions are met. This License explicitly affirms your unlimited
191+permission to run the unmodified Program. The output from running a
192+covered work is covered by this License only if the output, given its
193+content, constitutes a covered work. This License acknowledges your
194+rights of fair use or other equivalent, as provided by copyright law.
195+
196+ You may make, run and propagate covered works that you do not
197+convey, without conditions so long as your license otherwise remains
198+in force. You may convey covered works to others for the sole purpose
199+of having them make modifications exclusively for you, or provide you
200+with facilities for running those works, provided that you comply with
201+the terms of this License in conveying all material for which you do
202+not control copyright. Those thus making or running the covered works
203+for you must do so exclusively on your behalf, under your direction
204+and control, on terms that prohibit them from making any copies of
205+your copyrighted material outside their relationship with you.
206+
207+ Conveying under any other circumstances is permitted solely under
208+the conditions stated below. Sublicensing is not allowed; section 10
209+makes it unnecessary.
210+
211+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
212+
213+ No covered work shall be deemed part of an effective technological
214+measure under any applicable law fulfilling obligations under article
215+11 of the WIPO copyright treaty adopted on 20 December 1996, or
216+similar laws prohibiting or restricting circumvention of such
217+measures.
218+
219+ When you convey a covered work, you waive any legal power to forbid
220+circumvention of technological measures to the extent such circumvention
221+is effected by exercising rights under this License with respect to
222+the covered work, and you disclaim any intention to limit operation or
223+modification of the work as a means of enforcing, against the work's
224+users, your or third parties' legal rights to forbid circumvention of
225+technological measures.
226+
227+ 4. Conveying Verbatim Copies.
228+
229+ You may convey verbatim copies of the Program's source code as you
230+receive it, in any medium, provided that you conspicuously and
231+appropriately publish on each copy an appropriate copyright notice;
232+keep intact all notices stating that this License and any
233+non-permissive terms added in accord with section 7 apply to the code;
234+keep intact all notices of the absence of any warranty; and give all
235+recipients a copy of this License along with the Program.
236+
237+ You may charge any price or no price for each copy that you convey,
238+and you may offer support or warranty protection for a fee.
239+
240+ 5. Conveying Modified Source Versions.
241+
242+ You may convey a work based on the Program, or the modifications to
243+produce it from the Program, in the form of source code under the
244+terms of section 4, provided that you also meet all of these conditions:
245+
246+ a) The work must carry prominent notices stating that you modified
247+ it, and giving a relevant date.
248+
249+ b) The work must carry prominent notices stating that it is
250+ released under this License and any conditions added under section
251+ 7. This requirement modifies the requirement in section 4 to
252+ "keep intact all notices".
253+
254+ c) You must license the entire work, as a whole, under this
255+ License to anyone who comes into possession of a copy. This
256+ License will therefore apply, along with any applicable section 7
257+ additional terms, to the whole of the work, and all its parts,
258+ regardless of how they are packaged. This License gives no
259+ permission to license the work in any other way, but it does not
260+ invalidate such permission if you have separately received it.
261+
262+ d) If the work has interactive user interfaces, each must display
263+ Appropriate Legal Notices; however, if the Program has interactive
264+ interfaces that do not display Appropriate Legal Notices, your
265+ work need not make them do so.
266+
267+ A compilation of a covered work with other separate and independent
268+works, which are not by their nature extensions of the covered work,
269+and which are not combined with it such as to form a larger program,
270+in or on a volume of a storage or distribution medium, is called an
271+"aggregate" if the compilation and its resulting copyright are not
272+used to limit the access or legal rights of the compilation's users
273+beyond what the individual works permit. Inclusion of a covered work
274+in an aggregate does not cause this License to apply to the other
275+parts of the aggregate.
276+
277+ 6. Conveying Non-Source Forms.
278+
279+ You may convey a covered work in object code form under the terms
280+of sections 4 and 5, provided that you also convey the
281+machine-readable Corresponding Source under the terms of this License,
282+in one of these ways:
283+
284+ a) Convey the object code in, or embodied in, a physical product
285+ (including a physical distribution medium), accompanied by the
286+ Corresponding Source fixed on a durable physical medium
287+ customarily used for software interchange.
288+
289+ b) Convey the object code in, or embodied in, a physical product
290+ (including a physical distribution medium), accompanied by a
291+ written offer, valid for at least three years and valid for as
292+ long as you offer spare parts or customer support for that product
293+ model, to give anyone who possesses the object code either (1) a
294+ copy of the Corresponding Source for all the software in the
295+ product that is covered by this License, on a durable physical
296+ medium customarily used for software interchange, for a price no
297+ more than your reasonable cost of physically performing this
298+ conveying of source, or (2) access to copy the
299+ Corresponding Source from a network server at no charge.
300+
301+ c) Convey individual copies of the object code with a copy of the
302+ written offer to provide the Corresponding Source. This
303+ alternative is allowed only occasionally and noncommercially, and
304+ only if you received the object code with such an offer, in accord
305+ with subsection 6b.
306+
307+ d) Convey the object code by offering access from a designated
308+ place (gratis or for a charge), and offer equivalent access to the
309+ Corresponding Source in the same way through the same place at no
310+ further charge. You need not require recipients to copy the
311+ Corresponding Source along with the object code. If the place to
312+ copy the object code is a network server, the Corresponding Source
313+ may be on a different server (operated by you or a third party)
314+ that supports equivalent copying facilities, provided you maintain
315+ clear directions next to the object code saying where to find the
316+ Corresponding Source. Regardless of what server hosts the
317+ Corresponding Source, you remain obligated to ensure that it is
318+ available for as long as needed to satisfy these requirements.
319+
320+ e) Convey the object code using peer-to-peer transmission, provided
321+ you inform other peers where the object code and Corresponding
322+ Source of the work are being offered to the general public at no
323+ charge under subsection 6d.
324+
325+ A separable portion of the object code, whose source code is excluded
326+from the Corresponding Source as a System Library, need not be
327+included in conveying the object code work.
328+
329+ A "User Product" is either (1) a "consumer product", which means any
330+tangible personal property which is normally used for personal, family,
331+or household purposes, or (2) anything designed or sold for incorporation
332+into a dwelling. In determining whether a product is a consumer product,
333+doubtful cases shall be resolved in favor of coverage. For a particular
334+product received by a particular user, "normally used" refers to a
335+typical or common use of that class of product, regardless of the status
336+of the particular user or of the way in which the particular user
337+actually uses, or expects or is expected to use, the product. A product
338+is a consumer product regardless of whether the product has substantial
339+commercial, industrial or non-consumer uses, unless such uses represent
340+the only significant mode of use of the product.
341+
342+ "Installation Information" for a User Product means any methods,
343+procedures, authorization keys, or other information required to install
344+and execute modified versions of a covered work in that User Product from
345+a modified version of its Corresponding Source. The information must
346+suffice to ensure that the continued functioning of the modified object
347+code is in no case prevented or interfered with solely because
348+modification has been made.
349+
350+ If you convey an object code work under this section in, or with, or
351+specifically for use in, a User Product, and the conveying occurs as
352+part of a transaction in which the right of possession and use of the
353+User Product is transferred to the recipient in perpetuity or for a
354+fixed term (regardless of how the transaction is characterized), the
355+Corresponding Source conveyed under this section must be accompanied
356+by the Installation Information. But this requirement does not apply
357+if neither you nor any third party retains the ability to install
358+modified object code on the User Product (for example, the work has
359+been installed in ROM).
360+
361+ The requirement to provide Installation Information does not include a
362+requirement to continue to provide support service, warranty, or updates
363+for a work that has been modified or installed by the recipient, or for
364+the User Product in which it has been modified or installed. Access to a
365+network may be denied when the modification itself materially and
366+adversely affects the operation of the network or violates the rules and
367+protocols for communication across the network.
368+
369+ Corresponding Source conveyed, and Installation Information provided,
370+in accord with this section must be in a format that is publicly
371+documented (and with an implementation available to the public in
372+source code form), and must require no special password or key for
373+unpacking, reading or copying.
374+
375+ 7. Additional Terms.
376+
377+ "Additional permissions" are terms that supplement the terms of this
378+License by making exceptions from one or more of its conditions.
379+Additional permissions that are applicable to the entire Program shall
380+be treated as though they were included in this License, to the extent
381+that they are valid under applicable law. If additional permissions
382+apply only to part of the Program, that part may be used separately
383+under those permissions, but the entire Program remains governed by
384+this License without regard to the additional permissions.
385+
386+ When you convey a copy of a covered work, you may at your option
387+remove any additional permissions from that copy, or from any part of
388+it. (Additional permissions may be written to require their own
389+removal in certain cases when you modify the work.) You may place
390+additional permissions on material, added by you to a covered work,
391+for which you have or can give appropriate copyright permission.
392+
393+ Notwithstanding any other provision of this License, for material you
394+add to a covered work, you may (if authorized by the copyright holders of
395+that material) supplement the terms of this License with terms:
396+
397+ a) Disclaiming warranty or limiting liability differently from the
398+ terms of sections 15 and 16 of this License; or
399+
400+ b) Requiring preservation of specified reasonable legal notices or
401+ author attributions in that material or in the Appropriate Legal
402+ Notices displayed by works containing it; or
403+
404+ c) Prohibiting misrepresentation of the origin of that material, or
405+ requiring that modified versions of such material be marked in
406+ reasonable ways as different from the original version; or
407+
408+ d) Limiting the use for publicity purposes of names of licensors or
409+ authors of the material; or
410+
411+ e) Declining to grant rights under trademark law for use of some
412+ trade names, trademarks, or service marks; or
413+
414+ f) Requiring indemnification of licensors and authors of that
415+ material by anyone who conveys the material (or modified versions of
416+ it) with contractual assumptions of liability to the recipient, for
417+ any liability that these contractual assumptions directly impose on
418+ those licensors and authors.
419+
420+ All other non-permissive additional terms are considered "further
421+restrictions" within the meaning of section 10. If the Program as you
422+received it, or any part of it, contains a notice stating that it is
423+governed by this License along with a term that is a further
424+restriction, you may remove that term. If a license document contains
425+a further restriction but permits relicensing or conveying under this
426+License, you may add to a covered work material governed by the terms
427+of that license document, provided that the further restriction does
428+not survive such relicensing or conveying.
429+
430+ If you add terms to a covered work in accord with this section, you
431+must place, in the relevant source files, a statement of the
432+additional terms that apply to those files, or a notice indicating
433+where to find the applicable terms.
434+
435+ Additional terms, permissive or non-permissive, may be stated in the
436+form of a separately written license, or stated as exceptions;
437+the above requirements apply either way.
438+
439+ 8. Termination.
440+
441+ You may not propagate or modify a covered work except as expressly
442+provided under this License. Any attempt otherwise to propagate or
443+modify it is void, and will automatically terminate your rights under
444+this License (including any patent licenses granted under the third
445+paragraph of section 11).
446+
447+ However, if you cease all violation of this License, then your
448+license from a particular copyright holder is reinstated (a)
449+provisionally, unless and until the copyright holder explicitly and
450+finally terminates your license, and (b) permanently, if the copyright
451+holder fails to notify you of the violation by some reasonable means
452+prior to 60 days after the cessation.
453+
454+ Moreover, your license from a particular copyright holder is
455+reinstated permanently if the copyright holder notifies you of the
456+violation by some reasonable means, this is the first time you have
457+received notice of violation of this License (for any work) from that
458+copyright holder, and you cure the violation prior to 30 days after
459+your receipt of the notice.
460+
461+ Termination of your rights under this section does not terminate the
462+licenses of parties who have received copies or rights from you under
463+this License. If your rights have been terminated and not permanently
464+reinstated, you do not qualify to receive new licenses for the same
465+material under section 10.
466+
467+ 9. Acceptance Not Required for Having Copies.
468+
469+ You are not required to accept this License in order to receive or
470+run a copy of the Program. Ancillary propagation of a covered work
471+occurring solely as a consequence of using peer-to-peer transmission
472+to receive a copy likewise does not require acceptance. However,
473+nothing other than this License grants you permission to propagate or
474+modify any covered work. These actions infringe copyright if you do
475+not accept this License. Therefore, by modifying or propagating a
476+covered work, you indicate your acceptance of this License to do so.
477+
478+ 10. Automatic Licensing of Downstream Recipients.
479+
480+ Each time you convey a covered work, the recipient automatically
481+receives a license from the original licensors, to run, modify and
482+propagate that work, subject to this License. You are not responsible
483+for enforcing compliance by third parties with this License.
484+
485+ An "entity transaction" is a transaction transferring control of an
486+organization, or substantially all assets of one, or subdividing an
487+organization, or merging organizations. If propagation of a covered
488+work results from an entity transaction, each party to that
489+transaction who receives a copy of the work also receives whatever
490+licenses to the work the party's predecessor in interest had or could
491+give under the previous paragraph, plus a right to possession of the
492+Corresponding Source of the work from the predecessor in interest, if
493+the predecessor has it or can get it with reasonable efforts.
494+
495+ You may not impose any further restrictions on the exercise of the
496+rights granted or affirmed under this License. For example, you may
497+not impose a license fee, royalty, or other charge for exercise of
498+rights granted under this License, and you may not initiate litigation
499+(including a cross-claim or counterclaim in a lawsuit) alleging that
500+any patent claim is infringed by making, using, selling, offering for
501+sale, or importing the Program or any portion of it.
502+
503+ 11. Patents.
504+
505+ A "contributor" is a copyright holder who authorizes use under this
506+License of the Program or a work on which the Program is based. The
507+work thus licensed is called the contributor's "contributor version".
508+
509+ A contributor's "essential patent claims" are all patent claims
510+owned or controlled by the contributor, whether already acquired or
511+hereafter acquired, that would be infringed by some manner, permitted
512+by this License, of making, using, or selling its contributor version,
513+but do not include claims that would be infringed only as a
514+consequence of further modification of the contributor version. For
515+purposes of this definition, "control" includes the right to grant
516+patent sublicenses in a manner consistent with the requirements of
517+this License.
518+
519+ Each contributor grants you a non-exclusive, worldwide, royalty-free
520+patent license under the contributor's essential patent claims, to
521+make, use, sell, offer for sale, import and otherwise run, modify and
522+propagate the contents of its contributor version.
523+
524+ In the following three paragraphs, a "patent license" is any express
525+agreement or commitment, however denominated, not to enforce a patent
526+(such as an express permission to practice a patent or covenant not to
527+sue for patent infringement). To "grant" such a patent license to a
528+party means to make such an agreement or commitment not to enforce a
529+patent against the party.
530+
531+ If you convey a covered work, knowingly relying on a patent license,
532+and the Corresponding Source of the work is not available for anyone
533+to copy, free of charge and under the terms of this License, through a
534+publicly available network server or other readily accessible means,
535+then you must either (1) cause the Corresponding Source to be so
536+available, or (2) arrange to deprive yourself of the benefit of the
537+patent license for this particular work, or (3) arrange, in a manner
538+consistent with the requirements of this License, to extend the patent
539+license to downstream recipients. "Knowingly relying" means you have
540+actual knowledge that, but for the patent license, your conveying the
541+covered work in a country, or your recipient's use of the covered work
542+in a country, would infringe one or more identifiable patents in that
543+country that you have reason to believe are valid.
544+
545+ If, pursuant to or in connection with a single transaction or
546+arrangement, you convey, or propagate by procuring conveyance of, a
547+covered work, and grant a patent license to some of the parties
548+receiving the covered work authorizing them to use, propagate, modify
549+or convey a specific copy of the covered work, then the patent license
550+you grant is automatically extended to all recipients of the covered
551+work and works based on it.
552+
553+ A patent license is "discriminatory" if it does not include within
554+the scope of its coverage, prohibits the exercise of, or is
555+conditioned on the non-exercise of one or more of the rights that are
556+specifically granted under this License. You may not convey a covered
557+work if you are a party to an arrangement with a third party that is
558+in the business of distributing software, under which you make payment
559+to the third party based on the extent of your activity of conveying
560+the work, and under which the third party grants, to any of the
561+parties who would receive the covered work from you, a discriminatory
562+patent license (a) in connection with copies of the covered work
563+conveyed by you (or copies made from those copies), or (b) primarily
564+for and in connection with specific products or compilations that
565+contain the covered work, unless you entered into that arrangement,
566+or that patent license was granted, prior to 28 March 2007.
567+
568+ Nothing in this License shall be construed as excluding or limiting
569+any implied license or other defenses to infringement that may
570+otherwise be available to you under applicable patent law.
571+
572+ 12. No Surrender of Others' Freedom.
573+
574+ If conditions are imposed on you (whether by court order, agreement or
575+otherwise) that contradict the conditions of this License, they do not
576+excuse you from the conditions of this License. If you cannot convey a
577+covered work so as to satisfy simultaneously your obligations under this
578+License and any other pertinent obligations, then as a consequence you may
579+not convey it at all. For example, if you agree to terms that obligate you
580+to collect a royalty for further conveying from those to whom you convey
581+the Program, the only way you could satisfy both those terms and this
582+License would be to refrain entirely from conveying the Program.
583+
584+ 13. Use with the GNU Affero General Public License.
585+
586+ Notwithstanding any other provision of this License, you have
587+permission to link or combine any covered work with a work licensed
588+under version 3 of the GNU Affero General Public License into a single
589+combined work, and to convey the resulting work. The terms of this
590+License will continue to apply to the part which is the covered work,
591+but the special requirements of the GNU Affero General Public License,
592+section 13, concerning interaction through a network will apply to the
593+combination as such.
594+
595+ 14. Revised Versions of this License.
596+
597+ The Free Software Foundation may publish revised and/or new versions of
598+the GNU General Public License from time to time. Such new versions will
599+be similar in spirit to the present version, but may differ in detail to
600+address new problems or concerns.
601+
602+ Each version is given a distinguishing version number. If the
603+Program specifies that a certain numbered version of the GNU General
604+Public License "or any later version" applies to it, you have the
605+option of following the terms and conditions either of that numbered
606+version or of any later version published by the Free Software
607+Foundation. If the Program does not specify a version number of the
608+GNU General Public License, you may choose any version ever published
609+by the Free Software Foundation.
610+
611+ If the Program specifies that a proxy can decide which future
612+versions of the GNU General Public License can be used, that proxy's
613+public statement of acceptance of a version permanently authorizes you
614+to choose that version for the Program.
615+
616+ Later license versions may give you additional or different
617+permissions. However, no additional obligations are imposed on any
618+author or copyright holder as a result of your choosing to follow a
619+later version.
620+
621+ 15. Disclaimer of Warranty.
622+
623+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
624+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
625+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
626+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
627+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
628+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
629+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
630+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
631+
632+ 16. Limitation of Liability.
633+
634+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
635+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
636+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
637+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
638+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
639+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
640+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
641+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
642+SUCH DAMAGES.
643+
644+ 17. Interpretation of Sections 15 and 16.
645+
646+ If the disclaimer of warranty and limitation of liability provided
647+above cannot be given local legal effect according to their terms,
648+reviewing courts shall apply local law that most closely approximates
649+an absolute waiver of all civil liability in connection with the
650+Program, unless a warranty or assumption of liability accompanies a
651+copy of the Program in return for a fee.
652+
653+ END OF TERMS AND CONDITIONS
654+
655+ How to Apply These Terms to Your New Programs
656+
657+ If you develop a new program, and you want it to be of the greatest
658+possible use to the public, the best way to achieve this is to make it
659+free software which everyone can redistribute and change under these terms.
660+
661+ To do so, attach the following notices to the program. It is safest
662+to attach them to the start of each source file to most effectively
663+state the exclusion of warranty; and each file should have at least
664+the "copyright" line and a pointer to where the full notice is found.
665+
666+ <one line to give the program's name and a brief idea of what it does.>
667+ Copyright (C) <year> <name of author>
668+
669+ This program is free software: you can redistribute it and/or modify
670+ it under the terms of the GNU General Public License as published by
671+ the Free Software Foundation, either version 3 of the License, or
672+ (at your option) any later version.
673+
674+ This program is distributed in the hope that it will be useful,
675+ but WITHOUT ANY WARRANTY; without even the implied warranty of
676+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
677+ GNU General Public License for more details.
678+
679+ You should have received a copy of the GNU General Public License
680+ along with this program. If not, see <http://www.gnu.org/licenses/>.
681+
682+Also add information on how to contact you by electronic and paper mail.
683+
684+ If the program does terminal interaction, make it output a short
685+notice like this when it starts in an interactive mode:
686+
687+ <program> Copyright (C) <year> <name of author>
688+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
689+ This is free software, and you are welcome to redistribute it
690+ under certain conditions; type `show c' for details.
691+
692+The hypothetical commands `show w' and `show c' should show the appropriate
693+parts of the General Public License. Of course, your program's commands
694+might be different; for a GUI interface, you would use an "about box".
695+
696+ You should also get your employer (if you work as a programmer) or school,
697+if any, to sign a "copyright disclaimer" for the program, if necessary.
698+For more information on this, and how to apply and follow the GNU GPL, see
699+<http://www.gnu.org/licenses/>.
700+
701+ The GNU General Public License does not permit incorporating your program
702+into proprietary programs. If your program is a subroutine library, you
703+may consider it more useful to permit linking proprietary applications with
704+the library. If this is what you want to do, use the GNU Lesser General
705+Public License instead of this License. But first, please read
706+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
707
708=== added file 'HACKING.md'
709--- HACKING.md 1970-01-01 00:00:00 +0000
710+++ HACKING.md 2022-05-19 22:01:22 +0000
711@@ -0,0 +1,48 @@
712+# Snapcraft
713+
714+## Running
715+
716+To see all the commands and options, run `snapcraft --help`.
717+
718+## Testing
719+
720+Simply run the top level testing script:
721+
722+ ./runtests.sh
723+
724+- If you want to get a test coverage report, install python3-coverage before running the tests:
725+
726+ sudo apt-get install python3-coverage
727+
728+
729+- If you don't want to run the plainbox integration tests, you can skip them by setting SNAPCRAFT_TESTS_SKIP_PLAINBOX=1 in your environment.
730+
731+- If you are on 15.04 or earlier, you will need to run:
732+
733+ sudo add-apt-repository ppa:hardware-certification/public
734+
735+### PPA
736+
737+You can install the daily build PPA by running:
738+
739+ sudo add-apt-repository ppa:snappy-dev/snapcraft-daily
740+
741+## Hacking
742+
743+We'd love the help!
744+
745+- Submit merge requests against lp:snapcraft
746+- Our mailing list is snappy-devel@lists.ubuntu.com
747+- We can also be found on the #snappy IRC channel on Freenode
748+
749+### Project Layout
750+
751+- **bin:** Holds the main snapcraft script. Putting this bin in your PATH or directly running scripts from it will find the rest of the source tree automatically.
752+
753+- **examples:** Entering the subdirectories and running `../../bin/snapcraft snap` will generally yield interesting results. These examples will give you an idea of what snapcraft can do. These examples are not used during automated testing, they are simply for experimenting.
754+
755+- **plugins:** Holds yaml metadata for the current snapcraft plugins.
756+
757+- **tests:** Tests, obviously. `unit` holds Python unit tests and `plainbox` holds plainbox integration tests.
758+
759+- **snapcraft:** The Python module that houses the core snapcraft logic. The `plugins` subdirectory holds the code for each plugin.
760
761=== added file 'README.md'
762--- README.md 1970-01-01 00:00:00 +0000
763+++ README.md 2022-05-19 22:01:22 +0000
764@@ -0,0 +1,7 @@
765+# Snapcraft
766+
767+Snapcraft allows easy crafting of snap packages for the Ubuntu Core
768+transactional system.
769+
770+See docs/intro.md for details about the concepts behind
771+snapcraft. There is also a tutorial in docs/tutorial.md.
772\ No newline at end of file
773
774=== added directory 'bin'
775=== added file 'bin/snapcraft'
776--- bin/snapcraft 1970-01-01 00:00:00 +0000
777+++ bin/snapcraft 2022-05-19 22:01:22 +0000
778@@ -0,0 +1,33 @@
779+#!/usr/bin/python3
780+# -*- Mode:Python; indent-tabs-mode:nil; tab-width:4 -*-
781+#
782+# Copyright (C) 2015 Canonical Ltd
783+#
784+# This program is free software: you can redistribute it and/or modify
785+# it under the terms of the GNU General Public License version 3 as
786+# published by the Free Software Foundation.
787+#
788+# This program is distributed in the hope that it will be useful,
789+# but WITHOUT ANY WARRANTY; without even the implied warranty of
790+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
791+# GNU General Public License for more details.
792+#
793+# You should have received a copy of the GNU General Public License
794+# along with this program. If not, see <http://www.gnu.org/licenses/>.
795+
796+import os
797+import sys
798+
799+# make running from bzr snapshot easy
800+topdir = os.path.abspath(os.path.join(__file__, "..", ".."))
801+if os.path.exists(os.path.join(topdir, 'setup.py')):
802+ sys.path = [topdir] + sys.path
803+
804+# now import
805+import snapcraft.main
806+import snapcraft.dirs
807+
808+
809+if __name__ == "__main__":
810+ snapcraft.dirs.setup_dirs()
811+ snapcraft.main.main()
812
813=== added file 'bin/snapcraft-coverage'
814--- bin/snapcraft-coverage 1970-01-01 00:00:00 +0000
815+++ bin/snapcraft-coverage 2022-05-19 22:01:22 +0000
816@@ -0,0 +1,44 @@
817+#!/usr/bin/python3
818+# -*- Mode:Python; indent-tabs-mode:nil; tab-width:4 -*-
819+#
820+# Copyright (C) 2015 Canonical Ltd
821+#
822+# This program is free software: you can redistribute it and/or modify
823+# it under the terms of the GNU General Public License version 3 as
824+# published by the Free Software Foundation.
825+#
826+# This program is distributed in the hope that it will be useful,
827+# but WITHOUT ANY WARRANTY; without even the implied warranty of
828+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
829+# GNU General Public License for more details.
830+#
831+# You should have received a copy of the GNU General Public License
832+# along with this program. If not, see <http://www.gnu.org/licenses/>.
833+
834+import os
835+import sys
836+
837+import coverage
838+
839+# make running from bzr snapshot easy
840+topdir = os.path.abspath(os.path.join(__file__, "..", ".."))
841+if os.path.exists(os.path.join(topdir, 'setup.py')):
842+ sys.path = [topdir] + sys.path
843+
844+# now import
845+import snapcraft.main
846+import snapcraft.dirs
847+
848+
849+if __name__ == "__main__":
850+ cov = coverage.coverage(
851+ data_file=os.path.join(topdir, '.coverage'), data_suffix=True,
852+ branch=True, source=['snapcraft'])
853+ cov.start()
854+ try:
855+ snapcraft.dirs.setup_dirs()
856+ snapcraft.main.main()
857+ except:
858+ cov.stop()
859+ cov.save()
860+ raise
861
862=== added directory 'debian'
863=== added file 'debian/changelog'
864--- debian/changelog 1970-01-01 00:00:00 +0000
865+++ debian/changelog 2022-05-19 22:01:22 +0000
866@@ -0,0 +1,119 @@
867+snapcraft (0.4) xenial; urgency=medium
868+
869+ * Core:
870+ - Install build packages if package is removed but not purged
871+ (LP: #1507814)
872+ - Don't crash on help for unexisting plugin (LP: #1510954)
873+ - Don't follow links when checking for suid/guid for unpacked
874+ debian package contents (LP: #1511161)
875+ - Raise exceptions for plugin errors (LP: #1481122)
876+ - Exit cleanly with an error when using the source keyword with a local
877+ file (LP: #1499424)
878+ - Add version flags to cli (LP: #1501222)
879+ - Search the wiki for a part if the 'plugin' keyword is missing
880+ (LP: #1506205)
881+ - Developer documentation for the plugin base class added (LP: #1507075)
882+ - Add subcommand to list plugins (LP: #1510160)
883+ - Add subcommand for help (LP: #1510683)
884+ * Plugins:
885+ - autotools: use autoreconf if needed (LP: #1507648)
886+ - maven: support maven flags (LP: #1502031)
887+ - catkin: new plugin for building ros projects (LP: #1506201)
888+ * Packaging:
889+ - Run tests on package build (LP: #1506096)
890+ - debian/control: python3-fixtures and python3-testscenarios build deps
891+ (LP: #1507573)
892+
893+ -- Sergio Schvezov <sergio.schvezov@canonical.com> Thu, 29 Oct 2015 12:52:04 -0300
894+
895+snapcraft (0.3) wily; urgency=medium
896+
897+ * Core imprevements:
898+ - Add deprecation messages for deprecated keywords (LP: #1501494)
899+ - Remove suid/guid from staged packages (LP: #1503495)
900+ - Autodetect tar sources (LP: #1500726)
901+ - Better logging if output is not a tty (LP: #1500887)
902+ - Improved error message when a plugin is not found (LP: #1501980)
903+ * Plugin improvements:
904+ - Types instead of plugin as a keyword (LP: #1500857)
905+ - Plugin names no longer have '-project' as a suffix (LP: #1501496)
906+ - Local plugins can override built-in ones with x-[plugin].py
907+ (LP: #1500873)
908+ * New plugins:
909+ - Scons support added (LP: #1500758)
910+ * Bug fixes:
911+ - Multi python3 install support (LP: #1499429)
912+ - Use the system series for stage-packages (LP: #1501035)
913+ - Handle framework policies (LP: #1501037).
914+ - Don't infer a plugin name from a part name (LP: #1501413)
915+ - Installation errors during build-package's setup now errors
916+ (LP: #1502449)
917+ - When a dangling symlink is found, try and satisfy it with a
918+ package on the host (LP: #1500505)
919+ - Support reextraction when using tar sources (LP: #1500728)
920+ - Do not require geoip (LP: #1499158)
921+ * Examples:
922+ - Fix build requirements issue with python2 project (LP: #1501997)
923+ - Add missing plugin keyword for the python2 example (LP: #1501977)
924+ - Updated the upstream tarball for tomcat (LP: #1504174)
925+
926+ -- Sergio Schvezov <sergio.schvezov@canonical.com> Fri, 25 Sep 2015 12:46:23 +0200
927+
928+snapcraft (0.2.1) wily; urgency=medium
929+
930+ * New upstream release (LP: #1499265)
931+ * Brown-paper bag release:
932+ - Fix install path of examples. Thanks Martin Pitt for noticing.
933+ - Allow using local sources through an env var (mostly useful for
934+ Launchpad building).
935+
936+ -- Daniel Holbach <daniel.holbach@ubuntu.com> Thu, 24 Sep 2015 11:37:36 +0200
937+
938+snapcraft (0.2) wily; urgency=medium
939+
940+ * Better setuptools support:
941+ - Better support python-setuptools (LP: #1481864),
942+ - Used builddir as a base for setup.py overrides (LP: #1498212),
943+ - Fix build (LP: #1494825),
944+ * Plugin fixes:
945+ - Add demo.qml back to the snapcraft.yaml for the QML Demo (LP: #1491301),
946+ - stage package libgudev-1.0-0, which makes the godd snap actually
947+ work (LP: #1498347),
948+ - Wrap setup.py calls to configure the shebang writer (LP: #1486680),
949+ - Update tomcat upstream URL, fixes example again (LP: #1491303),
950+ - Add libgudev-1.0-dev as build-tools for godd example,
951+ Ensure C library configuration tools don't use system
952+ paths (LP: #1496789),
953+ * Snapcraft cli:
954+ - On clean, check the contents of the parts dir only if it
955+ exists. (LP: #1497371)
956+ - Load the config before trying to run (LP: #1498140),
957+ - Notify user why the password is being requested (LP: #1481499),
958+ - Fix numerous issues in snapcraft run (LP: #1486659),
959+ * Snapcraft stage-packages:
960+ - Enable ports for architectures that are not amd64 or
961+ i386 (LP: #1498157),
962+ - Improving stage-package handling (LP: #1497453, LP: #1497582)
963+ - Fetch all packages in a single download run with proper
964+ progress (LP: #1498333),
965+ * Snapcraft wiki queries excessive (LP: #1496381),
966+ * Snapcraft internals:
967+ - Add 'simple' and 'has-leftovers' flags to all integration tests job
968+ units. (LP: #1484596),
969+ - Regex for binary and service names (LP: #1495662),
970+ - Provide a nice error when tabs found in snapcraft.yaml (LP: #1477875),
971+ - Use relative paths for image creation (LP: #1497108),
972+ - Use the python logger (LP: #1476452),
973+ - snapcraft now has less exit points (LP: #1477639),
974+ - Depend and Build-Depend on python3-requests (LP: #1496363),
975+ - Add autopkgtest, reshuffle build-deps accordingly (LP: #1496392),
976+ - Fix "snapcraft run" (LP: #1484720),
977+ * Examples packaged (LP: #1498189).
978+
979+ -- Sergio Schvezov <sergio.schvezov@canonical.com> Wed, 24 Sep 2015 14:23:24 -0300
980+
981+snapcraft (0.1) wily; urgency=low
982+
983+ * Initial release
984+
985+ -- Michael Terry <mterry@ubuntu.com> Mon, 6 Jul 2015 21:55:21 -0500
986
987=== added file 'debian/compat'
988--- debian/compat 1970-01-01 00:00:00 +0000
989+++ debian/compat 2022-05-19 22:01:22 +0000
990@@ -0,0 +1,1 @@
991+9
992
993=== added file 'debian/control'
994--- debian/control 1970-01-01 00:00:00 +0000
995+++ debian/control 2022-05-19 22:01:22 +0000
996@@ -0,0 +1,59 @@
997+Source: snapcraft
998+Section: utils
999+Priority: extra
1000+Maintainer: Snapcraft Team <snappy-devel@lists.ubuntu.com>
1001+Build-Depends: bzr,
1002+ cmake,
1003+ debhelper (>= 9),
1004+ dh-python,
1005+ python3 (>= 3.4),
1006+ python3-apt,
1007+ python3-fixtures,
1008+ python3-jsonschema,
1009+ python3-lxml,
1010+ python3-pkg-resources,
1011+ python3-requests,
1012+ python3-setuptools,
1013+ python3-testscenarios,
1014+ python3-yaml,
1015+ ubuntu-snappy-cli,
1016+ wget,
1017+ xz-utils
1018+Homepage: https://launchpad.net/snapcraft
1019+Vcs-Bzr: lp:snapcraft
1020+Standards-Version: 3.9.6
1021+
1022+Package: snapcraft
1023+Architecture: all
1024+Depends: bzr,
1025+ dpkg-dev,
1026+ git,
1027+ mercurial,
1028+ python3-apt,
1029+ python3-jsonschema,
1030+ python3-lxml,
1031+ python3-pkg-resources,
1032+ python3-requests,
1033+ python3-yaml,
1034+ sudo,
1035+ ubuntu-snappy-cli,
1036+ wget,
1037+ xz-utils,
1038+ ${misc:Depends},
1039+ ${python3:Depends}
1040+Description: easily craft snaps
1041+ Snapcraft aims to make upstream developers' lives easier and as such is not
1042+ a single toolset, but instead is a collection of tools that enable the
1043+ natural workflow of an upstream to be extended with a simple release step
1044+ into Snappy.
1045+
1046+Package: snapcraft-examples
1047+Architecture: all
1048+Depends: snapcraft (= ${binary:Version}), ${misc:Depends}, ${python3:Depends}
1049+Description: examples for snapcraft
1050+ Snapcraft aims to make upstream developers' lives easier and as such is not
1051+ a single toolset, but instead is a collection of tools that enable the
1052+ natural workflow of an upstream to be extended with a simple release step
1053+ into Snappy.
1054+ .
1055+ This package contains examples for snapcraft.
1056
1057=== added file 'debian/copyright'
1058--- debian/copyright 1970-01-01 00:00:00 +0000
1059+++ debian/copyright 2022-05-19 22:01:22 +0000
1060@@ -0,0 +1,22 @@
1061+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
1062+Upstream-Name: Snapcraft
1063+Upstream-Contact: Snapcraft Team <snappy-devel@lists.ubuntu.com>
1064+Source: https://launchpad.net/snapcraft
1065+
1066+Files: *
1067+Copyright: 2015 Canonical Ltd
1068+License: GPL-3
1069+ This program is free software: you can redistribute it and/or modify
1070+ it under the terms of the GNU General Public License version 3 as
1071+ published by the Free Software Foundation.
1072+ .
1073+ This program is distributed in the hope that it will be useful,
1074+ but WITHOUT ANY WARRANTY; without even the implied warranty of
1075+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1076+ GNU General Public License for more details.
1077+ .
1078+ You should have received a copy of the GNU General Public License
1079+ along with this program. If not, see <http://www.gnu.org/licenses/>.
1080+ .
1081+ On Debian systems, the full text of the GNU General Public License
1082+ version 3 can be found in the file /usr/share/common-licenses/GPL-3.
1083
1084=== added file 'debian/rules'
1085--- debian/rules 1970-01-01 00:00:00 +0000
1086+++ debian/rules 2022-05-19 22:01:22 +0000
1087@@ -0,0 +1,8 @@
1088+#!/usr/bin/make -f
1089+# -*- Mode:Makefile; indent-tabs-mode:t; tab-width:4 -*-
1090+
1091+%:
1092+ dh $@ --with python3 --buildsystem=pybuild
1093+
1094+override_dh_compress:
1095+ dh_compress -Xusr/share/doc/snapcraft-examples/examples
1096
1097=== added file 'debian/snapcraft-examples.examples'
1098--- debian/snapcraft-examples.examples 1970-01-01 00:00:00 +0000
1099+++ debian/snapcraft-examples.examples 2022-05-19 22:01:22 +0000
1100@@ -0,0 +1,1 @@
1101+examples/*
1102
1103=== added file 'debian/snapcraft.install'
1104--- debian/snapcraft.install 1970-01-01 00:00:00 +0000
1105+++ debian/snapcraft.install 2022-05-19 22:01:22 +0000
1106@@ -0,0 +1,3 @@
1107+/usr/bin
1108+/usr/lib/python*
1109+/usr/share/snapcraft
1110
1111=== added directory 'debian/source'
1112=== added file 'debian/source/format'
1113--- debian/source/format 1970-01-01 00:00:00 +0000
1114+++ debian/source/format 2022-05-19 22:01:22 +0000
1115@@ -0,0 +1,1 @@
1116+3.0 (native)
1117
1118=== added file 'debian/source/options'
1119--- debian/source/options 1970-01-01 00:00:00 +0000
1120+++ debian/source/options 2022-05-19 22:01:22 +0000
1121@@ -0,0 +1,2 @@
1122+# Ignore standard files (like .bzr)
1123+tar-ignore
1124
1125=== added directory 'debian/tests'
1126=== added file 'debian/tests/control'
1127--- debian/tests/control 1970-01-01 00:00:00 +0000
1128+++ debian/tests/control 2022-05-19 22:01:22 +0000
1129@@ -0,0 +1,11 @@
1130+Tests: runtests
1131+ runexamples
1132+Restrictions: allow-stderr, isolation-container, rw-build-tree
1133+Depends: @,
1134+ build-essential,
1135+ pep8,
1136+ plainbox,
1137+ pyflakes,
1138+ python3-fixtures,
1139+ python3-mccabe,
1140+ python3-testscenarios
1141
1142=== added file 'debian/tests/runexamples'
1143--- debian/tests/runexamples 1970-01-01 00:00:00 +0000
1144+++ debian/tests/runexamples 2022-05-19 22:01:22 +0000
1145@@ -0,0 +1,2 @@
1146+#!/bin/sh
1147+./runtests.sh plainbox examples
1148
1149=== added file 'debian/tests/runtests'
1150--- debian/tests/runtests 1970-01-01 00:00:00 +0000
1151+++ debian/tests/runtests 2022-05-19 22:01:22 +0000
1152@@ -0,0 +1,2 @@
1153+#!/bin/sh
1154+./runtests.sh
1155
1156=== added directory 'docs'
1157=== added file 'docs/intro.md'
1158--- docs/intro.md 1970-01-01 00:00:00 +0000
1159+++ docs/intro.md 2022-05-19 22:01:22 +0000
1160@@ -0,0 +1,95 @@
1161+# Intro
1162+
1163+Snapcraft is a build and packaging tool which helps you package your software
1164+as a snap. It makes it easy to incorporate components from different sources
1165+and build technologies or solutions.
1166+
1167+# Key concepts
1168+
1169+A `.snap` package for the Ubuntu Core system contains all its
1170+dependencies. This has a couple of advantages over traditional `deb` or
1171+`rpm` based dependency handling, the most important being that a
1172+developer can always be assured that there are no regressions triggered by
1173+changes to the system underneath their app.
1174+
1175+Snapcraft makes bundling these dependencies easy by allowing you to
1176+specify them as "parts" in the `snapcraft.yaml` file.
1177+
1178+# Snappy
1179+
1180+Snappy Ubuntu Core is a new rendition of Ubuntu with transactional updates - a
1181+minimal server image with the same libraries as today's Ubuntu, but
1182+applications are provided through a simpler mechanism.
1183+
1184+Snappy apps and Ubuntu Core itself can be upgraded atomically and rolled back
1185+if needed. Apps are also strictly confined and sandboxed to safeguard your
1186+data and system.
1187+
1188+## Parts
1189+
1190+A central aspect of a snapcraft recipe is a "part". A part is a piece
1191+of software or data that the snap package requires to work or to
1192+build other parts. Each part is managed by a snapcraft plugin and parts
1193+are usually independent of each other.
1194+
1195+## Plugin
1196+
1197+Each part has a `plugin` associated to it, this `plugin` provides the mechanism
1198+to handle it. Parts are driven through plugins, there are a variety of plugins
1199+already included for python 2 and 3, go, java, and cmake or autotools based
1200+projects.
1201+
1202+## Lifecycle
1203+
1204+Each part goes through the following steps:
1205+
1206+### Pull
1207+
1208+The first is that each part is pulled. This step will download
1209+content, e.g. checkout a git repository or download a binary component
1210+like the Java SDK. Snapcraft will create a `parts/` directory with
1211+sub-directories like `parts/part-name/src` for each part that contains
1212+the downloaded content.
1213+
1214+### Build
1215+
1216+The next step is that each part is built in its `parts/part-name/build`
1217+directory and installs itself into `parts/part-name/install`.
1218+
1219+### Stage
1220+
1221+After the build of each part the parts are combined into a single
1222+directory tree that is called the "staging area". It can be found
1223+under the `./stage` directory.
1224+
1225+This `./stage` directory is useful for building outside code that isn't in the
1226+`snapcraft.yaml` recipe against the snap contents. For example, you might
1227+build a local project against the libraries in `./stage` by running `snapcraft
1228+shell make`. Though in general, you are encouraged to add even local
1229+projects to snapcraft.yaml with a local `source:` path.
1230+
1231+### Snap
1232+
1233+The snap step moves the data into a `./snap` directory. It contains only
1234+the content that will be put into the final snap package, unlike the staging
1235+area which may include some development files not destined for your package.
1236+
1237+The Snappy metadata information about your project will also now be placed in
1238+`./snap/meta`. Snapcraft takes care of generating all the meta-data Snappy
1239+expects. For a breakdown of what this is, have a look at our [Snappy developer
1240+reference](https://developer.ubuntu.com/snappy/guides/packaging-format-apps/).
1241+
1242+This `./snap` directory is useful for inspecting what is going into your snap
1243+and to make any final post-processing on snapcraft's output.
1244+
1245+### Assemble
1246+
1247+The final step builds a snap package out of the `snap` directory. This `.snap`
1248+file can be uploaded to the Ubuntu Store and published directly to Snappy
1249+users.
1250+
1251+# Next
1252+
1253+After introducing the key concept of snapcraft it is probably a good
1254+time to look at [the tutorial](your-first-snap.md) to create your first snap
1255+with snapcraft.
1256
1257=== added file 'docs/snapcraft-advanced-features.md'
1258--- docs/snapcraft-advanced-features.md 1970-01-01 00:00:00 +0000
1259+++ docs/snapcraft-advanced-features.md 2022-05-19 22:01:22 +0000
1260@@ -0,0 +1,188 @@
1261+# Snapcraft: Advanced features
1262+
1263+Once you have built [your first snap](your-first-snap.md), you will probably
1264+want to learn more about snapcraft's more advanced features. Having a look at
1265+our selection of examples is a good idea, as we want it to be a good showcase
1266+of what is possible and generally relevant.
1267+
1268+## Examples
1269+
1270+Our showcase can be found in the actual source of `snapcraft` itself. Check
1271+it out by simply running:
1272+
1273+ bzr branch lp:snapcraft
1274+ cd snapcraft/examples
1275+
1276+Inspecting the source locally will make easier to build the examples and
1277+play around with them. (You can
1278+[view them online](https://bazaar.launchpad.net/~snappy-dev/snapcraft/core/files/head:/examples/)
1279+as well.)
1280+
1281+### Playing around with the examples
1282+
1283+If you just checked out the `snapcraft` source and inspect the examples, you
1284+can start off your explorations by reading the accompanying `snapcraft.yaml`
1285+file and running:
1286+
1287+ ../../bin/snapcraft
1288+
1289+This will inform you of all the steps taken during the creation of the snap.
1290+
1291+## Defining your parts
1292+
1293+Once you have noted down all the general information about your snap
1294+(like description, vendor information and everything else), naming
1295+the individual parts will define the stucture of your `snapcraft.yaml` file.
1296+Think of parts as individual components of your snap: Where do you pull them
1297+from? How are they built?
1298+
1299+### Prerequisites during the build
1300+
1301+The example named `downloader-with-wiki-parts` shows how very easy you can
1302+make sure that the relevant build dependencies are installed:
1303+
1304+ build-packages: [libssl-dev]
1305+
1306+The above will install the `libssl-dev` package from the Ubuntu archive before
1307+an attempted build. If you need a specific version of libssl-dev or a custom
1308+build, you will need to specify a separate part.
1309+
1310+Also note that the above will not define which libraries are shipped with the
1311+app. It merely makes sure you have all the relevant build tools installed.
1312+
1313+
1314+### Pulling and building
1315+
1316+If you just intend to pull and build the source, take a look at the `gopaste`
1317+example. In its `snapcraft.yaml` file you can find just this one `parts`
1318+paragraph:
1319+
1320+ parts:
1321+ gopaste:
1322+ plugin: go
1323+ source: git://github.com/wisnij/gopaste/gopasted
1324+
1325+It starts off with the name of the specific part (`gopaste` here), the origin
1326+of the part (it's a `git` URL) and how to build it (plugin: `go`).
1327+Other possible scenarios would be Bazaar or Mercurial branches, or local
1328+directories.
1329+
1330+### Mixing and matching plugins
1331+
1332+An interesting example is `py2-project` because it defines only one part
1333+(`spongeshaker`), but uses two different plugins (`python2` and `make`) to
1334+assemble and build the snap:
1335+
1336+ parts:
1337+ spongeshaker:
1338+ plugin: python2
1339+ source: git://github.com/markokr/spongeshaker.git
1340+ make-project:
1341+ plugin: make
1342+ source: .
1343+
1344+The example above mixes and matches parts of different origin. Locally it
1345+provides a binary we intend to ship (the `sha3sum.py` script) and a
1346+`Makefile` (to install our script in the right place).
1347+
1348+`spongeshaker` is a python library we will need to pull from git, build as
1349+a python project and bundle along with our script.
1350+
1351+A possible use-case for the above would be if you just intend to ship a small
1352+binary which you maintain, but require a library you need to build from git
1353+as opposed to simply including it from the Ubuntu archives.
1354+
1355+What's happening during the `snapcraft` run is:
1356+
1357+1. Get `spongeshaker` from `git`.
1358+1. Build it as a python project (which will include installing the python
1359+ library in the right place).
1360+1. Running `make` (from the local `Makefile`) and thus installing our
1361+ `sha3sum.py` script in the right place.
1362+
1363+### Putting your parts in order
1364+
1365+If your app is comprised of multiple parts, it might be necessary to build
1366+and stage parts in a particular order. This can be done by using the `after`
1367+keyword:
1368+
1369+ parts:
1370+ pipelinetest:
1371+ plugin: make
1372+ source: lp:~mterry/+junk/pipelinetest
1373+ after:
1374+ - libpipeline
1375+ libpipeline:
1376+ plugin: autotools
1377+ source: lp:~mterry/libpipeline/printf
1378+
1379+
1380+In the case of the `libpipeline` example above, the part named `pipelinetest`
1381+will be built after `libpipeline`. Especially if you need specific
1382+functionality during a build or as part of checks during the `snap` phase,
1383+this will be handy.
1384+
1385+### Re-using parts
1386+
1387+With snapcraft we want to make it easy to learn from other app vendors and
1388+re-use parts which have worked well for them.
1389+
1390+In the `downloader-with-wiki-parts` example, you can see that the `main`
1391+part is built:
1392+
1393+ after:
1394+ - curl
1395+
1396+As we never define the `curl` part in the above example, `snapcraft` will
1397+check the Ubuntu Wiki, which is where we currently host examples of
1398+successful snapcraft parts. The build order in this case would be `curl`,
1399+then `main`.
1400+
1401+
1402+## Finishing steps
1403+
1404+### Individual files
1405+
1406+If you are planning to provide binaries and services to the users of your
1407+apps, you need to specify them in your definition first. It's just a matter
1408+of enumerating them.
1409+
1410+The `godd` example has one binary:
1411+
1412+ binaries:
1413+ godd:
1414+ exec: ./bin/godd
1415+
1416+The above will take care of making the script executable, adding it to the
1417+user's path and install it in the right place.
1418+
1419+For a simple service we can take a look at `gopaste`:
1420+
1421+ services:
1422+ gopaste:
1423+ description: "gopaste"
1424+ start: bin/gopasted
1425+
1426+You define a name for the service, describe it (so log messages are more
1427+descriptive), declare how to run the service and that's it. For more
1428+thoughts on services and their security, visit the
1429+[snappy policy](https://developer.ubuntu.com/en/snappy/guides/security-policy/).
1430+
1431+
1432+### Limiting the number of installed files
1433+
1434+To check the list of files included in your snap, you can use `dpkg -c` on
1435+the resulting `.snap` file. If you find that certain files should not be
1436+shipped to the user (download size being just one factor), you can
1437+explicitly tell `snapcraft` which files to snap:
1438+
1439+ snap:
1440+ - usr/lib/x86_64-linux-gnu/libgudev-1.0.so*
1441+ - usr/lib/x86_64-linux-gnu/libobject-2.0.so*
1442+ - usr/lib/x86_64-linux-gnu/libglib-2.0.so*
1443+ - bin/godd*
1444+
1445+Here `godd` further defines the list of files to be placed in the app
1446+during the `snap` phase. As you can see above, globs (using asterisks as
1447+wildcard characters) are a good way of handling complexities within the
1448+directory structure.
1449
1450=== added file 'docs/your-first-snap.md'
1451--- docs/your-first-snap.md 1970-01-01 00:00:00 +0000
1452+++ docs/your-first-snap.md 2022-05-19 22:01:22 +0000
1453@@ -0,0 +1,328 @@
1454+# Snapcraft Tutorial
1455+
1456+Let's make a snap from scratch using Snapcraft! We'll pick something a little
1457+interesting: a webcam server.
1458+
1459+## Preparation
1460+
1461+You'll want a webcam and a Snappy device. We'll assume you have those,
1462+but if you need help setting up a Snappy install, there is help
1463+[online](https://developer.ubuntu.com/en/snappy/start/).
1464+
1465+(Even if you don't have either of those, you can still follow along. You just
1466+won't be able to use the final snap package you create. But you'll get to see
1467+how Snapcraft works, which is still super rewarding.)
1468+
1469+You should also install Snapcraft:
1470+
1471+ $ sudo add-apt-repository ppa:snappy-dev/tools
1472+ $ sudo apt-get update
1473+ $ sudo apt-get install snapcraft
1474+
1475+## Approach
1476+
1477+This example is easy because we won't be doing much of the heavy lifting
1478+ourselves. We're going to integrate a couple pieces of code together to make
1479+an interesting app.
1480+
1481+Namely, we'll combine a web server with a webcam program and combine
1482+them to serve a new frame every ten seconds.
1483+
1484+> The resulting package is also part of the examples directory in the
1485+> [snapcraft sources](http://bazaar.launchpad.net/~snappy-dev/snapcraft/core/files/head:/examples/webcam-webui/)
1486+
1487+### The Web Server
1488+
1489+Go has a simple web server in its standard libraries. So let's just use that.
1490+
1491+It's trivial to write a complete (but basic) web server in a few lines:
1492+
1493+ package main
1494+ import "net/http"
1495+ func main() {
1496+ panic(http.ListenAndServe(":8080", http.FileServer(http.Dir("."))))
1497+ }
1498+
1499+This will serve the current directory on port `:8080`. If there is an
1500+`index.html` in the current directory, it will be served. Otherwise a
1501+directory listing will be shown.
1502+
1503+This code is hosted on a simple GitHub
1504+[repository](https://github.com/mikix/golang-static-http).
1505+
1506+### The Webcam Program
1507+
1508+There is a webcam program provided in the Ubuntu archives called `fswebcam`.
1509+It has a lot of neat features. But all we'll be needing for now is its ability
1510+to take a webcam freeze frame and drop it to a file by calling it like so:
1511+
1512+ $ fswebcam output.jpg
1513+
1514+## Snapcraft Recipe
1515+
1516+OK, let's create a Snapcraft recipe that combines the above programs into a
1517+useful snap.
1518+
1519+Snapcraft reads a single file, `snapcraft.yaml`, which tells it how to combine
1520+code. It contains a list of `parts`, or pieces of code, and some metadata for
1521+the final snap it will create. But let's not worry about the metadata yet.
1522+
1523+### Initializing a project
1524+
1525+To get started with a base template create a folder that will hold your
1526+project, and initialize it:
1527+
1528+ $ mkdir webcam-webui
1529+ $ cd webcam-webui
1530+ $ snapcraft init
1531+
1532+then open the created snapcraft.yaml and edit the templated values for `name`,
1533+`version`, `vendor`, `summary` and `description`. You can make it look like
1534+this:
1535+
1536+ name: webcam-webui
1537+ version: 1
1538+ vendor: You <you@example.com>
1539+ summary: Webcam web UI
1540+ description: Exposes your webcam over a web UI
1541+ icon: icon.png
1542+
1543+and copy over an icon to `icon.png` or change the path accordingly (if you
1544+change the path just make sure it is part of your project directory and that
1545+the path is relative to be able to share your snapcrafting):
1546+
1547+ $ cp /usr/share/icons/hicolor/64/mimetypes/text-x-apport.png ./icon.png
1548+
1549+If you run `snapcraft` now, it will complain about not having any `parts`.
1550+
1551+We will look more into this metadata in a bit, but first let's look at adding
1552+some `parts`.
1553+
1554+### Web Server Part
1555+
1556+Let's start with the web server.
1557+
1558+ parts:
1559+ cam:
1560+ plugin: go
1561+ source: git://github.com/mikix/golang-static-http
1562+
1563+You've just defined a `part` inside `parts` named `cam`, but you
1564+could call it anything. That part has a two options: A `plugin` option that
1565+tells Snapcraft how to interpret the part (in this case, it's a Go project),
1566+and a `source` option telling Snapcraft where to download the code.
1567+
1568+Go ahead and append the above contents to your recently created
1569+`snapcraft.yaml`.
1570+
1571+Now we can build and "stage" this recipe. Staging just means putting the output
1572+of the parts in a common folder that has the same layout as the snap we'll
1573+eventually create. It lets you look at how the snap is constructed and make
1574+sure everything is in place.
1575+
1576+ $ snapcraft stage
1577+
1578+You'll see a bunch of output, including Snapcraft downloading the Go compiler
1579+if not already installed on your host build environment.
1580+It will use this to compile the code found on GitHub. Eventually when it is
1581+done, you'll be able to inspect the `./stage` folder and see the web server
1582+executable sitting in `./stage/bin`:
1583+
1584+ $ ls stage/bin
1585+ golang-static-http
1586+
1587+### Adding an Ubuntu dependency to a part.
1588+
1589+Now let's add the webcam program `fswebcam` to our snap. Edit `snapcraft.yaml`
1590+to make the `cam` part look like:
1591+
1592+ parts:
1593+ cam:
1594+ plugin: go
1595+ source: git://github.com/mikix/golang-static-http
1596+ stage-packages:
1597+ - fswebcam
1598+
1599+We've just added a new property to the `cam` part called `stage-packages` which
1600+contains a yaml list with any supporting Ubuntu package we want; in this case
1601+our list has one element with an entry for the `fswebcam` Ubuntu `deb` based
1602+package.
1603+
1604+Now let's stage our recipe again (and force it to go through the lifecycle).
1605+
1606+ $ snapcraft stage --force
1607+
1608+You'll also see Snapcraft downloading and unpacking all the Ubuntu packages
1609+into your snap. If you look at `./stage`, you'll see a lot more files now:
1610+
1611+ $ ls stage
1612+ bin etc lib usr var
1613+
1614+### A copy Part
1615+
1616+OK, so we have the two programs in our staging area. But how do we make them
1617+work together?
1618+
1619+We'll write a tiny little script that runs the server and `fswebcam` together:
1620+
1621+ #!/bin/sh
1622+ set -e
1623+
1624+ cd "$SNAP_APP_DATA_PATH"
1625+
1626+ golang-static-http &
1627+
1628+ while :; do
1629+ fswebcam shot.jpeg
1630+ sleep 10
1631+ done
1632+
1633+Save the above as `webcam-webui` and make it executable:
1634+
1635+ $ chmod a+x webcam-webui
1636+
1637+Alright, let's put this script in our snap too:
1638+
1639+ parts:
1640+ cam:
1641+ plugin: go
1642+ source: git://github.com/mikix/golang-static-http
1643+ stage-packages:
1644+ - fswebcam
1645+ glue:
1646+ plugin: copy
1647+ files:
1648+ webcam-webui: bin/webcam-webui
1649+
1650+The `copy` plugin takes a list of files to just directly copy without
1651+building or downloading anything. In this case, we just want to put our glue
1652+script in the `bin/` directory.
1653+
1654+If we run Snapcraft again, we won't be surprised:
1655+
1656+ $ snapcraft stage
1657+
1658+We should now see both the web server and our script in stage/bin (the webcam
1659+program is in stage/usr/bin since it came from Ubuntu):
1660+
1661+ $ ls stage/bin
1662+ golang-static-http webcam-webui
1663+
1664+### Filesets
1665+
1666+Some files in `./stage` could be needed for building dependent parts during the
1667+staging phase and some of these would be useful for the resulting snap. In
1668+this case we don't need some of these for either staging or the resulting snap,
1669+so let's add some filesets for the snap.
1670+
1671+Edit `snapcraft.yaml` once more to make the `cam` part in `parts` to look like:
1672+
1673+ parts:
1674+ cam:
1675+ plugin: go
1676+ source: git://github.com/mikix/golang-static-http
1677+ stage-packages:
1678+ - fswebcam
1679+ filesets:
1680+ fswebcam:
1681+ - usr/bin/fswebcam
1682+ - lib
1683+ - usr/lib
1684+ go-server:
1685+ - bin/golang-*
1686+ snap:
1687+ - $fswebcam
1688+ - $go-server
1689+ glue:
1690+ plugin: copy
1691+ files:
1692+ webcam-webui: bin/webcam-webui
1693+
1694+What we did was add two `filesets`, one named `fswebcam` and another one named
1695+`go-server` and then added a `snap` entry referencing these two filesets with
1696+`$`. All these filesets are inclusion based filesets, you can use `*` to glob
1697+many files and directories (if `*` is the first character, it needs to be
1698+quoted e.g.; `'*'`). An exclusion can be added by prefixing the file
1699+with a `-`. Additionally, you don't need to define a fileset, you can explicitly
1700+mention the file, directory or match under `snap` or `stage`.
1701+
1702+### Extending the Metadata
1703+
1704+The defined values in `snapcraft.yaml` are used to build the corresponding
1705+`meta` directory that holds all the package information.
1706+
1707+You can read all about the resulting [format of this metadata](https://developer.ubuntu.com/en/snappy/guides/packaging-format-apps/),
1708+but we'll assume here that you're already familiar.
1709+
1710+The templated values when `snapcraft init` was run did not hold any `parts`
1711+which we've filled along the way. It also did not define any `services` or
1712+`binaries` which we will be adding now
1713+
1714+Edit `snapcraft.yaml` once more and add the `services` and `binaries` entry,
1715+your resulting `snapcraft.yaml` should look very similar to:
1716+
1717+ name: webcam-webui
1718+ version: 1
1719+ vendor: You <you@example.com>
1720+ summary: Webcam web UI
1721+ description: Exposes your webcam over a web UI
1722+ icon: icon.png
1723+ services:
1724+ webcam-webui:
1725+ start: bin/webcam-webui
1726+
1727+ parts:
1728+ golang-static-http:
1729+ plugin: go
1730+ source: git://github.com/mikix/golang-static-http
1731+ stage-packages:
1732+ - fswebcam
1733+ glue:
1734+ plugin: copy
1735+ files:
1736+ webcam-webui: bin/webcam-webui
1737+
1738+and tell Snapcraft to actually make the snap package:
1739+
1740+ $ snapcraft
1741+
1742+You should now have a `webcam-webui_1_amd64.snap` file sitting in your
1743+directory (assuming you are running on amd64). Congratulations!
1744+
1745+
1746+## Next steps
1747+
1748+Well done, your first snap using snapcraft is ready. If you want to check out
1749+a few examples for reference or to get inspired, have a look at the
1750+`examples` directory in the source directory of snapcraft:
1751+
1752+ bzr branch lp:snapcraft
1753+ cd snapcraft/examples
1754+
1755+In `examples/` you can find a diverse set of examples which should help you
1756+get started on your own projects. To get a good overview of the snapcraft
1757+features used in these examples, check out
1758+[this article](snapcraft-advanced-features.md).
1759+
1760+If you should have any more questions, ask us on
1761+
1762+ * `#snappy` on `irc.freenode.net` or
1763+ * the
1764+ [snappy-app-devel](https://lists.ubuntu.com/mailman/listinfo/snappy-app-devel)
1765+ mailing list.
1766+ We recommend you subscribe to this mailing list where discussions around
1767+ snap apps take place, this will keep you up to date with new capabilities
1768+ for your snappy app, and best practices from fellow developers.
1769+
1770+### Publish your app to snappy users
1771+
1772+We'll be happy to help you on the mailing list to build a snappy package of
1773+anything that you are interested in. Choose a good name for it, and you can
1774+very easily share it in
1775+[ubuntu myapps](https://myapps.developer.ubuntu.com/dev/click-apps/?format=snap)
1776+where you go to share it with other snappy users.
1777+
1778+This is the same underlying hub that we use for Ubuntu phone apps, but
1779+snappy is a new iteration of that system. It only takes minutes from time of
1780+upload to being available to end users. The goal is to deliver your app
1781+directly to users instantly — you push a new version, they get it.
1782
1783=== added directory 'examples'
1784=== added directory 'examples/downloader-with-wiki-parts'
1785=== added file 'examples/downloader-with-wiki-parts/Makefile'
1786--- examples/downloader-with-wiki-parts/Makefile 1970-01-01 00:00:00 +0000
1787+++ examples/downloader-with-wiki-parts/Makefile 2022-05-19 22:01:22 +0000
1788@@ -0,0 +1,11 @@
1789+# -*- Mode:Makefile; indent-tabs-mode:t; tab-width:4 -*-
1790+
1791+all:
1792+ gcc -Wall -Wextra -Werror -pedantic -o test ./test.c $(CFLAGS) $(LDFLAGS) -lcurl -lssl -lcrypto -lssl -lcrypto -lz
1793+
1794+install:
1795+ install -d -m755 $(DESTDIR)/bin/
1796+ install -m755 ./test $(DESTDIR)/bin/test
1797+
1798+clean:
1799+ rm -f test
1800
1801=== added file 'examples/downloader-with-wiki-parts/icon.png'
1802Binary files examples/downloader-with-wiki-parts/icon.png and examples/downloader-with-wiki-parts/icon.png differ
1803=== added file 'examples/downloader-with-wiki-parts/snapcraft.yaml'
1804--- examples/downloader-with-wiki-parts/snapcraft.yaml 1970-01-01 00:00:00 +0000
1805+++ examples/downloader-with-wiki-parts/snapcraft.yaml 2022-05-19 22:01:22 +0000
1806@@ -0,0 +1,17 @@
1807+name: downloader
1808+version: 1.0
1809+vendor: "Sergio Schvezov <sergio.schvezov@canonical.com>"
1810+summary: curl based downloader
1811+description: this is an example package
1812+icon: icon.png
1813+binaries:
1814+ test:
1815+ exec: bin/test
1816+
1817+parts:
1818+ main:
1819+ plugin: make
1820+ source: .
1821+ after:
1822+ - curl
1823+build-packages: [libssl-dev]
1824
1825=== added file 'examples/downloader-with-wiki-parts/test.c'
1826--- examples/downloader-with-wiki-parts/test.c 1970-01-01 00:00:00 +0000
1827+++ examples/downloader-with-wiki-parts/test.c 2022-05-19 22:01:22 +0000
1828@@ -0,0 +1,17 @@
1829+#include <stdio.h>
1830+#include <curl/curl.h>
1831+
1832+int main(void)
1833+{
1834+ CURL *curl;
1835+
1836+ curl = curl_easy_init();
1837+ if(curl) {
1838+ curl_easy_setopt(curl, CURLOPT_URL, "ubuntu.com");
1839+ curl_easy_perform(curl);
1840+
1841+ curl_easy_cleanup(curl);
1842+ }
1843+
1844+ return 0;
1845+}
1846
1847=== added directory 'examples/godd'
1848=== added file 'examples/godd/icon.png'
1849Binary files examples/godd/icon.png and examples/godd/icon.png differ
1850=== added file 'examples/godd/snapcraft.yaml'
1851--- examples/godd/snapcraft.yaml 1970-01-01 00:00:00 +0000
1852+++ examples/godd/snapcraft.yaml 2022-05-19 22:01:22 +0000
1853@@ -0,0 +1,20 @@
1854+name: godd
1855+version: 1.0
1856+vendor: Michael Vogt <mvo@ubuntu.com>
1857+binaries:
1858+ godd:
1859+ exec: ./bin/godd
1860+summary: Simple dd like tool
1861+description: Written in go with support for device auto-detection via libgudev, you would need to use hw-assign to access devices.
1862+icon: icon.png
1863+
1864+parts:
1865+ godd:
1866+ plugin: go
1867+ source: git://github.com/mvo5/godd
1868+ stage-packages: [libgudev-1.0-dev]
1869+ snap:
1870+ - usr/lib/x86_64-linux-gnu/libgudev-1.0.so*
1871+ - usr/lib/x86_64-linux-gnu/libobject-2.0.so*
1872+ - usr/lib/x86_64-linux-gnu/libglib-2.0.so*
1873+ - bin/godd*
1874
1875=== added directory 'examples/gopaste'
1876=== added file 'examples/gopaste/Makefile'
1877--- examples/gopaste/Makefile 1970-01-01 00:00:00 +0000
1878+++ examples/gopaste/Makefile 2022-05-19 22:01:22 +0000
1879@@ -0,0 +1,8 @@
1880+# -*- Mode: Makefile; indent-tabs-mode:t; tab-width: 4 -*-
1881+
1882+all:
1883+ cp parts/gopaste/src/github.com/wisnij/gopaste/web.template snap/
1884+ cp -r parts/gopaste/src/github.com/wisnij/gopaste/static snap/
1885+ cp -r meta snap/
1886+ cp gopaste snap/bin/
1887+
1888
1889=== added file 'examples/gopaste/gopaste'
1890--- examples/gopaste/gopaste 1970-01-01 00:00:00 +0000
1891+++ examples/gopaste/gopaste 2022-05-19 22:01:22 +0000
1892@@ -0,0 +1,10 @@
1893+#!/bin/sh
1894+
1895+set -x
1896+
1897+cd $SNAP_APP_DATA_PATH
1898+cp $SNAP_APP_PATH/web.template .
1899+cp -r $SNAP_APP_PATH/static .
1900+export HOME=$SNAP_APP_DATA_PATH
1901+
1902+exec $SNAP_APP_PATH/bin/gopasted
1903
1904=== added file 'examples/gopaste/icon.png'
1905Binary files examples/gopaste/icon.png and examples/gopaste/icon.png differ
1906=== added file 'examples/gopaste/snapcraft.yaml'
1907--- examples/gopaste/snapcraft.yaml 1970-01-01 00:00:00 +0000
1908+++ examples/gopaste/snapcraft.yaml 2022-05-19 22:01:22 +0000
1909@@ -0,0 +1,15 @@
1910+name: gopaste
1911+version: 1.0
1912+vendor: Michael Terry <mterry@ubuntu.com>
1913+services:
1914+ gopaste:
1915+ description: "gopaste"
1916+ start: bin/gopasted
1917+summary: Simple pasting tool
1918+description: Runs a service that allows you to paste to and share.
1919+icon: icon.png
1920+
1921+parts:
1922+ gopaste:
1923+ plugin: go
1924+ source: git://github.com/wisnij/gopaste/gopasted
1925
1926=== added directory 'examples/java-hello-world'
1927=== added file 'examples/java-hello-world/Makefile'
1928--- examples/java-hello-world/Makefile 1970-01-01 00:00:00 +0000
1929+++ examples/java-hello-world/Makefile 2022-05-19 22:01:22 +0000
1930@@ -0,0 +1,7 @@
1931+# -*- Mode:Makefile; indent-tabs-mode:t; tab-width:4 -*-
1932+
1933+all:
1934+
1935+install:
1936+ install -d -m755 $(DESTDIR)/bin/
1937+ install -m755 wrapper $(DESTDIR)/bin/wrapper
1938
1939=== added file 'examples/java-hello-world/build.xml'
1940--- examples/java-hello-world/build.xml 1970-01-01 00:00:00 +0000
1941+++ examples/java-hello-world/build.xml 2022-05-19 22:01:22 +0000
1942@@ -0,0 +1,39 @@
1943+<project name="HelloWorld" basedir="." default="main">
1944+
1945+ <property name="src.dir" value="src"/>
1946+
1947+ <property name="build.dir" value="build"/>
1948+ <property name="classes.dir" value="${build.dir}/classes"/>
1949+ <property name="jar.dir" value="target"/>
1950+
1951+ <property name="main-class" value="oata.HelloWorld"/>
1952+
1953+
1954+
1955+ <target name="clean">
1956+ <delete dir="${build.dir}"/>
1957+ </target>
1958+
1959+ <target name="compile">
1960+ <mkdir dir="${classes.dir}"/>
1961+ <javac srcdir="${src.dir}" destdir="${classes.dir}"/>
1962+ </target>
1963+
1964+ <target name="jar" depends="compile">
1965+ <mkdir dir="${jar.dir}"/>
1966+ <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
1967+ <manifest>
1968+ <attribute name="Main-Class" value="${main-class}"/>
1969+ </manifest>
1970+ </jar>
1971+ </target>
1972+
1973+ <target name="run" depends="jar">
1974+ <java jar="${jar.dir}/${ant.project.name}.jar" fork="true"/>
1975+ </target>
1976+
1977+ <target name="clean-build" depends="clean,jar"/>
1978+
1979+ <target name="main" depends="clean,run"/>
1980+
1981+</project>
1982
1983=== added file 'examples/java-hello-world/icon.png'
1984Binary files examples/java-hello-world/icon.png and examples/java-hello-world/icon.png differ
1985=== added file 'examples/java-hello-world/snapcraft.yaml'
1986--- examples/java-hello-world/snapcraft.yaml 1970-01-01 00:00:00 +0000
1987+++ examples/java-hello-world/snapcraft.yaml 2022-05-19 22:01:22 +0000
1988@@ -0,0 +1,17 @@
1989+name: java-hello-world
1990+version: 0
1991+vendor: Michael Terry <mterry@ubuntu.com>
1992+binaries:
1993+ hello:
1994+ exec: bin/wrapper
1995+summary: A java example
1996+description: this is not much more than an example
1997+icon: icon.png
1998+
1999+parts:
2000+ local:
2001+ plugin: ant
2002+ source: .
2003+ wrapper:
2004+ plugin: make
2005+ source: .
2006
2007=== added directory 'examples/java-hello-world/src'
2008=== added directory 'examples/java-hello-world/src/oata'
2009=== added file 'examples/java-hello-world/src/oata/HelloWorld.java'
2010--- examples/java-hello-world/src/oata/HelloWorld.java 1970-01-01 00:00:00 +0000
2011+++ examples/java-hello-world/src/oata/HelloWorld.java 2022-05-19 22:01:22 +0000
2012@@ -0,0 +1,10 @@
2013+// https://ant.apache.org/manual/tutorial-HelloWorldWithAnt.html
2014+
2015+package oata;
2016+
2017+public class HelloWorld {
2018+ public static void main(String[] args) {
2019+ System.out.println("Hello World");
2020+ }
2021+}
2022+
2023
2024=== added file 'examples/java-hello-world/wrapper'
2025--- examples/java-hello-world/wrapper 1970-01-01 00:00:00 +0000
2026+++ examples/java-hello-world/wrapper 2022-05-19 22:01:22 +0000
2027@@ -0,0 +1,2 @@
2028+#!/bin/sh
2029+java oata.HelloWorld
2030
2031=== added directory 'examples/libpipeline'
2032=== added file 'examples/libpipeline/Makefile'
2033--- examples/libpipeline/Makefile 1970-01-01 00:00:00 +0000
2034+++ examples/libpipeline/Makefile 2022-05-19 22:01:22 +0000
2035@@ -0,0 +1,11 @@
2036+# -*- Mode:Makefile; indent-tabs-mode:t; tab-width:4 -*-
2037+
2038+all:
2039+ gcc -o test ./test.c $(CFLAGS) $(LDFLAGS) -lpipeline
2040+
2041+install:
2042+ install -d -m755 $(DESTDIR)/bin/
2043+ install -m755 ./test $(DESTDIR)/bin/test
2044+
2045+clean:
2046+ rm -f test
2047
2048=== added file 'examples/libpipeline/icon.png'
2049Binary files examples/libpipeline/icon.png and examples/libpipeline/icon.png differ
2050=== added file 'examples/libpipeline/snapcraft.yaml'
2051--- examples/libpipeline/snapcraft.yaml 1970-01-01 00:00:00 +0000
2052+++ examples/libpipeline/snapcraft.yaml 2022-05-19 22:01:22 +0000
2053@@ -0,0 +1,19 @@
2054+name: pipelinetest
2055+version: 1.0
2056+vendor: Mike Terry <mterry@ubuntu.com>
2057+binaries:
2058+ pipelinetest:
2059+ exec: ./bin/pipelinetest
2060+summary: Libpipeline example
2061+description: this is an example package of an autotools project built with snapcraft using
2062+icon: icon.png
2063+
2064+parts:
2065+ pipelinetest:
2066+ plugin: make
2067+ source: lp:~mterry/+junk/pipelinetest
2068+ after:
2069+ - libpipeline
2070+ libpipeline:
2071+ plugin: autotools
2072+ source: lp:~mterry/libpipeline/printf
2073
2074=== added file 'examples/libpipeline/test.c'
2075--- examples/libpipeline/test.c 1970-01-01 00:00:00 +0000
2076+++ examples/libpipeline/test.c 2022-05-19 22:01:22 +0000
2077@@ -0,0 +1,18 @@
2078+#include <pipeline.h>
2079+#include <stdio.h>
2080+
2081+int main()
2082+{
2083+ pipeline *p;
2084+ int status;
2085+
2086+ printf("running ls | grep s | grep t\n");
2087+
2088+ p = pipeline_new ();
2089+ pipeline_command_args (p, "ls", NULL);
2090+ pipeline_command_args (p, "grep", "s", NULL);
2091+ pipeline_command_args (p, "grep", "t", NULL);
2092+ status = pipeline_run (p);
2093+
2094+ return status;
2095+}
2096
2097=== added directory 'examples/py2-project'
2098=== added file 'examples/py2-project/Makefile'
2099--- examples/py2-project/Makefile 1970-01-01 00:00:00 +0000
2100+++ examples/py2-project/Makefile 2022-05-19 22:01:22 +0000
2101@@ -0,0 +1,8 @@
2102+# -*- Mode: Makefile; indent-tabs-mode:t; tab-width: 4 -*-
2103+
2104+all:
2105+
2106+install:
2107+ mkdir -p $(DESTDIR)/bin
2108+ cp -a sha3sum.py $(DESTDIR)/bin/sha3sum
2109+ chmod a+x $(DESTDIR)/bin/sha3sum
2110
2111=== added file 'examples/py2-project/icon.png'
2112Binary files examples/py2-project/icon.png and examples/py2-project/icon.png differ
2113=== added file 'examples/py2-project/sha3sum.py'
2114--- examples/py2-project/sha3sum.py 1970-01-01 00:00:00 +0000
2115+++ examples/py2-project/sha3sum.py 2022-05-19 22:01:22 +0000
2116@@ -0,0 +1,14 @@
2117+#!/usr/bin/env python2
2118+
2119+import sys
2120+
2121+import spongeshaker.sha3
2122+
2123+
2124+if __name__ == "__main__":
2125+ # 224 is the default from sha3sum
2126+ h = spongeshaker.sha3.sha3_224()
2127+ with open(sys.argv[1], "rb") as fp:
2128+ data = fp.read()
2129+ h.update(data)
2130+ print(h.hexdigest())
2131
2132=== added file 'examples/py2-project/snapcraft.yaml'
2133--- examples/py2-project/snapcraft.yaml 1970-01-01 00:00:00 +0000
2134+++ examples/py2-project/snapcraft.yaml 2022-05-19 22:01:22 +0000
2135@@ -0,0 +1,20 @@
2136+name: spongeshaker
2137+version: 0
2138+vendor: Michael Vogt <michael.vogt@ubuntu.com>
2139+binaries:
2140+ sha3sum:
2141+ exec: ./bin/sha3sum
2142+summary: A python sha3 implementation
2143+description: A python2 project using snapcraft
2144+icon: icon.png
2145+
2146+build-packages:
2147+ - libpython2.7-dev
2148+
2149+parts:
2150+ spongeshaker:
2151+ plugin: python2
2152+ source: git://github.com/markokr/spongeshaker.git
2153+ make-project:
2154+ plugin: make
2155+ source: .
2156
2157=== added directory 'examples/py3-project'
2158=== added file 'examples/py3-project/icon.png'
2159Binary files examples/py3-project/icon.png and examples/py3-project/icon.png differ
2160=== added file 'examples/py3-project/sha3sum.py'
2161--- examples/py3-project/sha3sum.py 1970-01-01 00:00:00 +0000
2162+++ examples/py3-project/sha3sum.py 2022-05-19 22:01:22 +0000
2163@@ -0,0 +1,14 @@
2164+#!/usr/bin/env python3
2165+
2166+import sys
2167+
2168+import spongeshaker.sha3
2169+
2170+
2171+if __name__ == "__main__":
2172+ # 224 is the default from sha3sum
2173+ h = spongeshaker.sha3.sha3_224()
2174+ with open(sys.argv[1], "rb") as fp:
2175+ data = fp.read()
2176+ h.update(data)
2177+ print(h.hexdigest())
2178
2179=== added file 'examples/py3-project/snapcraft.yaml'
2180--- examples/py3-project/snapcraft.yaml 1970-01-01 00:00:00 +0000
2181+++ examples/py3-project/snapcraft.yaml 2022-05-19 22:01:22 +0000
2182@@ -0,0 +1,18 @@
2183+name: spongeshaker
2184+version: 0
2185+vendor: Michael Vogt <michael.vogt@ubuntu.com>
2186+binaries:
2187+ sha3sum:
2188+ exec: bin/sha3sum
2189+summary: A python sha3 implementation
2190+description: A python2 project using snapcraft
2191+icon: icon.png
2192+
2193+parts:
2194+ spongeshaker:
2195+ plugin: python3
2196+ source: git://github.com/markokr/spongeshaker.git
2197+ sha3:
2198+ plugin: copy
2199+ files:
2200+ sha3sum.py: bin/sha3sum
2201
2202=== added directory 'examples/qmldemo'
2203=== added file 'examples/qmldemo/demo.qml'
2204--- examples/qmldemo/demo.qml 1970-01-01 00:00:00 +0000
2205+++ examples/qmldemo/demo.qml 2022-05-19 22:01:22 +0000
2206@@ -0,0 +1,9 @@
2207+import QtQuick 2.2
2208+import QtQuick.Controls 1.1
2209+
2210+ApplicationWindow {
2211+ Label {
2212+ anchors.centerIn: parent
2213+ text: "QML Example"
2214+ }
2215+}
2216
2217=== added file 'examples/qmldemo/icon.png'
2218Binary files examples/qmldemo/icon.png and examples/qmldemo/icon.png differ
2219=== added directory 'examples/qmldemo/meta'
2220=== added file 'examples/qmldemo/meta/package.yaml'
2221--- examples/qmldemo/meta/package.yaml 1970-01-01 00:00:00 +0000
2222+++ examples/qmldemo/meta/package.yaml 2022-05-19 22:01:22 +0000
2223@@ -0,0 +1,10 @@
2224+name: qmldemo
2225+version: 1
2226+vendor: Ted Gould <ted@canonical.com>
2227+frameworks: [mir]
2228+binaries:
2229+ - name: qmldemo
2230+ exec: qmlscene demo.qml --
2231+ caps:
2232+ - mir_client
2233+ - network-client
2234
2235=== added file 'examples/qmldemo/meta/readme.md'
2236--- examples/qmldemo/meta/readme.md 1970-01-01 00:00:00 +0000
2237+++ examples/qmldemo/meta/readme.md 2022-05-19 22:01:22 +0000
2238@@ -0,0 +1,4 @@
2239+
2240+== QML Demo ==
2241+
2242+An example of shipping a usable QML file in a snap using the QML plugin.
2243
2244=== added file 'examples/qmldemo/snapcraft.yaml'
2245--- examples/qmldemo/snapcraft.yaml 1970-01-01 00:00:00 +0000
2246+++ examples/qmldemo/snapcraft.yaml 2022-05-19 22:01:22 +0000
2247@@ -0,0 +1,22 @@
2248+name: qmldemo
2249+version: 1
2250+vendor: Ted Gould <ted@canonical.com>
2251+frameworks:
2252+ - mir
2253+binaries:
2254+ qmldemo:
2255+ exec: qmlscene demo.qml --
2256+ caps:
2257+ - mir_client
2258+ - network-client
2259+summary: qml demo
2260+description: An example of shipping a usable QML file in a snap using the QML plugin.
2261+icon: icon.png
2262+
2263+parts:
2264+ qml:
2265+ plugin: qml
2266+ qmldemo:
2267+ plugin: copy
2268+ files:
2269+ demo.qml: demo.qml
2270
2271=== added directory 'examples/ros'
2272=== added file 'examples/ros/icon.svg'
2273--- examples/ros/icon.svg 1970-01-01 00:00:00 +0000
2274+++ examples/ros/icon.svg 2022-05-19 22:01:22 +0000
2275@@ -0,0 +1,1 @@
2276+<svg />
2277
2278=== added file 'examples/ros/snapcraft.yaml'
2279--- examples/ros/snapcraft.yaml 1970-01-01 00:00:00 +0000
2280+++ examples/ros/snapcraft.yaml 2022-05-19 22:01:22 +0000
2281@@ -0,0 +1,27 @@
2282+name: ros-example
2283+version: 1.0
2284+vendor: Number Five <number-five@is-alive.com>
2285+summary: A robot example
2286+icon: icon.svg
2287+description: A really small ROS example
2288+
2289+binaries:
2290+ listener:
2291+ exec: opt/ros/indigo/beginner_tutorials/lib/beginner_tutorials/listener
2292+ talker:
2293+ exec: opt/ros/indigo/beginner_tutorials/lib/beginner_tutorials/talker
2294+
2295+services:
2296+ rosmaster:
2297+ start: bin/roscore-rosmaster-service
2298+ description: ROS Master Service
2299+
2300+parts:
2301+ roscore:
2302+ plugin: roscore
2303+ catkin-tutorials:
2304+ plugin: catkin
2305+ source: .
2306+ catkin-packages:
2307+ - beginner_tutorials
2308+
2309
2310=== added directory 'examples/ros/src'
2311=== added file 'examples/ros/src/CMakeLists.txt'
2312--- examples/ros/src/CMakeLists.txt 1970-01-01 00:00:00 +0000
2313+++ examples/ros/src/CMakeLists.txt 2022-05-19 22:01:22 +0000
2314@@ -0,0 +1,47 @@
2315+# toplevel CMakeLists.txt for a catkin workspace
2316+# catkin/cmake/toplevel.cmake
2317+
2318+cmake_minimum_required(VERSION 2.8.3)
2319+
2320+# optionally provide a cmake file in the workspace to override arbitrary stuff
2321+include(workspace.cmake OPTIONAL)
2322+
2323+set(CATKIN_TOPLEVEL TRUE)
2324+
2325+# include catkin directly or via find_package()
2326+if(EXISTS "${CMAKE_SOURCE_DIR}/catkin/cmake/all.cmake" AND EXISTS "${CMAKE_SOURCE_DIR}/catkin/CMakeLists.txt")
2327+ set(catkin_EXTRAS_DIR "${CMAKE_SOURCE_DIR}/catkin/cmake")
2328+ # include all.cmake without add_subdirectory to let it operate in same scope
2329+ include(catkin/cmake/all.cmake NO_POLICY_SCOPE)
2330+ add_subdirectory(catkin)
2331+
2332+else()
2333+ # use either CMAKE_PREFIX_PATH explicitly passed to CMake as a command line argument
2334+ # or CMAKE_PREFIX_PATH from the environment
2335+ if(NOT DEFINED CMAKE_PREFIX_PATH)
2336+ if(NOT "$ENV{CMAKE_PREFIX_PATH}" STREQUAL "")
2337+ string(REPLACE ":" ";" CMAKE_PREFIX_PATH $ENV{CMAKE_PREFIX_PATH})
2338+ endif()
2339+ endif()
2340+
2341+ # list of catkin workspaces
2342+ set(catkin_search_path "")
2343+ foreach(path ${CMAKE_PREFIX_PATH})
2344+ if(EXISTS "${path}/.CATKIN_WORKSPACE")
2345+ list(FIND catkin_search_path ${path} _index)
2346+ if(_index EQUAL -1)
2347+ list(APPEND catkin_search_path ${path})
2348+ endif()
2349+ endif()
2350+ endforeach()
2351+
2352+ # search for catkin in all workspaces
2353+ set(CATKIN_TOPLEVEL_FIND_PACKAGE TRUE)
2354+ find_package(catkin REQUIRED
2355+ NO_POLICY_SCOPE
2356+ PATHS ${catkin_search_path}
2357+ NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
2358+ unset(CATKIN_TOPLEVEL_FIND_PACKAGE)
2359+endif()
2360+
2361+catkin_workspace()
2362
2363=== added directory 'examples/ros/src/beginner_tutorials'
2364=== added file 'examples/ros/src/beginner_tutorials/CMakeLists.txt'
2365--- examples/ros/src/beginner_tutorials/CMakeLists.txt 1970-01-01 00:00:00 +0000
2366+++ examples/ros/src/beginner_tutorials/CMakeLists.txt 2022-05-19 22:01:22 +0000
2367@@ -0,0 +1,39 @@
2368+# %Tag(FULLTEXT)%
2369+cmake_minimum_required(VERSION 2.8.3)
2370+project(beginner_tutorials)
2371+
2372+## Find catkin and any catkin packages
2373+find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs genmsg)
2374+
2375+## Declare ROS messages and services
2376+add_message_files(FILES Num.msg)
2377+add_service_files(FILES AddTwoInts.srv)
2378+
2379+## Generate added messages and services
2380+generate_messages(DEPENDENCIES std_msgs)
2381+
2382+## Declare a catkin package
2383+catkin_package()
2384+
2385+## Build talker and listener
2386+include_directories(include ${catkin_INCLUDE_DIRS})
2387+
2388+add_executable(talker src/talker.cpp)
2389+target_link_libraries(talker ${catkin_LIBRARIES})
2390+
2391+add_executable(listener src/listener.cpp)
2392+target_link_libraries(listener ${catkin_LIBRARIES})
2393+
2394+## Build service client and server
2395+# %Tag(SRVCLIENT)%
2396+add_executable(add_two_ints_server src/add_two_ints_server.cpp)
2397+target_link_libraries(add_two_ints_server ${catkin_LIBRARIES})
2398+add_dependencies(add_two_ints_server beginner_tutorials_gencpp)
2399+
2400+add_executable(add_two_ints_client src/add_two_ints_client.cpp)
2401+target_link_libraries(add_two_ints_client ${catkin_LIBRARIES})
2402+add_dependencies(add_two_ints_client beginner_tutorials_gencpp)
2403+
2404+# %EndTag(SRVCLIENT)%
2405+
2406+# %EndTag(FULLTEXT)%
2407\ No newline at end of file
2408
2409=== added directory 'examples/ros/src/beginner_tutorials/msg'
2410=== added file 'examples/ros/src/beginner_tutorials/msg/Num.msg'
2411--- examples/ros/src/beginner_tutorials/msg/Num.msg 1970-01-01 00:00:00 +0000
2412+++ examples/ros/src/beginner_tutorials/msg/Num.msg 2022-05-19 22:01:22 +0000
2413@@ -0,0 +1,1 @@
2414+int64 num
2415
2416=== added file 'examples/ros/src/beginner_tutorials/package.xml'
2417--- examples/ros/src/beginner_tutorials/package.xml 1970-01-01 00:00:00 +0000
2418+++ examples/ros/src/beginner_tutorials/package.xml 2022-05-19 22:01:22 +0000
2419@@ -0,0 +1,42 @@
2420+<?xml version="1.0"?>
2421+<!-- %Tag(FULLTEXT,-1)% -->
2422+<package>
2423+ <!-- %Tag(NAME)% -->
2424+ <name>beginner_tutorials</name>
2425+ <!-- %EndTag(NAME)% -->
2426+ <!-- %Tag(VERSION)% -->
2427+ <version>0.1.0</version>
2428+ <!-- %EndTag(VERSION)% -->
2429+ <!-- %Tag(DESC)% -->
2430+ <description>The beginner_tutorials package</description>
2431+ <!-- %EndTag(DESC)% -->
2432+
2433+ <!-- %Tag(MAINTAINER)% -->
2434+ <maintainer email="you@yourdomain.tld">Your Name</maintainer>
2435+ <!-- %EndTag(MAINTAINER)% -->
2436+ <!-- %Tag(LICENSE)% -->
2437+ <license>BSD</license>
2438+ <!-- %EndTag(LICENSE)% -->
2439+ <!-- %Tag(URLS)% -->
2440+ <url type="website">http://wiki.ros.org/beginner_tutorials</url>
2441+ <!-- %EndTag(URLS)% -->
2442+ <!-- %Tag(AUTHORS)% -->
2443+ <author email="you@yourdomain.tld">Jane Doe</author>
2444+ <!-- %EndTag(AUTHORS)% -->
2445+
2446+ <!-- %Tag(DEPS)% -->
2447+ <buildtool_depend>catkin</buildtool_depend>
2448+
2449+ <build_depend>roscpp</build_depend>
2450+ <build_depend>rospy</build_depend>
2451+ <build_depend>std_msgs</build_depend>
2452+
2453+ <run_depend>roscpp</run_depend>
2454+ <run_depend>rospy</run_depend>
2455+ <run_depend>std_msgs</run_depend>
2456+ <!-- %EndTag(DEPS)% -->
2457+
2458+ <!-- %Tag(EXPORT)% -->
2459+ <!-- %EndTag(EXPORT)% -->
2460+</package>
2461+<!-- %EndTag(FULLTEXT)% -->
2462\ No newline at end of file
2463
2464=== added directory 'examples/ros/src/beginner_tutorials/src'
2465=== added file 'examples/ros/src/beginner_tutorials/src/add_two_ints_client.cpp'
2466--- examples/ros/src/beginner_tutorials/src/add_two_ints_client.cpp 1970-01-01 00:00:00 +0000
2467+++ examples/ros/src/beginner_tutorials/src/add_two_ints_client.cpp 2022-05-19 22:01:22 +0000
2468@@ -0,0 +1,30 @@
2469+#include "ros/ros.h"
2470+#include "beginner_tutorials/AddTwoInts.h"
2471+#include <cstdlib>
2472+
2473+int main(int argc, char **argv)
2474+{
2475+ ros::init(argc, argv, "add_two_ints_client");
2476+ if (argc != 3)
2477+ {
2478+ ROS_INFO("usage: add_two_ints_client X Y");
2479+ return 1;
2480+ }
2481+
2482+ ros::NodeHandle n;
2483+ ros::ServiceClient client = n.serviceClient<beginner_tutorials::AddTwoInts>("add_two_ints");
2484+ beginner_tutorials::AddTwoInts srv;
2485+ srv.request.a = atoll(argv[1]);
2486+ srv.request.b = atoll(argv[2]);
2487+ if (client.call(srv))
2488+ {
2489+ ROS_INFO("Sum: %ld", (long int)srv.response.sum);
2490+ }
2491+ else
2492+ {
2493+ ROS_ERROR("Failed to call service add_two_ints");
2494+ return 1;
2495+ }
2496+
2497+ return 0;
2498+}
2499
2500=== added file 'examples/ros/src/beginner_tutorials/src/add_two_ints_server.cpp'
2501--- examples/ros/src/beginner_tutorials/src/add_two_ints_server.cpp 1970-01-01 00:00:00 +0000
2502+++ examples/ros/src/beginner_tutorials/src/add_two_ints_server.cpp 2022-05-19 22:01:22 +0000
2503@@ -0,0 +1,23 @@
2504+#include "ros/ros.h"
2505+#include "beginner_tutorials/AddTwoInts.h"
2506+
2507+bool add(beginner_tutorials::AddTwoInts::Request &req,
2508+ beginner_tutorials::AddTwoInts::Response &res)
2509+{
2510+ res.sum = req.a + req.b;
2511+ ROS_INFO("request: x=%ld, y=%ld", (long int)req.a, (long int)req.b);
2512+ ROS_INFO("sending back response: [%ld]", (long int)res.sum);
2513+ return true;
2514+}
2515+
2516+int main(int argc, char **argv)
2517+{
2518+ ros::init(argc, argv, "add_two_ints_server");
2519+ ros::NodeHandle n;
2520+
2521+ ros::ServiceServer service = n.advertiseService("add_two_ints", add);
2522+ ROS_INFO("Ready to add two ints.");
2523+ ros::spin();
2524+
2525+ return 0;
2526+}
2527
2528=== added file 'examples/ros/src/beginner_tutorials/src/listener.cpp'
2529--- examples/ros/src/beginner_tutorials/src/listener.cpp 1970-01-01 00:00:00 +0000
2530+++ examples/ros/src/beginner_tutorials/src/listener.cpp 2022-05-19 22:01:22 +0000
2531@@ -0,0 +1,60 @@
2532+#include "ros/ros.h"
2533+#include "std_msgs/String.h"
2534+
2535+/**
2536+ * This tutorial demonstrates simple receipt of messages over the ROS system.
2537+ */
2538+void chatterCallback(const std_msgs::String::ConstPtr& msg)
2539+{
2540+ ROS_INFO("I heard: [%s]", msg->data.c_str());
2541+}
2542+
2543+int main(int argc, char **argv)
2544+{
2545+ /**
2546+ * The ros::init() function needs to see argc and argv so that it can
2547+ * perform any ROS arguments and name remapping that were provided
2548+ * at the command line. For programmatic remappings you can use a
2549+ * different version of init() which takes remappings directly, but
2550+ * for most command-line programs, passing argc and argv is the easiest
2551+ * way to do it. The third argument to init() is the name of the node.
2552+ *
2553+ * You must call one of the versions of ros::init() before using any other
2554+ * part of the ROS system.
2555+ */
2556+ ros::init(argc, argv, "listener");
2557+
2558+ /**
2559+ * NodeHandle is the main access point to communications with the
2560+ * ROS system. The first NodeHandle constructed will fully initialize
2561+ * this node, and the last NodeHandle destructed will close down the node.
2562+ */
2563+ ros::NodeHandle n;
2564+
2565+ /**
2566+ * The subscribe() call is how you tell ROS that you want to receive
2567+ * messages on a given topic. This invokes a call to the ROS master
2568+ * node, which keeps a registry of who is publishing and who is subscribing.
2569+ * Messages are passed to a callback function, here called chatterCallback.
2570+ * subscribe() returns a Subscriber object that you must hold on to
2571+ * until you want to unsubscribe. When all copies of the Subscriber
2572+ * object go out of scope, this callback will automatically be
2573+ * unsubscribed from this topic.
2574+ *
2575+ * The second parameter to the subscribe() function is the size of
2576+ * the message queue. If messages are arriving faster than they are
2577+ * being processed, this is the number of messages that will be
2578+ * buffered up before beginning to throw away the oldest ones.
2579+ */
2580+ ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);
2581+
2582+ /**
2583+ * ros::spin() will enter a loop, pumping callbacks. With this
2584+ * version, all callbacks will be called from within this thread
2585+ * (the main one). ros::spin() will exit when Ctrl-C is pressed,
2586+ * or the node is shutdown by the master.
2587+ */
2588+ ros::spin();
2589+
2590+ return 0;
2591+}
2592
2593=== added file 'examples/ros/src/beginner_tutorials/src/talker.cpp'
2594--- examples/ros/src/beginner_tutorials/src/talker.cpp 1970-01-01 00:00:00 +0000
2595+++ examples/ros/src/beginner_tutorials/src/talker.cpp 2022-05-19 22:01:22 +0000
2596@@ -0,0 +1,87 @@
2597+#include "ros/ros.h"
2598+#include "std_msgs/String.h"
2599+
2600+#include <sstream>
2601+
2602+/**
2603+ * This tutorial demonstrates simple sending of messages over the ROS system.
2604+ */
2605+int main(int argc, char **argv)
2606+{
2607+ /**
2608+ * The ros::init() function needs to see argc and argv so that it can
2609+ * perform any ROS arguments and name remapping that were provided at
2610+ * the command line. For programmatic remappings you can use a
2611+ * different version of init() which takes remappings directly, but
2612+ * for most command-line programs, passing argc and argv is the easiest
2613+ * way to do it. The third argument to init() is the name of the node.
2614+ *
2615+ * You must call one of the versions of ros::init() before using any
2616+ * other part of the ROS system.
2617+ */
2618+ ros::init(argc, argv, "talker");
2619+
2620+ /**
2621+ * NodeHandle is the main access point to communications with the
2622+ * ROS system. The first NodeHandle constructed will fully initialize
2623+ * this node, and the last NodeHandle destructed will close down
2624+ * the node.
2625+ */
2626+ ros::NodeHandle n;
2627+
2628+ /**
2629+ * The advertise() function is how you tell ROS that you want to
2630+ * publish on a given topic name. This invokes a call to the ROS
2631+ * master node, which keeps a registry of who is publishing and who
2632+ * is subscribing. After this advertise() call is made, the master
2633+ * node will notify anyone who is trying to subscribe to this topic name,
2634+ * and they will in turn negotiate a peer-to-peer connection with this
2635+ * node. advertise() returns a Publisher object which allows you to
2636+ * publish messages on that topic through a call to publish(). Once
2637+ * all copies of the returned Publisher object are destroyed, the topic
2638+ * will be automatically unadvertised.
2639+ *
2640+ * The second parameter to advertise() is the size of the message queue
2641+ * used for publishing messages. If messages are published more quickly
2642+ * than we can send them, the number here specifies how many messages to
2643+ * buffer up before throwing some away.
2644+ */
2645+ ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
2646+
2647+ ros::Rate loop_rate(10);
2648+
2649+ /**
2650+ * A count of how many messages we have sent. This is used to create
2651+ * a unique string for each message.
2652+ */
2653+ int count = 0;
2654+ while (ros::ok())
2655+ {
2656+ /**
2657+ * This is a message object. You stuff it with data, and then publish it.
2658+ */
2659+ std_msgs::String msg;
2660+
2661+ std::stringstream ss;
2662+ ss << "hello world " << count;
2663+ msg.data = ss.str();
2664+
2665+ ROS_INFO("%s", msg.data.c_str());
2666+
2667+ /**
2668+ * The publish() function is how you send messages. The parameter
2669+ * is the message object. The type of this object must agree with the type
2670+ * given as a template parameter to the advertise<>() call, as was done
2671+ * in the constructor above.
2672+ */
2673+ chatter_pub.publish(msg);
2674+
2675+ ros::spinOnce();
2676+
2677+ loop_rate.sleep();
2678+ ++count;
2679+ }
2680+
2681+
2682+ return 0;
2683+}
2684
2685=== added directory 'examples/ros/src/beginner_tutorials/srv'
2686=== added file 'examples/ros/src/beginner_tutorials/srv/AddTwoInts.srv'
2687--- examples/ros/src/beginner_tutorials/srv/AddTwoInts.srv 1970-01-01 00:00:00 +0000
2688+++ examples/ros/src/beginner_tutorials/srv/AddTwoInts.srv 2022-05-19 22:01:22 +0000
2689@@ -0,0 +1,4 @@
2690+int64 a
2691+int64 b
2692+---
2693+int64 sum
2694
2695=== added directory 'examples/tomcat-maven-webapp'
2696=== added file 'examples/tomcat-maven-webapp/Makefile'
2697--- examples/tomcat-maven-webapp/Makefile 1970-01-01 00:00:00 +0000
2698+++ examples/tomcat-maven-webapp/Makefile 2022-05-19 22:01:22 +0000
2699@@ -0,0 +1,6 @@
2700+all:
2701+
2702+install:
2703+ cp -a tomcat-conf/ $(DESTDIR)/
2704+ install -D -m755 wrapper $(DESTDIR)/bin/wrapper
2705+
2706
2707=== added file 'examples/tomcat-maven-webapp/icon.png'
2708Binary files examples/tomcat-maven-webapp/icon.png and examples/tomcat-maven-webapp/icon.png differ
2709=== added file 'examples/tomcat-maven-webapp/snapcraft.yaml'
2710--- examples/tomcat-maven-webapp/snapcraft.yaml 1970-01-01 00:00:00 +0000
2711+++ examples/tomcat-maven-webapp/snapcraft.yaml 2022-05-19 22:01:22 +0000
2712@@ -0,0 +1,25 @@
2713+name: tomcat-webapp-demo
2714+vendor: Loïc Minier <loic.minier@ubuntu.com>
2715+version: 1.0
2716+architectures:
2717+ - amd64
2718+services:
2719+ tomcat:
2720+ start: bin/wrapper
2721+ caps:
2722+ - networking
2723+ - network-service
2724+summary: Demo of Tomcat-hosted Webapp
2725+description: This is a demo snap of a Tomcat-hosted webapp produced by snapcraft with maven.
2726+icon: icon.png
2727+
2728+parts:
2729+ webapp:
2730+ plugin: maven
2731+ source: git://github.com/lool/snappy-mvn-demo.git
2732+ tomcat:
2733+ plugin: tar-content
2734+ source: http://mirrors.ircam.fr/pub/apache/tomcat/tomcat-8/v8.0.28/bin/apache-tomcat-8.0.28.tar.gz
2735+ local-files:
2736+ plugin: make
2737+ source: .
2738
2739=== added directory 'examples/tomcat-maven-webapp/tomcat-conf'
2740=== added file 'examples/tomcat-maven-webapp/tomcat-conf/catalina.policy'
2741--- examples/tomcat-maven-webapp/tomcat-conf/catalina.policy 1970-01-01 00:00:00 +0000
2742+++ examples/tomcat-maven-webapp/tomcat-conf/catalina.policy 2022-05-19 22:01:22 +0000
2743@@ -0,0 +1,250 @@
2744+// Licensed to the Apache Software Foundation (ASF) under one or more
2745+// contributor license agreements. See the NOTICE file distributed with
2746+// this work for additional information regarding copyright ownership.
2747+// The ASF licenses this file to You under the Apache License, Version 2.0
2748+// (the "License"); you may not use this file except in compliance with
2749+// the License. You may obtain a copy of the License at
2750+//
2751+// http://www.apache.org/licenses/LICENSE-2.0
2752+//
2753+// Unless required by applicable law or agreed to in writing, software
2754+// distributed under the License is distributed on an "AS IS" BASIS,
2755+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2756+// See the License for the specific language governing permissions and
2757+// limitations under the License.
2758+
2759+// ============================================================================
2760+// catalina.policy - Security Policy Permissions for Tomcat
2761+//
2762+// This file contains a default set of security policies to be enforced (by the
2763+// JVM) when Catalina is executed with the "-security" option. In addition
2764+// to the permissions granted here, the following additional permissions are
2765+// granted to each web application:
2766+//
2767+// * Read access to the web application's document root directory
2768+// * Read, write and delete access to the web application's working directory
2769+// ============================================================================
2770+
2771+
2772+// ========== SYSTEM CODE PERMISSIONS =========================================
2773+
2774+
2775+// These permissions apply to javac
2776+grant codeBase "file:${java.home}/lib/-" {
2777+ permission java.security.AllPermission;
2778+};
2779+
2780+// These permissions apply to all shared system extensions
2781+grant codeBase "file:${java.home}/jre/lib/ext/-" {
2782+ permission java.security.AllPermission;
2783+};
2784+
2785+// These permissions apply to javac when ${java.home] points at $JAVA_HOME/jre
2786+grant codeBase "file:${java.home}/../lib/-" {
2787+ permission java.security.AllPermission;
2788+};
2789+
2790+// These permissions apply to all shared system extensions when
2791+// ${java.home} points at $JAVA_HOME/jre
2792+grant codeBase "file:${java.home}/lib/ext/-" {
2793+ permission java.security.AllPermission;
2794+};
2795+
2796+
2797+// ========== CATALINA CODE PERMISSIONS =======================================
2798+
2799+
2800+// These permissions apply to the daemon code
2801+grant codeBase "file:${catalina.home}/bin/commons-daemon.jar" {
2802+ permission java.security.AllPermission;
2803+};
2804+
2805+// These permissions apply to the logging API
2806+// Note: If tomcat-juli.jar is in ${catalina.base} and not in ${catalina.home},
2807+// update this section accordingly.
2808+// grant codeBase "file:${catalina.base}/bin/tomcat-juli.jar" {..}
2809+grant codeBase "file:${catalina.home}/bin/tomcat-juli.jar" {
2810+ permission java.io.FilePermission
2811+ "${java.home}${file.separator}lib${file.separator}logging.properties", "read";
2812+
2813+ permission java.io.FilePermission
2814+ "${catalina.base}${file.separator}conf${file.separator}logging.properties", "read";
2815+ permission java.io.FilePermission
2816+ "${catalina.base}${file.separator}logs", "read, write";
2817+ permission java.io.FilePermission
2818+ "${catalina.base}${file.separator}logs${file.separator}*", "read, write";
2819+
2820+ permission java.lang.RuntimePermission "shutdownHooks";
2821+ permission java.lang.RuntimePermission "getClassLoader";
2822+ permission java.lang.RuntimePermission "setContextClassLoader";
2823+
2824+ permission java.lang.management.ManagementPermission "monitor";
2825+
2826+ permission java.util.logging.LoggingPermission "control";
2827+
2828+ permission java.util.PropertyPermission "java.util.logging.config.class", "read";
2829+ permission java.util.PropertyPermission "java.util.logging.config.file", "read";
2830+ permission java.util.PropertyPermission "org.apache.juli.AsyncLoggerPollInterval", "read";
2831+ permission java.util.PropertyPermission "org.apache.juli.AsyncMaxRecordCount", "read";
2832+ permission java.util.PropertyPermission "org.apache.juli.AsyncOverflowDropType", "read";
2833+ permission java.util.PropertyPermission "org.apache.juli.ClassLoaderLogManager.debug", "read";
2834+ permission java.util.PropertyPermission "catalina.base", "read";
2835+
2836+ // Note: To enable per context logging configuration, permit read access to
2837+ // the appropriate file. Be sure that the logging configuration is
2838+ // secure before enabling such access.
2839+ // E.g. for the examples web application (uncomment and unwrap
2840+ // the following to be on a single line):
2841+ // permission java.io.FilePermission "${catalina.base}${file.separator}
2842+ // webapps${file.separator}examples${file.separator}WEB-INF
2843+ // ${file.separator}classes${file.separator}logging.properties", "read";
2844+};
2845+
2846+// These permissions apply to the server startup code
2847+grant codeBase "file:${catalina.home}/bin/bootstrap.jar" {
2848+ permission java.security.AllPermission;
2849+};
2850+
2851+// These permissions apply to the servlet API classes
2852+// and those that are shared across all class loaders
2853+// located in the "lib" directory
2854+grant codeBase "file:${catalina.home}/lib/-" {
2855+ permission java.security.AllPermission;
2856+};
2857+
2858+
2859+// If using a per instance lib directory, i.e. ${catalina.base}/lib,
2860+// then the following permission will need to be uncommented
2861+// grant codeBase "file:${catalina.base}/lib/-" {
2862+// permission java.security.AllPermission;
2863+// };
2864+
2865+
2866+// ========== WEB APPLICATION PERMISSIONS =====================================
2867+
2868+
2869+// These permissions are granted by default to all web applications
2870+// In addition, a web application will be given a read FilePermission
2871+// for all files and directories in its document root.
2872+grant {
2873+ // Required for JNDI lookup of named JDBC DataSource's and
2874+ // javamail named MimePart DataSource used to send mail
2875+ permission java.util.PropertyPermission "java.home", "read";
2876+ permission java.util.PropertyPermission "java.naming.*", "read";
2877+ permission java.util.PropertyPermission "javax.sql.*", "read";
2878+
2879+ // OS Specific properties to allow read access
2880+ permission java.util.PropertyPermission "os.name", "read";
2881+ permission java.util.PropertyPermission "os.version", "read";
2882+ permission java.util.PropertyPermission "os.arch", "read";
2883+ permission java.util.PropertyPermission "file.separator", "read";
2884+ permission java.util.PropertyPermission "path.separator", "read";
2885+ permission java.util.PropertyPermission "line.separator", "read";
2886+
2887+ // JVM properties to allow read access
2888+ permission java.util.PropertyPermission "java.version", "read";
2889+ permission java.util.PropertyPermission "java.vendor", "read";
2890+ permission java.util.PropertyPermission "java.vendor.url", "read";
2891+ permission java.util.PropertyPermission "java.class.version", "read";
2892+ permission java.util.PropertyPermission "java.specification.version", "read";
2893+ permission java.util.PropertyPermission "java.specification.vendor", "read";
2894+ permission java.util.PropertyPermission "java.specification.name", "read";
2895+
2896+ permission java.util.PropertyPermission "java.vm.specification.version", "read";
2897+ permission java.util.PropertyPermission "java.vm.specification.vendor", "read";
2898+ permission java.util.PropertyPermission "java.vm.specification.name", "read";
2899+ permission java.util.PropertyPermission "java.vm.version", "read";
2900+ permission java.util.PropertyPermission "java.vm.vendor", "read";
2901+ permission java.util.PropertyPermission "java.vm.name", "read";
2902+
2903+ // Required for OpenJMX
2904+ permission java.lang.RuntimePermission "getAttribute";
2905+
2906+ // Allow read of JAXP compliant XML parser debug
2907+ permission java.util.PropertyPermission "jaxp.debug", "read";
2908+
2909+ // All JSPs need to be able to read this package
2910+ permission java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat";
2911+
2912+ // Precompiled JSPs need access to these packages.
2913+ permission java.lang.RuntimePermission "accessClassInPackage.org.apache.jasper.el";
2914+ permission java.lang.RuntimePermission "accessClassInPackage.org.apache.jasper.runtime";
2915+ permission java.lang.RuntimePermission
2916+ "accessClassInPackage.org.apache.jasper.runtime.*";
2917+
2918+ // Precompiled JSPs need access to these system properties.
2919+ permission java.util.PropertyPermission
2920+ "org.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER", "read";
2921+ permission java.util.PropertyPermission
2922+ "org.apache.el.parser.COERCE_TO_ZERO", "read";
2923+
2924+ // The cookie code needs these.
2925+ permission java.util.PropertyPermission
2926+ "org.apache.catalina.STRICT_SERVLET_COMPLIANCE", "read";
2927+ permission java.util.PropertyPermission
2928+ "org.apache.tomcat.util.http.ServerCookie.STRICT_NAMING", "read";
2929+ permission java.util.PropertyPermission
2930+ "org.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR", "read";
2931+
2932+ // Applications using Comet need to be able to access this package
2933+ permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.comet";
2934+
2935+ // Applications using WebSocket need to be able to access these packages
2936+ permission java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat.websocket";
2937+ permission java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat.websocket.server";
2938+};
2939+
2940+
2941+// The Manager application needs access to the following packages to support the
2942+// session display functionality. These settings support the following
2943+// configurations:
2944+// - default CATALINA_HOME == CATALINA_BASE
2945+// - CATALINA_HOME != CATALINA_BASE, per instance Manager in CATALINA_BASE
2946+// - CATALINA_HOME != CATALINA_BASE, shared Manager in CATALINA_HOME
2947+grant codeBase "file:${catalina.base}/webapps/manager/-" {
2948+ permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina";
2949+ permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.ha.session";
2950+ permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.manager";
2951+ permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.manager.util";
2952+ permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.util";
2953+};
2954+grant codeBase "file:${catalina.home}/webapps/manager/-" {
2955+ permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina";
2956+ permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.ha.session";
2957+ permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.manager";
2958+ permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.manager.util";
2959+ permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.util";
2960+};
2961+
2962+// You can assign additional permissions to particular web applications by
2963+// adding additional "grant" entries here, based on the code base for that
2964+// application, /WEB-INF/classes/, or /WEB-INF/lib/ jar files.
2965+//
2966+// Different permissions can be granted to JSP pages, classes loaded from
2967+// the /WEB-INF/classes/ directory, all jar files in the /WEB-INF/lib/
2968+// directory, or even to individual jar files in the /WEB-INF/lib/ directory.
2969+//
2970+// For instance, assume that the standard "examples" application
2971+// included a JDBC driver that needed to establish a network connection to the
2972+// corresponding database and used the scrape taglib to get the weather from
2973+// the NOAA web server. You might create a "grant" entries like this:
2974+//
2975+// The permissions granted to the context root directory apply to JSP pages.
2976+// grant codeBase "file:${catalina.base}/webapps/examples/-" {
2977+// permission java.net.SocketPermission "dbhost.mycompany.com:5432", "connect";
2978+// permission java.net.SocketPermission "*.noaa.gov:80", "connect";
2979+// };
2980+//
2981+// The permissions granted to the context WEB-INF/classes directory
2982+// grant codeBase "file:${catalina.base}/webapps/examples/WEB-INF/classes/-" {
2983+// };
2984+//
2985+// The permission granted to your JDBC driver
2986+// grant codeBase "jar:file:${catalina.base}/webapps/examples/WEB-INF/lib/driver.jar!/-" {
2987+// permission java.net.SocketPermission "dbhost.mycompany.com:5432", "connect";
2988+// };
2989+// The permission granted to the scrape taglib
2990+// grant codeBase "jar:file:${catalina.base}/webapps/examples/WEB-INF/lib/scrape.jar!/-" {
2991+// permission java.net.SocketPermission "*.noaa.gov:80", "connect";
2992+// };
2993+
2994
2995=== added file 'examples/tomcat-maven-webapp/tomcat-conf/catalina.properties'
2996--- examples/tomcat-maven-webapp/tomcat-conf/catalina.properties 1970-01-01 00:00:00 +0000
2997+++ examples/tomcat-maven-webapp/tomcat-conf/catalina.properties 2022-05-19 22:01:22 +0000
2998@@ -0,0 +1,145 @@
2999+# Licensed to the Apache Software Foundation (ASF) under one or more
3000+# contributor license agreements. See the NOTICE file distributed with
3001+# this work for additional information regarding copyright ownership.
3002+# The ASF licenses this file to You under the Apache License, Version 2.0
3003+# (the "License"); you may not use this file except in compliance with
3004+# the License. You may obtain a copy of the License at
3005+#
3006+# http://www.apache.org/licenses/LICENSE-2.0
3007+#
3008+# Unless required by applicable law or agreed to in writing, software
3009+# distributed under the License is distributed on an "AS IS" BASIS,
3010+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3011+# See the License for the specific language governing permissions and
3012+# limitations under the License.
3013+
3014+#
3015+# List of comma-separated packages that start with or equal this string
3016+# will cause a security exception to be thrown when
3017+# passed to checkPackageAccess unless the
3018+# corresponding RuntimePermission ("accessClassInPackage."+package) has
3019+# been granted.
3020+package.access=sun.,org.apache.catalina.,org.apache.coyote.,org.apache.jasper.,org.apache.tomcat.
3021+#
3022+# List of comma-separated packages that start with or equal this string
3023+# will cause a security exception to be thrown when
3024+# passed to checkPackageDefinition unless the
3025+# corresponding RuntimePermission ("defineClassInPackage."+package) has
3026+# been granted.
3027+#
3028+# by default, no packages are restricted for definition, and none of
3029+# the class loaders supplied with the JDK call checkPackageDefinition.
3030+#
3031+package.definition=sun.,java.,org.apache.catalina.,org.apache.coyote.,\
3032+org.apache.jasper.,org.apache.naming.,org.apache.tomcat.
3033+
3034+#
3035+#
3036+# List of comma-separated paths defining the contents of the "common"
3037+# classloader. Prefixes should be used to define what is the repository type.
3038+# Path may be relative to the CATALINA_HOME or CATALINA_BASE path or absolute.
3039+# If left as blank,the JVM system loader will be used as Catalina's "common"
3040+# loader.
3041+# Examples:
3042+# "foo": Add this folder as a class repository
3043+# "foo/*.jar": Add all the JARs of the specified folder as class
3044+# repositories
3045+# "foo/bar.jar": Add bar.jar as a class repository
3046+#
3047+# Note: Values are enclosed in double quotes ("...") in case either the
3048+# ${catalina.base} path or the ${catalina.home} path contains a comma.
3049+# Because double quotes are used for quoting, the double quote character
3050+# may not appear in a path.
3051+common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar"
3052+
3053+#
3054+# List of comma-separated paths defining the contents of the "server"
3055+# classloader. Prefixes should be used to define what is the repository type.
3056+# Path may be relative to the CATALINA_HOME or CATALINA_BASE path or absolute.
3057+# If left as blank, the "common" loader will be used as Catalina's "server"
3058+# loader.
3059+# Examples:
3060+# "foo": Add this folder as a class repository
3061+# "foo/*.jar": Add all the JARs of the specified folder as class
3062+# repositories
3063+# "foo/bar.jar": Add bar.jar as a class repository
3064+#
3065+# Note: Values may be enclosed in double quotes ("...") in case either the
3066+# ${catalina.base} path or the ${catalina.home} path contains a comma.
3067+# Because double quotes are used for quoting, the double quote character
3068+# may not appear in a path.
3069+server.loader=
3070+
3071+#
3072+# List of comma-separated paths defining the contents of the "shared"
3073+# classloader. Prefixes should be used to define what is the repository type.
3074+# Path may be relative to the CATALINA_BASE path or absolute. If left as blank,
3075+# the "common" loader will be used as Catalina's "shared" loader.
3076+# Examples:
3077+# "foo": Add this folder as a class repository
3078+# "foo/*.jar": Add all the JARs of the specified folder as class
3079+# repositories
3080+# "foo/bar.jar": Add bar.jar as a class repository
3081+# Please note that for single jars, e.g. bar.jar, you need the URL form
3082+# starting with file:.
3083+#
3084+# Note: Values may be enclosed in double quotes ("...") in case either the
3085+# ${catalina.base} path or the ${catalina.home} path contains a comma.
3086+# Because double quotes are used for quoting, the double quote character
3087+# may not appear in a path.
3088+shared.loader=
3089+
3090+# Default list of JAR files that should not be scanned using the JarScanner
3091+# functionality. This is typically used to scan JARs for configuration
3092+# information. JARs that do not contain such information may be excluded from
3093+# the scan to speed up the scanning process. This is the default list. JARs on
3094+# this list are excluded from all scans. The list must be a comma separated list
3095+# of JAR file names.
3096+# The list of JARs to skip may be over-ridden at a Context level for individual
3097+# scan types by configuring a JarScanner with a nested JarScanFilter.
3098+# The JARs listed below include:
3099+# - Tomcat Bootstrap JARs
3100+# - Tomcat API JARs
3101+# - Catalina JARs
3102+# - Jasper JARs
3103+# - Tomcat JARs
3104+# - Common non-Tomcat JARs
3105+# - Test JARs (JUnit, Cobertura and dependencies)
3106+tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\
3107+bootstrap.jar,commons-daemon.jar,tomcat-juli.jar,\
3108+annotations-api.jar,el-api.jar,jsp-api.jar,servlet-api.jar,websocket-api.jar,\
3109+catalina.jar,catalina-ant.jar,catalina-ha.jar,catalina-storeconfig.jar,\
3110+catalina-tribes.jar,\
3111+jasper.jar,jasper-el.jar,ecj-*.jar,\
3112+tomcat-api.jar,tomcat-util.jar,tomcat-util-scan.jar,tomcat-coyote.jar,\
3113+tomcat-dbcp.jar,tomcat-jni.jar,tomcat-websocket.jar,\
3114+tomcat-i18n-en.jar,tomcat-i18n-es.jar,tomcat-i18n-fr.jar,tomcat-i18n-ja.jar,\
3115+tomcat-juli-adapters.jar,catalina-jmx-remote.jar,catalina-ws.jar,\
3116+tomcat-jdbc.jar,\
3117+tools.jar,\
3118+commons-beanutils*.jar,commons-codec*.jar,commons-collections*.jar,\
3119+commons-dbcp*.jar,commons-digester*.jar,commons-fileupload*.jar,\
3120+commons-httpclient*.jar,commons-io*.jar,commons-lang*.jar,commons-logging*.jar,\
3121+commons-math*.jar,commons-pool*.jar,\
3122+jstl.jar,taglibs-standard-spec-*.jar,\
3123+geronimo-spec-jaxrpc*.jar,wsdl4j*.jar,\
3124+ant.jar,ant-junit*.jar,aspectj*.jar,jmx.jar,h2*.jar,hibernate*.jar,httpclient*.jar,\
3125+jmx-tools.jar,jta*.jar,log4j*.jar,mail*.jar,slf4j*.jar,\
3126+xercesImpl.jar,xmlParserAPIs.jar,xml-apis.jar,\
3127+junit.jar,junit-*.jar,ant-launcher.jar,\
3128+cobertura-*.jar,asm-*.jar,dom4j-*.jar,icu4j-*.jar,jaxen-*.jar,jdom-*.jar,\
3129+jetty-*.jar,oro-*.jar,servlet-api-*.jar,tagsoup-*.jar,xmlParserAPIs-*.jar,\
3130+xom-*.jar
3131+
3132+# Default list of JAR files that should be scanned that overrides the default
3133+# jarsToSkip list above. This is typically used to include a specific JAR that
3134+# has been excluded by a broad file name pattern in the jarsToSkip list.
3135+# The list of JARs to scan may be over-ridden at a Context level for individual
3136+# scan types by configuring a JarScanner with a nested JarScanFilter.
3137+tomcat.util.scan.StandardJarScanFilter.jarsToScan=log4j-core*.jar,log4j-taglib*.jar
3138+
3139+# String cache configuration.
3140+tomcat.util.buf.StringCache.byte.enabled=true
3141+#tomcat.util.buf.StringCache.char.enabled=true
3142+#tomcat.util.buf.StringCache.trainThreshold=500000
3143+#tomcat.util.buf.StringCache.cacheSize=5000
3144
3145=== added file 'examples/tomcat-maven-webapp/tomcat-conf/context.xml'
3146--- examples/tomcat-maven-webapp/tomcat-conf/context.xml 1970-01-01 00:00:00 +0000
3147+++ examples/tomcat-maven-webapp/tomcat-conf/context.xml 2022-05-19 22:01:22 +0000
3148@@ -0,0 +1,36 @@
3149+<?xml version='1.0' encoding='utf-8'?>
3150+<!--
3151+ Licensed to the Apache Software Foundation (ASF) under one or more
3152+ contributor license agreements. See the NOTICE file distributed with
3153+ this work for additional information regarding copyright ownership.
3154+ The ASF licenses this file to You under the Apache License, Version 2.0
3155+ (the "License"); you may not use this file except in compliance with
3156+ the License. You may obtain a copy of the License at
3157+
3158+ http://www.apache.org/licenses/LICENSE-2.0
3159+
3160+ Unless required by applicable law or agreed to in writing, software
3161+ distributed under the License is distributed on an "AS IS" BASIS,
3162+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3163+ See the License for the specific language governing permissions and
3164+ limitations under the License.
3165+-->
3166+<!-- The contents of this file will be loaded for each web application -->
3167+<Context>
3168+
3169+ <!-- Default set of monitored resources. If one of these changes, the -->
3170+ <!-- web application will be reloaded. -->
3171+ <WatchedResource>WEB-INF/web.xml</WatchedResource>
3172+ <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
3173+
3174+ <!-- Uncomment this to disable session persistence across Tomcat restarts -->
3175+ <!--
3176+ <Manager pathname="" />
3177+ -->
3178+
3179+ <!-- Uncomment this to enable Comet connection tacking (provides events
3180+ on session expiration as well as webapp lifecycle) -->
3181+ <!--
3182+ <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
3183+ -->
3184+</Context>
3185
3186=== added file 'examples/tomcat-maven-webapp/tomcat-conf/logging.properties'
3187--- examples/tomcat-maven-webapp/tomcat-conf/logging.properties 1970-01-01 00:00:00 +0000
3188+++ examples/tomcat-maven-webapp/tomcat-conf/logging.properties 2022-05-19 22:01:22 +0000
3189@@ -0,0 +1,64 @@
3190+# Licensed to the Apache Software Foundation (ASF) under one or more
3191+# contributor license agreements. See the NOTICE file distributed with
3192+# this work for additional information regarding copyright ownership.
3193+# The ASF licenses this file to You under the Apache License, Version 2.0
3194+# (the "License"); you may not use this file except in compliance with
3195+# the License. You may obtain a copy of the License at
3196+#
3197+# http://www.apache.org/licenses/LICENSE-2.0
3198+#
3199+# Unless required by applicable law or agreed to in writing, software
3200+# distributed under the License is distributed on an "AS IS" BASIS,
3201+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3202+# See the License for the specific language governing permissions and
3203+# limitations under the License.
3204+
3205+handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
3206+
3207+.handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
3208+
3209+############################################################
3210+# Handler specific properties.
3211+# Describes specific configuration info for Handlers.
3212+############################################################
3213+
3214+1catalina.org.apache.juli.AsyncFileHandler.level = FINE
3215+1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
3216+1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
3217+
3218+2localhost.org.apache.juli.AsyncFileHandler.level = FINE
3219+2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
3220+2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.
3221+
3222+3manager.org.apache.juli.AsyncFileHandler.level = FINE
3223+3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
3224+3manager.org.apache.juli.AsyncFileHandler.prefix = manager.
3225+
3226+4host-manager.org.apache.juli.AsyncFileHandler.level = FINE
3227+4host-manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
3228+4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.
3229+
3230+java.util.logging.ConsoleHandler.level = FINE
3231+java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
3232+
3233+
3234+############################################################
3235+# Facility specific properties.
3236+# Provides extra control for each logger.
3237+############################################################
3238+
3239+org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
3240+org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.AsyncFileHandler
3241+
3242+org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO
3243+org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.AsyncFileHandler
3244+
3245+org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO
3246+org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.AsyncFileHandler
3247+
3248+# For example, set the org.apache.catalina.util.LifecycleBase logger to log
3249+# each component that extends LifecycleBase changing state:
3250+#org.apache.catalina.util.LifecycleBase.level = FINE
3251+
3252+# To see debug messages in TldLocationsCache, uncomment the following line:
3253+#org.apache.jasper.compiler.TldLocationsCache.level = FINE
3254
3255=== added file 'examples/tomcat-maven-webapp/tomcat-conf/server.xml'
3256--- examples/tomcat-maven-webapp/tomcat-conf/server.xml 1970-01-01 00:00:00 +0000
3257+++ examples/tomcat-maven-webapp/tomcat-conf/server.xml 2022-05-19 22:01:22 +0000
3258@@ -0,0 +1,142 @@
3259+<?xml version='1.0' encoding='utf-8'?>
3260+<!--
3261+ Licensed to the Apache Software Foundation (ASF) under one or more
3262+ contributor license agreements. See the NOTICE file distributed with
3263+ this work for additional information regarding copyright ownership.
3264+ The ASF licenses this file to You under the Apache License, Version 2.0
3265+ (the "License"); you may not use this file except in compliance with
3266+ the License. You may obtain a copy of the License at
3267+
3268+ http://www.apache.org/licenses/LICENSE-2.0
3269+
3270+ Unless required by applicable law or agreed to in writing, software
3271+ distributed under the License is distributed on an "AS IS" BASIS,
3272+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3273+ See the License for the specific language governing permissions and
3274+ limitations under the License.
3275+-->
3276+<!-- Note: A "Server" is not itself a "Container", so you may not
3277+ define subcomponents such as "Valves" at this level.
3278+ Documentation at /docs/config/server.html
3279+ -->
3280+<Server port="8005" shutdown="SHUTDOWN">
3281+ <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
3282+ <!-- Security listener. Documentation at /docs/config/listeners.html
3283+ <Listener className="org.apache.catalina.security.SecurityListener" />
3284+ -->
3285+ <!--APR library loader. Documentation at /docs/apr.html -->
3286+ <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
3287+ <!-- Prevent memory leaks due to use of particular java/javax APIs-->
3288+ <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
3289+ <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
3290+ <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
3291+
3292+ <!-- Global JNDI resources
3293+ Documentation at /docs/jndi-resources-howto.html
3294+ -->
3295+ <GlobalNamingResources>
3296+ <!-- Editable user database that can also be used by
3297+ UserDatabaseRealm to authenticate users
3298+ -->
3299+ <Resource name="UserDatabase" auth="Container"
3300+ type="org.apache.catalina.UserDatabase"
3301+ description="User database that can be updated and saved"
3302+ factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
3303+ pathname="conf/tomcat-users.xml" />
3304+ </GlobalNamingResources>
3305+
3306+ <!-- A "Service" is a collection of one or more "Connectors" that share
3307+ a single "Container" Note: A "Service" is not itself a "Container",
3308+ so you may not define subcomponents such as "Valves" at this level.
3309+ Documentation at /docs/config/service.html
3310+ -->
3311+ <Service name="Catalina">
3312+
3313+ <!--The connectors can use a shared executor, you can define one or more named thread pools-->
3314+ <!--
3315+ <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
3316+ maxThreads="150" minSpareThreads="4"/>
3317+ -->
3318+
3319+
3320+ <!-- A "Connector" represents an endpoint by which requests are received
3321+ and responses are returned. Documentation at :
3322+ Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
3323+ Java AJP Connector: /docs/config/ajp.html
3324+ APR (HTTP/AJP) Connector: /docs/apr.html
3325+ Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
3326+ -->
3327+ <Connector port="8080" protocol="HTTP/1.1"
3328+ connectionTimeout="20000"
3329+ redirectPort="8443" />
3330+ <!-- A "Connector" using the shared thread pool-->
3331+ <!--
3332+ <Connector executor="tomcatThreadPool"
3333+ port="8080" protocol="HTTP/1.1"
3334+ connectionTimeout="20000"
3335+ redirectPort="8443" />
3336+ -->
3337+ <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443
3338+ This connector uses the NIO implementation that requires the JSSE
3339+ style configuration. When using the APR/native implementation, the
3340+ OpenSSL style configuration is required as described in the APR/native
3341+ documentation -->
3342+ <!--
3343+ <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
3344+ maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
3345+ clientAuth="false" sslProtocol="TLS" />
3346+ -->
3347+
3348+ <!-- Define an AJP 1.3 Connector on port 8009 -->
3349+ <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
3350+
3351+
3352+ <!-- An Engine represents the entry point (within Catalina) that processes
3353+ every request. The Engine implementation for Tomcat stand alone
3354+ analyzes the HTTP headers included with the request, and passes them
3355+ on to the appropriate Host (virtual host).
3356+ Documentation at /docs/config/engine.html -->
3357+
3358+ <!-- You should set jvmRoute to support load-balancing via AJP ie :
3359+ <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
3360+ -->
3361+ <Engine name="Catalina" defaultHost="localhost">
3362+
3363+ <!--For clustering, please take a look at documentation at:
3364+ /docs/cluster-howto.html (simple how to)
3365+ /docs/config/cluster.html (reference documentation) -->
3366+ <!--
3367+ <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
3368+ -->
3369+
3370+ <!-- Use the LockOutRealm to prevent attempts to guess user passwords
3371+ via a brute-force attack -->
3372+ <Realm className="org.apache.catalina.realm.LockOutRealm">
3373+ <!-- This Realm uses the UserDatabase configured in the global JNDI
3374+ resources under the key "UserDatabase". Any edits
3375+ that are performed against this UserDatabase are immediately
3376+ available for use by the Realm. -->
3377+ <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
3378+ resourceName="UserDatabase"/>
3379+ </Realm>
3380+
3381+ <Host name="localhost" appBase="webapps"
3382+ unpackWARs="true" autoDeploy="true">
3383+
3384+ <!-- SingleSignOn valve, share authentication between web applications
3385+ Documentation at: /docs/config/valve.html -->
3386+ <!--
3387+ <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
3388+ -->
3389+
3390+ <!-- Access log processes all example.
3391+ Documentation at: /docs/config/valve.html
3392+ Note: The pattern used is equivalent to using pattern="common" -->
3393+ <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
3394+ prefix="localhost_access_log" suffix=".txt"
3395+ pattern="%h %l %u %t &quot;%r&quot; %s %b" />
3396+
3397+ </Host>
3398+ </Engine>
3399+ </Service>
3400+</Server>
3401
3402=== added file 'examples/tomcat-maven-webapp/tomcat-conf/tomcat-users.xml'
3403--- examples/tomcat-maven-webapp/tomcat-conf/tomcat-users.xml 1970-01-01 00:00:00 +0000
3404+++ examples/tomcat-maven-webapp/tomcat-conf/tomcat-users.xml 2022-05-19 22:01:22 +0000
3405@@ -0,0 +1,39 @@
3406+<?xml version='1.0' encoding='utf-8'?>
3407+<!--
3408+ Licensed to the Apache Software Foundation (ASF) under one or more
3409+ contributor license agreements. See the NOTICE file distributed with
3410+ this work for additional information regarding copyright ownership.
3411+ The ASF licenses this file to You under the Apache License, Version 2.0
3412+ (the "License"); you may not use this file except in compliance with
3413+ the License. You may obtain a copy of the License at
3414+
3415+ http://www.apache.org/licenses/LICENSE-2.0
3416+
3417+ Unless required by applicable law or agreed to in writing, software
3418+ distributed under the License is distributed on an "AS IS" BASIS,
3419+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3420+ See the License for the specific language governing permissions and
3421+ limitations under the License.
3422+-->
3423+<tomcat-users xmlns="http://tomcat.apache.org/xml"
3424+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3425+ xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
3426+ version="1.0">
3427+<!--
3428+ NOTE: By default, no user is included in the "manager-gui" role required
3429+ to operate the "/manager/html" web application. If you wish to use this app,
3430+ you must define such a user - the username and password are arbitrary.
3431+-->
3432+<!--
3433+ NOTE: The sample user and role entries below are wrapped in a comment
3434+ and thus are ignored when reading this file. Do not forget to remove
3435+ <!.. ..> that surrounds them.
3436+-->
3437+<!--
3438+ <role rolename="tomcat"/>
3439+ <role rolename="role1"/>
3440+ <user username="tomcat" password="tomcat" roles="tomcat"/>
3441+ <user username="both" password="tomcat" roles="tomcat,role1"/>
3442+ <user username="role1" password="tomcat" roles="role1"/>
3443+-->
3444+</tomcat-users>
3445
3446=== added file 'examples/tomcat-maven-webapp/tomcat-conf/tomcat-users.xsd'
3447--- examples/tomcat-maven-webapp/tomcat-conf/tomcat-users.xsd 1970-01-01 00:00:00 +0000
3448+++ examples/tomcat-maven-webapp/tomcat-conf/tomcat-users.xsd 2022-05-19 22:01:22 +0000
3449@@ -0,0 +1,43 @@
3450+<?xml version="1.0" encoding="UTF-8" ?>
3451+<xs:schema xmlns="http://www.w3.org/2001/XMLSchema"
3452+ targetNamespace="http://tomcat.apache.org/xml"
3453+ xmlns:users="http://tomcat.apache.org/xml"
3454+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
3455+ elementFormDefault="qualified"
3456+ attributeFormDefault="unqualified"
3457+ version="1.0">
3458+ <xs:element name="tomcat-users">
3459+ <xs:complexType>
3460+ <xs:sequence>
3461+ <xs:element name="role" minOccurs="0" maxOccurs="unbounded">
3462+ <xs:complexType>
3463+ <xs:attribute name="rolename" use="required" type="users:entityname" />
3464+ <xs:attribute name="description" type="xs:string" />
3465+ </xs:complexType>
3466+ </xs:element>
3467+ <xs:element name="group" minOccurs="0" maxOccurs="unbounded">
3468+ <xs:complexType>
3469+ <xs:attribute name="groupname" use="required" type="users:entityname" />
3470+ <xs:attribute name="description" type="xs:string" />
3471+ <xs:attribute name="roles" type="xs:string" />
3472+ </xs:complexType>
3473+ </xs:element>
3474+ <xs:element name="user" minOccurs="0" maxOccurs="unbounded">
3475+ <xs:complexType>
3476+ <xs:attribute name="username" use="required" type="users:entityname" />
3477+ <xs:attribute name="fullname" type="xs:string" />
3478+ <xs:attribute name="password" type="xs:string" />
3479+ <xs:attribute name="roles" type="xs:string" />
3480+ <xs:attribute name="groups" type="xs:string" />
3481+ </xs:complexType>
3482+ </xs:element>
3483+ </xs:sequence>
3484+ <xs:attribute name="version" type="xs:string" />
3485+ </xs:complexType>
3486+ </xs:element>
3487+ <xs:simpleType name="entityname">
3488+ <xs:restriction base="xs:string">
3489+ <xs:minLength value="1"/>
3490+ </xs:restriction>
3491+ </xs:simpleType>
3492+</xs:schema>
3493\ No newline at end of file
3494
3495=== added file 'examples/tomcat-maven-webapp/tomcat-conf/web.xml'
3496--- examples/tomcat-maven-webapp/tomcat-conf/web.xml 1970-01-01 00:00:00 +0000
3497+++ examples/tomcat-maven-webapp/tomcat-conf/web.xml 2022-05-19 22:01:22 +0000
3498@@ -0,0 +1,4664 @@
3499+<?xml version="1.0" encoding="ISO-8859-1"?>
3500+<!--
3501+ Licensed to the Apache Software Foundation (ASF) under one or more
3502+ contributor license agreements. See the NOTICE file distributed with
3503+ this work for additional information regarding copyright ownership.
3504+ The ASF licenses this file to You under the Apache License, Version 2.0
3505+ (the "License"); you may not use this file except in compliance with
3506+ the License. You may obtain a copy of the License at
3507+
3508+ http://www.apache.org/licenses/LICENSE-2.0
3509+
3510+ Unless required by applicable law or agreed to in writing, software
3511+ distributed under the License is distributed on an "AS IS" BASIS,
3512+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3513+ See the License for the specific language governing permissions and
3514+ limitations under the License.
3515+-->
3516+<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
3517+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3518+ xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
3519+ http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
3520+ version="3.1">
3521+
3522+ <!-- ======================== Introduction ============================== -->
3523+ <!-- This document defines default values for *all* web applications -->
3524+ <!-- loaded into this instance of Tomcat. As each application is -->
3525+ <!-- deployed, this file is processed, followed by the -->
3526+ <!-- "/WEB-INF/web.xml" deployment descriptor from your own -->
3527+ <!-- applications. -->
3528+ <!-- -->
3529+ <!-- WARNING: Do not configure application-specific resources here! -->
3530+ <!-- They should go in the "/WEB-INF/web.xml" file in your application. -->
3531+
3532+
3533+ <!-- ================== Built In Servlet Definitions ==================== -->
3534+
3535+
3536+ <!-- The default servlet for all web applications, that serves static -->
3537+ <!-- resources. It processes all requests that are not mapped to other -->
3538+ <!-- servlets with servlet mappings (defined either here or in your own -->
3539+ <!-- web.xml file). This servlet supports the following initialization -->
3540+ <!-- parameters (default values are in square brackets): -->
3541+ <!-- -->
3542+ <!-- debug Debugging detail level for messages logged -->
3543+ <!-- by this servlet. [0] -->
3544+ <!-- -->
3545+ <!-- fileEncoding Encoding to be used to read static resources -->
3546+ <!-- [platform default] -->
3547+ <!-- -->
3548+ <!-- input Input buffer size (in bytes) when reading -->
3549+ <!-- resources to be served. [2048] -->
3550+ <!-- -->
3551+ <!-- listings Should directory listings be produced if there -->
3552+ <!-- is no welcome file in this directory? [false] -->
3553+ <!-- WARNING: Listings for directories with many -->
3554+ <!-- entries can be slow and may consume -->
3555+ <!-- significant proportions of server resources. -->
3556+ <!-- -->
3557+ <!-- output Output buffer size (in bytes) when writing -->
3558+ <!-- resources to be served. [2048] -->
3559+ <!-- -->
3560+ <!-- readonly Is this context "read only", so HTTP -->
3561+ <!-- commands like PUT and DELETE are -->
3562+ <!-- rejected? [true] -->
3563+ <!-- -->
3564+ <!-- readmeFile File to display together with the directory -->
3565+ <!-- contents. [null] -->
3566+ <!-- -->
3567+ <!-- sendfileSize If the connector used supports sendfile, this -->
3568+ <!-- represents the minimal file size in KB for -->
3569+ <!-- which sendfile will be used. Use a negative -->
3570+ <!-- value to always disable sendfile. [48] -->
3571+ <!-- -->
3572+ <!-- useAcceptRanges Should the Accept-Ranges header be included -->
3573+ <!-- in responses where appropriate? [true] -->
3574+ <!-- -->
3575+ <!-- For directory listing customization. Checks localXsltFile, then -->
3576+ <!-- globalXsltFile, then defaults to original behavior. -->
3577+ <!-- -->
3578+ <!-- localXsltFile Make directory listings an XML doc and -->
3579+ <!-- pass the result to this style sheet residing -->
3580+ <!-- in that directory. This overrides -->
3581+ <!-- contextXsltFile and globalXsltFile[null] -->
3582+ <!-- -->
3583+ <!-- contextXsltFile Make directory listings an XML doc and -->
3584+ <!-- pass the result to this style sheet which is -->
3585+ <!-- relative to the context root. This overrides -->
3586+ <!-- globalXsltFile[null] -->
3587+ <!-- -->
3588+ <!-- globalXsltFile Site wide configuration version of -->
3589+ <!-- localXsltFile. This argument must either be an -->
3590+ <!-- absolute or relative (to either -->
3591+ <!-- $CATALINA_BASE/conf or $CATALINA_HOME/conf) -->
3592+ <!-- path that points to a location below either -->
3593+ <!-- $CATALINA_BASE/conf (checked first) or -->
3594+ <!-- $CATALINA_HOME/conf (checked second).[null] -->
3595+ <!-- -->
3596+ <!-- showServerInfo Should server information be presented in the -->
3597+ <!-- response sent to clients when directory -->
3598+ <!-- listings is enabled? [true] -->
3599+
3600+ <servlet>
3601+ <servlet-name>default</servlet-name>
3602+ <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
3603+ <init-param>
3604+ <param-name>debug</param-name>
3605+ <param-value>0</param-value>
3606+ </init-param>
3607+ <init-param>
3608+ <param-name>listings</param-name>
3609+ <param-value>false</param-value>
3610+ </init-param>
3611+ <load-on-startup>1</load-on-startup>
3612+ </servlet>
3613+
3614+
3615+ <!-- The JSP page compiler and execution servlet, which is the mechanism -->
3616+ <!-- used by Tomcat to support JSP pages. Traditionally, this servlet -->
3617+ <!-- is mapped to the URL pattern "*.jsp". This servlet supports the -->
3618+ <!-- following initialization parameters (default values are in square -->
3619+ <!-- brackets): -->
3620+ <!-- -->
3621+ <!-- checkInterval If development is false and checkInterval is -->
3622+ <!-- greater than zero, background compilations are -->
3623+ <!-- enabled. checkInterval is the time in seconds -->
3624+ <!-- between checks to see if a JSP page (and its -->
3625+ <!-- dependent files) needs to be recompiled. [0] -->
3626+ <!-- -->
3627+ <!-- classdebuginfo Should the class file be compiled with -->
3628+ <!-- debugging information? [true] -->
3629+ <!-- -->
3630+ <!-- classpath What class path should I use while compiling -->
3631+ <!-- generated servlets? [Created dynamically -->
3632+ <!-- based on the current web application] -->
3633+ <!-- -->
3634+ <!-- compiler Which compiler Ant should use to compile JSP -->
3635+ <!-- pages. See the jasper documentation for more -->
3636+ <!-- information. -->
3637+ <!-- -->
3638+ <!-- compilerSourceVM Compiler source VM. [1.7] -->
3639+ <!-- -->
3640+ <!-- compilerTargetVM Compiler target VM. [1.7] -->
3641+ <!-- -->
3642+ <!-- development Is Jasper used in development mode? If true, -->
3643+ <!-- the frequency at which JSPs are checked for -->
3644+ <!-- modification may be specified via the -->
3645+ <!-- modificationTestInterval parameter. [true] -->
3646+ <!-- -->
3647+ <!-- displaySourceFragment -->
3648+ <!-- Should a source fragment be included in -->
3649+ <!-- exception messages? [true] -->
3650+ <!-- -->
3651+ <!-- dumpSmap Should the SMAP info for JSR45 debugging be -->
3652+ <!-- dumped to a file? [false] -->
3653+ <!-- False if suppressSmap is true -->
3654+ <!-- -->
3655+ <!-- enablePooling Determines whether tag handler pooling is -->
3656+ <!-- enabled. This is a compilation option. It will -->
3657+ <!-- not alter the behaviour of JSPs that have -->
3658+ <!-- already been compiled. [true] -->
3659+ <!-- -->
3660+ <!-- engineOptionsClass Allows specifying the Options class used to -->
3661+ <!-- configure Jasper. If not present, the default -->
3662+ <!-- EmbeddedServletOptions will be used. -->
3663+ <!-- -->
3664+ <!-- errorOnUseBeanInvalidClassAttribute -->
3665+ <!-- Should Jasper issue an error when the value of -->
3666+ <!-- the class attribute in an useBean action is -->
3667+ <!-- not a valid bean class? [true] -->
3668+ <!-- -->
3669+ <!-- fork Tell Ant to fork compiles of JSP pages so that -->
3670+ <!-- a separate JVM is used for JSP page compiles -->
3671+ <!-- from the one Tomcat is running in. [true] -->
3672+ <!-- -->
3673+ <!-- genStringAsCharArray -->
3674+ <!-- Should text strings be generated as char -->
3675+ <!-- arrays, to improve performance in some cases? -->
3676+ <!-- [false] -->
3677+ <!-- -->
3678+ <!-- ieClassId The class-id value to be sent to Internet -->
3679+ <!-- Explorer when using <jsp:plugin> tags. -->
3680+ <!-- [clsid:8AD9C840-044E-11D1-B3E9-00805F499D93] -->
3681+ <!-- -->
3682+ <!-- javaEncoding Java file encoding to use for generating java -->
3683+ <!-- source files. [UTF8] -->
3684+ <!-- -->
3685+ <!-- keepgenerated Should we keep the generated Java source code -->
3686+ <!-- for each page instead of deleting it? [true] -->
3687+ <!-- -->
3688+ <!-- mappedfile Should we generate static content with one -->
3689+ <!-- print statement per input line, to ease -->
3690+ <!-- debugging? [true] -->
3691+ <!-- -->
3692+ <!-- maxLoadedJsps The maximum number of JSPs that will be loaded -->
3693+ <!-- for a web application. If more than this -->
3694+ <!-- number of JSPs are loaded, the least recently -->
3695+ <!-- used JSPs will be unloaded so that the number -->
3696+ <!-- of JSPs loaded at any one time does not exceed -->
3697+ <!-- this limit. A value of zero or less indicates -->
3698+ <!-- no limit. [-1] -->
3699+ <!-- -->
3700+ <!-- jspIdleTimeout The amount of time in seconds a JSP can be -->
3701+ <!-- idle before it is unloaded. A value of zero -->
3702+ <!-- or less indicates never unload. [-1] -->
3703+ <!-- -->
3704+ <!-- modificationTestInterval -->
3705+ <!-- Causes a JSP (and its dependent files) to not -->
3706+ <!-- be checked for modification during the -->
3707+ <!-- specified time interval (in seconds) from the -->
3708+ <!-- last time the JSP was checked for -->
3709+ <!-- modification. A value of 0 will cause the JSP -->
3710+ <!-- to be checked on every access. -->
3711+ <!-- Used in development mode only. [4] -->
3712+ <!-- -->
3713+ <!-- recompileOnFail If a JSP compilation fails should the -->
3714+ <!-- modificationTestInterval be ignored and the -->
3715+ <!-- next access trigger a re-compilation attempt? -->
3716+ <!-- Used in development mode only and is disabled -->
3717+ <!-- by default as compilation may be expensive and -->
3718+ <!-- could lead to excessive resource usage. -->
3719+ <!-- [false] -->
3720+ <!-- -->
3721+ <!-- scratchdir What scratch directory should we use when -->
3722+ <!-- compiling JSP pages? [default work directory -->
3723+ <!-- for the current web application] -->
3724+ <!-- -->
3725+ <!-- suppressSmap Should the generation of SMAP info for JSR45 -->
3726+ <!-- debugging be suppressed? [false] -->
3727+ <!-- -->
3728+ <!-- trimSpaces Should white spaces in template text between -->
3729+ <!-- actions or directives be trimmed? [false] -->
3730+ <!-- -->
3731+ <!-- xpoweredBy Determines whether X-Powered-By response -->
3732+ <!-- header is added by generated servlet. [false] -->
3733+
3734+ <servlet>
3735+ <servlet-name>jsp</servlet-name>
3736+ <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
3737+ <init-param>
3738+ <param-name>fork</param-name>
3739+ <param-value>false</param-value>
3740+ </init-param>
3741+ <init-param>
3742+ <param-name>xpoweredBy</param-name>
3743+ <param-value>false</param-value>
3744+ </init-param>
3745+ <load-on-startup>3</load-on-startup>
3746+ </servlet>
3747+
3748+
3749+ <!-- NOTE: An SSI Filter is also available as an alternative SSI -->
3750+ <!-- implementation. Use either the Servlet or the Filter but NOT both. -->
3751+ <!-- -->
3752+ <!-- Server Side Includes processing servlet, which processes SSI -->
3753+ <!-- directives in HTML pages consistent with similar support in web -->
3754+ <!-- servers like Apache. Traditionally, this servlet is mapped to the -->
3755+ <!-- URL pattern "*.shtml". This servlet supports the following -->
3756+ <!-- initialization parameters (default values are in square brackets): -->
3757+ <!-- -->
3758+ <!-- buffered Should output from this servlet be buffered? -->
3759+ <!-- (0=false, 1=true) [0] -->
3760+ <!-- -->
3761+ <!-- debug Debugging detail level for messages logged -->
3762+ <!-- by this servlet. [0] -->
3763+ <!-- -->
3764+ <!-- expires The number of seconds before a page with SSI -->
3765+ <!-- directives will expire. [No default] -->
3766+ <!-- -->
3767+ <!-- isVirtualWebappRelative -->
3768+ <!-- Should "virtual" paths be interpreted as -->
3769+ <!-- relative to the context root, instead of -->
3770+ <!-- the server root? [false] -->
3771+ <!-- -->
3772+ <!-- inputEncoding The encoding to assume for SSI resources if -->
3773+ <!-- one is not available from the resource. -->
3774+ <!-- [Platform default] -->
3775+ <!-- -->
3776+ <!-- outputEncoding The encoding to use for the page that results -->
3777+ <!-- from the SSI processing. [UTF-8] -->
3778+ <!-- -->
3779+ <!-- allowExec Is use of the exec command enabled? [false] -->
3780+
3781+<!--
3782+ <servlet>
3783+ <servlet-name>ssi</servlet-name>
3784+ <servlet-class>
3785+ org.apache.catalina.ssi.SSIServlet
3786+ </servlet-class>
3787+ <init-param>
3788+ <param-name>buffered</param-name>
3789+ <param-value>1</param-value>
3790+ </init-param>
3791+ <init-param>
3792+ <param-name>debug</param-name>
3793+ <param-value>0</param-value>
3794+ </init-param>
3795+ <init-param>
3796+ <param-name>expires</param-name>
3797+ <param-value>666</param-value>
3798+ </init-param>
3799+ <init-param>
3800+ <param-name>isVirtualWebappRelative</param-name>
3801+ <param-value>false</param-value>
3802+ </init-param>
3803+ <load-on-startup>4</load-on-startup>
3804+ </servlet>
3805+-->
3806+
3807+
3808+ <!-- Common Gateway Includes (CGI) processing servlet, which supports -->
3809+ <!-- execution of external applications that conform to the CGI spec -->
3810+ <!-- requirements. Typically, this servlet is mapped to the URL pattern -->
3811+ <!-- "/cgi-bin/*", which means that any CGI applications that are -->
3812+ <!-- executed must be present within the web application. This servlet -->
3813+ <!-- supports the following initialization parameters (default values -->
3814+ <!-- are in square brackets): -->
3815+ <!-- -->
3816+ <!-- cgiPathPrefix The CGI search path will start at -->
3817+ <!-- webAppRootDir + File.separator + this prefix. -->
3818+ <!-- If not set, then webAppRootDir is used. -->
3819+ <!-- Recommended value: WEB-INF/cgi -->
3820+ <!-- -->
3821+ <!-- debug Debugging detail level for messages logged -->
3822+ <!-- by this servlet. [0] -->
3823+ <!-- -->
3824+ <!-- executable Name of the executable used to run the -->
3825+ <!-- script. [perl] -->
3826+ <!-- -->
3827+ <!-- parameterEncoding Name of parameter encoding to be used with -->
3828+ <!-- CGI servlet. -->
3829+ <!-- [System.getProperty("file.encoding","UTF-8")] -->
3830+ <!-- -->
3831+ <!-- passShellEnvironment Should the shell environment variables (if -->
3832+ <!-- any) be passed to the CGI script? [false] -->
3833+ <!-- -->
3834+ <!-- stderrTimeout The time (in milliseconds) to wait for the -->
3835+ <!-- reading of stderr to complete before -->
3836+ <!-- terminating the CGI process. [2000] -->
3837+
3838+<!--
3839+ <servlet>
3840+ <servlet-name>cgi</servlet-name>
3841+ <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
3842+ <init-param>
3843+ <param-name>debug</param-name>
3844+ <param-value>0</param-value>
3845+ </init-param>
3846+ <init-param>
3847+ <param-name>cgiPathPrefix</param-name>
3848+ <param-value>WEB-INF/cgi</param-value>
3849+ </init-param>
3850+ <load-on-startup>5</load-on-startup>
3851+ </servlet>
3852+-->
3853+
3854+
3855+ <!-- ================ Built In Servlet Mappings ========================= -->
3856+
3857+
3858+ <!-- The servlet mappings for the built in servlets defined above. Note -->
3859+ <!-- that, by default, the CGI and SSI servlets are *not* mapped. You -->
3860+ <!-- must uncomment these mappings (or add them to your application's own -->
3861+ <!-- web.xml deployment descriptor) to enable these services -->
3862+
3863+ <!-- The mapping for the default servlet -->
3864+ <servlet-mapping>
3865+ <servlet-name>default</servlet-name>
3866+ <url-pattern>/</url-pattern>
3867+ </servlet-mapping>
3868+
3869+ <!-- The mappings for the JSP servlet -->
3870+ <servlet-mapping>
3871+ <servlet-name>jsp</servlet-name>
3872+ <url-pattern>*.jsp</url-pattern>
3873+ <url-pattern>*.jspx</url-pattern>
3874+ </servlet-mapping>
3875+
3876+ <!-- The mapping for the SSI servlet -->
3877+<!--
3878+ <servlet-mapping>
3879+ <servlet-name>ssi</servlet-name>
3880+ <url-pattern>*.shtml</url-pattern>
3881+ </servlet-mapping>
3882+-->
3883+
3884+ <!-- The mapping for the CGI Gateway servlet -->
3885+
3886+<!--
3887+ <servlet-mapping>
3888+ <servlet-name>cgi</servlet-name>
3889+ <url-pattern>/cgi-bin/*</url-pattern>
3890+ </servlet-mapping>
3891+-->
3892+
3893+
3894+ <!-- ================== Built In Filter Definitions ===================== -->
3895+
3896+ <!-- A filter that sets various security related HTTP Response headers. -->
3897+ <!-- This filter supports the following initialization parameters -->
3898+ <!-- (default values are in square brackets): -->
3899+ <!-- -->
3900+ <!-- hstsEnabled Should the HTTP Strict Transport Security -->
3901+ <!-- (HSTS) header be added to the response? See -->
3902+ <!-- RFC 6797 for more information on HSTS. [true] -->
3903+ <!-- -->
3904+ <!-- hstsMaxAgeSeconds The max age value that should be used in the -->
3905+ <!-- HSTS header. Negative values will be treated -->
3906+ <!-- as zero. [0] -->
3907+ <!-- -->
3908+ <!-- hstsIncludeSubDomains -->
3909+ <!-- Should the includeSubDomains parameter be -->
3910+ <!-- included in the HSTS header. -->
3911+ <!-- -->
3912+ <!-- antiClickJackingEnabled -->
3913+ <!-- Should the anti click-jacking header -->
3914+ <!-- X-Frame-Options be added to every response? -->
3915+ <!-- [true] -->
3916+ <!-- -->
3917+ <!-- antiClickJackingOption -->
3918+ <!-- What value should be used for the header. Must -->
3919+ <!-- be one of DENY, SAMEORIGIN, ALLOW-FROM -->
3920+ <!-- (case-insensitive). [DENY] -->
3921+ <!-- -->
3922+ <!-- antiClickJackingUri IF ALLOW-FROM is used, what URI should be -->
3923+ <!-- allowed? [] -->
3924+ <!-- -->
3925+ <!-- blockContentTypeSniffingEnabled -->
3926+ <!-- Should the header that blocks content type -->
3927+ <!-- sniffing be added to every response? [true] -->
3928+<!--
3929+ <filter>
3930+ <filter-name>httpHeaderSecurity</filter-name>
3931+ <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
3932+ <async-supported>true</async-supported>
3933+ </filter>
3934+-->
3935+
3936+ <!-- A filter that sets character encoding that is used to decode -->
3937+ <!-- parameters in a POST request -->
3938+<!--
3939+ <filter>
3940+ <filter-name>setCharacterEncodingFilter</filter-name>
3941+ <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
3942+ <init-param>
3943+ <param-name>encoding</param-name>
3944+ <param-value>UTF-8</param-value>
3945+ </init-param>
3946+ <async-supported>true</async-supported>
3947+ </filter>
3948+-->
3949+
3950+ <!-- A filter that triggers request parameters parsing and rejects the -->
3951+ <!-- request if some parameters were skipped because of parsing errors or -->
3952+ <!-- request size limitations. -->
3953+<!--
3954+ <filter>
3955+ <filter-name>failedRequestFilter</filter-name>
3956+ <filter-class>
3957+ org.apache.catalina.filters.FailedRequestFilter
3958+ </filter-class>
3959+ <async-supported>true</async-supported>
3960+ </filter>
3961+-->
3962+
3963+
3964+ <!-- NOTE: An SSI Servlet is also available as an alternative SSI -->
3965+ <!-- implementation. Use either the Servlet or the Filter but NOT both. -->
3966+ <!-- -->
3967+ <!-- Server Side Includes processing filter, which processes SSI -->
3968+ <!-- directives in HTML pages consistent with similar support in web -->
3969+ <!-- servers like Apache. Traditionally, this filter is mapped to the -->
3970+ <!-- URL pattern "*.shtml", though it can be mapped to "*" as it will -->
3971+ <!-- selectively enable/disable SSI processing based on mime types. For -->
3972+ <!-- this to work you will need to uncomment the .shtml mime type -->
3973+ <!-- definition towards the bottom of this file. -->
3974+ <!-- The contentType init param allows you to apply SSI processing to JSP -->
3975+ <!-- pages, javascript, or any other content you wish. This filter -->
3976+ <!-- supports the following initialization parameters (default values are -->
3977+ <!-- in square brackets): -->
3978+ <!-- -->
3979+ <!-- contentType A regex pattern that must be matched before -->
3980+ <!-- SSI processing is applied. -->
3981+ <!-- [text/x-server-parsed-html(;.*)?] -->
3982+ <!-- -->
3983+ <!-- debug Debugging detail level for messages logged -->
3984+ <!-- by this servlet. [0] -->
3985+ <!-- -->
3986+ <!-- expires The number of seconds before a page with SSI -->
3987+ <!-- directives will expire. [No default] -->
3988+ <!-- -->
3989+ <!-- isVirtualWebappRelative -->
3990+ <!-- Should "virtual" paths be interpreted as -->
3991+ <!-- relative to the context root, instead of -->
3992+ <!-- the server root? [false] -->
3993+ <!-- -->
3994+ <!-- allowExec Is use of the exec command enabled? [false] -->
3995+
3996+<!--
3997+ <filter>
3998+ <filter-name>ssi</filter-name>
3999+ <filter-class>
4000+ org.apache.catalina.ssi.SSIFilter
4001+ </filter-class>
4002+ <init-param>
4003+ <param-name>contentType</param-name>
4004+ <param-value>text/x-server-parsed-html(;.*)?</param-value>
4005+ </init-param>
4006+ <init-param>
4007+ <param-name>debug</param-name>
4008+ <param-value>0</param-value>
4009+ </init-param>
4010+ <init-param>
4011+ <param-name>expires</param-name>
4012+ <param-value>666</param-value>
4013+ </init-param>
4014+ <init-param>
4015+ <param-name>isVirtualWebappRelative</param-name>
4016+ <param-value>false</param-value>
4017+ </init-param>
4018+ </filter>
4019+-->
4020+
4021+
4022+ <!-- ==================== Built In Filter Mappings ====================== -->
4023+
4024+ <!-- The mapping for the HTTP header security Filter -->
4025+<!--
4026+ <filter-mapping>
4027+ <filter-name>httpHeaderSecurity</filter-name>
4028+ <url-pattern>/*</url-pattern>
4029+ <dispatcher>REQUEST</dispatcher>
4030+ </filter-mapping>
4031+-->
4032+
4033+ <!-- The mapping for the Set Character Encoding Filter -->
4034+<!--
4035+ <filter-mapping>
4036+ <filter-name>setCharacterEncodingFilter</filter-name>
4037+ <url-pattern>/*</url-pattern>
4038+ </filter-mapping>
4039+-->
4040+
4041+ <!-- The mapping for the Failed Request Filter -->
4042+<!--
4043+ <filter-mapping>
4044+ <filter-name>failedRequestFilter</filter-name>
4045+ <url-pattern>/*</url-pattern>
4046+ </filter-mapping>
4047+-->
4048+
4049+ <!-- The mapping for the SSI Filter -->
4050+<!--
4051+ <filter-mapping>
4052+ <filter-name>ssi</filter-name>
4053+ <url-pattern>*.shtml</url-pattern>
4054+ </filter-mapping>
4055+-->
4056+
4057+
4058+ <!-- ==================== Default Session Configuration ================= -->
4059+ <!-- You can set the default session timeout (in minutes) for all newly -->
4060+ <!-- created sessions by modifying the value below. -->
4061+
4062+ <session-config>
4063+ <session-timeout>30</session-timeout>
4064+ </session-config>
4065+
4066+
4067+ <!-- ===================== Default MIME Type Mappings =================== -->
4068+ <!-- When serving static resources, Tomcat will automatically generate -->
4069+ <!-- a "Content-Type" header based on the resource's filename extension, -->
4070+ <!-- based on these mappings. Additional mappings can be added here (to -->
4071+ <!-- apply to all web applications), or in your own application's web.xml -->
4072+ <!-- deployment descriptor. -->
4073+ <!-- Note: Extensions are always matched in a case-insensitive manner. -->
4074+
4075+ <mime-mapping>
4076+ <extension>123</extension>
4077+ <mime-type>application/vnd.lotus-1-2-3</mime-type>
4078+ </mime-mapping>
4079+ <mime-mapping>
4080+ <extension>3dml</extension>
4081+ <mime-type>text/vnd.in3d.3dml</mime-type>
4082+ </mime-mapping>
4083+ <mime-mapping>
4084+ <extension>3ds</extension>
4085+ <mime-type>image/x-3ds</mime-type>
4086+ </mime-mapping>
4087+ <mime-mapping>
4088+ <extension>3g2</extension>
4089+ <mime-type>video/3gpp2</mime-type>
4090+ </mime-mapping>
4091+ <mime-mapping>
4092+ <extension>3gp</extension>
4093+ <mime-type>video/3gpp</mime-type>
4094+ </mime-mapping>
4095+ <mime-mapping>
4096+ <extension>7z</extension>
4097+ <mime-type>application/x-7z-compressed</mime-type>
4098+ </mime-mapping>
4099+ <mime-mapping>
4100+ <extension>aab</extension>
4101+ <mime-type>application/x-authorware-bin</mime-type>
4102+ </mime-mapping>
4103+ <mime-mapping>
4104+ <extension>aac</extension>
4105+ <mime-type>audio/x-aac</mime-type>
4106+ </mime-mapping>
4107+ <mime-mapping>
4108+ <extension>aam</extension>
4109+ <mime-type>application/x-authorware-map</mime-type>
4110+ </mime-mapping>
4111+ <mime-mapping>
4112+ <extension>aas</extension>
4113+ <mime-type>application/x-authorware-seg</mime-type>
4114+ </mime-mapping>
4115+ <mime-mapping>
4116+ <extension>abs</extension>
4117+ <mime-type>audio/x-mpeg</mime-type>
4118+ </mime-mapping>
4119+ <mime-mapping>
4120+ <extension>abw</extension>
4121+ <mime-type>application/x-abiword</mime-type>
4122+ </mime-mapping>
4123+ <mime-mapping>
4124+ <extension>ac</extension>
4125+ <mime-type>application/pkix-attr-cert</mime-type>
4126+ </mime-mapping>
4127+ <mime-mapping>
4128+ <extension>acc</extension>
4129+ <mime-type>application/vnd.americandynamics.acc</mime-type>
4130+ </mime-mapping>
4131+ <mime-mapping>
4132+ <extension>ace</extension>
4133+ <mime-type>application/x-ace-compressed</mime-type>
4134+ </mime-mapping>
4135+ <mime-mapping>
4136+ <extension>acu</extension>
4137+ <mime-type>application/vnd.acucobol</mime-type>
4138+ </mime-mapping>
4139+ <mime-mapping>
4140+ <extension>acutc</extension>
4141+ <mime-type>application/vnd.acucorp</mime-type>
4142+ </mime-mapping>
4143+ <mime-mapping>
4144+ <extension>adp</extension>
4145+ <mime-type>audio/adpcm</mime-type>
4146+ </mime-mapping>
4147+ <mime-mapping>
4148+ <extension>aep</extension>
4149+ <mime-type>application/vnd.audiograph</mime-type>
4150+ </mime-mapping>
4151+ <mime-mapping>
4152+ <extension>afm</extension>
4153+ <mime-type>application/x-font-type1</mime-type>
4154+ </mime-mapping>
4155+ <mime-mapping>
4156+ <extension>afp</extension>
4157+ <mime-type>application/vnd.ibm.modcap</mime-type>
4158+ </mime-mapping>
4159+ <mime-mapping>
4160+ <extension>ahead</extension>
4161+ <mime-type>application/vnd.ahead.space</mime-type>
4162+ </mime-mapping>
4163+ <mime-mapping>
4164+ <extension>ai</extension>
4165+ <mime-type>application/postscript</mime-type>
4166+ </mime-mapping>
4167+ <mime-mapping>
4168+ <extension>aif</extension>
4169+ <mime-type>audio/x-aiff</mime-type>
4170+ </mime-mapping>
4171+ <mime-mapping>
4172+ <extension>aifc</extension>
4173+ <mime-type>audio/x-aiff</mime-type>
4174+ </mime-mapping>
4175+ <mime-mapping>
4176+ <extension>aiff</extension>
4177+ <mime-type>audio/x-aiff</mime-type>
4178+ </mime-mapping>
4179+ <mime-mapping>
4180+ <extension>aim</extension>
4181+ <mime-type>application/x-aim</mime-type>
4182+ </mime-mapping>
4183+ <mime-mapping>
4184+ <extension>air</extension>
4185+ <mime-type>application/vnd.adobe.air-application-installer-package+zip</mime-type>
4186+ </mime-mapping>
4187+ <mime-mapping>
4188+ <extension>ait</extension>
4189+ <mime-type>application/vnd.dvb.ait</mime-type>
4190+ </mime-mapping>
4191+ <mime-mapping>
4192+ <extension>ami</extension>
4193+ <mime-type>application/vnd.amiga.ami</mime-type>
4194+ </mime-mapping>
4195+ <mime-mapping>
4196+ <extension>anx</extension>
4197+ <mime-type>application/annodex</mime-type>
4198+ </mime-mapping>
4199+ <mime-mapping>
4200+ <extension>apk</extension>
4201+ <mime-type>application/vnd.android.package-archive</mime-type>
4202+ </mime-mapping>
4203+ <mime-mapping>
4204+ <extension>appcache</extension>
4205+ <mime-type>text/cache-manifest</mime-type>
4206+ </mime-mapping>
4207+ <mime-mapping>
4208+ <extension>application</extension>
4209+ <mime-type>application/x-ms-application</mime-type>
4210+ </mime-mapping>
4211+ <mime-mapping>
4212+ <extension>apr</extension>
4213+ <mime-type>application/vnd.lotus-approach</mime-type>
4214+ </mime-mapping>
4215+ <mime-mapping>
4216+ <extension>arc</extension>
4217+ <mime-type>application/x-freearc</mime-type>
4218+ </mime-mapping>
4219+ <mime-mapping>
4220+ <extension>art</extension>
4221+ <mime-type>image/x-jg</mime-type>
4222+ </mime-mapping>
4223+ <mime-mapping>
4224+ <extension>asc</extension>
4225+ <mime-type>application/pgp-signature</mime-type>
4226+ </mime-mapping>
4227+ <mime-mapping>
4228+ <extension>asf</extension>
4229+ <mime-type>video/x-ms-asf</mime-type>
4230+ </mime-mapping>
4231+ <mime-mapping>
4232+ <extension>asm</extension>
4233+ <mime-type>text/x-asm</mime-type>
4234+ </mime-mapping>
4235+ <mime-mapping>
4236+ <extension>aso</extension>
4237+ <mime-type>application/vnd.accpac.simply.aso</mime-type>
4238+ </mime-mapping>
4239+ <mime-mapping>
4240+ <extension>asx</extension>
4241+ <mime-type>video/x-ms-asf</mime-type>
4242+ </mime-mapping>
4243+ <mime-mapping>
4244+ <extension>atc</extension>
4245+ <mime-type>application/vnd.acucorp</mime-type>
4246+ </mime-mapping>
4247+ <mime-mapping>
4248+ <extension>atom</extension>
4249+ <mime-type>application/atom+xml</mime-type>
4250+ </mime-mapping>
4251+ <mime-mapping>
4252+ <extension>atomcat</extension>
4253+ <mime-type>application/atomcat+xml</mime-type>
4254+ </mime-mapping>
4255+ <mime-mapping>
4256+ <extension>atomsvc</extension>
4257+ <mime-type>application/atomsvc+xml</mime-type>
4258+ </mime-mapping>
4259+ <mime-mapping>
4260+ <extension>atx</extension>
4261+ <mime-type>application/vnd.antix.game-component</mime-type>
4262+ </mime-mapping>
4263+ <mime-mapping>
4264+ <extension>au</extension>
4265+ <mime-type>audio/basic</mime-type>
4266+ </mime-mapping>
4267+ <mime-mapping>
4268+ <extension>avi</extension>
4269+ <mime-type>video/x-msvideo</mime-type>
4270+ </mime-mapping>
4271+ <mime-mapping>
4272+ <extension>avx</extension>
4273+ <mime-type>video/x-rad-screenplay</mime-type>
4274+ </mime-mapping>
4275+ <mime-mapping>
4276+ <extension>aw</extension>
4277+ <mime-type>application/applixware</mime-type>
4278+ </mime-mapping>
4279+ <mime-mapping>
4280+ <extension>axa</extension>
4281+ <mime-type>audio/annodex</mime-type>
4282+ </mime-mapping>
4283+ <mime-mapping>
4284+ <extension>axv</extension>
4285+ <mime-type>video/annodex</mime-type>
4286+ </mime-mapping>
4287+ <mime-mapping>
4288+ <extension>azf</extension>
4289+ <mime-type>application/vnd.airzip.filesecure.azf</mime-type>
4290+ </mime-mapping>
4291+ <mime-mapping>
4292+ <extension>azs</extension>
4293+ <mime-type>application/vnd.airzip.filesecure.azs</mime-type>
4294+ </mime-mapping>
4295+ <mime-mapping>
4296+ <extension>azw</extension>
4297+ <mime-type>application/vnd.amazon.ebook</mime-type>
4298+ </mime-mapping>
4299+ <mime-mapping>
4300+ <extension>bat</extension>
4301+ <mime-type>application/x-msdownload</mime-type>
4302+ </mime-mapping>
4303+ <mime-mapping>
4304+ <extension>bcpio</extension>
4305+ <mime-type>application/x-bcpio</mime-type>
4306+ </mime-mapping>
4307+ <mime-mapping>
4308+ <extension>bdf</extension>
4309+ <mime-type>application/x-font-bdf</mime-type>
4310+ </mime-mapping>
4311+ <mime-mapping>
4312+ <extension>bdm</extension>
4313+ <mime-type>application/vnd.syncml.dm+wbxml</mime-type>
4314+ </mime-mapping>
4315+ <mime-mapping>
4316+ <extension>bed</extension>
4317+ <mime-type>application/vnd.realvnc.bed</mime-type>
4318+ </mime-mapping>
4319+ <mime-mapping>
4320+ <extension>bh2</extension>
4321+ <mime-type>application/vnd.fujitsu.oasysprs</mime-type>
4322+ </mime-mapping>
4323+ <mime-mapping>
4324+ <extension>bin</extension>
4325+ <mime-type>application/octet-stream</mime-type>
4326+ </mime-mapping>
4327+ <mime-mapping>
4328+ <extension>blb</extension>
4329+ <mime-type>application/x-blorb</mime-type>
4330+ </mime-mapping>
4331+ <mime-mapping>
4332+ <extension>blorb</extension>
4333+ <mime-type>application/x-blorb</mime-type>
4334+ </mime-mapping>
4335+ <mime-mapping>
4336+ <extension>bmi</extension>
4337+ <mime-type>application/vnd.bmi</mime-type>
4338+ </mime-mapping>
4339+ <mime-mapping>
4340+ <extension>bmp</extension>
4341+ <mime-type>image/bmp</mime-type>
4342+ </mime-mapping>
4343+ <mime-mapping>
4344+ <extension>body</extension>
4345+ <mime-type>text/html</mime-type>
4346+ </mime-mapping>
4347+ <mime-mapping>
4348+ <extension>book</extension>
4349+ <mime-type>application/vnd.framemaker</mime-type>
4350+ </mime-mapping>
4351+ <mime-mapping>
4352+ <extension>box</extension>
4353+ <mime-type>application/vnd.previewsystems.box</mime-type>
4354+ </mime-mapping>
4355+ <mime-mapping>
4356+ <extension>boz</extension>
4357+ <mime-type>application/x-bzip2</mime-type>
4358+ </mime-mapping>
4359+ <mime-mapping>
4360+ <extension>bpk</extension>
4361+ <mime-type>application/octet-stream</mime-type>
4362+ </mime-mapping>
4363+ <mime-mapping>
4364+ <extension>btif</extension>
4365+ <mime-type>image/prs.btif</mime-type>
4366+ </mime-mapping>
4367+ <mime-mapping>
4368+ <extension>bz</extension>
4369+ <mime-type>application/x-bzip</mime-type>
4370+ </mime-mapping>
4371+ <mime-mapping>
4372+ <extension>bz2</extension>
4373+ <mime-type>application/x-bzip2</mime-type>
4374+ </mime-mapping>
4375+ <mime-mapping>
4376+ <extension>c</extension>
4377+ <mime-type>text/x-c</mime-type>
4378+ </mime-mapping>
4379+ <mime-mapping>
4380+ <extension>c11amc</extension>
4381+ <mime-type>application/vnd.cluetrust.cartomobile-config</mime-type>
4382+ </mime-mapping>
4383+ <mime-mapping>
4384+ <extension>c11amz</extension>
4385+ <mime-type>application/vnd.cluetrust.cartomobile-config-pkg</mime-type>
4386+ </mime-mapping>
4387+ <mime-mapping>
4388+ <extension>c4d</extension>
4389+ <mime-type>application/vnd.clonk.c4group</mime-type>
4390+ </mime-mapping>
4391+ <mime-mapping>
4392+ <extension>c4f</extension>
4393+ <mime-type>application/vnd.clonk.c4group</mime-type>
4394+ </mime-mapping>
4395+ <mime-mapping>
4396+ <extension>c4g</extension>
4397+ <mime-type>application/vnd.clonk.c4group</mime-type>
4398+ </mime-mapping>
4399+ <mime-mapping>
4400+ <extension>c4p</extension>
4401+ <mime-type>application/vnd.clonk.c4group</mime-type>
4402+ </mime-mapping>
4403+ <mime-mapping>
4404+ <extension>c4u</extension>
4405+ <mime-type>application/vnd.clonk.c4group</mime-type>
4406+ </mime-mapping>
4407+ <mime-mapping>
4408+ <extension>cab</extension>
4409+ <mime-type>application/vnd.ms-cab-compressed</mime-type>
4410+ </mime-mapping>
4411+ <mime-mapping>
4412+ <extension>caf</extension>
4413+ <mime-type>audio/x-caf</mime-type>
4414+ </mime-mapping>
4415+ <mime-mapping>
4416+ <extension>cap</extension>
4417+ <mime-type>application/vnd.tcpdump.pcap</mime-type>
4418+ </mime-mapping>
4419+ <mime-mapping>
4420+ <extension>car</extension>
4421+ <mime-type>application/vnd.curl.car</mime-type>
4422+ </mime-mapping>
4423+ <mime-mapping>
4424+ <extension>cat</extension>
4425+ <mime-type>application/vnd.ms-pki.seccat</mime-type>
4426+ </mime-mapping>
4427+ <mime-mapping>
4428+ <extension>cb7</extension>
4429+ <mime-type>application/x-cbr</mime-type>
4430+ </mime-mapping>
4431+ <mime-mapping>
4432+ <extension>cba</extension>
4433+ <mime-type>application/x-cbr</mime-type>
4434+ </mime-mapping>
4435+ <mime-mapping>
4436+ <extension>cbr</extension>
4437+ <mime-type>application/x-cbr</mime-type>
4438+ </mime-mapping>
4439+ <mime-mapping>
4440+ <extension>cbt</extension>
4441+ <mime-type>application/x-cbr</mime-type>
4442+ </mime-mapping>
4443+ <mime-mapping>
4444+ <extension>cbz</extension>
4445+ <mime-type>application/x-cbr</mime-type>
4446+ </mime-mapping>
4447+ <mime-mapping>
4448+ <extension>cc</extension>
4449+ <mime-type>text/x-c</mime-type>
4450+ </mime-mapping>
4451+ <mime-mapping>
4452+ <extension>cct</extension>
4453+ <mime-type>application/x-director</mime-type>
4454+ </mime-mapping>
4455+ <mime-mapping>
4456+ <extension>ccxml</extension>
4457+ <mime-type>application/ccxml+xml</mime-type>
4458+ </mime-mapping>
4459+ <mime-mapping>
4460+ <extension>cdbcmsg</extension>
4461+ <mime-type>application/vnd.contact.cmsg</mime-type>
4462+ </mime-mapping>
4463+ <mime-mapping>
4464+ <extension>cdf</extension>
4465+ <mime-type>application/x-cdf</mime-type>
4466+ </mime-mapping>
4467+ <mime-mapping>
4468+ <extension>cdkey</extension>
4469+ <mime-type>application/vnd.mediastation.cdkey</mime-type>
4470+ </mime-mapping>
4471+ <mime-mapping>
4472+ <extension>cdmia</extension>
4473+ <mime-type>application/cdmi-capability</mime-type>
4474+ </mime-mapping>
4475+ <mime-mapping>
4476+ <extension>cdmic</extension>
4477+ <mime-type>application/cdmi-container</mime-type>
4478+ </mime-mapping>
4479+ <mime-mapping>
4480+ <extension>cdmid</extension>
4481+ <mime-type>application/cdmi-domain</mime-type>
4482+ </mime-mapping>
4483+ <mime-mapping>
4484+ <extension>cdmio</extension>
4485+ <mime-type>application/cdmi-object</mime-type>
4486+ </mime-mapping>
4487+ <mime-mapping>
4488+ <extension>cdmiq</extension>
4489+ <mime-type>application/cdmi-queue</mime-type>
4490+ </mime-mapping>
4491+ <mime-mapping>
4492+ <extension>cdx</extension>
4493+ <mime-type>chemical/x-cdx</mime-type>
4494+ </mime-mapping>
4495+ <mime-mapping>
4496+ <extension>cdxml</extension>
4497+ <mime-type>application/vnd.chemdraw+xml</mime-type>
4498+ </mime-mapping>
4499+ <mime-mapping>
4500+ <extension>cdy</extension>
4501+ <mime-type>application/vnd.cinderella</mime-type>
4502+ </mime-mapping>
4503+ <mime-mapping>
4504+ <extension>cer</extension>
4505+ <mime-type>application/pkix-cert</mime-type>
4506+ </mime-mapping>
4507+ <mime-mapping>
4508+ <extension>cfs</extension>
4509+ <mime-type>application/x-cfs-compressed</mime-type>
4510+ </mime-mapping>
4511+ <mime-mapping>
4512+ <extension>cgm</extension>
4513+ <mime-type>image/cgm</mime-type>
4514+ </mime-mapping>
4515+ <mime-mapping>
4516+ <extension>chat</extension>
4517+ <mime-type>application/x-chat</mime-type>
4518+ </mime-mapping>
4519+ <mime-mapping>
4520+ <extension>chm</extension>
4521+ <mime-type>application/vnd.ms-htmlhelp</mime-type>
4522+ </mime-mapping>
4523+ <mime-mapping>
4524+ <extension>chrt</extension>
4525+ <mime-type>application/vnd.kde.kchart</mime-type>
4526+ </mime-mapping>
4527+ <mime-mapping>
4528+ <extension>cif</extension>
4529+ <mime-type>chemical/x-cif</mime-type>
4530+ </mime-mapping>
4531+ <mime-mapping>
4532+ <extension>cii</extension>
4533+ <mime-type>application/vnd.anser-web-certificate-issue-initiation</mime-type>
4534+ </mime-mapping>
4535+ <mime-mapping>
4536+ <extension>cil</extension>
4537+ <mime-type>application/vnd.ms-artgalry</mime-type>
4538+ </mime-mapping>
4539+ <mime-mapping>
4540+ <extension>cla</extension>
4541+ <mime-type>application/vnd.claymore</mime-type>
4542+ </mime-mapping>
4543+ <mime-mapping>
4544+ <extension>class</extension>
4545+ <mime-type>application/java</mime-type>
4546+ </mime-mapping>
4547+ <mime-mapping>
4548+ <extension>clkk</extension>
4549+ <mime-type>application/vnd.crick.clicker.keyboard</mime-type>
4550+ </mime-mapping>
4551+ <mime-mapping>
4552+ <extension>clkp</extension>
4553+ <mime-type>application/vnd.crick.clicker.palette</mime-type>
4554+ </mime-mapping>
4555+ <mime-mapping>
4556+ <extension>clkt</extension>
4557+ <mime-type>application/vnd.crick.clicker.template</mime-type>
4558+ </mime-mapping>
4559+ <mime-mapping>
4560+ <extension>clkw</extension>
4561+ <mime-type>application/vnd.crick.clicker.wordbank</mime-type>
4562+ </mime-mapping>
4563+ <mime-mapping>
4564+ <extension>clkx</extension>
4565+ <mime-type>application/vnd.crick.clicker</mime-type>
4566+ </mime-mapping>
4567+ <mime-mapping>
4568+ <extension>clp</extension>
4569+ <mime-type>application/x-msclip</mime-type>
4570+ </mime-mapping>
4571+ <mime-mapping>
4572+ <extension>cmc</extension>
4573+ <mime-type>application/vnd.cosmocaller</mime-type>
4574+ </mime-mapping>
4575+ <mime-mapping>
4576+ <extension>cmdf</extension>
4577+ <mime-type>chemical/x-cmdf</mime-type>
4578+ </mime-mapping>
4579+ <mime-mapping>
4580+ <extension>cml</extension>
4581+ <mime-type>chemical/x-cml</mime-type>
4582+ </mime-mapping>
4583+ <mime-mapping>
4584+ <extension>cmp</extension>
4585+ <mime-type>application/vnd.yellowriver-custom-menu</mime-type>
4586+ </mime-mapping>
4587+ <mime-mapping>
4588+ <extension>cmx</extension>
4589+ <mime-type>image/x-cmx</mime-type>
4590+ </mime-mapping>
4591+ <mime-mapping>
4592+ <extension>cod</extension>
4593+ <mime-type>application/vnd.rim.cod</mime-type>
4594+ </mime-mapping>
4595+ <mime-mapping>
4596+ <extension>com</extension>
4597+ <mime-type>application/x-msdownload</mime-type>
4598+ </mime-mapping>
4599+ <mime-mapping>
4600+ <extension>conf</extension>
4601+ <mime-type>text/plain</mime-type>
4602+ </mime-mapping>
4603+ <mime-mapping>
4604+ <extension>cpio</extension>
4605+ <mime-type>application/x-cpio</mime-type>
4606+ </mime-mapping>
4607+ <mime-mapping>
4608+ <extension>cpp</extension>
4609+ <mime-type>text/x-c</mime-type>
4610+ </mime-mapping>
4611+ <mime-mapping>
4612+ <extension>cpt</extension>
4613+ <mime-type>application/mac-compactpro</mime-type>
4614+ </mime-mapping>
4615+ <mime-mapping>
4616+ <extension>crd</extension>
4617+ <mime-type>application/x-mscardfile</mime-type>
4618+ </mime-mapping>
4619+ <mime-mapping>
4620+ <extension>crl</extension>
4621+ <mime-type>application/pkix-crl</mime-type>
4622+ </mime-mapping>
4623+ <mime-mapping>
4624+ <extension>crt</extension>
4625+ <mime-type>application/x-x509-ca-cert</mime-type>
4626+ </mime-mapping>
4627+ <mime-mapping>
4628+ <extension>cryptonote</extension>
4629+ <mime-type>application/vnd.rig.cryptonote</mime-type>
4630+ </mime-mapping>
4631+ <mime-mapping>
4632+ <extension>csh</extension>
4633+ <mime-type>application/x-csh</mime-type>
4634+ </mime-mapping>
4635+ <mime-mapping>
4636+ <extension>csml</extension>
4637+ <mime-type>chemical/x-csml</mime-type>
4638+ </mime-mapping>
4639+ <mime-mapping>
4640+ <extension>csp</extension>
4641+ <mime-type>application/vnd.commonspace</mime-type>
4642+ </mime-mapping>
4643+ <mime-mapping>
4644+ <extension>css</extension>
4645+ <mime-type>text/css</mime-type>
4646+ </mime-mapping>
4647+ <mime-mapping>
4648+ <extension>cst</extension>
4649+ <mime-type>application/x-director</mime-type>
4650+ </mime-mapping>
4651+ <mime-mapping>
4652+ <extension>csv</extension>
4653+ <mime-type>text/csv</mime-type>
4654+ </mime-mapping>
4655+ <mime-mapping>
4656+ <extension>cu</extension>
4657+ <mime-type>application/cu-seeme</mime-type>
4658+ </mime-mapping>
4659+ <mime-mapping>
4660+ <extension>curl</extension>
4661+ <mime-type>text/vnd.curl</mime-type>
4662+ </mime-mapping>
4663+ <mime-mapping>
4664+ <extension>cww</extension>
4665+ <mime-type>application/prs.cww</mime-type>
4666+ </mime-mapping>
4667+ <mime-mapping>
4668+ <extension>cxt</extension>
4669+ <mime-type>application/x-director</mime-type>
4670+ </mime-mapping>
4671+ <mime-mapping>
4672+ <extension>cxx</extension>
4673+ <mime-type>text/x-c</mime-type>
4674+ </mime-mapping>
4675+ <mime-mapping>
4676+ <extension>dae</extension>
4677+ <mime-type>model/vnd.collada+xml</mime-type>
4678+ </mime-mapping>
4679+ <mime-mapping>
4680+ <extension>daf</extension>
4681+ <mime-type>application/vnd.mobius.daf</mime-type>
4682+ </mime-mapping>
4683+ <mime-mapping>
4684+ <extension>dart</extension>
4685+ <mime-type>application/vnd.dart</mime-type>
4686+ </mime-mapping>
4687+ <mime-mapping>
4688+ <extension>dataless</extension>
4689+ <mime-type>application/vnd.fdsn.seed</mime-type>
4690+ </mime-mapping>
4691+ <mime-mapping>
4692+ <extension>davmount</extension>
4693+ <mime-type>application/davmount+xml</mime-type>
4694+ </mime-mapping>
4695+ <mime-mapping>
4696+ <extension>dbk</extension>
4697+ <mime-type>application/docbook+xml</mime-type>
4698+ </mime-mapping>
4699+ <mime-mapping>
4700+ <extension>dcr</extension>
4701+ <mime-type>application/x-director</mime-type>
4702+ </mime-mapping>
4703+ <mime-mapping>
4704+ <extension>dcurl</extension>
4705+ <mime-type>text/vnd.curl.dcurl</mime-type>
4706+ </mime-mapping>
4707+ <mime-mapping>
4708+ <extension>dd2</extension>
4709+ <mime-type>application/vnd.oma.dd2+xml</mime-type>
4710+ </mime-mapping>
4711+ <mime-mapping>
4712+ <extension>ddd</extension>
4713+ <mime-type>application/vnd.fujixerox.ddd</mime-type>
4714+ </mime-mapping>
4715+ <mime-mapping>
4716+ <extension>deb</extension>
4717+ <mime-type>application/x-debian-package</mime-type>
4718+ </mime-mapping>
4719+ <mime-mapping>
4720+ <extension>def</extension>
4721+ <mime-type>text/plain</mime-type>
4722+ </mime-mapping>
4723+ <mime-mapping>
4724+ <extension>deploy</extension>
4725+ <mime-type>application/octet-stream</mime-type>
4726+ </mime-mapping>
4727+ <mime-mapping>
4728+ <extension>der</extension>
4729+ <mime-type>application/x-x509-ca-cert</mime-type>
4730+ </mime-mapping>
4731+ <mime-mapping>
4732+ <extension>dfac</extension>
4733+ <mime-type>application/vnd.dreamfactory</mime-type>
4734+ </mime-mapping>
4735+ <mime-mapping>
4736+ <extension>dgc</extension>
4737+ <mime-type>application/x-dgc-compressed</mime-type>
4738+ </mime-mapping>
4739+ <mime-mapping>
4740+ <extension>dib</extension>
4741+ <mime-type>image/bmp</mime-type>
4742+ </mime-mapping>
4743+ <mime-mapping>
4744+ <extension>dic</extension>
4745+ <mime-type>text/x-c</mime-type>
4746+ </mime-mapping>
4747+ <mime-mapping>
4748+ <extension>dir</extension>
4749+ <mime-type>application/x-director</mime-type>
4750+ </mime-mapping>
4751+ <mime-mapping>
4752+ <extension>dis</extension>
4753+ <mime-type>application/vnd.mobius.dis</mime-type>
4754+ </mime-mapping>
4755+ <mime-mapping>
4756+ <extension>dist</extension>
4757+ <mime-type>application/octet-stream</mime-type>
4758+ </mime-mapping>
4759+ <mime-mapping>
4760+ <extension>distz</extension>
4761+ <mime-type>application/octet-stream</mime-type>
4762+ </mime-mapping>
4763+ <mime-mapping>
4764+ <extension>djv</extension>
4765+ <mime-type>image/vnd.djvu</mime-type>
4766+ </mime-mapping>
4767+ <mime-mapping>
4768+ <extension>djvu</extension>
4769+ <mime-type>image/vnd.djvu</mime-type>
4770+ </mime-mapping>
4771+ <mime-mapping>
4772+ <extension>dll</extension>
4773+ <mime-type>application/x-msdownload</mime-type>
4774+ </mime-mapping>
4775+ <mime-mapping>
4776+ <extension>dmg</extension>
4777+ <mime-type>application/x-apple-diskimage</mime-type>
4778+ </mime-mapping>
4779+ <mime-mapping>
4780+ <extension>dmp</extension>
4781+ <mime-type>application/vnd.tcpdump.pcap</mime-type>
4782+ </mime-mapping>
4783+ <mime-mapping>
4784+ <extension>dms</extension>
4785+ <mime-type>application/octet-stream</mime-type>
4786+ </mime-mapping>
4787+ <mime-mapping>
4788+ <extension>dna</extension>
4789+ <mime-type>application/vnd.dna</mime-type>
4790+ </mime-mapping>
4791+ <mime-mapping>
4792+ <extension>doc</extension>
4793+ <mime-type>application/msword</mime-type>
4794+ </mime-mapping>
4795+ <mime-mapping>
4796+ <extension>docm</extension>
4797+ <mime-type>application/vnd.ms-word.document.macroenabled.12</mime-type>
4798+ </mime-mapping>
4799+ <mime-mapping>
4800+ <extension>docx</extension>
4801+ <mime-type>application/vnd.openxmlformats-officedocument.wordprocessingml.document</mime-type>
4802+ </mime-mapping>
4803+ <mime-mapping>
4804+ <extension>dot</extension>
4805+ <mime-type>application/msword</mime-type>
4806+ </mime-mapping>
4807+ <mime-mapping>
4808+ <extension>dotm</extension>
4809+ <mime-type>application/vnd.ms-word.template.macroenabled.12</mime-type>
4810+ </mime-mapping>
4811+ <mime-mapping>
4812+ <extension>dotx</extension>
4813+ <mime-type>application/vnd.openxmlformats-officedocument.wordprocessingml.template</mime-type>
4814+ </mime-mapping>
4815+ <mime-mapping>
4816+ <extension>dp</extension>
4817+ <mime-type>application/vnd.osgi.dp</mime-type>
4818+ </mime-mapping>
4819+ <mime-mapping>
4820+ <extension>dpg</extension>
4821+ <mime-type>application/vnd.dpgraph</mime-type>
4822+ </mime-mapping>
4823+ <mime-mapping>
4824+ <extension>dra</extension>
4825+ <mime-type>audio/vnd.dra</mime-type>
4826+ </mime-mapping>
4827+ <mime-mapping>
4828+ <extension>dsc</extension>
4829+ <mime-type>text/prs.lines.tag</mime-type>
4830+ </mime-mapping>
4831+ <mime-mapping>
4832+ <extension>dssc</extension>
4833+ <mime-type>application/dssc+der</mime-type>
4834+ </mime-mapping>
4835+ <mime-mapping>
4836+ <extension>dtb</extension>
4837+ <mime-type>application/x-dtbook+xml</mime-type>
4838+ </mime-mapping>
4839+ <mime-mapping>
4840+ <extension>dtd</extension>
4841+ <mime-type>application/xml-dtd</mime-type>
4842+ </mime-mapping>
4843+ <mime-mapping>
4844+ <extension>dts</extension>
4845+ <mime-type>audio/vnd.dts</mime-type>
4846+ </mime-mapping>
4847+ <mime-mapping>
4848+ <extension>dtshd</extension>
4849+ <mime-type>audio/vnd.dts.hd</mime-type>
4850+ </mime-mapping>
4851+ <mime-mapping>
4852+ <extension>dump</extension>
4853+ <mime-type>application/octet-stream</mime-type>
4854+ </mime-mapping>
4855+ <mime-mapping>
4856+ <extension>dv</extension>
4857+ <mime-type>video/x-dv</mime-type>
4858+ </mime-mapping>
4859+ <mime-mapping>
4860+ <extension>dvb</extension>
4861+ <mime-type>video/vnd.dvb.file</mime-type>
4862+ </mime-mapping>
4863+ <mime-mapping>
4864+ <extension>dvi</extension>
4865+ <mime-type>application/x-dvi</mime-type>
4866+ </mime-mapping>
4867+ <mime-mapping>
4868+ <extension>dwf</extension>
4869+ <mime-type>model/vnd.dwf</mime-type>
4870+ </mime-mapping>
4871+ <mime-mapping>
4872+ <extension>dwg</extension>
4873+ <mime-type>image/vnd.dwg</mime-type>
4874+ </mime-mapping>
4875+ <mime-mapping>
4876+ <extension>dxf</extension>
4877+ <mime-type>image/vnd.dxf</mime-type>
4878+ </mime-mapping>
4879+ <mime-mapping>
4880+ <extension>dxp</extension>
4881+ <mime-type>application/vnd.spotfire.dxp</mime-type>
4882+ </mime-mapping>
4883+ <mime-mapping>
4884+ <extension>dxr</extension>
4885+ <mime-type>application/x-director</mime-type>
4886+ </mime-mapping>
4887+ <mime-mapping>
4888+ <extension>ecelp4800</extension>
4889+ <mime-type>audio/vnd.nuera.ecelp4800</mime-type>
4890+ </mime-mapping>
4891+ <mime-mapping>
4892+ <extension>ecelp7470</extension>
4893+ <mime-type>audio/vnd.nuera.ecelp7470</mime-type>
4894+ </mime-mapping>
4895+ <mime-mapping>
4896+ <extension>ecelp9600</extension>
4897+ <mime-type>audio/vnd.nuera.ecelp9600</mime-type>
4898+ </mime-mapping>
4899+ <mime-mapping>
4900+ <extension>ecma</extension>
4901+ <mime-type>application/ecmascript</mime-type>
4902+ </mime-mapping>
4903+ <mime-mapping>
4904+ <extension>edm</extension>
4905+ <mime-type>application/vnd.novadigm.edm</mime-type>
4906+ </mime-mapping>
4907+ <mime-mapping>
4908+ <extension>edx</extension>
4909+ <mime-type>application/vnd.novadigm.edx</mime-type>
4910+ </mime-mapping>
4911+ <mime-mapping>
4912+ <extension>efif</extension>
4913+ <mime-type>application/vnd.picsel</mime-type>
4914+ </mime-mapping>
4915+ <mime-mapping>
4916+ <extension>ei6</extension>
4917+ <mime-type>application/vnd.pg.osasli</mime-type>
4918+ </mime-mapping>
4919+ <mime-mapping>
4920+ <extension>elc</extension>
4921+ <mime-type>application/octet-stream</mime-type>
4922+ </mime-mapping>
4923+ <mime-mapping>
4924+ <extension>emf</extension>
4925+ <mime-type>application/x-msmetafile</mime-type>
4926+ </mime-mapping>
4927+ <mime-mapping>
4928+ <extension>eml</extension>
4929+ <mime-type>message/rfc822</mime-type>
4930+ </mime-mapping>
4931+ <mime-mapping>
4932+ <extension>emma</extension>
4933+ <mime-type>application/emma+xml</mime-type>
4934+ </mime-mapping>
4935+ <mime-mapping>
4936+ <extension>emz</extension>
4937+ <mime-type>application/x-msmetafile</mime-type>
4938+ </mime-mapping>
4939+ <mime-mapping>
4940+ <extension>eol</extension>
4941+ <mime-type>audio/vnd.digital-winds</mime-type>
4942+ </mime-mapping>
4943+ <mime-mapping>
4944+ <extension>eot</extension>
4945+ <mime-type>application/vnd.ms-fontobject</mime-type>
4946+ </mime-mapping>
4947+ <mime-mapping>
4948+ <extension>eps</extension>
4949+ <mime-type>application/postscript</mime-type>
4950+ </mime-mapping>
4951+ <mime-mapping>
4952+ <extension>epub</extension>
4953+ <mime-type>application/epub+zip</mime-type>
4954+ </mime-mapping>
4955+ <mime-mapping>
4956+ <extension>es3</extension>
4957+ <mime-type>application/vnd.eszigno3+xml</mime-type>
4958+ </mime-mapping>
4959+ <mime-mapping>
4960+ <extension>esa</extension>
4961+ <mime-type>application/vnd.osgi.subsystem</mime-type>
4962+ </mime-mapping>
4963+ <mime-mapping>
4964+ <extension>esf</extension>
4965+ <mime-type>application/vnd.epson.esf</mime-type>
4966+ </mime-mapping>
4967+ <mime-mapping>
4968+ <extension>et3</extension>
4969+ <mime-type>application/vnd.eszigno3+xml</mime-type>
4970+ </mime-mapping>
4971+ <mime-mapping>
4972+ <extension>etx</extension>
4973+ <mime-type>text/x-setext</mime-type>
4974+ </mime-mapping>
4975+ <mime-mapping>
4976+ <extension>eva</extension>
4977+ <mime-type>application/x-eva</mime-type>
4978+ </mime-mapping>
4979+ <mime-mapping>
4980+ <extension>evy</extension>
4981+ <mime-type>application/x-envoy</mime-type>
4982+ </mime-mapping>
4983+ <mime-mapping>
4984+ <extension>exe</extension>
4985+ <mime-type>application/octet-stream</mime-type>
4986+ </mime-mapping>
4987+ <mime-mapping>
4988+ <extension>exi</extension>
4989+ <mime-type>application/exi</mime-type>
4990+ </mime-mapping>
4991+ <mime-mapping>
4992+ <extension>ext</extension>
4993+ <mime-type>application/vnd.novadigm.ext</mime-type>
4994+ </mime-mapping>
4995+ <mime-mapping>
4996+ <extension>ez</extension>
4997+ <mime-type>application/andrew-inset</mime-type>
4998+ </mime-mapping>
4999+ <mime-mapping>
5000+ <extension>ez2</extension>
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches

to all changes: