code: def batch_commit(self, message):
          
          class controlled_execution:
              def __init__(self, git, message):
                  self.git = git
                  self.message = message
  
              def __enter__(self):
                  self.git.git_batch_commit = True
  
                  if self.git.job_id:
                      # make sure we're always on the tip tree
                      self.git.read_tree(self.git.ref_head)
  
              def __exit__(self, type, value, traceback):
                  self.git.git_batch_commit = False
  
                  # if nothing committed, we return early
                  if not self.git.git_batch_commit_messages: return
  
                  commit_message = self.message
                  if self.git.git_batch_commit_messages:
                      commit_message = commit_message + "\n\n" + "\n".join(self.git.git_batch_commit_messages)
                  self.git.git_batch_commit_messages = []
  
                  self.git.commit_index(commit_message)
  
          return controlled_execution(self, message)
docs: Instead of committing a lot of small commits you can batch it together using this controller.
  
          Example:
  
          with git.batch_commit('BATCHED'):
              git.commit_file('my commit 1', 'path/to/file', 'content from file')
              git.commit_json_file('[1, 2, 3]', 'path/to/file2', 'json array') 
  
          Withing the `with` block you can use group the method calls of `commit_file` and `commit_json_file`, and every other
          method calling this two methods.
  
          :type message: str 
          :return: with controller to be used with Python's `with git.batch_commit():`