summaryrefslogtreecommitdiff
path: root/pkgtools
diff options
context:
space:
mode:
authorrillig <rillig@pkgsrc.org>2022-02-06 18:00:08 +0000
committerrillig <rillig@pkgsrc.org>2022-02-06 18:00:08 +0000
commit67e89aed1b3e202d44578e267611af52786d1cf2 (patch)
tree71fe161299cf2add5c4324bad8f4b92cb5d79bd4 /pkgtools
parentf85a4ced344e3a1cac14394657ead53b62e364d6 (diff)
downloadpkgsrc-67e89aed1b3e202d44578e267611af52786d1cf2.tar.gz
url2pkg: extract code for analyzing the distfile URL
In a few commits, this will allow url2pkg to be run from a category directory, thereby omitting the need to create the package directory manually. No functional change.
Diffstat (limited to 'pkgtools')
-rw-r--r--pkgtools/url2pkg/files/url2pkg.py60
-rw-r--r--pkgtools/url2pkg/files/url2pkg_test.py35
2 files changed, 50 insertions, 45 deletions
diff --git a/pkgtools/url2pkg/files/url2pkg.py b/pkgtools/url2pkg/files/url2pkg.py
index 87b04e7ff58..96763007ad6 100644
--- a/pkgtools/url2pkg/files/url2pkg.py
+++ b/pkgtools/url2pkg/files/url2pkg.py
@@ -1,5 +1,5 @@
#! @PYTHONBIN@
-# $NetBSD: url2pkg.py,v 1.36 2022/02/06 17:11:37 rillig Exp $
+# $NetBSD: url2pkg.py,v 1.37 2022/02/06 18:00:08 rillig Exp $
# Copyright (c) 2019 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -315,8 +315,8 @@ class Lines:
return False
-class Generator:
- """ Generates the initial package Makefile. """
+class PackageVars:
+ """ Determines the package variables from a distfile URL. """
url: str
master_sites: str
distfile: str
@@ -350,6 +350,14 @@ class Generator:
self.distname = ''
self.pkgname = ''
+ self.adjust_site_SourceForge()
+ self.adjust_site_GitHub_archive()
+ self.adjust_site_GitHub_release()
+ self.foreach_site_from_sites_mk(self.adjust_site_from_sites_mk)
+ self.adjust_site_PyPI()
+ self.adjust_site_other()
+ self.adjust_everything_else()
+
def foreach_site_from_sites_mk(self, action: Callable[[str, str], None]):
if self.master_sites != '':
return
@@ -433,7 +441,6 @@ class Generator:
self.homepage = f'https://pypi.org/project/{project}/'
self.distfile = filename
-
def adjust_site_GitHub_archive(self):
pattern = r'''(?x)
^
@@ -533,26 +540,35 @@ class Generator:
os.getenv('PKGMAINTAINER') or os.getenv('REPLYTO') \
or 'INSERT_YOUR_MAIL_ADDRESS_HERE # or use pkgsrc-users@NetBSD.org'
- def generate_lines(self) -> Lines:
+
+class Generator:
+ """ Generates the initial package Makefile. """
+ vars: PackageVars
+
+ def __init__(self, url: str) -> None:
+ self.vars = PackageVars(url)
+
+ def generate_Makefile(self) -> Lines:
+ vars = self.vars
lines = Lines()
lines.add('# $''NetBSD$')
lines.add('')
lines.add_vars(
- Var('GITHUB_PROJECT', '=', self.github_project),
- Var('GITHUB_TAG', '=', self.github_tag),
- Var('DISTNAME', '=', self.distname),
- Var('PKGNAME', '=', self.pkgname),
- Var('CATEGORIES', '=', self.categories),
- Var('MASTER_SITES', '=', self.master_sites),
- Var('GITHUB_RELEASE', '=', self.github_release),
- Var('EXTRACT_SUFX', '=', self.extract_sufx),
- Var('DIST_SUBDIR', '=', self.dist_subdir),
+ Var('GITHUB_PROJECT', '=', vars.github_project),
+ Var('GITHUB_TAG', '=', vars.github_tag),
+ Var('DISTNAME', '=', vars.distname),
+ Var('PKGNAME', '=', vars.pkgname),
+ Var('CATEGORIES', '=', vars.categories),
+ Var('MASTER_SITES', '=', vars.master_sites),
+ Var('GITHUB_RELEASE', '=', vars.github_release),
+ Var('EXTRACT_SUFX', '=', vars.extract_sufx),
+ Var('DIST_SUBDIR', '=', vars.dist_subdir),
)
lines.add_vars(
- Var('MAINTAINER', '=', self.maintainer),
- Var('HOMEPAGE', '=', self.homepage),
+ Var('MAINTAINER', '=', vars.maintainer),
+ Var('HOMEPAGE', '=', vars.homepage),
Var('COMMENT', '=', 'TODO: Short description of the package'),
Var('#LICENSE', '=', '# TODO: (see mk/license.mk)'),
)
@@ -562,16 +578,6 @@ class Generator:
return lines
- def generate_Makefile(self) -> Lines:
- self.adjust_site_SourceForge()
- self.adjust_site_GitHub_archive()
- self.adjust_site_GitHub_release()
- self.foreach_site_from_sites_mk(self.adjust_site_from_sites_mk)
- self.adjust_site_PyPI()
- self.adjust_site_other()
- self.adjust_everything_else()
- return self.generate_lines()
-
def generate_package(self, g: Globals) -> Lines:
pkgdir = g.pkgdir
makefile = pkgdir / 'Makefile'
@@ -1082,7 +1088,7 @@ class Adjuster:
if lines.get('GITHUB_PROJECT') == '':
return
- # don't risk to overwrite any changes made by the package developer.
+ # don't risk overwriting any changes made by the package developer.
if edited_lines.lines != initial_lines.lines:
lines.lines.insert(-2, '# TODO: Migrate MASTER_SITES '
'to MASTER_SITE_PYPI')
diff --git a/pkgtools/url2pkg/files/url2pkg_test.py b/pkgtools/url2pkg/files/url2pkg_test.py
index 7b50f24714c..4d5bc7aad2e 100644
--- a/pkgtools/url2pkg/files/url2pkg_test.py
+++ b/pkgtools/url2pkg/files/url2pkg_test.py
@@ -1,4 +1,4 @@
-# $NetBSD: url2pkg_test.py,v 1.36 2022/01/01 15:29:14 rillig Exp $
+# $NetBSD: url2pkg_test.py,v 1.37 2022/02/06 18:00:08 rillig Exp $
import pytest
from url2pkg import *
@@ -384,7 +384,7 @@ def test_Lines_remove_if__multiple():
assert lines.lines == []
-def test_Generator_adjust_site_SourceForge():
+def test_PackageVars_adjust_site_SourceForge():
url = 'http://downloads.sourceforge.net/sourceforge/rfcascade/cascade-1.4.tar.gz'
lines = Generator(url).generate_Makefile()
@@ -406,7 +406,7 @@ def test_Generator_adjust_site_SourceForge():
]
-def test_Generator_adjust_site_GitHub_archive():
+def test_PackageVars_adjust_site_GitHub_archive():
url = 'https://github.com/org/proj/archive/v1.0.0.tar.gz'
lines = Generator(url).generate_Makefile()
@@ -431,7 +431,7 @@ def test_Generator_adjust_site_GitHub_archive():
]
-def test_Generator_adjust_site_GitHub_archive__tag():
+def test_PackageVars_adjust_site_GitHub_archive__tag():
url = 'https://github.com/org/proj/archive/refs/tags/1.0.0.tar.gz'
lines = Generator(url).generate_Makefile()
@@ -456,7 +456,7 @@ def test_Generator_adjust_site_GitHub_archive__tag():
]
-def test_Generator_adjust_site_GitHub_archive__tag_v():
+def test_PackageVars_adjust_site_GitHub_archive__tag_v():
url = 'https://github.com/org/proj/archive/refs/tags/v1.0.0.tar.gz'
lines = Generator(url).generate_Makefile()
@@ -478,7 +478,7 @@ def test_Generator_adjust_site_GitHub_archive__tag_v():
]
-def test_Generator_adjust_site_GitHub_release__containing_project_name():
+def test_PackageVars_adjust_site_GitHub_release__containing_project_name():
url = 'https://github.com/org/proj/releases/download/1.0.0/proj.zip'
lines = Generator(url).generate_Makefile()
@@ -503,7 +503,7 @@ def test_Generator_adjust_site_GitHub_release__containing_project_name():
]
-def test_Generator_adjust_site_GitHub_release__not_containing_project_name():
+def test_PackageVars_adjust_site_GitHub_release__not_containing_project_name():
url = 'https://github.com/org/proj/releases/download/1.0.0/data.zip'
lines = Generator(url).generate_Makefile()
@@ -529,7 +529,7 @@ def test_Generator_adjust_site_GitHub_release__not_containing_project_name():
]
-def test_Generator_adjust_site_from_sites_mk__with_subdir():
+def test_PackageVars_adjust_site_from_sites_mk__with_subdir():
url = 'https://files.pythonhosted.org/packages/source/i/irc/irc-11.1.1.zip'
generator = Generator(url)
@@ -553,7 +553,7 @@ def test_Generator_adjust_site_from_sites_mk__with_subdir():
]
-def test_Generator_adjust_site_from_sites_mk__without_subdir():
+def test_PackageVars_adjust_site_from_sites_mk__without_subdir():
url = 'https://files.pythonhosted.org/packages/source/irc-11.1.1.zip'
generator = Generator(url)
@@ -577,7 +577,7 @@ def test_Generator_adjust_site_from_sites_mk__without_subdir():
]
-def test_Generator_adjust_site_from_sites_mk__GNU():
+def test_PackageVars_adjust_site_from_sites_mk__GNU():
url = 'https://ftp.gnu.org/pub/gnu/cflow/cflow-1.6.tar.gz'
generator = Generator(url)
@@ -600,7 +600,7 @@ def test_Generator_adjust_site_from_sites_mk__GNU():
]
-def test_Generator_adjust_site_from_sites_mk__PyPI():
+def test_PackageVars_adjust_site_from_sites_mk__PyPI():
url = ('https://files.pythonhosted.org/'
+ 'packages/da/8b/218264f5ce91df1ad27ce8021d51b747ef287627338fe05d170565358546/'
+ 'apprise-0.9.6.tar.gz')
@@ -625,18 +625,17 @@ def test_Generator_adjust_site_from_sites_mk__PyPI():
]
-def test_Generator_adjust_site_from_sites_mk__R(tmp_path: Path):
+def test_PackageVars_adjust_site_from_sites_mk__R(tmp_path: Path):
g.pkgdir = tmp_path
url = 'http://cran.r-project.org/src/contrib/forecast_8.7.tar.gz'
- generator = Generator(url)
with pytest.raises(SystemExit, match='^url2pkg: to create R packages, use pkgtools/R2pkg instead$'):
- generator.generate_Makefile()
+ _ = Generator(url)
assert list(tmp_path.glob('*')) == []
-def test_Generator_adjust_site_other__malformed_URL():
+def test_PackageVars_adjust_site_other__malformed_URL():
# This error is supposed to be handled by the URL check in main.
error = "'NoneType' object has no attribute 'groups'"
@@ -644,7 +643,7 @@ def test_Generator_adjust_site_other__malformed_URL():
Generator('localhost').generate_Makefile()
-def test_Generator_adjust_everything_else__distname_version_with_v():
+def test_PackageVars_adjust_everything_else__distname_version_with_v():
# Some version numbers have a leading 'v', derived from the Git tag name.
url = 'https://cpan.example.org/Algorithm-CheckDigits-v1.3.2.tar.gz'
@@ -669,7 +668,7 @@ def test_Generator_adjust_everything_else__distname_version_with_v():
]
-def test_Generator_adjust_everything_else__distfile_without_extension():
+def test_PackageVars_adjust_everything_else__distfile_without_extension():
url = 'https://example.org/app-2019-10-05'
lines = Generator(url).generate_Makefile()
@@ -692,7 +691,7 @@ def test_Generator_adjust_everything_else__distfile_without_extension():
]
-def test_Generator_adjust_everything_else__v8():
+def test_PackageVars_adjust_everything_else__v8():
generator = Generator('https://example.org/v8-1.0.zip')
lines = generator.generate_Makefile()