- repositories can be cloned
- clone url can be displayed
- remote pastes can be forked (rel="vcs-git" and gist.github.com)
+ - single click forking of forks on different servers to your own
- paste editing
- add new files
- delete existing files
- replace file with upload
+- embedding of pastes in your blog (via JavaScript or oEmbed)
- multiple files in one paste
+ - option to edit single files in a multi-file paste
- syntax highlighting with GeSHi
- rST and Markdown rendering
- image upload + display
- options: quoting, logical and, or, not, partial words
- webhook support - get notified when pastes are created, edited or deleted
+- atom feed for new and updated pastes
+- notifies remote instances via linkbacks when a paste has been forked
============
Installation
============
+
+.phar
+=====
+Download ``phorkie-0.5.0.phar`` and put it in your web server's document root
+directory.
+
+No further setup needed.
+
+.. note:: Only valid if your webserver is configured to let
+ PHP handle ``.phar`` files.
+
+ Unfortunately, no Linux distribution has this activated by default.
+
+.. warning:: PHP has some bugs in its .phar handling code (e.g. with FPM).
+
+ So currently, the ``.phar`` option is considered experimental.
+
+
+Zip package
+===========
1. Unzip the phorkie release file::
- $ tar xjvf phorkie-0.3.0.tar.bz2
+ $ tar xjvf phorkie-0.5.0.tar.bz2
2. Create the git directories::
- $ mkdir -p repos/git repos/work
- $ chmod og+w repos/git repos/work
+ $ mkdir -p www/repos/git www/repos/work
+ $ chmod og+w www/repos/git www/repos/work
3. Install dependencies_
$ pear channel-discover pear.twig-project.org
$ pear install twig/Twig
- $ pear channel-discover mediawiki.googlecode.com/svn
- $ pear install mediawiki/geshi
+ $ pear channel-discover pear.geshi.org
+ $ pear install geshi/geshi
$ pear channel-discover zustellzentrum.cweiske.de
$ pear install zz/mime_type_plaindetect-alpha
$ pear channel-discover pear2.php.net
$ pear install pear2/pear2_services_linkback-alpha
-Note that this version of GeSHi is a bit outdated, but it's the fastest
-way to install it.
-If you install it manually be sure to update the
-path from ``data/config.default.php``.
+
+You can use composer to install all dependencies automatically::
+
+ $ composer install
+
+Note that the ``.phar`` package already contains all dependencies.
======
It is used to provide search capabilities and the list of recent pastes.
+Elasticsearch version 1.3 is supported.
+
__ http://www.elasticsearch.org/
Make git repositories clonable
==============================
-To make git repositories clonable, you need to install ``git-daemon``
-(``git-daemon-run`` package on Debian/Ubuntu).
+
+HTTP
+----
+By default, the pastes are clonable via ``http`` as long as the ``repos/git/``
+directory is within the ``www/`` directory.
+
+No further setup needed.
+
+
+git-daemon
+----------
+You may use ``git-daemon`` to provide public ``git://`` clone urls.
+Install the ``git-daemon-run`` package on Debian/Ubuntu.
Make the repositories available by symlinking the paste repository
directory (``$GLOBALS['phorkie']['cfg']['repos']`` setting) into
Technical details
=================
-TODO
-====
-- filters (``xmllint --format``, ``rapper``)
-- document how to keep disk usage low (block size)
-- comments
-- when 2 people edit, merge changes
-- diff changes
-- configurable highlights
-- Atom feed for new pastes
-- Atom feed for paste changes
-
URLs
====
Index page.
``/[0-9]+``
Display page for paste
-``/[0-9]/edit``
+``/[0-9]+/edit``
Edit the paste
+``/[0-9]+/edit/(.+)``
+ Edit a single file of the paste
+``/[0-9]+/embed``
+ JavaScript code that embeds the whole paste in a HTML page
+``/[0-9]+/embed/(.+)``
+ JavaScript code that embeds a single file in a HTML page
``/[0-9]+/raw/(.+)``
Display raw file contents
-``/[0-9]/tool/[a-zA-Z]+/(.+)``
+``/[0-9]+/tool/[a-zA-Z]+/(.+)``
Run a tool on the given file
-``/[0-9]/rev/[a-z0-9]+``
+``/[0-9]+/rev/[a-z0-9]+``
Show specific revision of the paste
-``/[0-9]/delete``
+``/[0-9]+/delete``
Delete the paste
-``/[0-9]/doap``
+``/[0-9]+/doap``
Show DOAP document for paste
-``/[0-9]/fork``
+``/[0-9]+/fork``
Create a fork of the paste
``/search?q=..(&page=[0-9]+)?``
Search for term, with optional page
-``/list(/[0-9])?``
+``/list(/[0-9]+)?``
List all pastes, with optional page
+``/fork-remote``
+ Fork a remote URL
+``/help``
+ Show help page
``/new``
Shows form for new paste
``/login``
rewrite ^/([0-9]+)/delete/confirm$ /delete.php?id=$1&confirm=1;
rewrite ^/([0-9]+)/doap$ /doap.php?id=$1;
rewrite ^/([0-9]+)/edit$ /edit.php?id=$1;
+ rewrite ^/([0-9]+)/edit/(.+)$ edit.php?id=$1&file=$2
+ rewrite ^/([0-9]+)/embed$ /embed.php?id=$1;
+ rewrite ^/([0-9]+)/embed/(.+)$ embed.php?id=$1&file=$2
rewrite ^/([0-9]+)/fork$ /fork.php?id=$1;
rewrite ^/([0-9]+)/raw/(.+)$ /raw.php?id=$1&file=$2;
rewrite ^/([0-9]+)/rev/(.+)$ /revision.php?id=$1&rev=$2;
rewrite ^/([0-9]+)/rev-raw/(.+)$ /raw.php?id=$1&rev=$2&file=$3;
rewrite ^/([0-9]+)/tool/([^/]+)/(.+)$ /tool.php?id=$1&tool=$2&file=$3;
+ rewrite ^/fork-remote$ /fork-remote.php;
+ rewrite ^/help$ /help.php;
rewrite ^/new$ /new.php;
+
rewrite ^/feed/new$ /feed-new.php;
rewrite ^/feed/updated$ /feed-updated.php;
+
rewrite ^/list$ /list.php;
rewrite ^/list/([0-9]+)$ /list.php?page=$1;