Example #1
0
def cumulative_blame(by, file_stub):
    settings = get_settings()
    project_dir = settings.get('project_dir', os.getcwd())
    extensions = settings.get('extensions', None)
    ignore_dir = settings.get('ignore_dir', None)

    repo = ProjectDirectory(working_dir=project_dir)
    print(extensions)
    print(ignore_dir)
    print(by)
    cb = repo.cumulative_blame(branch='master', extensions=extensions, ignore_dir=ignore_dir, by=by, num_datapoints=100, skip=None, limit=None)
    cb = cb[~cb.index.duplicated()]
    t = json.loads(cb.to_json(orient='columns'))

    d3_data = []
    for committer in t.keys():
        blob = dict()
        blob['key'] = committer
        blob['values'] = []
        for data_point in t[committer].keys():
            blob['values'].append([int(float(data_point)), t[committer][data_point]])
            blob['values'] = sorted(blob['values'], key=lambda x: x[0])
        d3_data.append(blob)

    # dump the data to disk
    filename = get_file_prefix() + file_stub
    json.dump(d3_data, open(str(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + os.sep + 'static' + os.sep + 'data' + os.sep + filename, 'w'), indent=4)

    return True
Example #2
0
def week_leader_board(n=5):
    settings = get_settings()
    project_dir = settings.get('project_dir', os.getcwd())
    extensions = settings.get('extensions', None)
    ignore_dir = settings.get('ignore_dir', None)
    repo = ProjectDirectory(working_dir=project_dir)
    ch = repo.commit_history(branch='master', extensions=extensions, ignore_dir=ignore_dir, limit=None, days=7)

    metric = 'net'
    print(ch)
    leader_board = {
        'top_committers': [],
        'top_repositories': [],
        'top_extensions': []
    }

    committers = ch.groupby(['committer']).agg({metric: np.sum})
    committers.reset_index(inplace=True)
    committers = committers.sort_values(by=[metric], ascending=False)
    leader_board['top_committers'] = [{'label': x[0], 'net': int(x[1]), 'rank': idx + 1} for idx, x in enumerate(committers.values.tolist()[:n])]

    repos = ch.groupby(['repository']).agg({metric: np.sum})
    repos.reset_index(inplace=True)
    repos = repos.sort_values(by=[metric], ascending=False)
    leader_board['top_repositories'] = [{'label': x[0], 'net': int(x[1]), 'rank': idx + 1} for idx, x in enumerate(repos.values.tolist()[:n])]

    if extensions is not None:
        ext_ranks = []
        for ext in extensions:
            ch = repo.commit_history(branch='master', extensions=[ext], ignore_dir=ignore_dir, days=7)
            ext_ranks.append((ch[metric].sum(), ext))
        ext_ranks = sorted(ext_ranks, key=lambda x: x[0], reverse=True)[:n]
        leader_board['top_extensions'] = [{'label': x[1], 'net': int(x[0]), 'rank': idx + 1} for idx, x in enumerate(ext_ranks)]

    return leader_board
Example #3
0
def project(path):
    p = ProjectDirectory(working_dir=path)

    # get the commit history
    ch = p.commit_history(
        'master',
        limit=None,
        include_globs=['*.py'],
        ignore_globs=['lib/*', 'docs/*', 'test/*', 'tests/*', 'tests_t/*'],
        days=7)
    print(ch.head)

    # get the list of committers
    print('\nCommiters:')
    print(''.join([str(x) + '\n' for x in set(ch['committer'].values)]))
    print('\n')

    # print out everyone's contributions
    attr = ch.reindex(
        columns=['committer', 'lines', 'insertions', 'deletions', 'net'
                 ]).groupby(['committer'])
    attr = attr.agg({
        'lines': np.sum,
        'insertions': np.sum,
        'deletions': np.sum,
        'net': np.sum
    })
    print(attr)
Example #4
0
def get_file_change_rates():
    settings = get_settings()
    project_dir = settings.get('project_dir', os.getcwd())
    extensions = settings.get('extensions', None)
    ignore_dir = settings.get('ignore_dir', None)
    repo = ProjectDirectory(working_dir=project_dir)
    cb = repo.file_change_rates(extensions=extensions,
                                ignore_dir=ignore_dir,
                                coverage=True,
                                days=7)
    cb.reset_index(level=0, inplace=True)
    data = json.loads(cb.to_json(orient='records'))

    output = {'data': []}
    for blob in data:
        row = [
            blob.get(x, None) for x in [
                'index', 'repository', 'unique_committers',
                'net_rate_of_change', 'edit_rate', 'total_lines', 'coverage'
            ]
        ]
        row = [round(x, 2) if isinstance(x, float) else x for x in row]
        output['data'].append(row)

    return output
Example #5
0
    def setUp(self):
        """

        :return:
        """
        project_dir = str(os.path.dirname(os.path.abspath(__file__))) + os.sep + "repos"
        repo1_dir = str(os.path.dirname(os.path.abspath(__file__))) + os.sep + "repos" + os.sep + "repository1"
        repo2_dir = str(os.path.dirname(os.path.abspath(__file__))) + os.sep + "repos" + os.sep + "repository2"

        if os.path.exists(project_dir):
            shutil.rmtree(project_dir)

        os.makedirs(project_dir)

        if not os.path.exists(repo1_dir):
            os.makedirs(repo1_dir)

        if not os.path.exists(repo2_dir):
            os.makedirs(repo2_dir)

        # create an empty repo (but not bare)
        grepo1 = git.Repo.init(repo1_dir)
        grepo2 = git.Repo.init(repo2_dir)

        # add a file
        with open(repo1_dir + os.sep + "README.md", "w") as f:
            f.write("Sample README for a sample python project\n")

        # add a file
        with open(repo2_dir + os.sep + "README.md", "w") as f:
            f.write("Sample README for a sample js project\n")

        # commit them
        grepo1.git.add("README.md")
        grepo1.git.commit(m="first commit")

        grepo2.git.add("README.md")
        grepo2.git.commit(m="first commit")

        # now add some other files:
        for idx in range(5):
            with open(repo1_dir + os.sep + "file_%d.py" % (idx,), "w") as f:
                f.write("import sys\nimport os\n")

            time.sleep(2.0)
            grepo1.git.add(all=True)
            grepo1.git.commit(m=' "adding file_%d.py"' % (idx,))

        # now add some other files:
        for idx in range(5):
            with open(repo2_dir + os.sep + "file_%d.js" % (idx,), "w") as f:
                f.write('document.write("hello world!");\n')

            time.sleep(2.0)
            grepo2.git.add(all=True)
            grepo2.git.commit(m=' "adding file_%d.js"' % (idx,))

        self.projectd_1 = ProjectDirectory(working_dir=[repo1_dir, repo2_dir], verbose=True)
        self.projectd_2 = ProjectDirectory(working_dir=project_dir, verbose=True)
Example #6
0
def week_leader_board(n=5):
    settings = get_settings()
    project_dir = settings.get('project_dir', os.getcwd())
    extensions = settings.get('extensions', None)
    ignore_dir = settings.get('ignore_dir', None)
    repo = ProjectDirectory(working_dir=project_dir)
    ch = repo.commit_history(branch='master',
                             extensions=extensions,
                             ignore_dir=ignore_dir,
                             limit=None,
                             days=21)

    metric = 'net'
    print(ch)
    leader_board = {
        'top_committers': [],
        'top_repositories': [],
        'top_extensions': []
    }

    committers = ch.groupby(['committer']).agg({metric: np.sum})
    committers.reset_index(inplace=True)
    committers = committers.sort_values(by=[metric], ascending=False)
    leader_board['top_committers'] = [{
        'label': x[0],
        'net': int(x[1]),
        'rank': idx + 1
    } for idx, x in enumerate(committers.values.tolist()[:n])]

    repos = ch.groupby(['repository']).agg({metric: np.sum})
    repos.reset_index(inplace=True)
    repos = repos.sort_values(by=[metric], ascending=False)
    leader_board['top_repositories'] = [{
        'label': x[0],
        'net': int(x[1]),
        'rank': idx + 1
    } for idx, x in enumerate(repos.values.tolist()[:n])]

    if extensions is not None:
        ext_ranks = []
        for ext in extensions:
            ch = repo.commit_history(branch='master',
                                     extensions=[ext],
                                     ignore_dir=ignore_dir,
                                     days=21)
            ext_ranks.append((ch[metric].sum(), ext))
        ext_ranks = sorted(ext_ranks, key=lambda x: x[0], reverse=True)[:n]
        leader_board['top_extensions'] = [{
            'label': x[1],
            'net': int(x[0]),
            'rank': idx + 1
        } for idx, x in enumerate(ext_ranks)]

    return leader_board
Example #7
0
def get_punchcard():
    settings = get_settings()
    project_dir = settings.get('project_dir', os.getcwd())
    extensions = settings.get('extensions', None)
    ignore_dir = settings.get('ignore_dir', None)
    repo = ProjectDirectory(working_dir=project_dir)

    pc = repo.punchcard(branch='master', extensions=extensions, ignore_dir=ignore_dir)

    data_set = []
    for idx in range(pc.shape[0]):
        data_set.append([pc.loc[idx, 'day_of_week'], pc.loc[idx, 'hour_of_day'], pc.loc[idx, 'net']])

    return data_set
Example #8
0
def get_repo_details(repo_name):
    settings = get_settings()
    project_dir = settings.get('project_dir', os.getcwd())
    extensions = settings.get('extensions', None)
    ignore_dir = settings.get('ignore_dir', None)
    repos = ProjectDirectory(working_dir=project_dir)
    out = []
    for repo in repos.repos:
        if repo._repo_name() == repo_name:
            df = repo.file_detail(extensions=extensions, ignore_dir=ignore_dir)
            df = df.reset_index(level=2)
            df = df.sort_values(by=['loc'], ascending=False)
            df.reset_index(inplace=True)
            for idx in range(df.shape[0]):
                out.append({
                    'file_name':
                    df.loc[idx, 'file'],
                    'loc':
                    df.loc[idx, 'loc'],
                    'owner':
                    df.loc[idx, 'file_owner'],
                    'extension':
                    df.loc[idx, 'ext'],
                    'last_edit':
                    df.loc[idx, 'last_edit_date'].strftime('%H:%M %d-%m-%Y'),
                    'clean_file_name':
                    df.loc[idx, 'file'].replace('/', '-')
                })
    return out
Example #9
0
def get_file_change_rates():
    settings = get_settings()
    project_dir = settings.get('project_dir', os.getcwd())
    extensions = settings.get('extensions', None)
    ignore_dir = settings.get('ignore_dir', None)
    repo = ProjectDirectory(working_dir=project_dir)
    cb = repo.file_change_rates(extensions=extensions, ignore_dir=ignore_dir, coverage=True, days=7)
    cb.reset_index(level=0, inplace=True)
    data = json.loads(cb.to_json(orient='records'))

    output = {'data': []}
    for blob in data:
        row = [blob.get(x, None) for x in ['index', 'repository', 'unique_committers', 'net_rate_of_change', 'edit_rate', 'total_lines', 'coverage']]
        row = [round(x, 2) if isinstance(x, float) else x for x in row]
        output['data'].append(row)

    return output
Example #10
0
def get_punchcard():
    settings = get_settings()
    project_dir = settings.get('project_dir', os.getcwd())
    extensions = settings.get('extensions', None)
    ignore_dir = settings.get('ignore_dir', None)
    repo = ProjectDirectory(working_dir=project_dir)

    pc = repo.punchcard(branch='master',
                        extensions=extensions,
                        ignore_dir=ignore_dir)

    data_set = []
    for idx in range(pc.shape[0]):
        data_set.append([
            pc.loc[idx, 'day_of_week'], pc.loc[idx, 'hour_of_day'],
            pc.loc[idx, 'net']
        ])

    return data_set
Example #11
0
def cumulative_blame(by, file_stub):
    settings = get_settings()
    project_dir = settings.get('project_dir', os.getcwd())
    extensions = settings.get('extensions', None)
    ignore_dir = settings.get('ignore_dir', None)

    repo = ProjectDirectory(working_dir=project_dir)
    print(extensions)
    print(ignore_dir)
    print(by)
    cb = repo.cumulative_blame(branch='master',
                               extensions=extensions,
                               ignore_dir=ignore_dir,
                               by=by,
                               num_datapoints=100,
                               skip=None,
                               limit=None)
    cb = cb[~cb.index.duplicated()]
    t = json.loads(cb.to_json(orient='columns'))

    d3_data = []
    for committer in t.keys():
        blob = dict()
        blob['key'] = committer
        blob['values'] = []
        for data_point in t[committer].keys():
            blob['values'].append(
                [int(float(data_point)), t[committer][data_point]])
            blob['values'] = sorted(blob['values'], key=lambda x: x[0])
        d3_data.append(blob)

    # dump the data to disk
    filename = get_file_prefix() + file_stub
    json.dump(
        d3_data,
        open(
            str(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +
            os.sep + 'static' + os.sep + 'data' + os.sep + filename, 'w'),
        indent=4)

    return True
Example #12
0
def project(path):
    p = ProjectDirectory(working_dir=path)

    # get the commit history
    ch = p.commit_history('master', limit=None, include_globs=['*.py'], ignore_globs=['lib/*', 'docs/*', 'test/*', 'tests/*', 'tests_t/*'], days=7)
    print(ch.head)

    # get the list of committers
    print('\nCommiters:')
    print(''.join([str(x) + '\n' for x in set(ch['committer'].values)]))
    print('\n')

    # print out everyone's contributions
    attr = ch.reindex(columns=['committer', 'lines', 'insertions', 'deletions', 'net']).groupby(['committer'])
    attr = attr.agg({
        'lines': np.sum,
        'insertions': np.sum,
        'deletions': np.sum,
        'net': np.sum
    })
    print(attr)
Example #13
0
class TestProperties(unittest.TestCase):
    """
    For now this is using the git-python repo for tests. This probably isn't a great idea, we should really
    be either mocking the git portion, or have a known static repo in this directory to work with.

    """
    def setUp(self):
        self.projectd = ProjectDirectory(
            working_dir=['git://github.com/wdm0006/git-pandas.git'],
            verbose=True)

    def tearDown(self):
        self.projectd.__del__()

    def test_repo_name(self):
        self.assertIn('git-pandas',
                      list(self.projectd._repo_name()['repository'].values))

    def test_branches(self):
        branches = list(self.projectd.branches()['branch'].values)
        self.assertIn('master', branches)
        self.assertIn('gh-pages', branches)

    def test_tags(self):
        tags = list(self.projectd.tags()['tag'].values)
        self.assertIn('0.0.1', tags)
        self.assertIn('0.0.2', tags)

    def test_is_bare(self):
        for x in self.projectd.is_bare()['is_bare'].values:
            self.assertFalse(x)
Example #14
0
class TestProperties(unittest.TestCase):
    """
    For now this is using the git-python repo for tests. This probably isn't a great idea, we should really
    be either mocking the git portion, or have a known static repo in this directory to work with.

    """

    def setUp(self):
        self.projectd = ProjectDirectory(working_dir=["git://github.com/wdm0006/git-pandas.git"], verbose=True)

    def tearDown(self):
        self.projectd.__del__()

    def test_repo_name(self):
        self.assertIn("git-pandas", list(self.projectd.repo_name()["repository"].values))

    def test_branches(self):
        branches = list(self.projectd.branches()["branch"].values)
        self.assertIn("master", branches)
        self.assertIn("gh-pages", branches)

    def test_tags(self):
        tags = list(self.projectd.tags()["tag"].values)
        self.assertIn("0.0.1", tags)
        self.assertIn("0.0.2", tags)

    def test_is_bare(self):
        for x in self.projectd.is_bare()["is_bare"].values:
            self.assertFalse(x)
Example #15
0
class TestLocalProperties(unittest.TestCase):
    """

    """
    def setUp(self):
        """

        :return:
        """
        project_dir = str(os.path.dirname(
            os.path.abspath(__file__))) + os.sep + 'repos'
        repo1_dir = str(os.path.dirname(os.path.abspath(
            __file__))) + os.sep + 'repos' + os.sep + 'repository1'
        repo2_dir = str(os.path.dirname(os.path.abspath(
            __file__))) + os.sep + 'repos' + os.sep + 'repository2'

        if os.path.exists(project_dir):
            shutil.rmtree(project_dir)

        os.makedirs(project_dir)

        if not os.path.exists(repo1_dir):
            os.makedirs(repo1_dir)

        if not os.path.exists(repo2_dir):
            os.makedirs(repo2_dir)

        # create an empty repo (but not bare)
        grepo1 = git.Repo.init(repo1_dir)
        grepo2 = git.Repo.init(repo2_dir)

        # add a file
        with open(repo1_dir + os.sep + 'README.md', 'w') as f:
            f.write('Sample README for a sample python project\n')

        # add a file
        with open(repo2_dir + os.sep + 'README.md', 'w') as f:
            f.write('Sample README for a sample js project\n')

        # commit them
        grepo1.git.add('README.md')
        grepo1.git.commit(m='first commit')

        grepo2.git.add('README.md')
        grepo2.git.commit(m='first commit')

        # now add some other files:
        for idx in range(5):
            with open(repo1_dir + os.sep + 'file_%d.py' % (idx, ), 'w') as f:
                f.write('import sys\nimport os\n')

            time.sleep(2.0)
            grepo1.git.add(all=True)
            grepo1.git.commit(m=' "adding file_%d.py"' % (idx, ))

        # now add some other files:
        for idx in range(5):
            with open(repo2_dir + os.sep + 'file_%d.js' % (idx, ), 'w') as f:
                f.write('document.write("hello world!");\n')

            time.sleep(2.0)
            grepo2.git.add(all=True)
            grepo2.git.commit(m=' "adding file_%d.js"' % (idx, ))

        self.projectd_1 = ProjectDirectory(working_dir=[repo1_dir, repo2_dir],
                                           verbose=True)
        self.projectd_2 = ProjectDirectory(working_dir=project_dir,
                                           verbose=True)

    def tearDown(self):
        self.projectd_1.__del__()
        self.projectd_2.__del__()
        project_dir = str(os.path.dirname(
            os.path.abspath(__file__))) + os.sep + 'repos'
        shutil.rmtree(project_dir)

    def test_repo_name(self):
        self.assertIn('repository1',
                      list(self.projectd_1._repo_name()['repository'].values))
        self.assertIn('repository2',
                      list(self.projectd_1._repo_name()['repository'].values))
        self.assertIn('repository1',
                      list(self.projectd_2._repo_name()['repository'].values))
        self.assertIn('repository2',
                      list(self.projectd_2._repo_name()['repository'].values))

    def test_branches(self):
        branches = list(self.projectd_1.branches()['branch'].values)
        self.assertIn('master', branches)

        branches = list(self.projectd_2.branches()['branch'].values)
        self.assertIn('master', branches)

    def test_tags(self):
        tags = list(self.projectd_1.tags()['tag'].values)
        self.assertEqual(len(tags), 0)

        tags = list(self.projectd_2.tags()['tag'].values)
        self.assertEqual(len(tags), 0)

    def test_is_bare(self):
        bares = self.projectd_1.is_bare()['is_bare'].values
        for bare in bares:
            self.assertFalse(bare)

        bares = self.projectd_2.is_bare()['is_bare'].values
        for bare in bares:
            self.assertFalse(bare)

    def test_commit_history(self):
        ch = self.projectd_1.commit_history(branch='master')
        self.assertEqual(ch.shape[0], 12)

        ch2 = self.projectd_1.commit_history(branch='master',
                                             extensions=['py'])
        self.assertEqual(ch2.shape[0], 5)

        ch3 = self.projectd_1.commit_history(branch='master', limit=4)
        self.assertEqual(ch3.shape[0], 4)

        ch4 = self.projectd_1.commit_history(branch='master', days=5)
        self.assertEqual(ch4.shape[0], 12)

        fch = self.projectd_1.file_change_history(branch='master')
        self.assertEqual(fch.shape[0], 12)

        fch2 = self.projectd_1.file_change_history(branch='master',
                                                   extensions=['py'])
        self.assertEqual(fch2.shape[0], 5)

        fch4 = self.projectd_1.file_change_history(branch='master',
                                                   extensions=['js'])
        self.assertEqual(fch4.shape[0], 5)

        fch3 = self.projectd_1.file_change_history(branch='master', limit=4)
        self.assertEqual(fch3.shape[0], 4)

        fcr = self.projectd_1.file_change_rates(branch='master')
        self.assertEqual(fcr.shape[0], 12)
        self.assertEqual(fcr['unique_committers'].sum(), 12)
        self.assertEqual(fcr['net_change'].sum(), 17)

        # we know this repo doesnt have coverage
        coverages = self.projectd_1.has_coverage()['has_coverage'].values
        for coverage in coverages:
            self.assertFalse(coverage)

        # we know this repo only has one committer
        bf = self.projectd_1.bus_factor(by='projectd')
        self.assertEqual(bf['bus factor'].values[0], 1)

        # lets do some blaming
        blame = self.projectd_1.blame(extensions=['py'])
        self.assertEqual(blame['loc'].sum(), 10)
        self.assertEqual(blame.shape[0], 1)

        cblame = self.projectd_1.cumulative_blame(by='committer')
        self.assertEqual(cblame.shape[0], 11)
        self.assertEqual(cblame[cblame.columns.values[0]].sum(), 117)

        revs = self.projectd_1.revs(num_datapoints=2)
        self.assertEqual(revs.shape[0], 2)
        revs = self.projectd_1.revs(limit=2)
        self.assertEqual(revs.shape[0], 2)
        revs = self.projectd_1.revs()
        self.assertEqual(revs.shape[0], 12)
Example #16
0
 def setUp(self):
     self.projectd = ProjectDirectory(
         working_dir=['git://github.com/wdm0006/git-pandas.git'],
         verbose=True)
Example #17
0
"""

"""

from gitpandas.utilities.plotting import plot_punchcard
from gitpandas import ProjectDirectory

repo = ProjectDirectory(working_dir=[
    'git://github.com/wdm0006/git-pandas.git',
    'git://github.com/wdm0006/categorical_encoding.git',
    'git://github.com/wdm0006/sklearn-extensions.git',
    'git://github.com/wdm0006/pygeohash.git',
    'git://github.com/wdm0006/petersburg.git',
    'git://github.com/wdm0006/incomprehensible.git',
],
                        verbose=True)

by = None
punchcard = repo.punchcard(branch='master',
                           extensions=['py'],
                           by=by,
                           normalize=2500)
plot_punchcard(punchcard, metric='lines', title='punchcard', by=by)
Example #18
0
from gitpandas.utilities.plotting import plot_cumulative_blame
from gitpandas import ProjectDirectory

g = ProjectDirectory(working_dir=['git://github.com/rhiever/tpot.git'])
blame = g.cumulative_blame(branch='master',
                           extensions=['py', 'html', 'sql', 'md'],
                           by='committer',
                           limit=None,
                           skip=None)
plot_cumulative_blame(blame)
Example #19
0
import os
from gitpandas import ProjectDirectory

from definitions import GIT_PANDAS_DIR

__author__ = 'willmcginnis'

if __name__ == '__main__':
    g = ProjectDirectory(working_dir=GIT_PANDAS_DIR)

    b = g.blame(include_globs=['*.py'],
                ignore_globs=['lib/*', 'docs/*'],
                by='file')
    print(b.head(5))
Example #20
0
"""

"""

from gitpandas.utilities.plotting import plot_punchcard
from gitpandas import ProjectDirectory

g = ProjectDirectory(working_dir=[...], verbose=True)

by = None
punchcard = g.punchcard(branch='master', include_globs=['*.py'], by=by, normalize=2500)
plot_punchcard(punchcard, metric='lines', title='punchcard', by=by)





Example #21
0
import os
from gitpandas import ProjectDirectory

__author__ = 'willmcginnis'

if __name__ == '__main__':
    g = ProjectDirectory(working_dir=os.path.abspath('../'))

    b = g.blame(extensions=['py'], ignore_dir=['lib', 'docs'], by='file')
    print(b.head(5))

Example #22
0
"""

"""

from gitpandas.utilities.plotting import plot_punchcard
from gitpandas import ProjectDirectory

from definitions import GIT_PANDAS_DIR

g = ProjectDirectory(working_dir=[str(GIT_PANDAS_DIR)], verbose=True)

by = None
punchcard = g.punchcard(branch='master', include_globs=['*.py'], by=by, normalize=2500)
plot_punchcard(punchcard, metric='lines', title='punchcard', by=by)





Example #23
0
class TestLocalProperties(unittest.TestCase):
    """

    """

    def setUp(self):
        """

        :return:
        """
        project_dir = str(os.path.dirname(os.path.abspath(__file__))) + os.sep + "repos"
        repo1_dir = str(os.path.dirname(os.path.abspath(__file__))) + os.sep + "repos" + os.sep + "repository1"
        repo2_dir = str(os.path.dirname(os.path.abspath(__file__))) + os.sep + "repos" + os.sep + "repository2"

        if os.path.exists(project_dir):
            shutil.rmtree(project_dir)

        os.makedirs(project_dir)

        if not os.path.exists(repo1_dir):
            os.makedirs(repo1_dir)

        if not os.path.exists(repo2_dir):
            os.makedirs(repo2_dir)

        # create an empty repo (but not bare)
        grepo1 = git.Repo.init(repo1_dir)
        grepo2 = git.Repo.init(repo2_dir)

        # add a file
        with open(repo1_dir + os.sep + "README.md", "w") as f:
            f.write("Sample README for a sample python project\n")

        # add a file
        with open(repo2_dir + os.sep + "README.md", "w") as f:
            f.write("Sample README for a sample js project\n")

        # commit them
        grepo1.git.add("README.md")
        grepo1.git.commit(m="first commit")

        grepo2.git.add("README.md")
        grepo2.git.commit(m="first commit")

        # now add some other files:
        for idx in range(5):
            with open(repo1_dir + os.sep + "file_%d.py" % (idx,), "w") as f:
                f.write("import sys\nimport os\n")

            time.sleep(2.0)
            grepo1.git.add(all=True)
            grepo1.git.commit(m=' "adding file_%d.py"' % (idx,))

        # now add some other files:
        for idx in range(5):
            with open(repo2_dir + os.sep + "file_%d.js" % (idx,), "w") as f:
                f.write('document.write("hello world!");\n')

            time.sleep(2.0)
            grepo2.git.add(all=True)
            grepo2.git.commit(m=' "adding file_%d.js"' % (idx,))

        self.projectd_1 = ProjectDirectory(working_dir=[repo1_dir, repo2_dir], verbose=True)
        self.projectd_2 = ProjectDirectory(working_dir=project_dir, verbose=True)

    def tearDown(self):
        self.projectd_1.__del__()
        self.projectd_2.__del__()
        project_dir = str(os.path.dirname(os.path.abspath(__file__))) + os.sep + "repos"
        shutil.rmtree(project_dir)

    def test_repo_name(self):
        self.assertIn("repository1", list(self.projectd_1.repo_name()["repository"].values))
        self.assertIn("repository2", list(self.projectd_1.repo_name()["repository"].values))
        self.assertIn("repository1", list(self.projectd_2.repo_name()["repository"].values))
        self.assertIn("repository2", list(self.projectd_2.repo_name()["repository"].values))

    def test_branches(self):
        branches = list(self.projectd_1.branches()["branch"].values)
        self.assertIn("master", branches)

        branches = list(self.projectd_2.branches()["branch"].values)
        self.assertIn("master", branches)

    def test_tags(self):
        tags = list(self.projectd_1.tags()["tag"].values)
        self.assertEqual(len(tags), 0)

        tags = list(self.projectd_2.tags()["tag"].values)
        self.assertEqual(len(tags), 0)

    def test_is_bare(self):
        bares = self.projectd_1.is_bare()["is_bare"].values
        for bare in bares:
            self.assertFalse(bare)

        bares = self.projectd_2.is_bare()["is_bare"].values
        for bare in bares:
            self.assertFalse(bare)

    def test_commit_history(self):
        ch = self.projectd_1.commit_history(branch="master")
        self.assertEqual(ch.shape[0], 12)

        # Will be deprecated in v2.0.0

        ch2 = self.projectd_1.commit_history(branch="master", ignore_globs=["*.[!p][!y]"])
        self.assertEqual(ch2.shape[0], 5)

        ch3 = self.projectd_1.commit_history(branch="master", limit=4)
        self.assertEqual(ch3.shape[0], 4)

        ch4 = self.projectd_1.commit_history(branch="master", days=5)
        self.assertEqual(ch4.shape[0], 12)

        fch = self.projectd_1.file_change_history(branch="master")
        self.assertEqual(fch.shape[0], 12)

        # Will be deprecated in v2.0.0

        fch2 = self.projectd_1.file_change_history(branch="master", ignore_globs=["*.[!p][!y]"])
        self.assertEqual(fch2.shape[0], 5)

        # Will be deprecated in v2.0.0

        fch4 = self.projectd_1.file_change_history(branch="master", ignore_globs=["*.[!j][!s]"])
        self.assertEqual(fch4.shape[0], 5)

        fch3 = self.projectd_1.file_change_history(branch="master", limit=4)
        self.assertEqual(fch3.shape[0], 4)

        fcr = self.projectd_1.file_change_rates(branch="master")
        self.assertEqual(fcr.shape[0], 12)
        self.assertEqual(fcr["unique_committers"].sum(), 12)
        self.assertEqual(fcr["net_change"].sum(), 17)

        # we know this repo doesnt have coverage
        coverages = self.projectd_1.has_coverage()["has_coverage"].values
        for coverage in coverages:
            self.assertFalse(coverage)

        # we know this repo only has one committer
        bf = self.projectd_1.bus_factor(by="projectd")
        self.assertEqual(bf["bus factor"].values[0], 1)

        # lets do some blaming

        blame = self.projectd_1.blame(ignore_globs=["*.[!p][!y]"])
        self.assertEqual(blame["loc"].sum(), 10)
        self.assertEqual(blame.shape[0], 1)

        cblame = self.projectd_1.cumulative_blame(by="committer")
        self.assertEqual(cblame.shape[0], 11)
        self.assertEqual(cblame[cblame.columns.values[0]].sum(), 117)

        revs = self.projectd_1.revs(num_datapoints=2)
        self.assertEqual(revs.shape[0], 2)
        revs = self.projectd_1.revs(limit=2)
        self.assertEqual(revs.shape[0], 2)
        revs = self.projectd_1.revs()
        self.assertEqual(revs.shape[0], 12)
Example #24
0
    def setUp(self):
        """

        :return:
        """
        project_dir = str(os.path.dirname(
            os.path.abspath(__file__))) + os.sep + 'repos'
        repo1_dir = str(os.path.dirname(os.path.abspath(
            __file__))) + os.sep + 'repos' + os.sep + 'repository1'
        repo2_dir = str(os.path.dirname(os.path.abspath(
            __file__))) + os.sep + 'repos' + os.sep + 'repository2'

        if os.path.exists(project_dir):
            shutil.rmtree(project_dir)

        os.makedirs(project_dir)

        if not os.path.exists(repo1_dir):
            os.makedirs(repo1_dir)

        if not os.path.exists(repo2_dir):
            os.makedirs(repo2_dir)

        # create an empty repo (but not bare)
        grepo1 = git.Repo.init(repo1_dir)
        grepo2 = git.Repo.init(repo2_dir)

        # add a file
        with open(repo1_dir + os.sep + 'README.md', 'w') as f:
            f.write('Sample README for a sample python project\n')

        # add a file
        with open(repo2_dir + os.sep + 'README.md', 'w') as f:
            f.write('Sample README for a sample js project\n')

        # commit them
        grepo1.git.add('README.md')
        grepo1.git.commit(m='first commit')

        grepo2.git.add('README.md')
        grepo2.git.commit(m='first commit')

        # now add some other files:
        for idx in range(5):
            with open(repo1_dir + os.sep + 'file_%d.py' % (idx, ), 'w') as f:
                f.write('import sys\nimport os\n')

            time.sleep(2.0)
            grepo1.git.add(all=True)
            grepo1.git.commit(m=' "adding file_%d.py"' % (idx, ))

        # now add some other files:
        for idx in range(5):
            with open(repo2_dir + os.sep + 'file_%d.js' % (idx, ), 'w') as f:
                f.write('document.write("hello world!");\n')

            time.sleep(2.0)
            grepo2.git.add(all=True)
            grepo2.git.commit(m=' "adding file_%d.js"' % (idx, ))

        self.projectd_1 = ProjectDirectory(working_dir=[repo1_dir, repo2_dir],
                                           verbose=True)
        self.projectd_2 = ProjectDirectory(working_dir=project_dir,
                                           verbose=True)
Example #25
0
from gitpandas.utilities.plotting import plot_cumulative_blame
from gitpandas import ProjectDirectory

__author__ = 'willmcginnis'


if __name__ == '__main__':
    g = ProjectDirectory(working_dir=['git://github.com/rhiever/tpot.git'])
    blame = g.cumulative_blame(branch='master', extensions=['py', 'html', 'sql', 'md'], by='committer', limit=None, skip=None)
    plot_cumulative_blame(blame)
Example #26
0
import os
from gitpandas import ProjectDirectory

__author__ = 'willmcginnis'

if __name__ == '__main__':
    g = ProjectDirectory(working_dir=os.path.abspath('../'))

    b = g.file_detail(include_globs=['*.py'], ignore_globs=['lib/*', 'docs/*'])
    print(b.head(25))

Example #27
0
import os
from gitpandas import ProjectDirectory

__author__ = 'willmcginnis'

if __name__ == '__main__':
    g = ProjectDirectory(working_dir=os.path.abspath('../'))

    b = g.file_detail(extensions=['py'], ignore_dir=['lib', 'docs'])
    print(b.head(25))

Example #28
0
def get_repo_names():
    settings = get_settings()
    project_dir = settings.get('project_dir', os.getcwd())
    repos = ProjectDirectory(working_dir=project_dir)
    repo_names = [str(x._repo_name()) for x in repos.repos]
    return repo_names
Example #29
0
"""

"""

from gitpandas.utilities.plotting import plot_punchcard
from gitpandas import ProjectDirectory

repo = ProjectDirectory(working_dir=[
    'git://github.com/wdm0006/git-pandas.git',
    'git://github.com/wdm0006/categorical_encoding.git',
    'git://github.com/wdm0006/sklearn-extensions.git',
    'git://github.com/wdm0006/pygeohash.git',
    'git://github.com/wdm0006/petersburg.git',
    'git://github.com/wdm0006/incomprehensible.git',
], verbose=True)

by = None
punchcard = repo.punchcard(branch='master', extensions=['py'], by=by, normalize=2500)
plot_punchcard(punchcard, metric='lines', title='punchcard', by=by)
Example #30
0
from gitpandas.utilities.plotting import plot_cumulative_blame
from gitpandas import GitHubProfile, ProjectDirectory

__author__ = 'willmcginnis'


if __name__ == '__main__':
    #g = GitHubProfile(username='******', ignore_forks=True, verbose=True)
    g = ProjectDirectory(working_dir='/Users/willmcginnis/Documents/Helton/projects/webapps/salesproph')
    blame = g.cumulative_blame(branch='master', extensions=['py', 'html', 'sql', 'md'], by='project', ignore_dir=['docs'], limit=None, skip=None)
    plot_cumulative_blame(blame)
Example #31
0
 def setUp(self):
     self.projectd = ProjectDirectory(working_dir=["git://github.com/wdm0006/git-pandas.git"], verbose=True)
Example #32
0
import os
from gitpandas import ProjectDirectory

__author__ = 'willmcginnis'

if __name__ == '__main__':
    g = ProjectDirectory(working_dir=os.path.abspath('../..'))

    b = g.blame(extensions=['py'], ignore_dir=['lib', 'docs'])
    info = g.repo_information()
    print(info)
    print(b)
Example #33
0
import os
from gitpandas import ProjectDirectory

__author__ = 'willmcginnis'

if __name__ == '__main__':
    g = ProjectDirectory(working_dir=os.path.abspath('../'))

    b = g.blame(include_globs=['*.py'], ignore_globs=['lib/*', 'docs/*'], by='file')
    print(b.head(5))

Example #34
0
import os
from gitpandas import Repository, ProjectDirectory

__author__ = 'willmcginnis'

if __name__ == '__main__':
    # g = Repository(working_dir=os.path.abspath('../'))
    g = ProjectDirectory(working_dir=os.path.abspath('../'))

    b = g.file_detail(extensions=['py'], ignore_dir=['lib', 'docs'])
    print(b.head(25))

Example #35
0
import os
from gitpandas import ProjectDirectory

from definitions import GIT_PANDAS_DIR

__author__ = 'willmcginnis'

if __name__ == '__main__':
    g = ProjectDirectory(working_dir=GIT_PANDAS_DIR)

    b = g.file_detail(include_globs=['*.py'], ignore_globs=['lib/*', 'docs/*'])
    print(b.head(25))

Example #36
0
def setup_repos_object():
    settings = get_settings()
    project_dir = settings.get('project_dir', os.getcwd())
    extensions = settings.get('extensions', None)
    ignore_dir = settings.get('ignore_dir', None)
    repo = ProjectDirectory(working_dir=project_dir)
Example #37
0
class TestLocalProperties(unittest.TestCase):
    """

    """

    def setUp(self):
        """

        :return:
        """
        project_dir = str(os.path.dirname(os.path.abspath(__file__))) + os.sep + 'repos'
        repo1_dir = str(os.path.dirname(os.path.abspath(__file__))) + os.sep + 'repos' + os.sep + 'repository1'
        repo2_dir = str(os.path.dirname(os.path.abspath(__file__))) + os.sep + 'repos' + os.sep + 'repository2'

        if os.path.exists(project_dir):
            shutil.rmtree(project_dir)

        os.makedirs(project_dir)

        if not os.path.exists(repo1_dir):
            os.makedirs(repo1_dir)

        if not os.path.exists(repo2_dir):
            os.makedirs(repo2_dir)

        # create an empty repo (but not bare)
        grepo1 = git.Repo.init(repo1_dir)
        grepo2 = git.Repo.init(repo2_dir)

        # add a file
        with open(repo1_dir + os.sep + 'README.md', 'w') as f:
            f.write('Sample README for a sample python project\n')

        # add a file
        with open(repo2_dir + os.sep + 'README.md', 'w') as f:
            f.write('Sample README for a sample js project\n')

        # commit them
        grepo1.git.add('README.md')
        grepo1.git.commit(m='first commit')

        grepo2.git.add('README.md')
        grepo2.git.commit(m='first commit')

        # now add some other files:
        for idx in range(5):
            with open(repo1_dir + os.sep + 'file_%d.py' % (idx, ), 'w') as f:
                f.write('import sys\nimport os\n')

            time.sleep(2.0)
            grepo1.git.add(all=True)
            grepo1.git.commit(m=' "adding file_%d.py"' % (idx, ))

        # now add some other files:
        for idx in range(5):
            with open(repo2_dir + os.sep + 'file_%d.js' % (idx, ), 'w') as f:
                f.write('document.write("hello world!");\n')

            time.sleep(2.0)
            grepo2.git.add(all=True)
            grepo2.git.commit(m=' "adding file_%d.js"' % (idx, ))

        self.projectd_1 = ProjectDirectory(working_dir=[repo1_dir, repo2_dir], verbose=True)
        self.projectd_2 = ProjectDirectory(working_dir=project_dir, verbose=True)

    def tearDown(self):
        self.projectd_1.__del__()
        self.projectd_2.__del__()
        project_dir = str(os.path.dirname(os.path.abspath(__file__))) + os.sep + 'repos'
        shutil.rmtree(project_dir)

    def test_repo_name(self):
        self.assertIn('repository1', list(self.projectd_1._repo_name()['repository'].values))
        self.assertIn('repository2', list(self.projectd_1._repo_name()['repository'].values))
        self.assertIn('repository1', list(self.projectd_2._repo_name()['repository'].values))
        self.assertIn('repository2', list(self.projectd_2._repo_name()['repository'].values))

    def test_branches(self):
        branches = list(self.projectd_1.branches()['branch'].values)
        self.assertIn('master', branches)

        branches = list(self.projectd_2.branches()['branch'].values)
        self.assertIn('master', branches)

    def test_tags(self):
        tags = list(self.projectd_1.tags()['tag'].values)
        self.assertEqual(len(tags), 0)

        tags = list(self.projectd_2.tags()['tag'].values)
        self.assertEqual(len(tags), 0)

    def test_is_bare(self):
        bares = self.projectd_1.is_bare()['is_bare'].values
        for bare in bares:
            self.assertFalse(bare)

        bares = self.projectd_2.is_bare()['is_bare'].values
        for bare in bares:
            self.assertFalse(bare)

    def test_commit_history(self):
        ch = self.projectd_1.commit_history(branch='master')
        self.assertEqual(ch.shape[0], 12)

        ch2 = self.projectd_1.commit_history(branch='master', extensions=['py'])
        self.assertEqual(ch2.shape[0], 5)

        ch3 = self.projectd_1.commit_history(branch='master', limit=4)
        self.assertEqual(ch3.shape[0], 4)

        ch4 = self.projectd_1.commit_history(branch='master', days=5)
        self.assertEqual(ch4.shape[0], 12)

        fch = self.projectd_1.file_change_history(branch='master')
        self.assertEqual(fch.shape[0], 12)

        fch2 = self.projectd_1.file_change_history(branch='master', extensions=['py'])
        self.assertEqual(fch2.shape[0], 5)

        fch4 = self.projectd_1.file_change_history(branch='master', extensions=['js'])
        self.assertEqual(fch4.shape[0], 5)

        fch3 = self.projectd_1.file_change_history(branch='master', limit=4)
        self.assertEqual(fch3.shape[0], 4)

        fcr = self.projectd_1.file_change_rates(branch='master')
        self.assertEqual(fcr.shape[0], 12)
        self.assertEqual(fcr['unique_committers'].sum(), 12)
        self.assertEqual(fcr['net_change'].sum(), 17)

        # we know this repo doesnt have coverage
        coverages = self.projectd_1.has_coverage()['has_coverage'].values
        for coverage in coverages:
            self.assertFalse(coverage)

        # we know this repo only has one committer
        bf = self.projectd_1.bus_factor(by='projectd')
        self.assertEqual(bf['bus factor'].values[0], 1)

        # lets do some blaming
        blame = self.projectd_1.blame(extensions=['py'])
        self.assertEqual(blame['loc'].sum(), 10)
        self.assertEqual(blame.shape[0], 1)

        cblame = self.projectd_1.cumulative_blame(by='committer')
        self.assertEqual(cblame.shape[0], 11)
        self.assertEqual(cblame[cblame.columns.values[0]].sum(), 117)

        revs = self.projectd_1.revs(num_datapoints=2)
        self.assertEqual(revs.shape[0], 2)
        revs = self.projectd_1.revs(limit=2)
        self.assertEqual(revs.shape[0], 2)
        revs = self.projectd_1.revs()
        self.assertEqual(revs.shape[0], 12)
Example #38
0
from gitpandas.utilities.plotting import plot_cumulative_blame
from gitpandas import GitHubProfile, ProjectDirectory

__author__ = 'willmcginnis'

if __name__ == '__main__':
    #g = GitHubProfile(username='******', ignore_forks=True, verbose=True)
    g = ProjectDirectory(
        working_dir=
        '/Users/willmcginnis/Documents/Helton/projects/webapps/salesproph')
    blame = g.cumulative_blame(branch='master',
                               extensions=['py', 'html', 'sql', 'md'],
                               by='project',
                               ignore_dir=['docs'],
                               limit=None,
                               skip=None)
    plot_cumulative_blame(blame)