code: def extract_log(rpath,extract=simple_attributes):
      
      # Get repo
      m_repo = git.Repo(rpath)
  
      # Count commits
      count = 0
      m_commits = m_repo.iter_commits()
      for commit in m_commits:
          count += 1
  
      # Initialize progress bar and index
  
      with tqdm.tqdm(total=count) as pbar:
  
          # Get commits again
          m_commits = m_repo.iter_commits()
  
          # Setup test_data extraction
          update_interval = max(min(count//100,100),5)
          index = 0
          buffer = []
  
          # Extract commit test_data
          while True:
  
              # Add the next commit to the buffer
              try:
                  next_commit = next(m_commits)
                  buffer.append(make_object_dict(next_commit,extract))
                  index += 1
                  if index%update_interval == 0:
                      pbar.update(update_interval)
  
              # If no more commits, clear the buffer
              except StopIteration:
                  break
  
      # final_df = pd.concat(sub_df_list)
      return pd.DataFrame(buffer)
docs: Extracts Git commit test_data from a local repository.
      :param rpath: The path to a local Git repo.
      :param extract: A list of attribute name strings.
      :return: A Pandas dataframe containing Git commit test_data.