- create an interface that describes the basic methods
- let the real stdio class implement this interface
- inject the stdio instance into IDF_Scm_Monotone and do not
create it in the constructor
- ensure in IDF_Scm_Monotone_ZipRender that we get the proper
constructor arguments
On a slighly unrelated note, make _getAuthOptions() in the stdio
implementation private.
Indefero's version is now noted in src/IDF/version.php;
just before a release is made, the '-dev' is removed and
after the release is made, the version should be increased and
'-dev' should be added back to denote that the development
for the next version started.
The revision identifier is automatically set when an archive
is created and is based on the revision that the archive creator
gave to git-archive(1). If people follow development, we try to
get the current deployed version with git-log(1) and if that
fails as well, the revision is determined to be 'unknown'.
Version and revision are then rendered as HTML meta tags in
the header of each template. (All this is done by the new
{appversion} tag.)
Added a template for getting a controlled log; in parseLog, changed the regular
expression to match the pattern used in the template (fixes issues 507 and 508).
The diff parser code was rewritten for clarity and speed and now handles
a couple of ugly cornercases, like SVN's property change output and single
change chunks, much better. Since the path parsing was unified as well,
the SCM interface gained a new method `getPathStripLevel()` which determines
how many path components need to be shoven off a file name for the SCM
to form a valid path in the workspace (similar to patch(1)'s --strip option).
Fixes issue 627. Automated tests follow.
This works similar to git branch --contains REV; additionally give the
revision id and not some possibly symbolic name to the inBranches()
call when we determine the branches a commit is in.
The additional filter token introduced 404's for bookmarked feeds;
now the old URLs are re-added and their actions forward the requests
to the new handlers.
Another small change removes a double assignment and puts the
"All Updates" link in the template on top to separate it clearly
from the other filters.
This commit closes issue 605.
- The previous translator mixed "Du" and "Sie", I stumbled upon
"Du" at first and decided to stick with that.
- The poedit extra headers have been removed; a proper plural
configuration has been added.
- Many strings have been misspelled and were thus fixed, though
there is still lots of work left.
elements inside headings) and also use a lower heading, h3 and not h1
for the subheadings.
Reduce the amount of code duplication with include's for each VCS.
private projects and we should also take care that the symlink that
enables it is dynamically created / removed when the private flag
changes for a project.
a revision from which we want to start our log from, but simply ignore
that and go over to the next revision. Note that this is also a bit
fragile and should probably be converted to plain mtn au log usage.
Add link previous and after to quickly jump to another issue.
Those links are pointing to issue with the same status (open/closed).
With little trick on url we can do the same thing for browse "my issue" and "my watchlist".
configuration tree as template for a new project and copy / symlink that on
project creation. To make this process a little more configurable, two new
configuration options, 'mtn_confdir' and 'mtn_confdir_extra', have been
added which allow the forge admin to adapt the directory structure and its
default hooks to his likings for all new projects. (More on that in
doc/syncmonotone.mdtext).
The 'mtn_remote_auth' configuration option was removed, because setting this
to false would have not worked for setups which did not allow write access
to remote automate commands for anonymous users and opening this would have
meant a huge security hole. Instead, for every project which is created a
corresponding client key is created as well which is used as authentication
in the IDF source frontend.
Finally the monolithic monotonerc file has been split up into individual,
easily configurable lua files which are linked / copied underknees hooks.d/
and which do not conflict with each other (for example by overwriting certain
main notification hooks).
* Scm.php: new SCM method "getChanges" which returns all available
change information grouped by type
* Monotone.php: implement getChanges via get_revision
* <other scms>: rename "changes" member for getCommit to "diff" which
matches better
* Source.php: query the commit's changes and set them in the template
* commit.html: render the changes, type-by-type. Link to the tree or
the individual diff if applicable
* styles.css: some initial style sheet work
Changes with respect to the original patch:
- use Gconf instead of separate table / data scheme
- better form validation for URLs and emails
- no htmlentity-encoded contents in the database (pluf automatically safe-encodes
stuff before it writes out contents into templates)
- add visual separators in the form views to have a distinct view of basic
(important) data and other data which are only displayed in the public profile
- give a hint about the maximum display size of 60x60 px^2 and use max-width and
max-height in the templates to avoid nasty distortions by the browser
- use target=_blank and rel=nofollow on the twitter and website links in the profile
- some whitespace / formatting / code style fixes
the branch certificates in question to the horizont, otherwise we end up going
up the whole history for some feature branch as soon as we hit the base branch
of a project.
IDF_FileUtil and change all occurrences accordingly
* cache /etc/mime.types (or whatever is configured) per request in a static
variable in IDF_FileUtil
* always link directly to the download of attached files in the issues view
and place an additional "view" link only for those attachments which we
recognize as text with our weak criteria (closes issue 575)
mercurial and monotone, but slightly harder till impossible to
do properly for git and svn. Please review and eventually adapt
the code to make it work better (partially fixes issue 450)
Instead of returning a command which gets executed and which should
pass through / stream its output data to the client, we're just
returning an instance of Pluf_HTTP_Response. This is needed, because
some SCMs, most noticable monotone, have no locally executable command
to provide a snapshot archive (and probably never will for our kind
of setup).
We therefor added a little BSD-licensed class "ZipArchive" which allows
the creation of pkzip-compatible archives on the fly by letting it eat
the file contents directly feed from the (remote) stdio instance.
Download performance is ok and lies between 15K/s and 110K/s, but at
least we do no longer block the browser while we pre-generate the zip
file server-side.
Thanks to Patrick Georgi for all his work!
this way additional hooks which need these notifications as well
do not override earlier hooks
* optionally include an additional hooks.lua file at the very end
in which custom hooks can be defined
* refactor out the common menu code from several base*.html classes into main-menu.html
and put the raw links into a unordered list (which makes it easier to create dynamic
menus as we cannot insert block items into inline items in strict mode)
* query the list of available projects on every request and set them for every template
in Middleware.php
* make the popup menu pretty
need of having to start the list with a space, here it was actually
needed code-wise. I rewrote the code so the space was not needed
and the documentation follows the actual behaviour.
has to start with a space - its even a little quirky since the code
expands that to a regex like "/\.(|ext1|ext2...)$/", so in theory files
which end up with a dot and without an extension would be allowed by this.
For now we just fix the comment and indentation of the default
configuration option.
- getTree(), getPathInfo(): use the new extended manifest format
and save the calls to query file sizes from contents as well
as the calls to determine the revision in which a file changed
at last
rest and write the rest in full_message - just like we do it for log and
everything else. This is ugly, really ugly, because it assumes something
on the format of a commit message, which might not be true at all for
some project, but this is something Loic has to decide (see also issue 491
and issue 535)
part of another branch whose certs haven't been pushed into the server
yet, so we need to skip these revisions while going back in time
for the changelog. The initial revision however must carry a branch
cert, otherwise we have nothing to "follow".
to the same signal also for the initial setup, since the memberships
haven't been added at the time the create signal is thrown
* my array references goo was slightly stupid (the usage of foreach
is of course hazardous in cases like this)
* always insert a trailing new line in write-permissions and skip
read-in newlines from being processed
indentifiers in IDF - the SCM function isValidRevision has been replaced
by a validateRevision() method which returns one of three states,
valid, invalid or ambiguous.
The source view can then act accordingly and display disambiguate view
for the latter, so the user can select for which revision he actually
wants to execute the requested action. Also, invalid revisions now lead
to another separate view, telling the user that it is invalid / does
not exist and pointing him optionally to the help page where he can read
further how to access his repository to push the first changes into.
(partially resolves issue 525)
won't return variable references properly, so revert that change
again
- since we're requiring 0.99 now, we also have to use au generate_key
instead of au genkey
when new revisions arrive. this still needs some more tests, but
its a start.
- refactor out the monotonerc template from SyncMonotone.php and
place it in a separate template file (access control hooks are
still missing from there)
we can skip the explicit configuration of its host and admin
password, as we can directly read that from the configuration file
itself
- expand the SyncMonotone plugin a bit to where this actually becomes
useful, i.e. create an accompanying key for each created database
and also add some initial database-specific configuration
- update the config docs in idf.php-dist to reflect the changes and
add more details about the inner workings of the SyncMonotone plugin
project creation and adds the new server to the running usher instance.
If everything goes well, the usher instance is told to reload its
configuration, so the new server / database is picked up and started
automatically.
* src/IDF/Key.php: new column "type" which is either "ssh" or "mtn";
utility functions to query the mtn key name and id as well as
all available key types for the current IDF installation
* src/IDF/Migrations/16KeyType.php: needed migration script
* src/IDF/Plugin/SyncGit/Cron.php: ensure only SSH keys are handled
* adapt forms and templates accordingly
"usherConfigured" to denote whether we render links to the usher
control functions in the forge administration
* src/IDF/Scm/Monotone.php: moved IDF_Scm_Monotone_Stdio into
separate file src/IDF/Scm/Monotone/Stdio.php
* src/IDF/Scm/Usher.php: new class to query and modify the state
of a running usher instance
* src/IDF/Views/Admin.php: add actions to query the list of
configured servers, edit their status, view their open connections
and control the state of the usher as a whole
* src/IDF/conf/idf.php-dist: optional usher configuration added;
mail address of monotone-users added; spelling changes
* src/IDF/conf/urls.php: added needed URLs for usher actions
* src/IDF/templates/idf/gadmin/base.html: usher links
return a list with selectors as keys, otherwise the main menu won't
link the active revision, but instead use the main branch
* changelog.html, tree.html: shorten the branch / tag output a bit
(still ugly to have a fixed output like this, though), link tags
by their selector, no longer by their revision ID. We loose some
flexibility here, since tags could actually mark different
revisions, which are now ignored
add two scenarios, one with a single, global database and one with
multiple project databases and usher as proxy; add an option for additional
command line options for the mtn process; remove the protocol type
configuration option - we're handling this implicit with the new
mtn_remote_url configuration
* Monotone.php: add the IDF user for ssh:// URIs; add support for remote_stdio
and rework the command line stitching
* IDF_Project: optionally give getSourceAccessUrl() a commit argument, so a particular VCS module can determine a subset of revisions to pull for the specific revision which is browsed
* IDF_Scm_*: add the argument null'd for all VCS; implement a branch lookup for monotone
* tree.html: display the correct branch to clone under each revision tree
* Monotone.php (IDF_Scm_Monotone_Stdio): add support for multiple, equally named options
* Source.php, commit.html: split-off the global commit template (which had some separate code already for SVN) and adapt the left blocks for mtn to shorten branch and tag names just like we do everywhere else
* _getCerts(): implement a cert cache and make multiple cert values easily available
* getCommit(), getCommitLarge(), getFile(), getPathInfo(), testHash(): implement
* getTags(): save the first found revision id for a tag as key in the associative array to make tags actually browsable