* [bug#51121] [PATCH] gnu: Add python-pyproject2setuppy.
@ 2021-10-10 20:48 jgart via Guix-patches via
2021-10-10 21:53 ` [bug#51121] WIP I'll send another patch soon jgart via Guix-patches via
0 siblings, 1 reply; 5+ messages in thread
From: jgart via Guix-patches via @ 2021-10-10 20:48 UTC (permalink / raw)
To: 51121; +Cc: jgart
* gnu/packages/python-xyz.scm (python-pyproject2setuppy): New variable.
---
gnu/packages/python-xyz.scm | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 634cd5efec..577bea8144 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -27266,6 +27266,33 @@ and powerful way to handle real-world data, featuring:
@end itemize")
(license license:bsd-3)))
+(define-public python-pyproject2setuppy
+ (package
+ (name "python-pyproject2setuppy")
+ (version "20")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "pyproject2setuppy" version))
+ (sha256
+ (base32 "1bfms0mpi6ijgxfl2v7nirjld3yph13fbqm29fx007kj0w14m2pw"))))
+ (build-system python-build-system)
+ (native-inputs
+ `(("python-pytest" ,python-pytest)
+ ("python-pytest-forked" ,python-pytest-forked)))
+ (propagated-inputs
+ `(("python-toml" ,python-toml)
+ ;; ignore linter because setuptools library functions are used directly
+ ("python-setuptools" ,python-setuptools)))
+ (home-page "https://github.com/mgorny/pyproject2setuppy")
+ (synopsis "Build pyproject.toml-based projects using setuptools")
+ (description
+"@command{pyproject2setuppy} is a tool to install pyproject.toml-based
+packages using plain setuptools. It maps the project metadata into
+@code{setup()} call arguments, making it possible to build them without
+installing the dependency hell of the new build systems.")
+ (license license:bsd-2)))
+
(define-public python-box
(package
(name "python-box")
--
2.33.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [bug#51121] WIP I'll send another patch soon.
2021-10-10 20:48 [bug#51121] [PATCH] gnu: Add python-pyproject2setuppy jgart via Guix-patches via
@ 2021-10-10 21:53 ` jgart via Guix-patches via
2022-07-07 18:03 ` [bug#51121] [PATCH] gnu: Add python-pyproject2setuppy Maxim Cournoyer
0 siblings, 1 reply; 5+ messages in thread
From: jgart via Guix-patches via @ 2021-10-10 21:53 UTC (permalink / raw)
To: 51121
Hi this is a WIP.
I'll send another patch soon once I figure it out.
Tests are currently failing:
phase `wrap' succeeded after 0.0 seconds
starting phase `check'
============================= test session starts ==============================
platform linux -- Python 3.8.2, pytest-5.3.5, py-1.8.1, pluggy-0.13.1
rootdir: /tmp/guix-build-python-pyproject2setuppy-20.drv-0/source, inifile: setup.cfg
plugins: hypothesis-5.4.1, forked-1.3.0
collected 205 items
tests/test_common.py ... [ 1%]
tests/test_flit.py ...s...s...s...s...s...s...s...s...s...s...s...s...s [ 26%]
tests/test_flit_pep621.py ...s...s...s...s...s...s...s...s...s...s...s.. [ 49%]
.s...s...s [ 54%]
tests/test_main.py ...... [ 57%]
tests/test_poetry.py ...s...s...s...s...s...s...s...s...s...s...s...s... [ 81%]
s...s...s...s...s...s...s...s [ 96%]
tests/test_setuptools.py ...F...F [100%]
=================================== FAILURES ===================================
________________ SetuptoolsNoSetupPyTest.test_real_build_system ________________
self = <tests.test_setuptools.SetuptoolsNoSetupPyTest testMethod=test_real_build_system>
def test_real_build_system(self):
"""
Perform a self-test using the upstream build backend. Builds
a wheel, and verifies its contents. Used to verify that test
cases are correct.
"""
metadata = toml.loads(self.toml_base + self.toml_extra)
backend_module = metadata['build-system']['build-backend']
try:
backend = importlib.import_module(backend_module)
except ImportError:
self.skipTest('Required {} module missing'.format(backend_module))
with self.make_package() as d:
with open('pyproject.toml', 'w') as f:
f.write(self.toml_base + self.toml_extra)
if self.expect_exception is not None:
# upstream build system uses different exception classes
with self.assertRaises(Exception):
backend.build_wheel(d)
return
> whl = backend.build_wheel(d)
tests/base.py:271:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib/python3.8/site-packages/setuptools/build_meta.py:208: in build_wheel
return self._build_with_temp_dir(['bdist_wheel'], '.whl',
/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib/python3.8/site-packages/setuptools/build_meta.py:194: in _build_with_temp_dir
self.run_setup()
/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib/python3.8/site-packages/setuptools/build_meta.py:142: in run_setup
exec(compile(code, __file__, 'exec'), locals())
setup.py:1: in <module>
???
/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib/python3.8/site-packages/setuptools/__init__.py:145: in setup
return distutils.core.setup(**attrs)
/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib/python3.8/distutils/core.py:148: in setup
dist.run_commands()
/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib/python3.8/distutils/dist.py:966: in run_commands
self.run_command(cmd)
/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib/python3.8/distutils/dist.py:985: in run_command
cmd_obj.run()
/gnu/store/khi7jd4f8zy3z2mz5i116yyrgc10nwrk-python-wheel-0.36.2/lib/python3.8/site-packages/wheel/bdist_wheel.py:361: in run
wf.write_files(archive_root)
/gnu/store/khi7jd4f8zy3z2mz5i116yyrgc10nwrk-python-wheel-0.36.2/lib/python3.8/site-packages/wheel/wheelfile.py:124: in write_files
self.write(path, arcname)
/gnu/store/khi7jd4f8zy3z2mz5i116yyrgc10nwrk-python-wheel-0.36.2/lib/python3.8/site-packages/wheel/wheelfile.py:135: in write
zinfo = ZipInfo(arcname or filename, date_time=get_zipinfo_datetime(st.st_mtime))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <[AttributeError('compress_type') raised in repr()] ZipInfo object at 0x7ffff5a86d00>
filename = 'test_module.py', date_time = (1970, 1, 1, 0, 0, 1)
def __init__(self, filename="NoName", date_time=(1980,1,1,0,0,0)):
self.orig_filename = filename # Original file name in archive
# Terminate the file name at the first null byte. Null bytes in file
# names are used as tricks by viruses in archives.
null_byte = filename.find(chr(0))
if null_byte >= 0:
filename = filename[0:null_byte]
# This is used to ensure paths in generated ZIP files always use
# forward slashes as the directory separator, as required by the
# ZIP format specification.
if os.sep != "/" and os.sep in filename:
filename = filename.replace(os.sep, "/")
self.filename = filename # Normalized file name
self.date_time = date_time # year, month, day, hour, min, sec
if date_time[0] < 1980:
> raise ValueError('ZIP does not support timestamps before 1980')
E ValueError: ZIP does not support timestamps before 1980
/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib/python3.8/zipfile.py:362: ValueError
----------------------------- Captured stdout call -----------------------------
running bdist_wheel
running build
running build_py
creating build
creating build/lib
copying test_module.py -> build/lib
installing to build/bdist.linux-x86_64/wheel
running install
running install_lib
creating build/bdist.linux-x86_64
creating build/bdist.linux-x86_64/wheel
copying build/lib/test_module.py -> build/bdist.linux-x86_64/wheel
running install_egg_info
running egg_info
creating test_module.egg-info
writing test_module.egg-info/PKG-INFO
writing dependency_links to test_module.egg-info/dependency_links.txt
writing top-level names to test_module.egg-info/top_level.txt
writing manifest file 'test_module.egg-info/SOURCES.txt'
reading manifest file 'test_module.egg-info/SOURCES.txt'
writing manifest file 'test_module.egg-info/SOURCES.txt'
Copying test_module.egg-info to build/bdist.linux-x86_64/wheel/test_module-0-py3.8.egg-info
running install_scripts
creating build/bdist.linux-x86_64/wheel/test_module-0.dist-info/WHEEL
creating '/tmp/guix-build-python-pyproject2setuppy-20.drv-0/tmpbvokwos2/tmpvllwyjo_/test_module-0-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it
_________________ SetuptoolsSetupPyTest.test_real_build_system _________________
self = <tests.test_setuptools.SetuptoolsSetupPyTest testMethod=test_real_build_system>
def test_real_build_system(self):
"""
Perform a self-test using the upstream build backend. Builds
a wheel, and verifies its contents. Used to verify that test
cases are correct.
"""
metadata = toml.loads(self.toml_base + self.toml_extra)
backend_module = metadata['build-system']['build-backend']
try:
backend = importlib.import_module(backend_module)
except ImportError:
self.skipTest('Required {} module missing'.format(backend_module))
with self.make_package() as d:
with open('pyproject.toml', 'w') as f:
f.write(self.toml_base + self.toml_extra)
if self.expect_exception is not None:
# upstream build system uses different exception classes
with self.assertRaises(Exception):
backend.build_wheel(d)
return
> whl = backend.build_wheel(d)
tests/base.py:271:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib/python3.8/site-packages/setuptools/build_meta.py:208: in build_wheel
return self._build_with_temp_dir(['bdist_wheel'], '.whl',
/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib/python3.8/site-packages/setuptools/build_meta.py:194: in _build_with_temp_dir
self.run_setup()
/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib/python3.8/site-packages/setuptools/build_meta.py:142: in run_setup
exec(compile(code, __file__, 'exec'), locals())
setup.py:2: in <module>
???
/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib/python3.8/site-packages/setuptools/__init__.py:145: in setup
return distutils.core.setup(**attrs)
/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib/python3.8/distutils/core.py:148: in setup
dist.run_commands()
/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib/python3.8/distutils/dist.py:966: in run_commands
self.run_command(cmd)
/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib/python3.8/distutils/dist.py:985: in run_command
cmd_obj.run()
/gnu/store/khi7jd4f8zy3z2mz5i116yyrgc10nwrk-python-wheel-0.36.2/lib/python3.8/site-packages/wheel/bdist_wheel.py:361: in run
wf.write_files(archive_root)
/gnu/store/khi7jd4f8zy3z2mz5i116yyrgc10nwrk-python-wheel-0.36.2/lib/python3.8/site-packages/wheel/wheelfile.py:124: in write_files
self.write(path, arcname)
/gnu/store/khi7jd4f8zy3z2mz5i116yyrgc10nwrk-python-wheel-0.36.2/lib/python3.8/site-packages/wheel/wheelfile.py:135: in write
zinfo = ZipInfo(arcname or filename, date_time=get_zipinfo_datetime(st.st_mtime))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <[AttributeError('compress_type') raised in repr()] ZipInfo object at 0x7ffff5a89d00>
filename = 'test_module.py', date_time = (1970, 1, 1, 0, 0, 1)
def __init__(self, filename="NoName", date_time=(1980,1,1,0,0,0)):
self.orig_filename = filename # Original file name in archive
# Terminate the file name at the first null byte. Null bytes in file
# names are used as tricks by viruses in archives.
null_byte = filename.find(chr(0))
if null_byte >= 0:
filename = filename[0:null_byte]
# This is used to ensure paths in generated ZIP files always use
# forward slashes as the directory separator, as required by the
# ZIP format specification.
if os.sep != "/" and os.sep in filename:
filename = filename.replace(os.sep, "/")
self.filename = filename # Normalized file name
self.date_time = date_time # year, month, day, hour, min, sec
if date_time[0] < 1980:
> raise ValueError('ZIP does not support timestamps before 1980')
E ValueError: ZIP does not support timestamps before 1980
/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib/python3.8/zipfile.py:362: ValueError
----------------------------- Captured stdout call -----------------------------
running bdist_wheel
running build
running build_py
creating build
creating build/lib
copying test_module.py -> build/lib
installing to build/bdist.linux-x86_64/wheel
running install
running install_lib
creating build/bdist.linux-x86_64
creating build/bdist.linux-x86_64/wheel
copying build/lib/test_module.py -> build/bdist.linux-x86_64/wheel
running install_egg_info
running egg_info
creating test_module.egg-info
writing test_module.egg-info/PKG-INFO
writing dependency_links to test_module.egg-info/dependency_links.txt
writing top-level names to test_module.egg-info/top_level.txt
writing manifest file 'test_module.egg-info/SOURCES.txt'
reading manifest file 'test_module.egg-info/SOURCES.txt'
writing manifest file 'test_module.egg-info/SOURCES.txt'
Copying test_module.egg-info to build/bdist.linux-x86_64/wheel/test_module-0-py3.8.egg-info
running install_scripts
creating build/bdist.linux-x86_64/wheel/test_module-0.dist-info/WHEEL
creating '/tmp/guix-build-python-pyproject2setuppy-20.drv-0/tmpr39dy7_m/tmpapoo2pgz/test_module-0-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it
=============================== warnings summary ===============================
/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib/python3.8/site-packages/setuptools/depends.py:2
/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib/python3.8/site-packages/setuptools/depends.py:2: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
import imp
tests/base.py:71
/tmp/guix-build-python-pyproject2setuppy-20.drv-0/source/tests/base.py:71: PytestCollectionWarning: cannot collect test class 'TestDirectory' because it has a __init__ constructor (from: tests/test_common.py)
class TestDirectory(object):
tests/base.py:71
/tmp/guix-build-python-pyproject2setuppy-20.drv-0/source/tests/base.py:71: PytestCollectionWarning: cannot collect test class 'TestDirectory' because it has a __init__ constructor (from: tests/test_main.py)
class TestDirectory(object):
-- Docs: https://docs.pytest.org/en/latest/warnings.html
============ 2 failed, 156 passed, 47 skipped, 3 warnings in 11.94s ============
command "pytest" "tests" failed with status 1
note: keeping build directory `/tmp/guix-build-python-pyproject2setuppy-20.drv-3'
builder for `/gnu/store/g15ah2jd1xlmvg22h3nhfhp7x778n7mw-python-pyproject2setuppy-20.drv' failed with exit code 1
build of /gnu/store/g15ah2jd1xlmvg22h3nhfhp7x778n7mw-python-pyproject2setuppy-20.drv failed
Could not find build log for '/gnu/store/g15ah2jd1xlmvg22h3nhfhp7x778n7mw-python-pyproject2setuppy-20.drv'.
guix build: error: build of `/gnu/store/g15ah2jd1xlmvg22h3nhfhp7x778n7mw-python-pyproject2setuppy-20.drv' failed
all best,
jgart
3B1D 7F19 E36B B60C 0F5B 2CA9 A52A A2B4 77B6 DD35
^ permalink raw reply [flat|nested] 5+ messages in thread
* [bug#51121] [PATCH] gnu: Add python-pyproject2setuppy.
2021-10-10 21:53 ` [bug#51121] WIP I'll send another patch soon jgart via Guix-patches via
@ 2022-07-07 18:03 ` Maxim Cournoyer
2022-07-08 0:17 ` jgart via Guix-patches via
0 siblings, 1 reply; 5+ messages in thread
From: Maxim Cournoyer @ 2022-07-07 18:03 UTC (permalink / raw)
To: jgart; +Cc: 51121
Hi,
jgart <jgart@dismail.de> writes:
> Hi this is a WIP.
>
> I'll send another patch soon once I figure it out.
>
> Tests are currently failing:
>
> phase `wrap' succeeded after 0.0 seconds
> starting phase `check'
> ============================= test session starts ==============================
> platform linux -- Python 3.8.2, pytest-5.3.5, py-1.8.1, pluggy-0.13.1
> rootdir: /tmp/guix-build-python-pyproject2setuppy-20.drv-0/source, inifile: setup.cfg
> plugins: hypothesis-5.4.1, forked-1.3.0
> collected 205 items
>
> tests/test_common.py ... [ 1%]
> tests/test_flit.py ...s...s...s...s...s...s...s...s...s...s...s...s...s [ 26%]
> tests/test_flit_pep621.py ...s...s...s...s...s...s...s...s...s...s...s.. [ 49%]
> .s...s...s [ 54%]
> tests/test_main.py ...... [ 57%]
> tests/test_poetry.py ...s...s...s...s...s...s...s...s...s...s...s...s... [ 81%]
> s...s...s...s...s...s...s...s [ 96%]
> tests/test_setuptools.py ...F...F [100%]
We haven't gotten an update in some time.
Should we close this?
Thank you.
Maxim
^ permalink raw reply [flat|nested] 5+ messages in thread
* [bug#51121] [PATCH] gnu: Add python-pyproject2setuppy.
2022-07-07 18:03 ` [bug#51121] [PATCH] gnu: Add python-pyproject2setuppy Maxim Cournoyer
@ 2022-07-08 0:17 ` jgart via Guix-patches via
2022-07-09 1:38 ` bug#51121: " Maxim Cournoyer
0 siblings, 1 reply; 5+ messages in thread
From: jgart via Guix-patches via @ 2022-07-08 0:17 UTC (permalink / raw)
To: Maxim Cournoyer; +Cc: 51121
On Thu, 07 Jul 2022 14:03:42 -0400 Maxim Cournoyer <maxim.cournoyer@gmail.com> wrote:
> Hi,
>
> jgart <jgart@dismail.de> writes:
>
> > Hi this is a WIP.
> >
> > I'll send another patch soon once I figure it out.
> >
> > Tests are currently failing:
> >
> > phase `wrap' succeeded after 0.0 seconds
> > starting phase `check'
> > ============================= test session starts ==============================
> > platform linux -- Python 3.8.2, pytest-5.3.5, py-1.8.1, pluggy-0.13.1
> > rootdir: /tmp/guix-build-python-pyproject2setuppy-20.drv-0/source, inifile: setup.cfg
> > plugins: hypothesis-5.4.1, forked-1.3.0
> > collected 205 items
> >
> > tests/test_common.py ... [ 1%]
> > tests/test_flit.py ...s...s...s...s...s...s...s...s...s...s...s...s...s [ 26%]
> > tests/test_flit_pep621.py ...s...s...s...s...s...s...s...s...s...s...s.. [ 49%]
> > .s...s...s [ 54%]
> > tests/test_main.py ...... [ 57%]
> > tests/test_poetry.py ...s...s...s...s...s...s...s...s...s...s...s...s... [ 81%]
> > s...s...s...s...s...s...s...s [ 96%]
> > tests/test_setuptools.py ...F...F [100%]
>
> We haven't gotten an update in some time.
>
> Should we close this?
>
> Thank you.
>
> Maxim
Sure, feel free to.
I'll get back to it when I need it or maybe someone else will pick it up.
^ permalink raw reply [flat|nested] 5+ messages in thread
* bug#51121: [PATCH] gnu: Add python-pyproject2setuppy.
2022-07-08 0:17 ` jgart via Guix-patches via
@ 2022-07-09 1:38 ` Maxim Cournoyer
0 siblings, 0 replies; 5+ messages in thread
From: Maxim Cournoyer @ 2022-07-09 1:38 UTC (permalink / raw)
To: jgart; +Cc: 51121-done
Hello,
jgart <jgart@dismail.de> writes:
> On Thu, 07 Jul 2022 14:03:42 -0400 Maxim Cournoyer <maxim.cournoyer@gmail.com> wrote:
>> Hi,
>>
>> jgart <jgart@dismail.de> writes:
>>
>> > Hi this is a WIP.
>> >
>> > I'll send another patch soon once I figure it out.
>> >
>> > Tests are currently failing:
>> >
>> > phase `wrap' succeeded after 0.0 seconds
>> > starting phase `check'
>> > ============================= test session starts ==============================
>> > platform linux -- Python 3.8.2, pytest-5.3.5, py-1.8.1, pluggy-0.13.1
>> > rootdir: /tmp/guix-build-python-pyproject2setuppy-20.drv-0/source, inifile: setup.cfg
>> > plugins: hypothesis-5.4.1, forked-1.3.0
>> > collected 205 items
>> >
>> > tests/test_common.py ... [ 1%]
>> > tests/test_flit.py ...s...s...s...s...s...s...s...s...s...s...s...s...s [ 26%]
>> > tests/test_flit_pep621.py ...s...s...s...s...s...s...s...s...s...s...s.. [ 49%]
>> > .s...s...s [ 54%]
>> > tests/test_main.py ...... [ 57%]
>> > tests/test_poetry.py ...s...s...s...s...s...s...s...s...s...s...s...s... [ 81%]
>> > s...s...s...s...s...s...s...s [ 96%]
>> > tests/test_setuptools.py ...F...F [100%]
>>
>> We haven't gotten an update in some time.
>>
>> Should we close this?
>>
>> Thank you.
>>
>> Maxim
>
> Sure, feel free to.
>
> I'll get back to it when I need it or maybe someone else will pick it up.
Thanks, closing.
Maxim
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2022-07-09 1:40 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-10-10 20:48 [bug#51121] [PATCH] gnu: Add python-pyproject2setuppy jgart via Guix-patches via
2021-10-10 21:53 ` [bug#51121] WIP I'll send another patch soon jgart via Guix-patches via
2022-07-07 18:03 ` [bug#51121] [PATCH] gnu: Add python-pyproject2setuppy Maxim Cournoyer
2022-07-08 0:17 ` jgart via Guix-patches via
2022-07-09 1:38 ` bug#51121: " Maxim Cournoyer
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).