Esempio n. 1
0
from gitpandas import Repository

__author__ = 'willmcginnis'


if __name__ == '__main__':
    repo = Repository(working_dir='git://github.com/CamDavidsonPilon/lifelines.git', verbose=True)
    shared_blame = repo.blame(extensions=['py'], committer=False, by='file')

    print(shared_blame)
Esempio n. 2
0
"""
Assumes that GitPython and pandas are in the same directory as this repo, and nothing else is in that directory.
"""

from gitpandas import Repository

__author__ = 'willmcginnis'

if __name__ == '__main__':
    flask_repo = Repository(working_dir='git://github.com/mitsuhiko/flask.git')

    # do some blaming
    flask_blame = flask_repo.blame(include_globs=['*.py'])

    # figure out committer count from each
    flask_ch = flask_repo.commit_history('master',
                                         limit=None,
                                         include_globs=['*.py'])

    print('\tflask committers: %d' % (len(set(flask_ch['committer'].values))))
    print('\tflask bus count:')
    print(flask_repo.bus_factor(include_globs=['*.py']))
Esempio n. 3
0
from gitpandas import Repository

__author__ = 'willmcginnis'

if __name__ == '__main__':
    repo = Repository(
        working_dir='git://github.com/CamDavidsonPilon/lifelines.git',
        verbose=True)
    shared_blame = repo.blame(extensions=['py'], committer=False, by='file')

    print(shared_blame)
Esempio n. 4
0
class TestLocalProperties(unittest.TestCase):
    """

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

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

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

        os.makedirs(project_dir)

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

        # create an empty repo (but not bare)
        grepo = git.Repo.init(repo_dir)

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

        # commit it
        grepo.git.add('README.md')
        grepo.git.commit(m='first commit')

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

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

        self.repo = Repository(working_dir=repo_dir, verbose=True)

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

    def test_repo_name(self):
        self.assertEqual(self.repo._repo_name(), 'repository1')

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

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

    def test_is_bare(self):
        self.assertFalse(self.repo.is_bare())

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

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

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

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

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

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

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

        fcr = self.repo.file_change_rates(branch='master')
        self.assertEqual(fcr.shape[0], 6)
        self.assertEqual(fcr['unique_committers'].sum(), 6)
        self.assertEqual(fcr['net_change'].sum(), 11)

        # we know this repo doesnt have coverage
        self.assertFalse(self.repo.has_coverage())

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

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

        cblame = self.repo.cumulative_blame()
        self.assertEqual(cblame.shape[0], 6)
        self.assertEqual(cblame[cblame.columns.values[0]].sum(), 36)

        revs = self.repo.revs(num_datapoints=2)
        self.assertEqual(revs.shape[0], 2)
        revs = self.repo.revs(limit=2)
        self.assertEqual(revs.shape[0], 2)
        revs = self.repo.revs()
        self.assertEqual(revs.shape[0], 6)
Esempio n. 5
0
class TestLocalProperties(unittest.TestCase):
    """

    """

    def setUp(self):
        """

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

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

        os.makedirs(project_dir)

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

        # create an empty repo (but not bare)
        grepo = git.Repo.init(repo_dir)

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

        # commit it
        grepo.git.add('README.md')
        grepo.git.commit(m='first commit')

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

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

        self.repo = Repository(working_dir=repo_dir, verbose=True)

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

    def test_repo_name(self):
        self.assertEqual(self.repo.repo_name, 'repository1')

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

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

    def test_is_bare(self):
        self.assertFalse(self.repo.is_bare())

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

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

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

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

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

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

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

        fcr = self.repo.file_change_rates(branch='master')
        self.assertEqual(fcr.shape[0], 6)
        self.assertEqual(fcr['unique_committers'].sum(), 6)
        self.assertEqual(fcr['net_change'].sum(), 11)

        # we know this repo doesnt have coverage
        self.assertFalse(self.repo.has_coverage())

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

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

        cblame = self.repo.cumulative_blame()
        self.assertEqual(cblame.shape[0], 6)
        self.assertEqual(cblame[cblame.columns.values[0]].sum(), 36)

        revs = self.repo.revs(num_datapoints=2)
        self.assertEqual(revs.shape[0], 2)
        revs = self.repo.revs(limit=2)
        self.assertEqual(revs.shape[0], 2)
        revs = self.repo.revs()
        self.assertEqual(revs.shape[0], 6)
Esempio n. 6
0
from gitpandas import Repository

__author__ = 'willmcginnis'

if __name__ == '__main__':
    repo = Repository(
        working_dir='git://github.com/CamDavidsonPilon/lifelines.git',
        verbose=True)
    shared_blame = repo.blame(include_globs=['*.py'],
                              committer=False,
                              by='file')

    print(shared_blame)
Esempio n. 7
0
from gitpandas import Repository

__author__ = 'willmcginnis'


if __name__ == '__main__':
    repo = Repository(working_dir='git://github.com/CamDavidsonPilon/lifelines.git', verbose=True)
    shared_blame = repo.blame(include_globs=['*.py'], committer=False, by='file')

    print(shared_blame)
Esempio n. 8
0
"""
Assumes that GitPython and pandas are in the same directory as this repo, and nothing else is in that directory.
"""

import os
from pandas import merge
from gitpandas import ProjectDirectory, Repository

__author__ = "willmcginnis"


if __name__ == "__main__":
    flask_repo = Repository(working_dir="git://github.com/mitsuhiko/flask.git")

    # do some blaming
    flask_blame = flask_repo.blame(extensions=["py"])

    # figure out committer count from each
    flask_ch = flask_repo.commit_history("master", limit=None, extensions=["py"])

    print("\tflask committers: %d" % (len(set(flask_ch["committer"].values))))
    print("\tflask bus count:")
    print(flask_repo.bus_factor(extensions=["py"]))
Esempio n. 9
0
"""
Assumes that GitPython and pandas are in the same directory as this repo, and nothing else is in that directory.
"""

from gitpandas import Repository

__author__ = 'willmcginnis'


if __name__ == '__main__':
    flask_repo = Repository(working_dir='git://github.com/mitsuhiko/flask.git')

    # do some blaming
    flask_blame = flask_repo.blame(extensions=['py'])

    # figure out committer count from each
    flask_ch = flask_repo.commit_history('master', limit=None, extensions=['py'])

    print('\tflask committers: %d' % (len(set(flask_ch['committer'].values))))
    print('\tflask bus count:')
    print(flask_repo.bus_factor(extensions=['py']))
Esempio n. 10
0
"""
Assumes that GitPython and pandas are in the same directory as this repo, and nothing else is in that directory.
"""

import os
from pandas import merge
from gitpandas import ProjectDirectory, Repository

__author__ = 'willmcginnis'

if __name__ == '__main__':
    flask_repo = Repository(working_dir='git://github.com/mitsuhiko/flask.git')

    # do some blaming
    flask_blame = flask_repo.blame(extensions=['py'])

    # figure out committer count from each
    flask_ch = flask_repo.commit_history('master',
                                         limit=None,
                                         extensions=['py'])

    print('\tflask committers: %d' % (len(set(flask_ch['committer'].values))))
    print('\tflask bus count:')
    print(flask_repo.bus_factor(extensions=['py']))
Esempio n. 11
0
"""
Assumes that GitPython and pandas are in the same directory as this repo, and nothing else is in that directory.
"""

from gitpandas import Repository

__author__ = 'willmcginnis'

if __name__ == '__main__':
    flask_repo = Repository(working_dir='git://github.com/mitsuhiko/flask.git')

    # do some blaming
    flask_blame = flask_repo.blame(include_globs=['*.py'])

    # figure out committer count from each
    flask_ch = flask_repo.commit_history(
        'master', limit=None, include_globs=['*.py'])

    print('\tflask committers: %d' % (len(set(flask_ch['committer'].values))))
    print('\tflask bus count:')
    print(flask_repo.bus_factor(include_globs=['*.py']))