def __init__ (self, repo, filter_arg, date_start=None, date_end=None):
        self.repo        = repo
        self.filter_arg  = filter_arg
        self.commits_all = gitlog.get_commits (repo)
        self.date_start  = date_start or self.get_first_commit()
        self.date_end    = date_end   or self.get_latest_commit()

        # Filtered commits
        self.commits_filtered = self._filter_commits (filter_arg)
        self.commits          = self._get_filtered_commits_by_date (self.commits_filtered,
                                                                    self.date_start,
                                                                    self.date_end)
def main():
    # Process independent projects
    for project in  projects.get_project_list():
        print ("Processing %s" %(project))
        gitlog.generate_cache_file (project)

    # Combine projects
    openstack = []
    for project in  projects.get_project_list():
        openstack += gitlog.get_commits (project)

    openstack = sorted (openstack, key=lambda c: c['committer_date'])

    print ("Generating the global OpenStack project cache")
    gitlog.save_cache_file ("openstack", openstack)
def get_all_releases_dicts ():
    # Add a 'global' release
    rel = releases[:]
    rel += [{"name":   "Global",
             "period": (rel[0]['period'][0],
                        rel[-1]['period'][1]),
             "projects": ["openstack"]}]

    # Figure out project on each release
    for project in projects.get_project_list():
        commits = gitlog.get_commits (project)
        for r in rel:
            commits_release = [c for c in commits
                               if (c['author_date'] >= r['period'][0] and
                                   c['author_date'] <= r['period'][1])]
            if len(commits_release) > 1:
                r['projects'].append (project)

    return rel