Basic implementation for commit provider
This commit is contained in:
parent
abe825dee6
commit
f3278ec1db
3 changed files with 79 additions and 0 deletions
73
commits/__init__.py
Normal file
73
commits/__init__.py
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
from datetime import datetime
|
||||||
|
from typing import List, NamedTuple, Optional
|
||||||
|
from os.path import basename, islink, isdir, join
|
||||||
|
from os import listdir
|
||||||
|
|
||||||
|
import git # type: ignore
|
||||||
|
|
||||||
|
# TODO do something smarter... later
|
||||||
|
# TODO def run against bitbucket and gh backups
|
||||||
|
SOURCES = [
|
||||||
|
'***REMOVED***',
|
||||||
|
'***REMOVED***',
|
||||||
|
'***REMOVED***',
|
||||||
|
'***REMOVED***',
|
||||||
|
'***REMOVED***',
|
||||||
|
'***REMOVED***',
|
||||||
|
]
|
||||||
|
|
||||||
|
THINGS = [
|
||||||
|
'***REMOVED***',
|
||||||
|
'***REMOVED***',
|
||||||
|
'***REMOVED***',
|
||||||
|
'***REMOVED***',
|
||||||
|
]
|
||||||
|
|
||||||
|
def by_me(actor):
|
||||||
|
aa = actor.email + " " + actor.name
|
||||||
|
if actor.email in ('***REMOVED***', '***REMOVED***@gmail.com'):
|
||||||
|
return True
|
||||||
|
if actor.name in ('***REMOVED***',):
|
||||||
|
return True
|
||||||
|
for thing in THINGS:
|
||||||
|
if thing in aa:
|
||||||
|
print("WARNING!!!", actor)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
class Commit(NamedTuple):
|
||||||
|
dt: datetime
|
||||||
|
message: str
|
||||||
|
repo: str
|
||||||
|
# TODO filter so they are authored by me
|
||||||
|
|
||||||
|
def iter_commits(repo: str):
|
||||||
|
# TODO other branches?
|
||||||
|
rr = basename(repo)
|
||||||
|
gr = git.Repo(repo)
|
||||||
|
for c in gr.head.reference.log():
|
||||||
|
if by_me(c.actor):
|
||||||
|
yield Commit(
|
||||||
|
dt=c.time,
|
||||||
|
message=c.message, # TODO strip off 'commit: '? (there are also 'merge')
|
||||||
|
repo=rr,
|
||||||
|
)
|
||||||
|
|
||||||
|
def is_git_repo(d: str):
|
||||||
|
dotgit = join(d, '.git')
|
||||||
|
return isdir(dotgit)
|
||||||
|
|
||||||
|
# TODO eh. traverse all of filesystem?? or only specific dirs for now?
|
||||||
|
def iter_all_commits():
|
||||||
|
for src in SOURCES:
|
||||||
|
# TODO warn if doesn't exist?
|
||||||
|
for d in listdir(src):
|
||||||
|
pr = join(src, d)
|
||||||
|
if is_git_repo(pr):
|
||||||
|
for c in iter_commits(pr):
|
||||||
|
yield c
|
||||||
|
|
||||||
|
|
||||||
|
def get_all_commits():
|
||||||
|
ss = set(iter_all_commits())
|
||||||
|
return list(sorted(ss, key=lambda c: c.dt))
|
|
@ -0,0 +1,5 @@
|
||||||
|
from commits import iter_commits, iter_all_commits, get_all_commits
|
||||||
|
|
||||||
|
# TODO cache?
|
||||||
|
for c in get_all_commits(): # ('***REMOVED***'):
|
||||||
|
print(c)
|
1
requirements.txt
Normal file
1
requirements.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
gitpython
|
Loading…
Add table
Reference in a new issue