예제 #1
0
def _load_changelog_summary():
    p = safe_int(request.GET.get('page'), 1)
    size = safe_int(request.GET.get('size'), 10)

    def url_generator(**kw):
        return url('changelog_summary_home',
                   repo_name=c.rhodecode_db_repo.repo_name,
                   size=size,
                   **kw)

    collection = c.rhodecode_repo

    c.repo_changesets = RepoPage(collection,
                                 page=p,
                                 items_per_page=size,
                                 url=url_generator)
    page_revisions = [x.raw_id for x in list(c.repo_changesets)]
    c.comments = c.rhodecode_db_repo.get_comments(page_revisions)
    c.statuses = c.rhodecode_db_repo.statuses(page_revisions)
예제 #2
0
    def index(self, repo_name):
        p = int(request.params.get('page', 1))
        size = int(request.params.get('size', 20))

        def url_generator(**kw):
            return url('shortlog_home', repo_name=repo_name, size=size, **kw)

        c.repo_changesets = RepoPage(c.rhodecode_repo,
                                     page=p,
                                     items_per_page=size,
                                     url=url_generator)

        if not c.repo_changesets:
            return redirect(url('summary_home', repo_name=repo_name))

        c.shortlog_data = render('shortlog/shortlog_data.html')
        if request.environ.get('HTTP_X_PARTIAL_XHR'):
            return c.shortlog_data
        r = render('shortlog/shortlog.html')
        return r
예제 #3
0
def _load_changelog_summary():
    p = safe_int(request.GET.get('page'), 1)
    size = safe_int(request.GET.get('size'), 10)

    def url_generator(**kw):
        return url('summary_home',
                   repo_name=c.rhodecode_db_repo.repo_name,
                   size=size,
                   **kw)

    pre_load = ['author', 'branch', 'date', 'message']
    try:
        collection = c.rhodecode_repo.get_commits(pre_load=pre_load)
    except EmptyRepositoryError:
        collection = c.rhodecode_repo

    c.repo_commits = RepoPage(collection,
                              page=p,
                              items_per_page=size,
                              url=url_generator)
    page_ids = [x.raw_id for x in c.repo_commits]
    c.comments = c.rhodecode_db_repo.get_comments(page_ids)
    c.statuses = c.rhodecode_db_repo.statuses(page_ids)
예제 #4
0
    def index(self):
        limit = 100
        default = 20
        if request.params.get('size'):
            try:
                int_size = int(request.params.get('size'))
            except ValueError:
                int_size = default
            int_size = int_size if int_size <= limit else limit
            c.size = int_size
            session['changelog_size'] = c.size
            session.save()
        else:
            c.size = int(session.get('changelog_size', default))

        p = int(request.params.get('page', 1))
        branch_name = request.params.get('branch', None)
        try:
            if branch_name:
                collection = [z for z in
                              c.rhodecode_repo.get_changesets(start=0,
                                                    branch_name=branch_name)]
                c.total_cs = len(collection)
            else:
                collection = c.rhodecode_repo
                c.total_cs = len(c.rhodecode_repo)

            c.pagination = RepoPage(collection, page=p, item_count=c.total_cs,
                                    items_per_page=c.size, branch=branch_name)
            collection = list(c.pagination)
            page_revisions = [x.raw_id for x in collection]
            c.comments = c.rhodecode_db_repo.comments(page_revisions)

        except (RepositoryError, ChangesetDoesNotExistError, Exception), e:
            log.error(traceback.format_exc())
            h.flash(str(e), category='warning')
            return redirect(url('home'))
예제 #5
0
    def index(self):
        limit = 100
        default = 20
        if request.GET.get('size'):
            c.size = max(min(safe_int(request.GET.get('size')), limit), 1)
            session['changelog_size'] = c.size
            session.save()
        else:
            c.size = int(session.get('changelog_size', default))
        # min size must be 1
        c.size = max(c.size, 1)
        p = safe_int(request.GET.get('page', 1), 1)
        branch_name = request.GET.get('branch', None)
        try:
            if branch_name:
                collection = [
                    z for z in c.rhodecode_repo.get_changesets(
                        start=0, branch_name=branch_name)
                ]
                c.total_cs = len(collection)
            else:
                collection = c.rhodecode_repo
                c.total_cs = len(c.rhodecode_repo)

            c.pagination = RepoPage(collection,
                                    page=p,
                                    item_count=c.total_cs,
                                    items_per_page=c.size,
                                    branch=branch_name)
            collection = list(c.pagination)
            page_revisions = [x.raw_id for x in collection]
            c.comments = c.rhodecode_db_repo.get_comments(page_revisions)
            c.statuses = c.rhodecode_db_repo.statuses(page_revisions)
        except (EmptyRepositoryError), e:
            h.flash(str(e), category='warning')
            return redirect(url('summary_home', repo_name=c.repo_name))
예제 #6
0
            # get the history for the file !
            tip_cs = c.rhodecode_repo.get_changeset()
            try:
                collection = tip_cs.get_file_history(f_path)
            except (NodeDoesNotExistError, ChangesetError):
                #this node is not present at tip !
                try:
                    cs = self.__get_cs_or_redirect(revision, repo_name)
                    collection = cs.get_file_history(f_path)
                except RepositoryError, e:
                    h.flash(str(e), category='warning')
                    redirect(h.url('shortlog_home', repo_name=repo_name))
            collection = list(reversed(collection))

        c.repo_changesets = RepoPage(collection,
                                     page=p,
                                     items_per_page=size,
                                     url=url_generator)
        page_revisions = [x.raw_id for x in list(c.repo_changesets)]
        c.statuses = c.rhodecode_db_repo.statuses(page_revisions)

        if not c.repo_changesets:
            h.flash(_('There are no changesets yet'), category='warning')
            return redirect(url('summary_home', repo_name=repo_name))

        c.shortlog_data = render('shortlog/shortlog_data.html')
        if request.environ.get('HTTP_X_PARTIAL_XHR'):
            return c.shortlog_data
        r = render('shortlog/shortlog.html')
        return r
예제 #7
0
    def index(self, repo_name):
        c.dbrepo = dbrepo = c.rhodecode_db_repo
        c.following = self.scm_model.is_following_repo(
            repo_name, self.rhodecode_user.user_id)

        def url_generator(**kw):
            return url('shortlog_home', repo_name=repo_name, size=10, **kw)

        c.repo_changesets = RepoPage(c.rhodecode_repo,
                                     page=1,
                                     items_per_page=10,
                                     url=url_generator)

        if self.rhodecode_user.username == 'default':
            # for default(anonymous) user we don't need to pass credentials
            username = ''
            password = ''
        else:
            username = str(self.rhodecode_user.username)
            password = '******'

        parsed_url = urlparse(url.current(qualified=True))

        default_clone_uri = '{scheme}://{user}{pass}{netloc}{path}'

        uri_tmpl = config.get('clone_uri', default_clone_uri)
        uri_tmpl = uri_tmpl.replace('{', '%(').replace('}', ')s')
        decoded_path = safe_unicode(urllib.unquote(parsed_url.path))
        uri_dict = {
            'user': username,
            'pass': password,
            'scheme': parsed_url.scheme,
            'netloc': parsed_url.netloc,
            'path': decoded_path
        }

        uri = uri_tmpl % uri_dict
        # generate another clone url by id
        uri_dict.update({
            'path':
            decoded_path.replace(repo_name, '_%s' % c.dbrepo.repo_id)
        })
        uri_id = uri_tmpl % uri_dict

        c.clone_repo_url = uri
        c.clone_repo_url_id = uri_id
        c.repo_tags = OrderedDict()
        for name, hash_ in c.rhodecode_repo.tags.items()[:10]:
            try:
                c.repo_tags[name] = c.rhodecode_repo.get_changeset(hash_)
            except ChangesetError:
                c.repo_tags[name] = EmptyChangeset(hash_)

        c.repo_branches = OrderedDict()
        for name, hash_ in c.rhodecode_repo.branches.items()[:10]:
            try:
                c.repo_branches[name] = c.rhodecode_repo.get_changeset(hash_)
            except ChangesetError:
                c.repo_branches[name] = EmptyChangeset(hash_)

        td = date.today() + timedelta(days=1)
        td_1m = td - timedelta(days=calendar.mdays[td.month])
        td_1y = td - timedelta(days=365)

        ts_min_m = mktime(td_1m.timetuple())
        ts_min_y = mktime(td_1y.timetuple())
        ts_max_y = mktime(td.timetuple())

        if dbrepo.enable_statistics:
            c.show_stats = True
            c.no_data_msg = _('No data loaded yet')
            run_task(get_commits_stats, c.dbrepo.repo_name, ts_min_y, ts_max_y)
        else:
            c.show_stats = False
            c.no_data_msg = _('Statistics are disabled for this repository')
        c.ts_min = ts_min_m
        c.ts_max = ts_max_y

        stats = self.sa.query(Statistics)\
            .filter(Statistics.repository == dbrepo)\
            .scalar()

        c.stats_percentage = 0

        if stats and stats.languages:
            c.no_data = False is dbrepo.enable_statistics
            lang_stats_d = json.loads(stats.languages)
            c.commit_data = stats.commit_activity
            c.overview_data = stats.commit_activity_combined

            lang_stats = ((x, {
                "count": y,
                "desc": LANGUAGES_EXTENSIONS_MAP.get(x)
            }) for x, y in lang_stats_d.items())

            c.trending_languages = json.dumps(
                sorted(lang_stats, reverse=True, key=lambda k: k[1])[:10])
            last_rev = stats.stat_on_revision + 1
            c.repo_last_rev = c.rhodecode_repo.count()\
                if c.rhodecode_repo.revisions else 0
            if last_rev == 0 or c.repo_last_rev == 0:
                pass
            else:
                c.stats_percentage = '%.2f' % ((float(
                    (last_rev)) / c.repo_last_rev) * 100)
        else:
            c.commit_data = json.dumps({})
            c.overview_data = json.dumps([[ts_min_y, 0], [ts_max_y, 10]])
            c.trending_languages = json.dumps({})
            c.no_data = True

        c.enable_downloads = dbrepo.enable_downloads
        if c.enable_downloads:
            c.download_options = self._get_download_links(c.rhodecode_repo)

        c.readme_data, c.readme_file = self.__get_readme_data(
            c.rhodecode_db_repo.repo_name, c.rhodecode_repo)
        return render('summary/summary.html')
예제 #8
0
                    try:
                        cs = self.__get_cs_or_redirect(revision, repo_name)
                        collection = cs.get_file_history(f_path)
                    except RepositoryError, e:
                        h.flash(safe_str(e), category='warning')
                        redirect(h.url('changelog_home', repo_name=repo_name))
                collection = list(reversed(collection))
            else:
                collection = c.rhodecode_repo.get_changesets(
                    start=0, branch_name=branch_name)
            c.total_cs = len(collection)

            c.pagination = RepoPage(
                collection,
                page=p,
                item_count=c.total_cs,
                items_per_page=c.size,
                branch=branch_name,
            )
            collection = list(c.pagination)
            page_revisions = [x.raw_id for x in c.pagination]
            c.comments = c.rhodecode_db_repo.get_comments(page_revisions)
            c.statuses = c.rhodecode_db_repo.statuses(page_revisions)
        except (EmptyRepositoryError), e:
            h.flash(safe_str(e), category='warning')
            return redirect(url('summary_home', repo_name=c.repo_name))
        except (RepositoryError, ChangesetDoesNotExistError, Exception), e:
            log.error(traceback.format_exc())
            h.flash(safe_str(e), category='error')
            return redirect(url('changelog_home', repo_name=c.repo_name))
예제 #9
0
    def index(self, repo_name, revision=None, f_path=None):
        commit_id = revision
        limit = 100
        hist_limit = safe_int(request.GET.get('limit')) or None
        if request.GET.get('size'):
            c.size = safe_int(request.GET.get('size'), 1)
            session['changelog_size'] = c.size
            session.save()
        else:
            c.size = int(session.get('changelog_size', DEFAULT_CHANGELOG_SIZE))

        # min size must be 1 and less than limit
        c.size = max(c.size, 1) if c.size <= limit else limit

        p = safe_int(request.GET.get('page', 1), 1)
        c.branch_name = branch_name = request.GET.get('branch', None)
        c.book_name = book_name = request.GET.get('bookmark', None)

        c.selected_name = branch_name or book_name
        if not commit_id and branch_name:
            self._check_if_valid_branch(branch_name, repo_name, f_path)

        c.changelog_for_path = f_path
        pre_load = ['author', 'branch', 'date', 'message', 'parents']
        try:
            if f_path:
                log.debug('generating changelog for path %s', f_path)
                # get the history for the file !
                base_commit = c.rhodecode_repo.get_commit(revision)
                try:
                    collection = base_commit.get_file_history(
                        f_path, limit=hist_limit, pre_load=pre_load)
                    if (collection
                            and request.environ.get('HTTP_X_PARTIAL_XHR')):
                        # for ajax call we remove first one since we're looking
                        # at it right now in the context of a file commit
                        collection.pop(0)
                except (NodeDoesNotExistError, CommitError):
                    # this node is not present at tip!
                    try:
                        commit = self.__get_commit_or_redirect(
                            commit_id, repo_name)
                        collection = commit.get_file_history(f_path)
                    except RepositoryError as e:
                        h.flash(safe_str(e), category='warning')
                        redirect(h.url('changelog_home', repo_name=repo_name))
                collection = list(reversed(collection))
            else:
                collection = c.rhodecode_repo.get_commits(
                    branch_name=branch_name, pre_load=pre_load)

            c.total_cs = len(collection)
            c.showing_commits = min(c.size, c.total_cs)
            c.pagination = RepoPage(collection,
                                    page=p,
                                    item_count=c.total_cs,
                                    items_per_page=c.size,
                                    branch=branch_name)
            page_commit_ids = [x.raw_id for x in c.pagination]
            c.comments = c.rhodecode_db_repo.get_comments(page_commit_ids)
            c.statuses = c.rhodecode_db_repo.statuses(page_commit_ids)
        except EmptyRepositoryError as e:
            h.flash(safe_str(e), category='warning')
            return redirect(url('summary_home', repo_name=repo_name))
        except (RepositoryError, CommitDoesNotExistError, Exception) as e:
            msg = safe_str(e)
            log.exception(msg)
            h.flash(msg, category='error')
            return redirect(url('changelog_home', repo_name=repo_name))

        if (request.environ.get('HTTP_X_PARTIAL_XHR')
                or request.environ.get('HTTP_X_PJAX')):
            # loading from ajax, we don't want the first result, it's popped
            return render('changelog/changelog_file_history.html')

        if f_path:
            revs = []
        else:
            revs = c.pagination
        self._graph(c.rhodecode_repo, revs)

        return render('changelog/changelog.html')