repository-groups: introduce last change for repository groups.
This commit is contained in:
parent
666cb615d5
commit
4f16a9a411
7 changed files with 65 additions and 8 deletions
|
|
@ -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'
|
||||
|
|
|
|||
35
rhodecode/lib/dbmigrate/versions/079_version_4_9_0.py
Normal file
35
rhodecode/lib/dbmigrate/versions/079_version_4_9_0.py
Normal 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
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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" }
|
||||
],
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue