docs: def file_change_history(self, branch='master', limit=None, days=None, ignore_globs=None, include_globs=None):
          """
          Returns a DataFrame of all file changes (via the commit history) for the specified branch.  This is similar to
          the commit history DataFrame, but is one row per file edit rather than one row per commit (which may encapsulate
          many file changes). Included in the DataFrame will be the columns:
  
           * date (index)
           * author
           * committer
           * message
           * filename
           * insertions
           * deletions
  
          :param branch: the branch to return commits for
          :param limit: (optional, default=None) a maximum number of commits to return, None for no limit
          :param days: (optional, default=None) number of days to return if limit is None
          :param ignore_globs: (optional, default=None) a list of globs to ignore, default none excludes nothing
          :param include_globs: (optinal, default=None) a list of globs to include, default of None includes everything.
          :return: DataFrame
          """
  
          # setup the dataset of commits
          if limit is None:
              if days is None:
                  ds = [[
                            x.author.name,
                            x.committer.name,
                            x.committed_date,
                            x.message,
                            x.name_rev.split()[0],
                            self.__check_extension(x.stats.files, ignore_globs=ignore_globs, include_globs=include_globs)
                        ] for x in self.repo.iter_commits(branch, max_count=sys.maxsize)]
              else:
                  ds = []
                  c_date = time.time()
                  commits = self.repo.iter_commits(branch, max_count=sys.maxsize)
                  dlim = time.time() - days * 24 * 3600
                  while c_date > dlim:
                      try:
                          if sys.version_info.major == 2:
                              x = commits.next()
                          else:
                              x = commits.__next__()
                      except StopIteration:
                          break
  
                      c_date = x.committed_date
                      if c_date > dlim:
                          ds.append([
                              x.author.name,
                              x.committer.name,
                              x.committed_date,
                              x.message,
                              x.name_rev.split()[0],
                              self.__check_extension(x.stats.files, ignore_globs=ignore_globs,
                                                     include_globs=include_globs)
                          ])
  
          else:
              ds = [[
                        x.author.name,
                        x.committer.name,
                        x.committed_date,
                        x.message,
                        x.name_rev.split()[0],
                        self.__check_extension(x.stats.files, ignore_globs=ignore_globs, include_globs=include_globs)
                    ] for x in self.repo.iter_commits(branch, max_count=limit)]
  
          ds = [x[:-1] + [fn, x[-1][fn]['insertions'], x[-1][fn]['deletions']] for x in ds for fn in x[-1].keys() if
                len(x[-1].keys()) > 0]
  
          # make it a pandas dataframe
          df = DataFrame(ds,
                         columns=['author', 'committer', 'date', 'message', 'rev', 'filename', 'insertions', 'deletions'])
  
          # format the date col and make it the index
          df['date'] = to_datetime(df['date'].map(datetime.datetime.fromtimestamp))
          df.set_index(keys=['date'], drop=True, inplace=True)
  
          return df