def edit(filename): """ Possible actions: [post rename, edit markdown] """ if request.method == 'GET': location = get_location(filename) if location: with open(os.path.join(blog_dir, location, filename), 'r', 'utf-8') as f: markdown = f.read() if location == 'publish': action = 'Save and Publish' else: action = 'Save' edit_commits = hg_edit_commits(filename) try: past = edit_commits[1]['node'] except IndexError: past = None return render_template('edit_post.html', filename=filename, markdown=markdown, action=action, past=past) else: flash(MSG_POST_NOT_FOUND.format(filename[:-3])) return redirect(url_for('posts')) elif request.method == 'POST': new_filename = request.form['filename'] if not new_filename.endswith('.md'): new_filename += '.md' markdown = request.form['markdown'] action = request.form['action'] valid_filename = is_valid_filename(filename) if not valid_filename: flash(MSG_POST_FILENAME_INVALID) elif not is_valid_post(markdown, valid_filename['published']): flash(MSG_POST_CONTENT_INVALID) else: location = get_location(filename) if not (new_filename == filename) and get_location(new_filename): flash(MSG_POST_EXISTS) else: with open(os.path.join(blog_dir, location, filename), 'w', 'utf-8') as f: f.write(markdown) if new_filename == filename: hg_commit(os.path.join(blog_dir, location, filename), 'edited post {}'.format(filename)) else: hg_rename( os.path.join(blog_dir, location, filename), os.path.join(blog_dir, location, new_filename) ) flash(MSG_POST_SAVED.format(new_filename[:-3])) if 'Publish' in action: bake_blog() return redirect(url_for('posts')) return render_template('edit_post.html', filename=filename, markdown=markdown, action=action)
def edit_revision(filename, revision): location = get_location(filename) if location == 'publish': action = 'Save and Publish' else: action = 'Save' # We will only show 'edit' commits done to the user edit_commits = hg_edit_commits(filename) for i, commit in enumerate(edit_commits): if commit['node'] == revision: try: past = edit_commits[i+1]['node'] except IndexError: past = None try: future = edit_commits[i-1]['node'] except IndexError: future = None if i == 0: future = None # Track the location of the post file moved = None for i, commit in enumerate(hg_commits(filename)): if commit['move']: moved = commit['move'].split()[1][1:-1] if commit['node'] == revision: if commit['move']: moved = commit['move'].split()[0] break # hg_revision takes paths relative to the repo root # thanks to ronny@#mercurial if moved: relpath = moved else: relpath = os.path.join(get_location(filename), filename) markdown = hg_revision(relpath, revision).decode('utf-8') return render_template('edit_post.html', filename=filename, markdown=markdown, action=action, past=past, future=future)