docs: def revs(self, branch='master', limit=None, skip=None, num_datapoints=None):
          """
          Returns a dataframe of all revision tags and their timestamps. It will have the columns:
  
           * date
           * rev
  
          :param branch: (optional, default 'master') the branch to work in
          :param limit: (optional, default None), the maximum number of revisions to return, None for no limit
          :param skip: (optional, default None), the number of revisions to skip. Ex: skip=2 returns every other revision, None for no skipping.
          :param num_datapoints: (optional, default=None) if limit and skip are none, and this isn't, then num_datapoints evenly spaced revs will be used
          :return: DataFrame
  
          """
  
          if limit is None and skip is None and num_datapoints is not None:
              limit = sum(1 for _ in self.repo.iter_commits())
              skip = int(float(limit) / num_datapoints)
          else:
              if limit is None:
                  limit = sys.maxsize
              elif skip is not None:
                  limit = limit * skip
  
          ds = [[x.committed_date, x.name_rev.split(' ')[0]] for x in self.repo.iter_commits(branch, max_count=limit)]
          df = DataFrame(ds, columns=['date', 'rev'])
  
          if skip is not None:
              if skip == 0:
                  skip = 1
  
              if df.shape[0] >= skip:
                  df = df.ix[range(0, df.shape[0], skip)]
                  df.reset_index()
              else:
                  df = df.ix[[0]]
                  df.reset_index()
  
          return df