Skip to main content

Git graph to networkx

Project description

Git-NetworkX

Port of https://github.com/hoduche/git-graph to NetworkX


Install

PyPi

pip install git-networkx

Git

pip install git+https://github.com/CircArgs/git-networkx.git

Demo

from networkx.drawing.nx_pydot import write_dot
from git_networkx import GitNX, Commit
#everything
All = GitNX('my/repo/path/that/has/a/git/directory')
#networkx Digraph representing all nodes of the git repo

#Commits
#notice the path does not have to be .git in case you have used a different name
Commits = GitNX('my/repo/path/located/in/.got', "c")
#networkx Digraph representing only commits of the git repo

#again, the results of GitNX is just a networkx.DiGraph and as such you can do anything you would on such an object
[n for n in All if isinstance(n, Commit)]

Suppose you had a log like the following:

commit 9a99a4d85cb14005ca829e2cab8f626b4034b981 (HEAD -> master, dev)
Author: CircArgs <quebecname@gmail.com>
Date:   Fri Aug 14 22:05:30 2020 -0400

    I like dogs

commit 80798c310455976e08fedd9b367794692ebb54a6
Author: CircArgs <quebecname@gmail.com>
Date:   Fri Aug 14 22:04:58 2020 -0400

    add file2 with text

commit 8c7f9cea1f6323d793cd035e2178636d6ebf0a36
Author: CircArgs <quebecname@gmail.com>
Date:   Fri Aug 14 22:04:28 2020 -0400

    add file 1

then

G=GitNX(".", "lch")

print(list(G.neighbors(Commit("80798c310455976e08fedd9b367794692ebb54a6"))))
# [Commit('8c7f9cea1f6323d793cd035e2178636d6ebf0a36')]

print(list(G.predecessors(Commit("80798c310455976e08fedd9b367794692ebb54a6"))))
# [Commit('9a99a4d85cb14005ca829e2cab8f626b4034b981')]

print(list(G.predecessors(Commit('9a99a4d85cb14005ca829e2cab8f626b4034b981'))))
# [LocalBranch('dev'), LocalBranch('master')]

Nodes

This table shows what nodes can be in a graph. The Letters denote the filters for creation of the graph as the second positional argument to git_networkx.GitNX i.e. the nodes argument.

As shown in above examples, the DiGraph from GitNX can be filtered by checking isinstance against the Node Classes below or by filtering by a an instance of one of the classes.

Overall Node Class: GitNode

Node kind Letter Node Class Node kind Letter Node Class
blob b Blob remote branch r RemoteBranch
tree t Tree remote head d RemoteHead
commit c Commit remote server s RemoteServer
local branch l LocalBranch annotated tag a AnnotatedTag
local head h LocalHead tag g Tag

By default all nodes are added to the DiGraph.

# you can get your commits, branches and the head of your local repo simply with lch
G=GitNX('../git_networkx_test/', "lch")

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

git-networkx-2.3.0.tar.gz (6.8 kB view hashes)

Uploaded Source

Built Distribution

git_networkx-2.3.0-py3-none-any.whl (7.3 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page