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
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
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)
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
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 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
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
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
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
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
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
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)
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)
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)
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)
def setUp(self): self.projectd = ProjectDirectory( working_dir=['git://github.com/wdm0006/git-pandas.git'], verbose=True)
""" """ 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)
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)
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))
""" """ 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)
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))
""" """ 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)
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)
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)
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)
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))
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))
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
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)
def setUp(self): self.projectd = ProjectDirectory(working_dir=["git://github.com/wdm0006/git-pandas.git"], verbose=True)
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)
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))
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))
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))
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)
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)
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)