Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 24 Jun 2026 20:28:22 +0000
From:      Charlie Li <vishwin@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject:   git: 81c0a4f5271f - main - www/py-ll-xist: rename and update to 5.85
Message-ID:  <6a3c3de6.1840a.4ca75614@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by vishwin:

URL: https://cgit.FreeBSD.org/ports/commit/?id=81c0a4f5271f88ae0baf593193bd31c89d1abef2

commit 81c0a4f5271f88ae0baf593193bd31c89d1abef2
Author:     Charlie Li <vishwin@FreeBSD.org>
AuthorDate: 2026-06-24 20:10:17 +0000
Commit:     Charlie Li <vishwin@FreeBSD.org>
CommitDate: 2026-06-24 20:27:07 +0000

    www/py-ll-xist: rename and update to 5.85
    
    Changelog: https://python.livinglogic.de/NEWS.html#changes-in-5-85-released-2026-05-20
    
    Not the latest upstream version. 5.86 and later use t-strings which
    is a Python 3.14 feature.
    
    Event: Halifax Hackathon 202606
---
 MOVED                                              |   1 +
 www/Makefile                                       |   2 +-
 www/py-ll-xist/Makefile                            |  41 ++
 www/py-ll-xist/distinfo                            |   3 +
 www/py-ll-xist/files/patch-test_test__url__open.py | 593 +++++++++++++++++++++
 www/{xist => py-ll-xist}/pkg-descr                 |   0
 www/xist/Makefile                                  |  26 -
 www/xist/distinfo                                  |   3 -
 8 files changed, 639 insertions(+), 30 deletions(-)

diff --git a/MOVED b/MOVED
index 10862c0df551..2d65253df352 100644
--- a/MOVED
+++ b/MOVED
@@ -5377,3 +5377,4 @@ sysutils/signon-plugin-oauth2@qt6|sysutils/signon-plugin-oauth2|2026-06-22|Unfla
 net-im/libaccounts-qt@qt5||2026-06-22|Unflavorize, remove Qt5 flavor
 net-im/libaccounts-qt@qt6|net-im/libaccounts-qt|2026-06-22|Unflavorize
 science/minc2|science/minc-tools|2026-06-24|Split into science/minc-tools and science/libminc
+www/xist|www/py-ll-xist|2026-06-24|Use correct Python package name
diff --git a/www/Makefile b/www/Makefile
index 5ea848b5d776..16d723db0f55 100644
--- a/www/Makefile
+++ b/www/Makefile
@@ -1882,6 +1882,7 @@
     SUBDIR += py-limits
     SUBDIR += py-litestar
     SUBDIR += py-livereload
+    SUBDIR += py-ll-xist
     SUBDIR += py-mailman-hyperkitty
     SUBDIR += py-mechanicalsoup
     SUBDIR += py-mechanize
@@ -2765,7 +2766,6 @@
     SUBDIR += xcaddy
     SUBDIR += xfce4-smartbookmark-plugin
     SUBDIR += xh
-    SUBDIR += xist
     SUBDIR += xoops
     SUBDIR += xsp
     SUBDIR += xurls
diff --git a/www/py-ll-xist/Makefile b/www/py-ll-xist/Makefile
new file mode 100644
index 000000000000..3bba6eb19a7b
--- /dev/null
+++ b/www/py-ll-xist/Makefile
@@ -0,0 +1,41 @@
+PORTNAME=	ll-xist
+DISTVERSION=	5.85
+CATEGORIES=	www python
+MASTER_SITES=	http://python-downloads.livinglogic.de/download/xist/ \
+		PYPI
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}
+DISTNAME=	${PORTNAME:C/[-_.]+/_/g}-${DISTVERSION}
+
+MAINTAINER=	python@FreeBSD.org
+COMMENT=	XML-based extensible HTML generator
+WWW=		https://python.livinglogic.de/
+
+LICENSE=	MIT
+
+BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}setuptools>0:devel/py-setuptools@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}wheel>0:devel/py-wheel@${PY_FLAVOR}
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}cssutils>=2.6.0,1:www/py-cssutils@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}lxml>=4.3.4:devel/py-lxml@${PY_FLAVOR} \
+		${PY_PILLOW} \
+		${PYTHON_PKGNAMEPREFIX}oracledb>0:databases/py-oracledb@${PY_FLAVOR}
+#TEST_DEPENDS=	${PYTHON_PKGNAMEPREFIX}pytest-xdist>0:devel/py-pytest-xdist@${PY_FLAVOR} \
+#		${PYTHON_PKGNAMEPREFIX}pytest-rerunfailures>0:devel/py-pytest-rerunfailures@${PY_FLAVOR} \
+#		${PYTHON_PKGNAMEPREFIX}filelock>0:sysutils/py-filelock@${PY_FLAVOR} \
+#		${PYTHON_PKGNAMEPREFIX}psycopg>0:databases/py-psycopg@${PY_FLAVOR}
+
+USES=		python
+USE_PYTHON=	autoplist cython pep517
+#USE_PYTHON+=	pytest
+
+#USE_GITHUB=	yes
+#GH_ACCOUNT=	LivingLogic
+#GH_PROJECT=	LivingLogic.Python.xist
+#GH_TAGNAME=	rel-5-85
+
+#post-patch:
+#	${REINPLACE_CMD} -e 's/pytest-reporter-html1//' ${WRKSRC}/pytest.ini
+
+post-install:
+	${STRIP_CMD} ${STAGEDIR}${PYTHON_SITELIBDIR}/ll/*.so ${STAGEDIR}${PYTHON_SITELIBDIR}/ll/xist/*.so
+
+.include <bsd.port.mk>
diff --git a/www/py-ll-xist/distinfo b/www/py-ll-xist/distinfo
new file mode 100644
index 000000000000..64fbe2977eef
--- /dev/null
+++ b/www/py-ll-xist/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1782331233
+SHA256 (ll_xist-5.85.tar.gz) = 3cf688d83929572d1df2d4c21bffd33744ab0ed2c0c1f98fa79955c06f906702
+SIZE (ll_xist-5.85.tar.gz) = 1788274
diff --git a/www/py-ll-xist/files/patch-test_test__url__open.py b/www/py-ll-xist/files/patch-test_test__url__open.py
new file mode 100644
index 000000000000..a62d3ab939a8
--- /dev/null
+++ b/www/py-ll-xist/files/patch-test_test__url__open.py
@@ -0,0 +1,593 @@
+--- test/test_url_open.py	2026-05-20 16:02:56 UTC
++++ /dev/null
+@@ -1,590 +0,0 @@
+-#!/usr/bin/env python
+-# -*- coding: utf-8 -*-
+-# cython: language_level=3, always_allow_keywords=True
+-
+-## Copyright 2005-2026 by LivingLogic AG, Bayreuth/Germany
+-## Copyright 2005-2026 by Walter Dörwald
+-##
+-## All Rights Reserved
+-##
+-## See ll/xist/__init__.py for the license
+-
+-
+-import io, os, datetime
+-
+-from ll import url
+-
+-import pytest
+-
+-# This must point to an ssh account (in the form ``user@hostname``)
+-# that has a directory ``LivingLogic.Python.xist``.
+-remote_user = os.environ["LL_SSH_TEST_CONNECT"]
+-
+-@pytest.mark.net
+-def test_remove():
+-	def check(u):
+-		with url.Context():
+-			u = url.URL(u)
+-			u2 = u/"foo_remove"
+-			r = u2.open("wb")
+-			try:
+-				r.write(b"testing...")
+-				r.close()
+-				assert u2.exists()
+-			finally:
+-				u2.remove()
+-			assert not u2.exists()
+-
+-	check(__file__.rstrip("c"))
+-	check(url.URL(__file__.rstrip("c")))
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/")
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/")
+-
+-
+-@pytest.mark.net
+-def test_link():
+-	def check(u):
+-		with url.Context():
+-			u = url.URL(u)
+-			u2 = u/"foo_link"
+-			try:
+-				u.link(u2)
+-				assert u2.exists()
+-				assert u2.isfile()
+-				assert not u2.islink() # A hardlink is indistinguisable from the real thing
+-			finally:
+-				u2.remove()
+-			assert not u2.exists()
+-
+-	check(__file__.rstrip("c"))
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/setup.py")
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/setup.py")
+-
+-
+-@pytest.mark.net
+-def test_symlink():
+-	def check(u):
+-		with url.Context():
+-			u = url.URL(u)
+-			u2 = u/"foo_symlink"
+-			try:
+-				u.symlink(u2)
+-				assert u2.exists()
+-				assert u2.islink()
+-			finally:
+-				u2.remove()
+-			assert not u2.exists()
+-
+-	check(__file__.rstrip("c"))
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/setup.py")
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/setup.py")
+-
+-
+-@pytest.mark.net
+-def test_chmod():
+-	def check(u):
+-		with url.Context():
+-			u = url.URL(u)
+-			r = u.open("wb")
+-			try:
+-				try:
+-					r.write(b"testing ...")
+-				finally:
+-					r.close()
+-				u.chmod(0o444)
+-				assert u.stat().st_mode & 0o777 == 0o444
+-			finally:
+-				u.remove()
+-
+-	check("~/foo_chmod")
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/foo")
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/foo")
+-
+-
+-@pytest.mark.net
+-def test_chown():
+-	def check(u1, u2, owner, group):
+-		with url.Context():
+-			u1 = url.URL(u1)
+-			u2 = url.URL(u2)
+-			r = u1.open("wb")
+-			try:
+-				try:
+-					r.write(b"foo")
+-				finally:
+-					r.close()
+-				# Might have been left over from previous run
+-				if u2.exists():
+-					u2.remove()
+-				try:
+-					u1.symlink(u2)
+-					u2.lchown(owner, group)
+-					assert u1.owner() == owner
+-					assert u1.group() == group
+-					assert u2.owner() == owner
+-					assert u2.group() == group
+-
+-					u2.chown(owner, group)
+-					assert u1.owner() == owner
+-					assert u1.group() == group
+-					assert u2.owner() == owner
+-					assert u2.group() == group
+-				finally:
+-					u2.remove()
+-			finally:
+-				u1.remove()
+-
+-	remote_user_name = remote_user.split("@")[0]
+-
+-	check(f"ssh://{remote_user}/~/foo_chown", f"ssh://{remote_user}/~/bar", remote_user_name, remote_user_name)
+-	check(f"ssh-nocheck://{remote_user}:22/~/foo_chown", f"ssh-nocheck://{remote_user}:22/~/bar", remote_user_name, remote_user_name)
+-
+-
+-@pytest.mark.net
+-def test_size():
+-	def check(u):
+-		with url.Context():
+-			u = url.URL(u)
+-			assert len(u.open("rb").read()) == u.open("rb").size() == u.size() == 1479
+-
+-	check("~/checkouts/LivingLogic.Python.xist/docs/_static/favicon.png")
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/docs/_static/favicon.png")
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/docs/_static/favicon.png")
+-	check("https://python.livinglogic.de/_static/favicon.png")
+-
+-
+-@pytest.mark.net
+-def test_imagesize():
+-	def check(u):
+-		with url.Context():
+-			u = url.URL(u)
+-			assert u.imagesize() == (32, 32)
+-
+-	check("~/checkouts/LivingLogic.Python.xist/docs/_static/favicon.png")
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/docs/_static/favicon.png")
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/docs/_static/favicon.png")
+-	check("https://python.livinglogic.de/_static/favicon.png")
+-
+-
+-@pytest.mark.net
+-def test_mimetype():
+-	def check(u, mt):
+-		with url.Context():
+-			u = url.URL(u)
+-			assert u.mimetype() == u.open().mimetype() == mt
+-
+-	check(__file__.rstrip("c"), "text/x-python")
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/setup.py", "text/x-python")
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/setup.py", "text/x-python")
+-	check("https://python.livinglogic.de/", "text/html")
+-
+-
+-@pytest.mark.net
+-def test_readline():
+-	def check(u, firstline):
+-		with url.Context():
+-			u = url.URL(u)
+-			r = u.open("rb")
+-			canseektell = hasattr(r, "tell") and hasattr(r, "seek")
+-			if canseektell:
+-				try:
+-					r.tell()
+-				except io.UnsupportedOperation:
+-					canseektell = False
+-			assert r.readline() == firstline
+-			if canseektell:
+-				assert r.tell() == len(firstline)
+-				r.seek(0)
+-				assert r.readline() == firstline
+-				r.seek(0)
+-			else:
+-				r = u.open("rb") # reopen
+-			assert r.read(len(firstline)) == firstline
+-			if canseektell:
+-				r.seek(0)
+-			else:
+-				r = u.open("rb") # reopen
+-			assert r.read().startswith(firstline)
+-
+-	check(__file__.rstrip("c"), b"#!/usr/bin/env python\n")
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/setup.py", b"#! /usr/bin/env python\n")
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/setup.py", b"#! /usr/bin/env python\n")
+-	check("https://python.livinglogic.de/_static/css/theme.css", b'/* sphinx_ll_theme version 0.1 | MIT license */\n')
+-
+-
+-@pytest.mark.net
+-def test_iter():
+-	def check(u, firstline):
+-		with url.Context():
+-			u = url.URL(u)
+-			r = u.open("rb")
+-			assert next(iter(r)) == firstline
+-			list(r)
+-
+-	check(__file__.rstrip("c"), b"#!/usr/bin/env python\n")
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/setup.py", b"#! /usr/bin/env python\n")
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/setup.py", b"#! /usr/bin/env python\n")
+-	check("https://python.livinglogic.de/_static/css/theme.css", b'/* sphinx_ll_theme version 0.1 | MIT license */\n')
+-
+-
+-@pytest.mark.net
+-def test_autocreate_dir():
+-	def check(u):
+-		with url.Context():
+-			try:
+-				u = url.URL(u)
+-				with u.openwrite() as f:
+-					f.write(b"Hurz!")
+-			finally:
+-				u.remove()
+-				u.withoutfile().rmdir()
+-
+-	check("gurk/hurz.txt")
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/gurk/hurz.txt")
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/gurk/hurz.txt")
+-
+-
+-@pytest.mark.net
+-def test_seek_tell():
+-	def check(u):
+-		with url.Context():
+-			u = url.URL(u)
+-			r = u.open("rb")
+-			r.read()
+-			assert r.tell() == 1479
+-			r.seek(0)
+-			assert r.tell() == 0
+-			r.seek(100, os.SEEK_SET)
+-			assert r.tell() == 100
+-			r.seek(0, os.SEEK_END)
+-			assert r.tell() == 1479
+-			r.seek(-479, os.SEEK_END)
+-			assert r.tell() == 1000
+-			r.seek(479, os.SEEK_CUR)
+-			assert r.tell() == 1479
+-			assert r.read() == b""
+-
+-	check("~/checkouts/LivingLogic.Python.xist/docs/_static/favicon.png")
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/docs/_static/favicon.png")
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/docs/_static/favicon.png")
+-
+-
+-@pytest.mark.net
+-def test_truncate():
+-	def check(u):
+-		with url.Context():
+-			u = url.URL(u)/"foo_truncate"
+-			try:
+-				r = u.open("wb")
+-				r.write(b"testing...")
+-				r.seek(-3, os.SEEK_CUR)
+-				r.truncate()
+-				r.close()
+-				assert u.open("rb").read() == b"testing"
+-			finally:
+-				u.remove()
+-
+-	check(__file__)
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/")
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/")
+-
+-
+-@pytest.mark.net
+-def test_owner():
+-	def check(u, owner):
+-		with url.Context():
+-			u = url.URL(u)
+-			assert u.owner() == owner
+-			assert u.stat().st_uid == u.uid()
+-
+-	remote_user_name = remote_user.split("@")[0]
+-
+-	check(__file__, "walter")
+-	check("/", "root")
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/README.rst", remote_user_name)
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/README.rst", remote_user_name)
+-
+-
+-@pytest.mark.net
+-def test_stat():
+-	def check(u):
+-		with url.Context():
+-			u = url.URL(u)
+-			stat = u.stat()
+-			assert stat.st_size > 1000
+-			assert stat.st_mode & 0o600 == 0o600
+-
+-	check(url.File(__file__)/"../README.rst")
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/README.rst")
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/README.rst")
+-
+-
+-@pytest.mark.net
+-def test_group():
+-	def check(u, *groups):
+-		with url.Context():
+-			u = url.URL(u)
+-			assert u.group() in groups
+-			assert u.stat().st_gid == u.gid()
+-
+-	remote_user_name = remote_user.split("@")[0]
+-
+-	check(__file__, "users", "staff", "walter")
+-	check("/", "root", "admin", "wheel")
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/README.rst", remote_user_name)
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/README.rst", remote_user_name)
+-
+-
+-@pytest.mark.net
+-def test_cdate():
+-	def check(u, *args):
+-		with url.Context():
+-			assert url.URL(u).cdate() >= datetime.datetime(*args)
+-
+-	check(__file__.rstrip("c"), 2006, 10, 24)
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/README.rst", 2006, 6, 29)
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/README.rst", 2006, 6, 29)
+-
+-
+-@pytest.mark.net
+-def test_mdate():
+-	def check(u, *args):
+-		with url.Context():
+-			u = url.URL(u)
+-			assert u.mdate() == u.open().mdate() >= datetime.datetime(*args)
+-
+-	check(__file__.rstrip("c"), 2006, 10, 24)
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/README.rst", 2006, 6, 29)
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/README.rst", 2006, 6, 29)
+-	check("https://python.livinglogic.de/XIST.html", 2006, 10, 3)
+-
+-
+-@pytest.mark.net
+-def test_adate():
+-	def check(u, *args):
+-		with url.Context():
+-			assert url.URL(u).adate() >= datetime.datetime(*args)
+-
+-	check(__file__.rstrip("c"), 2006, 10, 24)
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/README.rst", 2006, 6, 29)
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/README.rst", 2006, 6, 29)
+-
+-
+-@pytest.mark.net
+-def test_exists():
+-	def check(u, exists):
+-		with url.Context():
+-			u = url.URL(u)
+-			assert u.exists() == exists
+-
+-	check(__file__, True)
+-	check(__file__ + "no", False)
+-	check("/", True)
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/README.rst", True)
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/README.rst", True)
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/DONTREADME.rst", False)
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/DONTREADME.rst", False)
+-
+-
+-@pytest.mark.net
+-def test_isfile():
+-	def check(u, isfile):
+-		with url.Context():
+-			u = url.URL(u)
+-			assert u.isfile() == isfile
+-
+-	check(__file__, True)
+-	check(__file__ + "no", False)
+-	check("/", False)
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/README.rst", True)
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/README.rst", True)
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/", False)
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/", False)
+-
+-
+-@pytest.mark.net
+-def test_isdir():
+-	def check(u, isdir):
+-		with url.Context():
+-			u = url.URL(u)
+-			assert u.isdir() == isdir
+-
+-	check(__file__, False)
+-	check(__file__ + "no", False)
+-	check("/", True)
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/README.rst", False)
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/README.rst", False)
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/", True)
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/", True)
+-	check(f"ssh://{remote_user}/~/checkouts/", True)
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/", True)
+-
+-
+-@pytest.mark.net
+-def test_islink():
+-	def check(u, islink):
+-		with url.Context():
+-			u = url.URL(u)
+-			assert u.islink() == islink
+-
+-	check(__file__, False)
+-	check("/", False)
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/README.rst", False)
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/README.rst", False)
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/", False)
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/", False)
+-
+-
+-@pytest.mark.net
+-def test_ismount():
+-	def check(u, ismount):
+-		with url.Context():
+-			u = url.URL(u)
+-			assert u.ismount() == ismount
+-
+-	check(__file__, False)
+-	check("/", True)
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/README.rst", False)
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/README.rst", False)
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/", False)
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/", False)
+-	check(f"ssh://{remote_user}/~livpython", False)
+-	check(f"ssh-nocheck://{remote_user}:22/~livpython", False)
+-
+-
+-@pytest.mark.net
+-def test_access():
+-	def check(u, mode, result):
+-		with url.Context():
+-			u = url.URL(u)
+-			assert u.access(mode) == result
+-
+-	check(__file__, os.F_OK, True)
+-	check(__file__ + "no", os.F_OK, False)
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/README.rst", os.F_OK, True)
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/README.rst", os.F_OK, True)
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/DONTREADME.rst", os.F_OK, False)
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/DONTREADME.rst", os.F_OK, False)
+-
+-
+-@pytest.mark.net
+-def test_resheaders():
+-	def check(u, headers):
+-		with url.Context():
+-			u = url.URL(u)
+-			realheaders = u.resheaders()
+-			for (k, v) in headers.items():
+-				assert realheaders[k] == v
+-
+-	check(url.File(__file__)/"../README.rst", {"Content-type": "text/x-rst"})
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/README.rst", {"Content-Type": "text/x-rst"})
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/README.rst", {"Content-Type": "text/x-rst"})
+-	check("https://python.livinglogic.de/XIST.html", {"Content-type": "text/html"})
+-
+-
+-@pytest.mark.net
+-def test_resdata():
+-	def check(u, firstline):
+-		with url.Context():
+-			u = url.URL(u)
+-			realdata = u.open("rb").resdata()
+-			assert realdata.splitlines(True)[0] == firstline
+-
+-	check("https://python.livinglogic.de/_static/css/theme.css", b'/* sphinx_ll_theme version 0.1 | MIT license */\n')
+-
+-
+-@pytest.mark.net
+-def test_mkdir_rmdir():
+-	def check(u):
+-		with url.Context():
+-			u = url.URL(u)/"foo_mkdir_rmdir/"
+-			u.mkdir(0o755)
+-			try:
+-				assert u.isdir()
+-				assert u.stat().st_mode & 0o777 == 0o755
+-			finally:
+-				u.rmdir()
+-
+-	check(__file__)
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/")
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/")
+-
+-
+-@pytest.mark.net
+-def test_makedirs():
+-	def check(u):
+-		with url.Context():
+-			u = url.URL(u)/"foo_makedirs/bar/"
+-			u.makedirs(0o755)
+-			try:
+-				assert u.isdir()
+-				assert u.stat().st_mode & 0o777 == 0o755
+-			finally:
+-				u.rmdir()
+-				(u/"../").rmdir()
+-
+-	check(__file__)
+-	check(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/")
+-	check(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/")
+-
+-
+-@pytest.mark.net
+-def test_dir():
+-	def check(u, pu, isfile, include=None, exclude=None):
+-		with url.Context():
+-			u = url.URL(u)
+-			pu = url.URL(pu)
+-			assert u in pu.listdir(include=include, exclude=exclude)
+-			if isfile:
+-				assert u in pu.files(include=include, exclude=exclude)
+-				assert u not in pu.dirs(include=include, exclude=exclude)
+-			else:
+-				assert u not in pu.files(include=include, exclude=exclude)
+-				assert u in pu.dirs(include=include, exclude=exclude)
+-
+-	check(os.path.basename(__file__), os.path.dirname(__file__), True)
+-	check("lib/", "/usr/", False)
+-	check("README.rst", f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/", True)
+-	check("README.rst", f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/", True)
+-	check("LivingLogic.Python.xist/", f"ssh://{remote_user}/~/checkouts/", False)
+-	check("LivingLogic.Python.xist/", f"ssh-nocheck://{remote_user}:22/~/checkouts/", False)
+-	check("lib/", "/usr/", False, "lib")
+-	check("lib/", "/usr/", False, None, "nolib")
+-
+-
+-@pytest.mark.net
+-def test_walk():
+-	def check(u, pu, isfile, include=None, exclude=None):
+-		with url.Context():
+-			u = url.URL(u)
+-			pu = url.URL(pu)
+-			assert any(u==wu for wu in pu.walkall(include=include, exclude=exclude))
+-			if isfile:
+-				assert any(u==wu for wu in pu.walkfiles(include=include, exclude=exclude))
+-				assert all(u!=wu for wu in pu.walkdirs(include=include, exclude=exclude))
+-			else:
+-				assert all(u!=wu for wu in pu.walkfiles(include=include, exclude=exclude))
+-				assert any(u==wu for wu in pu.walkdirs(include=include, exclude=exclude))
+-
+-	check(os.path.basename(__file__), os.path.dirname(__file__), True)
+-	check("src/ll/xist/", url.Dir("~/checkouts/LivingLogic.Python.xist/"), False)
+-	check("ll/xist/ns/html.py", f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/src/", True)
+-	check("ll/xist/ns/html.py", f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/src/", True)
+-	check("ll/xist/ns/", f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/src/", False)
+-	check("ll/xist/ns/", f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/src/", False)
+-
+-
+-@pytest.mark.net
+-def test_ssh_params():
+-	with url.Context():
+-		u1 = url.URL(f"ssh://{remote_user}/~/checkouts/LivingLogic.Python.xist/")
+-		assert u1.isdir(python="/home/walter/.local/bin/python3") is True
+-		assert u1.isdir(nice=20) is True
+-		assert u1.isdir(check=False) is True
+-		assert u1.isdir(check=True) is True
+-
+-		u2 = url.URL(f"ssh-nocheck://{remote_user}:22/~/checkouts/LivingLogic.Python.xist/")
+-		assert u2.isdir(python="/home/walter/.local/bin/python3") is True
+-		assert u2.isdir(nice=20) is True
+-		assert u2.isdir(check=False) is True
+-		assert u2.isdir(check=True) is True
diff --git a/www/xist/pkg-descr b/www/py-ll-xist/pkg-descr
similarity index 100%
rename from www/xist/pkg-descr
rename to www/py-ll-xist/pkg-descr
diff --git a/www/xist/Makefile b/www/xist/Makefile
deleted file mode 100644
index 8b72d8deb609..000000000000
--- a/www/xist/Makefile
+++ /dev/null
@@ -1,26 +0,0 @@
-PORTNAME=	xist
-PORTVERSION=	5.34
-PORTREVISION=	4
-CATEGORIES=	www python
-MASTER_SITES=	PYPI \
-		http://ftp.livinglogic.de/xist/
-PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}
-DISTNAME=	ll-${PORTNAME}-${PORTVERSION}
-
-MAINTAINER=	python@FreeBSD.org
-COMMENT=	XML-based extensible HTML generator
-WWW=		http://www.livinglogic.de/Python/xist/
-
-LICENSE=	MIT
-
-RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}cssutils>=1.0,1:www/py-cssutils@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}lxml>=3.4:devel/py-lxml@${PY_FLAVOR} \
-		${PY_PILLOW}
-
-USES=		python tar:bzip2
-USE_PYTHON=	autoplist distutils
-
-post-install:
-	${STRIP_CMD} ${STAGEDIR}${PYTHON_SITELIBDIR}/ll/*.so ${STAGEDIR}${PYTHON_SITELIBDIR}/ll/xist/*.so
-
-.include <bsd.port.mk>
diff --git a/www/xist/distinfo b/www/xist/distinfo
deleted file mode 100644
index f0b2a9f4a44d..000000000000
--- a/www/xist/distinfo
+++ /dev/null
@@ -1,3 +0,0 @@
-TIMESTAMP = 1531645044
-SHA256 (ll-xist-5.34.tar.bz2) = a2e1ac0002fec5f216aef119a11981e76939c099f488ebf4db3eb188f374070f
-SIZE (ll-xist-5.34.tar.bz2) = 564559


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a3c3de6.1840a.4ca75614>