Skip to content

Commit 98e55ee

Browse files
committed
added networkx visualisation option for co-editing network
1 parent ade469c commit 98e55ee

File tree

3 files changed

+46
-22
lines changed

3 files changed

+46
-22
lines changed

git2net/extraction.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1847,13 +1847,14 @@ def mine_git_repo(git_repo_dir, sqlite_db_file, commits=[],
18471847
WHERE hash = (:hash)""",
18481848
{'branches': ','.join(b), 'hash': c})
18491849
con.commit()
1850-
1851-
if extraction_settings['no_of_processes'] > 1:
1852-
_process_repo_parallel(git_repo_dir, sqlite_db_file, u_commits,
1853-
extraction_settings)
1854-
else:
1855-
_process_repo_serial(git_repo_dir, sqlite_db_file, u_commits,
1856-
extraction_settings)
1850+
1851+
if len(u_commits) > 0:
1852+
if extraction_settings['no_of_processes'] > 1:
1853+
_process_repo_parallel(git_repo_dir, sqlite_db_file, u_commits,
1854+
extraction_settings)
1855+
else:
1856+
_process_repo_serial(git_repo_dir, sqlite_db_file, u_commits,
1857+
extraction_settings)
18571858

18581859

18591860
def mine_github(github_url, git_repo_dir, sqlite_db_file, branch=None,

git2net/visualisation.py

Lines changed: 37 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import math
1515
import numpy as np
1616
import calendar
17+
import networkx as nx
1718

1819
import logging
1920

@@ -320,7 +321,7 @@ def get_commit_editing_dag(sqlite_db_file, time_from=None, time_to=None, filenam
320321
return dag, node_info, edge_info
321322

322323

323-
def get_coediting_network(sqlite_db_file, author_identifier='author_id', time_from=None, time_to=None):
324+
def get_coediting_network(sqlite_db_file, author_identifier='author_id', time_from=None, time_to=None, engine='pathpy'):
324325
"""
325326
Returns coediting network containing links between authors who coedited at least one line of
326327
code within a given time window.
@@ -391,19 +392,41 @@ def get_coediting_network(sqlite_db_file, author_identifier='author_id', time_fr
391392
node_info = {}
392393
edge_info = {}
393394

394-
t = pp.TemporalNetwork()
395-
for row in data.itertuples():
396-
if (row.time >= time_from) and (row.time <= time_to) and not \
397-
(row.post_author == row.pre_author):
398-
if not (pd.isnull(row.post_author) or pd.isnull(row.pre_author)):
399-
t.add_edge(row.post_author,
400-
row.pre_author,
401-
row.time,
402-
directed=True)
403-
404-
return t, node_info, edge_info
405-
406-
395+
if engine=='pathpy':
396+
t = pp.TemporalNetwork()
397+
for row in data.itertuples():
398+
if (row.time >= time_from) and (row.time <= time_to) and not \
399+
(row.post_author == row.pre_author):
400+
if not (pd.isnull(row.post_author) or pd.isnull(row.pre_author)):
401+
t.add_edge(row.post_author,
402+
row.pre_author,
403+
row.time,
404+
directed=True)
405+
406+
return t, node_info, edge_info
407+
elif engine=='networkx':
408+
n = nx.DiGraph()
409+
for row in data.itertuples():
410+
if (row.time >= time_from) and (row.time <= time_to) and not \
411+
(row.post_author == row.pre_author):
412+
if not (pd.isnull(row.post_author) or pd.isnull(row.pre_author)):
413+
n.add_node(row.post_author)
414+
n.add_node(row.pre_author)
415+
n.add_edge(row.post_author,
416+
row.pre_author)
417+
if author_identifier=='author_id':
418+
edge = (int(row.post_author), int(row.pre_author))
419+
else:
420+
edge = (row.post_author, row.pre_author)
421+
422+
if edge in edge_info:
423+
edge_info[edge]['times'].append(row.time)
424+
else:
425+
edge_info[edge] = {'times': [row.time]}
426+
return n, node_info, edge_info
427+
else:
428+
raise Exception('Not implemented network engine.')
429+
407430
def get_coauthorship_network(sqlite_db_file, author_identifier='author_id', time_from=None, time_to=None):
408431
"""
409432
Returns coauthorship network containing links between authors who coedited at least one code

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ install_requires =
3030
python-levenshtein
3131
pathpy2>=2.2.0
3232
lizard
33-
pydriller>=2.0.0
33+
pydriller>=2.0.0,<2.2.0
3434
gambit-disambig
3535
setuptools
3636
pygments

0 commit comments

Comments
 (0)