
Fix the error: AttributeError: 'App' object has no attribute 'git_root' That was not quite fixed by I55103b71e7fe35e282d69c3c95c61cbad95ef729 Change-Id: I28eb4f24b184f2843e25516450b3d145204a8828
95 lines
3.4 KiB
Python
95 lines
3.4 KiB
Python
"""add files table
|
|
|
|
Revision ID: 50344aecd1c2
|
|
Revises: 1bb187bcd401
|
|
Create Date: 2015-04-13 08:08:08.682803
|
|
|
|
"""
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision = '50344aecd1c2'
|
|
down_revision = '1bb187bcd401'
|
|
|
|
import re
|
|
import sys
|
|
|
|
from alembic import op, context
|
|
import sqlalchemy as sa
|
|
import git.exc
|
|
|
|
import gertty.db
|
|
import gertty.gitrepo
|
|
|
|
def upgrade():
|
|
op.create_table('file',
|
|
sa.Column('key', sa.Integer(), nullable=False),
|
|
sa.Column('revision_key', sa.Integer(), nullable=False, index=True),
|
|
sa.Column('path', sa.Text(), nullable=False, index=True),
|
|
sa.Column('old_path', sa.Text(), index=True),
|
|
sa.Column('status', sa.String(length=1)),
|
|
sa.Column('inserted', sa.Integer()),
|
|
sa.Column('deleted', sa.Integer()),
|
|
sa.PrimaryKeyConstraint('key')
|
|
)
|
|
|
|
pathre = re.compile('((.*?)\{|^)(.*?) => (.*?)(\}(.*)|$)')
|
|
insert = sa.text('insert into file (key, revision_key, path, old_path, status, inserted, deleted) '
|
|
' values (NULL, :revision_key, :path, :old_path, :status, :inserted, :deleted)')
|
|
|
|
conn = op.get_bind()
|
|
|
|
countres = conn.execute('select count(*) from revision')
|
|
revisions = countres.fetchone()[0]
|
|
if revisions > 50:
|
|
print('')
|
|
print('Adding support for searching for changes by file modified. '
|
|
'This may take a while.')
|
|
|
|
qres = conn.execute('select p.name, c.number, c.status, r.key, r.number, r."commit", r.parent from project p, change c, revision r '
|
|
'where r.change_key=c.key and c.project_key=p.key order by p.name')
|
|
|
|
count = 0
|
|
for (pname, cnumber, cstatus, rkey, rnumber, commit, parent) in qres.fetchall():
|
|
count += 1
|
|
sys.stdout.write('Diffstat revision %s / %s\r' % (count, revisions))
|
|
sys.stdout.flush()
|
|
ires = conn.execute(insert, revision_key=rkey, path='/COMMIT_MSG', old_path=None,
|
|
status=None, inserted=None, deleted=None)
|
|
repo = gertty.gitrepo.get_repo(pname, context.config.gertty_app.config)
|
|
try:
|
|
stats = repo.diffstat(parent, commit)
|
|
except git.exc.GitCommandError:
|
|
# Probably a missing commit
|
|
if cstatus not in ['MERGED', 'ABANDONED']:
|
|
print("Unable to examine diff for %s %s change %s,%s" % (cstatus, pname, cnumber, rnumber))
|
|
continue
|
|
for stat in stats:
|
|
try:
|
|
(added, removed, path) = stat
|
|
except ValueError:
|
|
if cstatus not in ['MERGED', 'ABANDONED']:
|
|
print("Empty diffstat for %s %s change %s,%s" % (cstatus, pname, cnumber, rnumber))
|
|
m = pathre.match(path)
|
|
status = gertty.db.File.STATUS_MODIFIED
|
|
old_path = None
|
|
if m:
|
|
status = gertty.db.File.STATUS_RENAMED
|
|
pre = m.group(2) or ''
|
|
post = m.group(6) or ''
|
|
old_path = pre+m.group(3)+post
|
|
path = pre+m.group(4)+post
|
|
try:
|
|
added = int(added)
|
|
except ValueError:
|
|
added = None
|
|
try:
|
|
removed = int(removed)
|
|
except ValueError:
|
|
removed = None
|
|
conn.execute(insert, revision_key=rkey, path=path, old_path=old_path,
|
|
status=status, inserted=added, deleted=removed)
|
|
print('')
|
|
|
|
def downgrade():
|
|
pass
|