1010
1111import logging
1212
13+ # typing -------------------------------------------------------------------
14+
15+ from typing import TYPE_CHECKING ,Union
16+
17+ from git .types import Commit_ish
18+
19+ if TYPE_CHECKING :
20+ from git .repo import Repo
21+ from git .util import IterableList
22+
23+ # ----------------------------------------------------------------------------
24+
1325__all__ = ["RootModule" ,"RootUpdateProgress" ]
1426
1527log = logging .getLogger ('git.objects.submodule.root' )
@@ -42,7 +54,7 @@ class RootModule(Submodule):
4254
4355k_root_name = '__ROOT__'
4456
45- def __init__ (self ,repo ):
57+ def __init__ (self ,repo : 'Repo' ):
4658# repo, binsha, mode=None, path=None, name = None, parent_commit=None, url=None, ref=None)
4759super (RootModule ,self ).__init__ (
4860repo ,
@@ -55,15 +67,17 @@ def __init__(self, repo):
5567branch_path = git .Head .to_full_path (self .k_head_default )
5668 )
5769
58- def _clear_cache (self ):
70+ def _clear_cache (self )-> None :
5971"""May not do anything"""
6072pass
6173
6274#{ Interface
6375
64- def update (self ,previous_commit = None ,recursive = True ,force_remove = False ,init = True ,
65- to_latest_revision = False ,progress = None ,dry_run = False ,force_reset = False ,
66- keep_going = False ):
76+ def update (self ,previous_commit :Union [Commit_ish ,None ]= None ,# type: ignore[override]
77+ recursive :bool = True ,force_remove :bool = False ,init :bool = True ,
78+ to_latest_revision :bool = False ,progress :Union [None ,'RootUpdateProgress' ]= None ,
79+ dry_run :bool = False ,force_reset :bool = False ,keep_going :bool = False
80+ )-> 'RootModule' :
6781"""Update the submodules of this repository to the current HEAD commit.
6882 This method behaves smartly by determining changes of the path of a submodules
6983 repository, next to changes to the to-be-checked-out commit or the branch to be
@@ -128,8 +142,8 @@ def update(self, previous_commit=None, recursive=True, force_remove=False, init=
128142previous_commit = repo .commit (previous_commit )# obtain commit object
129143# END handle previous commit
130144
131- psms = self .list_items (repo ,parent_commit = previous_commit )
132- sms = self .list_items (repo )
145+ psms : 'IterableList[Submodule]' = self .list_items (repo ,parent_commit = previous_commit )
146+ sms : 'IterableList[Submodule]' = self .list_items (repo )
133147spsms = set (psms )
134148ssms = set (sms )
135149
@@ -162,8 +176,8 @@ def update(self, previous_commit=None, recursive=True, force_remove=False, init=
162176csms = (spsms & ssms )
163177len_csms = len (csms )
164178for i ,csm in enumerate (csms ):
165- psm = psms [csm .name ]
166- sm = sms [csm .name ]
179+ psm : 'Submodule' = psms [csm .name ]
180+ sm : 'Submodule' = sms [csm .name ]
167181
168182# PATH CHANGES
169183##############
@@ -343,7 +357,7 @@ def update(self, previous_commit=None, recursive=True, force_remove=False, init=
343357
344358return self
345359
346- def module (self ):
360+ def module (self )-> 'Repo' :
347361""":return: the actual repository containing the submodules"""
348362return self .repo
349363#} END interface