repository-groups: introduce last change for repository groups.

This commit is contained in:
Marcin Kuzminski 2017-07-20 12:59:53 +02:00
parent 666cb615d5
commit 4f16a9a411
7 changed files with 65 additions and 8 deletions

View file

@ -51,7 +51,7 @@ PYRAMID_SETTINGS = {}
EXTENSIONS = {}
__version__ = ('.'.join((str(each) for each in VERSION[:3])))
__dbversion__ = 78 # defines current db version for migrations
__dbversion__ = 79 # defines current db version for migrations
__platform__ = platform.system()
__license__ = 'AGPLv3, and Commercial License'
__author__ = 'RhodeCode GmbH'

View file

@ -0,0 +1,35 @@
import logging
import datetime
from sqlalchemy import *
from rhodecode.model import meta
from rhodecode.lib.dbmigrate.versions import _reset_base, notify
log = logging.getLogger(__name__)
def upgrade(migrate_engine):
"""
Upgrade operations go here.
Don't create your own engine; bind migrate_engine to your metadata
"""
_reset_base(migrate_engine)
from rhodecode.lib.dbmigrate.schema import db_4_7_0_1 as db
repo_group_table = db.RepoGroup.__table__
updated_on = Column(
'updated_on', DateTime(timezone=False), nullable=True, unique=None,
default=datetime.datetime.now)
updated_on.create(table=repo_group_table)
fixups(db, meta.Session)
def downgrade(migrate_engine):
meta = MetaData()
meta.bind = migrate_engine
def fixups(models, _SESSION):
pass

View file

@ -2213,6 +2213,7 @@ class RepoGroup(Base, BaseModel):
enable_locking = Column("enable_locking", Boolean(), nullable=False, unique=None, default=False)
user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=False, default=None)
created_on = Column('created_on', DateTime(timezone=False), nullable=False, default=datetime.datetime.now)
updated_on = Column('updated_on', DateTime(timezone=False), nullable=True, unique=None, default=datetime.datetime.now)
personal = Column('personal', Boolean(), nullable=True, unique=None, default=None)
repo_group_to_perm = relationship('UserRepoGroupToPerm', cascade='all', order_by='UserRepoGroupToPerm.group_to_perm_id')
@ -2324,6 +2325,10 @@ class RepoGroup(Base, BaseModel):
groups.insert(0, gr)
return groups
@property
def last_db_change(self):
return self.updated_on
@property
def children(self):
return RepoGroup.query().filter(RepoGroup.parent_group == self)

View file

@ -28,7 +28,7 @@ import re
import shutil
import time
import traceback
from datetime import datetime, timedelta
import datetime
from pyramid.threadlocal import get_current_request
from zope.cachedescriptors.property import Lazy as LazyProperty
@ -207,9 +207,9 @@ class RepoModel(BaseModel):
short_name=not admin, admin=False)
def last_change(last_change):
if admin and isinstance(last_change, datetime) and not last_change.tzinfo:
last_change = last_change + timedelta(seconds=
(datetime.now() - datetime.utcnow()).seconds)
if admin and isinstance(last_change, datetime.datetime) and not last_change.tzinfo:
last_change = last_change + datetime.timedelta(seconds=
(datetime.datetime.now() - datetime.datetime.utcnow()).seconds)
return _render("last_change", last_change)
def rss_lnk(repo_name):
@ -374,6 +374,7 @@ class RepoModel(BaseModel):
if ex_field:
ex_field.field_value = kwargs[field]
self.sa.add(ex_field)
cur_repo.updated_on = datetime.datetime.now()
self.sa.add(cur_repo)
if source_repo_name != new_name:
@ -899,7 +900,7 @@ class RepoModel(BaseModel):
if os.path.exists(vcs_path):
shutil.move(vcs_path, os.path.join(rm_path, 'rm__.%s' % alias))
_now = datetime.now()
_now = datetime.datetime.now()
_ms = str(_now.microsecond).rjust(6, '0')
_d = 'rm__%s__%s' % (_now.strftime('%Y%m%d_%H%M%S_' + _ms),
repo.just_name)

View file

@ -40,7 +40,7 @@ from rhodecode.model.db import (_hash_key,
UserGroup, Repository)
from rhodecode.model.settings import VcsSettingsModel, SettingsModel
from rhodecode.lib.caching_query import FromCache
from rhodecode.lib.utils2 import action_logger_generic
from rhodecode.lib.utils2 import action_logger_generic, datetime_to_time
log = logging.getLogger(__name__)
@ -501,7 +501,7 @@ class RepoGroupModel(BaseModel):
if 'user' in form_data:
repo_group.user = User.get_by_username(form_data['user'])
repo_group.updated_on = datetime.datetime.now()
self.sa.add(repo_group)
# iterate over all members of this groups and do fixes
@ -518,6 +518,7 @@ class RepoGroupModel(BaseModel):
log.debug('Fixing group %s to new name %s',
obj.group_name, new_name)
obj.group_name = new_name
obj.updated_on = datetime.datetime.now()
elif isinstance(obj, Repository):
# we need to get all repositories from this new group and
# rename them accordingly to new group path
@ -525,6 +526,7 @@ class RepoGroupModel(BaseModel):
log.debug('Fixing repo %s to new name %s',
obj.repo_name, new_name)
obj.repo_name = new_name
obj.updated_on = datetime.datetime.now()
self.sa.add(obj)
self._rename_group(old_path, new_path)
@ -685,6 +687,12 @@ class RepoGroupModel(BaseModel):
def repo_group_lnk(repo_group_name):
return _render('repo_group_name', repo_group_name)
def last_change(last_change):
if admin and isinstance(last_change, datetime.datetime) and not last_change.tzinfo:
last_change = last_change + datetime.timedelta(seconds=
(datetime.datetime.now() - datetime.datetime.utcnow()).seconds)
return _render("last_change", last_change)
def desc(desc, personal):
prefix = h.escaped_stylize(u'[personal] ') if personal else ''
@ -712,6 +720,8 @@ class RepoGroupModel(BaseModel):
"menu": quick_menu(group.group_name),
"name": repo_group_lnk(group.group_name),
"name_raw": group.group_name,
"last_change": last_change(group.last_db_change),
"last_change_raw": datetime_to_time(group.last_db_change),
"desc": desc(group.description_safe, group.personal),
"top_level_repos": 0,
"owner": user_profile(group.user.username)

View file

@ -54,6 +54,9 @@ $(document).ready(function() {
{ data: 'menu', "bSortable": false, className: "quick_repo_menu" },
{ data: {"_": "desc",
"sort": "desc"}, title: "${_('Description')}", className: "td-description" },
{ data: {"_": "last_change",
"sort": "last_change_raw",
"type": Number}, title: "${_('Last Change')}", className: "td-time" },
{ data: {"_": "top_level_repos",
"sort": "top_level_repos"}, title: "${_('Number of top level repositories')}" },
{ data: {"_": "owner",

View file

@ -98,6 +98,9 @@
{ data: 'menu', "bSortable": false, className: "quick_repo_menu" },
{ data: {"_": "desc",
"sort": "desc"}, title: "${_('Description')}", className: "td-description" },
{ data: {"_": "last_change",
"sort": "last_change_raw",
"type": Number}, title: "${_('Last Change')}", className: "td-time" },
{ data: {"_": "owner",
"sort": "owner"}, title: "${_('Owner')}", className: "td-user" }
],