@@ -309,7 +309,7 @@ def _write_git_file_and_module_config(cls, working_tree_dir, module_abspath):
309309#{ Edit Interface
310310
311311@classmethod
312- def add (cls ,repo ,name ,path ,url = None ,branch = None ,no_checkout = False ,depth = None ):
312+ def add (cls ,repo ,name ,path ,url = None ,branch = None ,no_checkout = False ,depth = None , env = None ):
313313"""Add a new submodule to the given repository. This will alter the index
314314 as well as the .gitmodules file, but will not create a new commit.
315315 If the submodule already exists, no matter if the configuration differs
@@ -336,6 +336,12 @@ def add(cls, repo, name, path, url=None, branch=None, no_checkout=False, depth=N
336336 no checkout will be performed
337337 :param depth: Create a shallow clone with a history truncated to the
338338 specified number of commits.
339+ :param env: Optional dictionary containing the desired environment variables.
340+ Note: Provided variables will be used to update the execution
341+ environment for `git`. If some variable is not specified in `env`
342+ and is defined in `os.environ`, value from `os.environ` will be used.
343+ If you want to unset some variable, consider providing empty string
344+ as its value.
339345 :return: The newly created submodule instance
340346 :note: works atomically, such that no change will be done if the repository
341347 update fails for instance"""
@@ -404,7 +410,7 @@ def add(cls, repo, name, path, url=None, branch=None, no_checkout=False, depth=N
404410raise ValueError ("depth should be an integer" )
405411
406412# _clone_repo(cls, repo, url, path, name, **kwargs):
407- mrepo = cls ._clone_repo (repo ,url ,path ,name ,** kwargs )
413+ mrepo = cls ._clone_repo (repo ,url ,path ,name ,env = env , ** kwargs )
408414# END verify url
409415
410416## See #525 for ensuring git urls in config-files valid under Windows.
@@ -436,7 +442,7 @@ def add(cls, repo, name, path, url=None, branch=None, no_checkout=False, depth=N
436442return sm
437443
438444def update (self ,recursive = False ,init = True ,to_latest_revision = False ,progress = None ,dry_run = False ,
439- force = False ,keep_going = False ):
445+ force = False ,keep_going = False , env = None ):
440446"""Update the repository of this submodule to point to the checkout
441447 we point at with the binsha of this instance.
442448
@@ -461,6 +467,12 @@ def update(self, recursive=False, init=True, to_latest_revision=False, progress=
461467 Unless dry_run is set as well, keep_going could cause subsequent/inherited errors you wouldn't see
462468 otherwise.
463469 In conjunction with dry_run, it can be useful to anticipate all errors when updating submodules
470+ :param env: Optional dictionary containing the desired environment variables.
471+ Note: Provided variables will be used to update the execution
472+ environment for `git`. If some variable is not specified in `env`
473+ and is defined in `os.environ`, value from `os.environ` will be used.
474+ If you want to unset some variable, consider providing empty string
475+ as its value.
464476 :note: does nothing in bare repositories
465477 :note: method is definitely not atomic if recurisve is True
466478 :return: self"""
@@ -527,7 +539,7 @@ def update(self, recursive=False, init=True, to_latest_revision=False, progress=
527539progress .update (BEGIN | CLONE ,0 ,1 ,prefix + "Cloning url '%s' to '%s' in submodule %r" %
528540 (self .url ,checkout_module_abspath ,self .name ))
529541if not dry_run :
530- mrepo = self ._clone_repo (self .repo ,self .url ,self .path ,self .name ,n = True )
542+ mrepo = self ._clone_repo (self .repo ,self .url ,self .path ,self .name ,n = True , env = env )
531543# END handle dry-run
532544progress .update (END | CLONE ,0 ,1 ,prefix + "Done cloning to %s" % checkout_module_abspath )
533545