Ejemplo n.º 1
0
 def get_values(self, path, kwargs, response):
     listing = [
         d for d in self.transport.list_dir('.') if not d.startswith('.')
     ]
     listing.sort(key=lambda x: x.lower())
     dirs = []
     parity = 0
     for d in listing:
         try:
             b = branch.Branch.open_from_transport(self.transport.clone(d))
             if b.get_config().get_user_option('http_serve') == 'False':
                 continue
         except:
             try:
                 if not stat.S_ISDIR(self.transport.stat(d).st_mode):
                     continue
             except errors.NoSuchFile:
                 continue
             b = None
         dirs.append(DirEntry(d, parity, b))
         parity = 1 - parity
     # Create breadcrumb trail
     directory_breadcrumbs = util.directory_breadcrumbs(
         self._name, False, 'directory')
     return {
         'dirs': dirs,
         'name': self._name,
         'directory_breadcrumbs': directory_breadcrumbs,
     }
Ejemplo n.º 2
0
    def add_template_values(self, values):
        super(InventoryUI, self).add_template_values(values)
        # Directory Breadcrumbs
        directory_breadcrumbs = util.directory_breadcrumbs(
            self._branch.friendly_name, self._branch.is_root, 'files')

        path = values['path']
        revid = values['revid']
        # no navbar for revisions
        navigation = util.Container()

        if is_null_rev(revid):
            branch_breadcrumbs = []
        else:
            # Create breadcrumb trail for the path within the branch
            branch = self._history._branch
            rev_tree = branch.repository.revision_tree(revid)
            branch_breadcrumbs = util.branch_breadcrumbs(
                path, rev_tree, 'files')
        values.update({
            'fileview_active': True,
            'directory_breadcrumbs': directory_breadcrumbs,
            'branch_breadcrumbs': branch_breadcrumbs,
            'navigation': navigation,
        })
Ejemplo n.º 3
0
 def get_values(self, path, kwargs, response):
     exc_type, exc_object, exc_tb = self.exc_info
     description = StringIO()
     traceback.print_exception(exc_type, exc_object, None, file=description)
     directory_breadcrumbs = util.directory_breadcrumbs(
         self._branch.friendly_name, self._branch.is_root, 'changes')
     return {
         'branch':
         self._branch,
         'error_title': ('An unexpected error occurred while'
                         'processing the request:'),
         'error_description':
         description.getvalue(),
         'directory_breadcrumbs':
         directory_breadcrumbs,
     }
Ejemplo n.º 4
0
    def add_template_values(self, values):
        super(RevisionUI, self).add_template_values(values)
        remember = self._history.fix_revid(self.kwargs.get('remember', None))
        query = self.kwargs.get('q', None)
        filter_file_id = self.kwargs.get('filter_file_id', None)
        start_revid = self.kwargs['start_revid']
        navigation = util.Container(
            revid_list=self.revid_list, revid=values['revid'],
            start_revid=start_revid,
            filter_file_id=filter_file_id, pagesize=1,
            scan_url='/revision', branch=self._branch, feed=True,
            history=self._history)
        if query is not None:
            navigation.query = query
        util.fill_in_navigation(navigation)
        path = self.path
        if path in ('', '/'):
            path = None


        file_changes = values['file_changes']
        link_data = {}
        path_to_id = {}
        if path:
            items = [x for x in file_changes.text_changes if x.filename == path]
            if len(items) > 0:
                item = items[0]
                try:
                    context_lines = int(self.kwargs['context'])
                except (KeyError, ValueError):
                    context_lines = None
                diff_chunks = diff_chunks_for_file(
                    self._history._branch.repository, item.file_id,
                    item.old_revision, item.new_revision,
                    context_lines=context_lines)
            else:
                diff_chunks = None
        else:
            diff_chunks = None
            for i, item in enumerate(file_changes.text_changes):
                item.index = i
                link_data['diff-' + str(i)] = '%s/%s/%s' % (
                    dq(item.new_revision), dq(item.old_revision), dq(item.file_id))
                path_to_id[item.filename] = 'diff-' + str(i)

        # Directory Breadcrumbs
        directory_breadcrumbs = (
            util.directory_breadcrumbs(
                self._branch.friendly_name,
                self._branch.is_root,
                'changes'))
        can_export = self._branch.export_tarballs

        values.update({
            'history': self._history,
            'link_data': simplejson.dumps(link_data),
            'json_specific_path': simplejson.dumps(path),
            'path_to_id': simplejson.dumps(path_to_id),
            'directory_breadcrumbs': directory_breadcrumbs,
            'navigation': navigation,
            'remember': remember,
            'compare_revid': self.compare_revid,
            'filter_file_id': filter_file_id,
            'diff_chunks': diff_chunks,
            'query': query,
            'can_export': can_export,
            'specific_path': path,
            'start_revid': start_revid,
        })
Ejemplo n.º 5
0
    def get_values(self, path, kwargs, headers):
        history = self._history
        revid = self.get_revid()
        filter_file_id = kwargs.get('filter_file_id', None)
        query = kwargs.get('q', None)
        start_revid = history.fix_revid(kwargs.get('start_revid', None))
        orig_start_revid = start_revid
        pagesize = 20  #int(config.get('pagesize', '20'))
        search_failed = False

        if filter_file_id is None and path is not None:
            filter_file_id = history.get_file_id(revid, path)

        try:
            revid, start_revid, revid_list = history.get_view(
                revid,
                start_revid,
                filter_file_id,
                query,
                extra_rev_count=pagesize + 1)
            util.set_context(kwargs)

            if (query is not None) and (len(revid_list) == 0):
                search_failed = True

            if len(revid_list) == 0:
                scan_list = revid_list
            else:
                if revid in revid_list:  # XXX is this always true?
                    i = revid_list.index(revid)
                else:
                    i = None
                scan_list = revid_list[i:]
            change_list = scan_list[:pagesize]
            changes = list(history.get_changes(change_list))
            data = {}
            for i, c in enumerate(changes):
                c.index = i
                data[str(i)] = urllib.quote(urllib.quote(c.revid, safe=''))
        except:
            self.log.exception('Exception fetching changes')
            raise HTTPServerError('Could not fetch changes')

        navigation = util.Container(pagesize=pagesize,
                                    revid=revid,
                                    start_revid=start_revid,
                                    revid_list=revid_list,
                                    filter_file_id=filter_file_id,
                                    scan_url='/changes',
                                    branch=self._branch,
                                    feed=True,
                                    history=history)
        if query is not None:
            navigation.query = query
        util.fill_in_navigation(navigation)

        # Directory Breadcrumbs
        directory_breadcrumbs = (util.directory_breadcrumbs(
            self._branch.friendly_name, self._branch.is_root, 'changes'))

        show_tag_col = False
        for change in changes:
            if change.tags is not None:
                show_tag_col = True
                break

        return {
            'branch':
            self._branch,
            'changes':
            changes,
            'show_tag_col':
            show_tag_col,
            'data':
            simplejson.dumps(data),
            'util':
            util,
            'history':
            history,
            'revid':
            revid,
            'navigation':
            navigation,
            'filter_file_id':
            filter_file_id,
            'start_revid':
            start_revid,
            'viewing_from': (orig_start_revid is not None)
            and (orig_start_revid != history.last_revid),
            'query':
            query,
            'search_failed':
            search_failed,
            'url':
            self._branch.context_url,
            'directory_breadcrumbs':
            directory_breadcrumbs,
        }
Ejemplo n.º 6
0
    def get_values(self, path, kwargs, headers):
        history = self._history
        branch = history._branch
        revid = self.get_revid()
        revid = history.fix_revid(revid)
        file_id = kwargs.get('file_id', None)
        if (file_id is None) and (path is None):
            raise HTTPBadRequest('No file_id or filename ' 'provided to view')

        try:
            if file_id is None:
                file_id = history.get_file_id(revid, path)
            if path is None:
                path = history.get_path(revid, file_id)
        except (NoSuchId, NoSuchRevision):
            raise HTTPNotFound()

        filename = os.path.basename(path)

        change = history.get_changes([revid])[0]
        # If we're looking at the tip, use head: in the URL instead
        if revid == branch.last_revision():
            revno_url = 'head:'
        else:
            revno_url = history.get_revno(revid)

        # Directory Breadcrumbs
        directory_breadcrumbs = (util.directory_breadcrumbs(
            self._branch.friendly_name, self._branch.is_root, 'files'))

        tree = history.revision_tree(revid)

        # Create breadcrumb trail for the path within the branch
        branch_breadcrumbs = util.branch_breadcrumbs(path, tree, 'files')

        if not tree.has_id(file_id):
            raise HTTPNotFound()

        if tree.kind(path, file_id) == "directory":
            raise HTTPMovedPermanently(
                self._branch.context_url(['/files', revno_url, path]))

        # no navbar for revisions
        navigation = util.Container()

        return {
            # In AnnotateUI, "annotated" is a dictionary mapping lines to changes.
            # We exploit the fact that bool({}) is False when checking whether
            # we're in "annotated" mode.
            'annotated': {},
            'revno_url': revno_url,
            'file_id': file_id,
            'file_path': path,
            'filename': filename,
            'navigation': navigation,
            'change': change,
            'contents': self.file_contents(file_id, revid),
            'fileview_active': True,
            'directory_breadcrumbs': directory_breadcrumbs,
            'branch_breadcrumbs': branch_breadcrumbs,
        }