22# Copyright Contributors to the Rez Project
33
44
5+ from __future__ import annotations
6+
57from rez .packages import iter_packages
68from rez .exceptions import BuildProcessError , BuildContextResolveError , \
79 ReleaseHookCancellingError , RezError , ReleaseError , BuildError , \
1820import getpass
1921import os .path
2022import sys
23+ from typing import TYPE_CHECKING
24+
25+ if TYPE_CHECKING :
26+ from rez .build_system import BuildSystem
27+ from rez .packages import Package , Variant
28+ from rez .release_vcs import ReleaseVCS
29+ from rez .developer_package import DeveloperPackage
2130
2231
2332debug_print = config .debug_printer ("package_release" )
@@ -29,9 +38,16 @@ def get_build_process_types():
2938 return plugin_manager .get_plugins ('build_process' )
3039
3140
32- def create_build_process (process_type , working_dir , build_system , package = None ,
33- vcs = None , ensure_latest = True , skip_repo_errors = False ,
34- ignore_existing_tag = False , verbose = False , quiet = False ):
41+ def create_build_process (process_type : str ,
42+ working_dir : str ,
43+ build_system : BuildSystem ,
44+ package = None ,
45+ vcs : ReleaseVCS | None = None ,
46+ ensure_latest : bool = True ,
47+ skip_repo_errors : bool = False ,
48+ ignore_existing_tag : bool = False ,
49+ verbose : bool = False ,
50+ quiet : bool = False ) -> BuildProcess :
3551 """Create a :class:`BuildProcess` instance.
3652
3753 .. warning::
@@ -44,7 +60,7 @@ def create_build_process(process_type, working_dir, build_system, package=None,
4460 if process_type not in process_types :
4561 raise BuildProcessError ("Unknown build process: %r" % process_type )
4662
47- cls = plugin_manager .get_plugin_class ('build_process' , process_type )
63+ cls = plugin_manager .get_plugin_class ('build_process' , process_type , BuildProcess )
4864
4965 return cls (working_dir , # ignored (deprecated)
5066 build_system ,
@@ -77,7 +93,8 @@ class BuildProcess(object):
7793 def name (cls ):
7894 raise NotImplementedError
7995
80- def __init__ (self , working_dir , build_system , package = None , vcs = None ,
96+ def __init__ (self , working_dir : str , build_system : BuildSystem , package = None ,
97+ vcs : ReleaseVCS | None = None ,
8198 ensure_latest = True , skip_repo_errors = False ,
8299 ignore_existing_tag = False , verbose = False , quiet = False ):
83100 """Create a BuildProcess.
@@ -119,14 +136,15 @@ def __init__(self, working_dir, build_system, package=None, vcs=None,
119136 self .package .config .build_directory )
120137
121138 @property
122- def package (self ):
139+ def package (self ) -> DeveloperPackage :
123140 return self .build_system .package
124141
125142 @property
126- def working_dir (self ):
143+ def working_dir (self ) -> str :
127144 return self .build_system .working_dir
128145
129- def build (self , install_path = None , clean = False , install = False , variants = None ):
146+ def build (self , install_path : str | None = None , clean : bool = False ,
147+ install : bool = False , variants : list [int ] | None = None ) -> int :
130148 """Perform the build process.
131149
132150 Iterates over the package's variants, resolves the environment for
@@ -149,7 +167,8 @@ def build(self, install_path=None, clean=False, install=False, variants=None):
149167 """
150168 raise NotImplementedError
151169
152- def release (self , release_message = None , variants = None ):
170+ def release (self , release_message : str | None = None ,
171+ variants : list [int ] | None = None ) -> int :
153172 """Perform the release process.
154173
155174 Iterates over the package's variants, building and installing each into
@@ -167,7 +186,7 @@ def release(self, release_message=None, variants=None):
167186 """
168187 raise NotImplementedError
169188
170- def get_changelog (self ):
189+ def get_changelog (self ) -> str | None :
171190 """Get the changelog since last package release.
172191
173192 Returns:
@@ -187,7 +206,8 @@ def repo_operation(self):
187206 except exc_type as e :
188207 print_warning ("THE FOLLOWING ERROR WAS SKIPPED:\n %s" % str (e ))
189208
190- def visit_variants (self , func , variants = None , ** kwargs ):
209+ def visit_variants (self , func , variants : list [int ] | None = None ,
210+ ** kwargs ) -> tuple [int , list [str | None ]]:
191211 """Iterate over variants and call a function on each."""
192212 if variants :
193213 present_variants = range (self .package .num_variants )
@@ -215,7 +235,7 @@ def visit_variants(self, func, variants=None, **kwargs):
215235
216236 return num_visited , results
217237
218- def get_package_install_path (self , path ) :
238+ def get_package_install_path (self , path : str ) -> str :
219239 """Return the installation path for a package (where its payload goes).
220240
221241 Args:
@@ -230,7 +250,8 @@ def get_package_install_path(self, path):
230250 package_version = self .package .version
231251 )
232252
233- def create_build_context (self , variant , build_type , build_path ):
253+ def create_build_context (self , variant : Variant , build_type : BuildType ,
254+ build_path : str ) -> tuple [ResolvedContext , str ]:
234255 """Create a context to build the variant within."""
235256 request = variant .get_requires (build_requires = True ,
236257 private_build_requires = True )
@@ -274,7 +295,7 @@ def create_build_context(self, variant, build_type, build_path):
274295 raise BuildContextResolveError (context )
275296 return context , rxt_filepath
276297
277- def pre_release (self ):
298+ def pre_release (self ) -> None :
278299 release_settings = self .package .config .plugins .release_vcs
279300
280301 # test that the release path exists
@@ -322,7 +343,7 @@ def pre_release(self):
322343 else :
323344 break
324345
325- def post_release (self , release_message = None ):
346+ def post_release (self , release_message = None ) -> None :
326347 tag_name = self .get_current_tag_name ()
327348
328349 if self .vcs is None :
@@ -332,7 +353,7 @@ def post_release(self, release_message=None):
332353 with self .repo_operation ():
333354 self .vcs .create_release_tag (tag_name = tag_name , message = release_message )
334355
335- def get_current_tag_name (self ):
356+ def get_current_tag_name (self ) -> str :
336357 release_settings = self .package .config .plugins .release_vcs
337358 try :
338359 tag_name = self .package .format (release_settings .tag_name )
@@ -342,7 +363,7 @@ def get_current_tag_name(self):
342363 tag_name = "unversioned"
343364 return tag_name
344365
345- def run_hooks (self , hook_event , ** kwargs ):
366+ def run_hooks (self , hook_event , ** kwargs ) -> None :
346367 hook_names = self .package .config .release_hooks or []
347368 hooks = create_release_hooks (hook_names , self .working_dir )
348369
@@ -357,12 +378,12 @@ def run_hooks(self, hook_event, **kwargs):
357378 "%s cancelled by %s hook '%s': %s:\n %s"
358379 % (hook_event .noun , hook_event .label , hook .name (),
359380 e .__class__ .__name__ , str (e )))
360- except RezError :
381+ except RezError as e :
361382 debug_print ("Error in %s hook '%s': %s:\n %s"
362383 % (hook_event .label , hook .name (),
363384 e .__class__ .__name__ , str (e )))
364385
365- def get_previous_release (self ):
386+ def get_previous_release (self ) -> Package | None :
366387 release_path = self .package .config .release_packages_path
367388 it = iter_packages (self .package .name , paths = [release_path ])
368389 packages = sorted (it , key = lambda x : x .version , reverse = True )
@@ -372,18 +393,19 @@ def get_previous_release(self):
372393 return package
373394 return None
374395
375- def get_changelog (self ):
396+ def get_changelog (self ) -> str | None :
376397 previous_package = self .get_previous_release ()
377398 if previous_package :
378399 previous_revision = previous_package .revision
379400 else :
380401 previous_revision = None
381402
382403 changelog = None
383- with self .repo_operation ():
384- changelog = self .vcs .get_changelog (
385- previous_revision ,
386- max_revisions = config .max_package_changelog_revisions )
404+ if self .vcs :
405+ with self .repo_operation ():
406+ changelog = self .vcs .get_changelog (
407+ previous_revision ,
408+ max_revisions = config .max_package_changelog_revisions )
387409
388410 return changelog
389411
0 commit comments