def repo_public_journal(self, repo_name): """ Set's this repository to be visible in public journal, in other words assing default user to follow this repo :param repo_name: """ cur_token = request.POST.get('auth_token') token = get_token() if cur_token == token: try: repo_id = Repository.by_repo_name(repo_name).repo_id user_id = User.by_username('default').user_id self.scm_model.toggle_following_repo(repo_id, user_id) h.flash(_('Updated repository visibility in public journal'), category='success') except: h.flash(_('An error occurred during setting this' ' repository in public journal'), category='error') else: h.flash(_('Token mismatch'), category='error') return redirect(url('edit_repo', repo_name=repo_name))
def __before__(self): super(BaseRepoController, self).__before__() if c.repo_name: c.rhodecode_db_repo = Repository.by_repo_name(c.repo_name) c.rhodecode_repo = c.rhodecode_db_repo.scm_instance if c.rhodecode_repo is None: log.error('%s this repository is present in database but it ' 'cannot be created as an scm instance', c.repo_name) redirect(url('home')) c.repository_followers = \ self.scm_model.get_followers(c.repo_name) c.repository_forks = self.scm_model.get_forks(c.repo_name)
def pull_changes(self, repo_name, username): dbrepo = Repository.by_repo_name(repo_name) repo = dbrepo.scm_instance try: extras = {'ip': '', 'username': username, 'action': 'push_remote', 'repository': repo_name} #inject ui extra param to log this action via push logger for k, v in extras.items(): repo._repo.ui.setconfig('rhodecode_extras', k, v) repo.pull(dbrepo.clone_uri) self.mark_for_invalidation(repo_name) except: log.error(traceback.format_exc()) raise
def get_forks(self, repo_id): if not isinstance(repo_id, int): repo_id = getattr(Repository.by_repo_name(repo_id), 'repo_id') return self.sa.query(Repository)\ .filter(Repository.fork_id == repo_id).count()
def get_followers(self, repo_id): if not isinstance(repo_id, int): repo_id = getattr(Repository.by_repo_name(repo_id), 'repo_id') return self.sa.query(UserFollowing)\ .filter(UserFollowing.follows_repo_id == repo_id).count()
def __load_data(self, repo_name=None): """ Load defaults settings for edit, and update :param repo_name: """ self.__load_defaults() c.repo_info = db_repo = Repository.by_repo_name(repo_name) repo = scm_repo = db_repo.scm_instance if c.repo_info is None: h.flash(_('%s repository is not mapped to db perhaps' ' it was created or renamed from the filesystem' ' please run the application again' ' in order to rescan repositories') % repo_name, category='error') return redirect(url('repos')) c.default_user_id = User.by_username('default').user_id c.in_public_journal = self.sa.query(UserFollowing)\ .filter(UserFollowing.user_id == c.default_user_id)\ .filter(UserFollowing.follows_repository == c.repo_info).scalar() if c.repo_info.stats: last_rev = c.repo_info.stats.stat_on_revision else: last_rev = 0 c.stats_revision = last_rev c.repo_last_rev = repo.count() - 1 if repo.revisions else 0 if last_rev == 0 or c.repo_last_rev == 0: c.stats_percentage = 0 else: c.stats_percentage = '%.2f' % ((float((last_rev)) / c.repo_last_rev) * 100) defaults = c.repo_info.get_dict() group, repo_name = c.repo_info.groups_and_repo defaults['repo_name'] = repo_name defaults['repo_group'] = getattr(group[-1] if group else None, 'group_id', None) #fill owner if c.repo_info.user: defaults.update({'user': c.repo_info.user.username}) else: replacement_user = self.sa.query(User)\ .filter(User.admin == True).first().username defaults.update({'user': replacement_user}) #fill repository users for p in c.repo_info.repo_to_perm: defaults.update({'u_perm_%s' % p.user.username: p.permission.permission_name}) #fill repository groups for p in c.repo_info.users_group_to_perm: defaults.update({'g_perm_%s' % p.users_group.users_group_name: p.permission.permission_name}) return defaults
def _enable_stats(self): r = Repository.by_repo_name(HG_REPO) r.enable_statistics = True self.sa.add(r) self.sa.commit()