pkgsrc-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[pkgsrc/trunk]: pkgsrc/pkgtools/url2pkg/files url2pkg: extract code for analy...



details:   https://anonhg.NetBSD.org/pkgsrc/rev/8993910c8fa7
branches:  trunk
changeset: 373114:8993910c8fa7
user:      rillig <rillig%pkgsrc.org@localhost>
date:      Sun Feb 06 18:00:08 2022 +0000

description:
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:

 pkgtools/url2pkg/files/url2pkg.py      |  60 ++++++++++++++++++---------------
 pkgtools/url2pkg/files/url2pkg_test.py |  35 +++++++++----------
 2 files changed, 50 insertions(+), 45 deletions(-)

diffs (266 lines):

diff -r 3afc8fc6906e -r 8993910c8fa7 pkgtools/url2pkg/files/url2pkg.py
--- a/pkgtools/url2pkg/files/url2pkg.py Sun Feb 06 17:52:24 2022 +0000
+++ b/pkgtools/url2pkg/files/url2pkg.py Sun Feb 06 18:00:08 2022 +0000
@@ -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 @@
         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 @@
         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 @@
         self.homepage = f'https://pypi.org/project/{project}/'
         self.distfile = filename
 
-
     def adjust_site_GitHub_archive(self):
         pattern = r'''(?x)
             ^
@@ -533,26 +540,35 @@
             os.getenv('PKGMAINTAINER') or os.getenv('REPLYTO') \
             or 'INSERT_YOUR_MAIL_ADDRESS_HERE # or use pkgsrc-users%NetBSD.org@localhost'
 
-    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 @@
 
         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 @@
         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 -r 3afc8fc6906e -r 8993910c8fa7 pkgtools/url2pkg/files/url2pkg_test.py
--- a/pkgtools/url2pkg/files/url2pkg_test.py    Sun Feb 06 17:52:24 2022 +0000
+++ b/pkgtools/url2pkg/files/url2pkg_test.py    Sun Feb 06 18:00:08 2022 +0000
@@ -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 @@
     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_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__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_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_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__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_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__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__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__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__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 @@
         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__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__v8():
+def test_PackageVars_adjust_everything_else__v8():
     generator = Generator('https://example.org/v8-1.0.zip')
 
     lines = generator.generate_Makefile()



Home | Main Index | Thread Index | Old Index