Beispiel #1
0
def edit(project, branch, filename):
    if current_user != branch.owner:
        return redirect(
            url_for('.clone', project=project.name, branch=branch.name))
    html_scroll = 0
    edit_scroll = 0
    # will be deprecated
    merge_pendencies = get_merge_pendencies(project.name, branch.name)
    if merge_pendencies:
        return pendencies
    ####################
    file_source_path = join(branch.get_source_path(), filename + '.rst')
    file_html_path = join(branch.get_html_path(), filename + '.html')
    if request.method == 'POST':
        html_scroll = request.form['html_scroll']
        edit_scroll = request.form['edit_scroll']
        write_file(file_source_path, request.form['code'])
        branch.get_repo().index.add([filename + '.rst'])
        flash(_('File saved successfully'), 'info')
        branch.build()
    rst = load_file(file_source_path)
    doc = load_file(file_html_path)
    return render_template('edit.html',
                           doc=doc,
                           rst=rst,
                           filename=filename,
                           html_scroll=html_scroll,
                           edit_scroll=edit_scroll)
Beispiel #2
0
 def get_labels(self):
     master_path = join('repos', self.name, 'master', 'source')
     label_list = []
     for f in os.listdir(master_path):
         if (isfile(join(master_path, f)) and f[0] != '.'):
             data = load_file(join(master_path, f))
             label_list.extend(
                 re.findall(r'^\.\. _([0-9a-z\-]+):\s$', data,
                            re.MULTILINE))
     return json.dumps(label_list)
Beispiel #3
0
def view(project, branch, filename):
    filename, file_extension = os.path.splitext(filename)
    if file_extension == '':
        file_extension = '.html'
    g.menu['right'].insert(
        0, {
            'name':
            _('Edit'),
            'url':
            url_for('branches.edit',
                    project=project.name,
                    branch=branch.name,
                    filename=filename)
        })
    g.menu['left'].append({
        'name':
        _('Source'),
        'url':
        url_for('branches.source',
                project=project.name,
                branch=branch.name,
                filename=filename + '.rst')
    })
    # will be deprecated
    if (current_user.is_authenticated
            and (current_user == branch.owner
                 or current_user == project.get_master().owner)):
        merge_pendencies = get_merge_pendencies(project.name, branch.name)
        if merge_pendencies:
            return merge_pendencies
    ####################
    try:
        content = load_file(
            join('repos', project.name, branch.name, 'build/html',
                 filename + file_extension))
    except:
        raise Custom404(_('Could not find file {}').format(filename))
    threads = (Thread.query.join(File_Tag).filter(
        File_Tag.filename == filename).filter(
            Thread.project_id == project.id).order_by(desc(
                Thread.posted_at)).all())
    threads_by_tag = project.get_threads_by_tag(filename)
    named_tags = ','.join([
        t.name if re.search(t.file_regexp, filename) else ''
        for t in (Named_Tag.query.filter(
            Named_Tag.project_id == project.id).all())
    ])
    return render_template('view.html',
                           content=content,
                           threads=threads,
                           filename=filename,
                           threads_by_tag=threads_by_tag,
                           named_tags=named_tags)
Beispiel #4
0
 def get_label_file_dict(self):
     master_path = join('repos', self.name, 'master', 'source')
     label_dict = {}
     for f in os.listdir(master_path):
         if (isfile(join(master_path, f)) and f[0] != '.'):
             stem, file_extension = os.path.splitext(f)
             data = load_file(join(master_path, f))
             more_data = {
                 x: stem
                 for x in re.findall(r'^\.\. _([0-9a-z\-]+):\s$', data,
                                     re.MULTILINE)
             }
             label_dict.update(more_data)
     return label_dict
Beispiel #5
0
def review(project, branch, filename):
    merging = get_merging(project.name, branch.name)
    if not merging:
        flash(_('You are not merging'), 'error')
        return redirect(
            url_for('branches.view',
                    project=project.name,
                    branch=branch.name,
                    filename='index.html'))
    update_branch(project, branch)
    filename, file_extension = os.path.splitext(filename)
    branch_source_path = join(branch.get_source_path(), filename + '.rst')
    branch_html_path = join(branch.get_html_path(), filename + '.html')
    if request.method == 'POST':
        write_file(branch_source_path, request.form['code'])
        repo = branch.get_repo()
        repo.index.add([filename + '.rst'])
        return redirect(
            url_for('branches.accept',
                    project=project.name,
                    branch=branch.name,
                    filename=filename + file_extension))
    new = load_file(branch_source_path)
    git_api = branch.get_git()
    if (git_api.ls_tree('-r', '--name-only', branch.name,
                        filename + file_extension) != ''):
        old = git_api.show(branch.name + ':' + filename + file_extension)
    else:
        old = ''
    g.menu = {
        'right': [{
            'name':
            branch.name,
            'url':
            url_for('branches.edit',
                    project=project.name,
                    branch=branch.name,
                    filename=filename)
        }]
    }
    return render_template('review.html',
                           new=new,
                           old=old,
                           filename=filename + file_extension,
                           other=merging['branch'])
Beispiel #6
0
 def get_threads_by_tag(self, filename):
     try:
         data = load_file(
             join('repos', self.name, 'master', 'source',
                  filename + '.rst'))
     except:
         return []
     label_list = re.findall(r'^\.\. _([0-9a-z\-]+):\s$', data,
                             re.MULTILINE)
     File_Tag = application.threads.File_Tag
     Thread = application.threads.Thread
     threads_by_tag = (db.session.query(
         File_Tag.filename,
         Thread.title).filter(File_Tag.thread_id == Thread.id).filter(
             File_Tag.filename.in_(label_list)).all())
     return [{
         'name': l,
         'titles': [x[1] for x in threads_by_tag if x[0] == l]
     } for l in label_list]
Beispiel #7
0
def get_merging(project, branch):
    merge_file_path = join('repos', project, branch, 'merging.json')
    if isfile(merge_file_path):
        return json.loads(load_file(merge_file_path))