Redmine 0.9 RC Released
On January 9th, Jean-Philippe released the first release candidate for Redmine 0.9. This is a preview release intended to catch any final bugs before the official stable release. If you have been waiting to use the new features of Redmine 0.9, now would be the best time to upgrade your testing and staging systems.
If you find a new bug, please report it to the issue tracker. We're hoping to have the next release in a couple of weeks, either another release candidate or the stable 0.9 release.
0.9 Feature Freeze
In case you haven't heard yet, Redmine 0.9 is getting ready to be released. We've just put it into a feature freeze to get ready for the first Release Candidate. If you would like to help test the new release, upgrade to the 0.9-stable branch and let us know about any bugs that you find. If we can get enough help to test this Release Candidates, we should be able to have a final release in January 2010.
Jean-Philippe has also posted a short overview of the major changes coming in 0.9. The version page for 0.9 lists all of the new features and bug fixes (242 at the moment).
Question for the Redmine Community: Bug fix releases or release new plugins?
I wanted to make a short post to ask for some feedback on a question I just posted my development blog. I asked which people would prefer: "Bug fix releases to my existing plugins or the release of new plugins that are complete?"
If you have a minute, I'd love to hear what you think. You can leave a comment here or on my original blog post.
Thank you.
Community Update #5
There's been a bunch of activity in the Redmine community lately. This post will highlight some of the major changes from September and October.
Code changes
Groups
Jean-Philippe Lang added group support to the Redmine trunk. This makes it easy to assign a set of people to each project. Each group can be given an existing Role in Redmine so you can control their permissions using the existing settings. Added in r2869 for Issue #1018.
Attachments are added to an issue even during a failed save
A bug was fixed when a user would:
- Try to post an update to an issue with a file attachment.
- The update failed because someone else updated the issue first.
- Attachments would still be added to the issue, without a journal entry.
r2875 changed this so the attachments would be deleted if the update failed (step #3). I don't agree with the behavior, I'd rather have Redmine store the attachments and then try to reattach them after the user resubmits. Added for Issue #3846.
Include spent time in the Activity
When time is logged to a project, it can now be included as part of the Activity stream. This also works on the cross-project Activity stream (e.g. http://example.com/activity). Added in r2877 for Issue #3809.
Customize the Issue filters on custom queries
Issue #2883 added the ability to edit the filters on a custom query. So if you use custom queries for reporting, you can now add or remove filters to modify the data that's displayed without having to edit the custom query itself.
Remove Watchers
Jean-Philippe Lang added the ability to remove issue watchers in r2977. I've been missing this feature for some time, since I use watchers to make sure specific people are notified of changes to issues.
Hide user profiles if they have no visible activity
User profiles (at /account/show/user-id) are now hidden unless the user has any public activity. This will be useful to hide user accounts who should not be listed in the public. Added in r2986 for Issue #3720.
Community Events
Backlogs plugin
Mark Maglana released the Backlogs plugin, a plugin that will help a team visualize the work in progress and work remaining. The announcement contains a url to a demonstration of the plugin.
Workload plugin
Christopher Mann created a Workload plugin for Redmine. It looks interesting and might compliment the Schedules plugin. The plugin can be downloaded from the forum thread or from Github.
Amazon S3 storage plugin
Christopher Dell has created a plugin that will let Redmine save file uploads to Amazon's S3 service. I'm extremely interested in this, since S3 storage is very cheap and makes hosting Redmine in the cloud a lot easier. I'm planning on trying out the plugin and posting a review of it here.
Bugzilla migration script
Ralph Juhnke has posted a new migration script to convert a Bugzilla install to Redmine. His script has been posted to Github and should work with both Redmine 0.8.x and trunk.
Redmine Repository Controls plugin
Brian created the Redmine Repository Controls plugin. This plugin allows more fine grained repository access control and permissions, based on Subversion's SVNAuthz file. It currently only supports Subversion but he's left the ability to support any SCM that uses WebDav. More information can be found on it's Google Code page.
Redmine Risk plugins
Daniel Neis Araujo and Nicolas Bertet both created two different risk management plugins for Redmine. The plugins are both trying to make it easy for Redmine users to define and evaluate the different risks that are involved in a project. As I haven't looked at either one yet, if you are using one please let me know what you think in the comments.
Community Update #4
I have a lot of updates from Redmine for the Community Updates so I'm going to split them into a few posts. This update will cover events from July 13th through September 1st.
Code changes
Git Branch support
Adam Soltys created a patch to add branch support for the git SCM repository. This patch will let you browse through all of the branches in a git repository including the revisions and diffs. It's gone through a few bug fixes but I've had some great experience using it in production on my Redmine so far. This was committed in r2840 for Issue #1406.
If you would to try this out, my Stuff To Do project is public.
Exporting a custom issue query to PDF will use the custom columns
In r2841 Jean-Philippe Lang fixed a bug that prevented custom columns from working with the issue list PDF export.
Journal entry in Issue not displaying correctly
I added a small tweak to the Journal entries (Issue notes) so any lists are aligned properly when Gravatars are enabled or disabled. Committed in r2848 for Issue #3771.
Community Events
Wiki Extensions plugin
Haru Iida has made several updates to his Wiki Extensions plugin. It's under rapid development so if you're interested in it I'd recommend watching the forum thread about it.
Code Review plugin
Haru Iida also released a few new versions of the Code Review Plugin with a bunch of bug fixes and compatibility updates. You can find the release notes in these forum topics: Code Review Plugin 0.2.0 Released. and Code Review Plugin 0.2.7 Released..
NewIssueAlerts plugin
chantra created a new plugin called NewIssueAlerts. When it's installed, it will let you setup a Redmine project to add an email address into the new issue email notification. This would be useful to notify specific people whenever an issue is created. You can read about the plugin on the forum thread and download the plugin from Github
Global Filter Plugin
Kumudha Rangachari posted the Global Filter plugin which will display a list of your global filters on the Redmine homepage. This would be very useful if you use saved Queries a lot and need to navigate to them quickly. The wiki page has some documentation as well as the Readme file on the Github project.
It also includes a related change which I think is interesting. On the issue list there will be a new set of filters which can be used to further the issue list to show only specific projects. This is visible on the wiki page in the screenshot at the very bottom. Personally, I think this feature would be good to be included in the Redmine core.
Default Assigned User
Robert Chady created a plugin that adds the ability to automatically assign an issue to a default user when it's created. I'm thinking of using this on my smaller projects, where one person is responsible for the majority of the work. You can get the plugin from Github and read about it in Issue #482.
I'm thinking about writing these posts at the end of every month. Let me know if you like that idea in the comments below.
Redmine 0.8.7 Released
Redmine 0.8.7 was just released yesterday, November 15th. This is a point release which fixes a major security vulnerability. If you're running a public Redmine server, it's highly recommended that you upgrade as soon as possible.
CSRF Security Vulnerability
The Redmine security team was contacted by p0deje about a potential CSRF vulnerability with some example code to exploit it. After reviewing it, we created a fix and rushed out 0.8.7 to address the vulnerability.
Hide the paragraph terminator on HTML exports
On the wiki pages there is a paragraph terminator (ΒΆ) after each heading to make it easy to link to a specific section of the page. As of r3026, this will now be hidden on the HTML export of the page until the heading is hovered over. Issue #4194.
Start date not included in the spent time report with SQLite
0.8.7 includes a fix for the Spent Time report with SQLite. It appears that the starting date was using the time of "00:00:00" with the dates which caused SQLite to exclude today in the range. This should be fixed in r3009, Issue #3112
Preformatted tags with <pre
would be incorrectly formatted
You can now enter tags starting with pre
into a <pre>
block. There was a bug where Redmine would think that the content should have another <pre>
tag added instead of just rendering the tag as it was entered. For example if you enter some xml inside a pre sections like:
<pre>
<xml>
<prepared-statement>Some xml</prepared-statement>
</xml>
</pre>
Redmine was seeing the inner pre
in prepared-statement
and thought it was another preformatted block. This is now fixed in r3030, Issue #4125
Password field on the login page was styled differently
On the login page for Redmine, the password field was styled differently on the alternative theme than any other text fields. r3032 adds some styling rules so the fields will match. Issue #3845.
To see more details about all of the changes in 0.8.7, check out the Changelog posted to Redmine.org.
Eric Davis
Embedding Github's Gist into Redmine
Redmine 0.8.6 Released
Redmine 0.8.6 was just released yesterday, November 4th. This is another point release which fixes a few bugs and potential vulnerabilities. If you're running an older version of Redmine, it's recommended that you upgrade as soon as possible.
Command line subversion tweaks
I previously reported this fixed in 0.8.5 but it wasn't included in that release.
The Subversion adapter received a few tweaks in this release. Now when Redmine is fetching data from the Subversion server, it will run non-interactively and will not cache authentication. This will prevent problems where svn
hangs while waiting for a response from the user. Issue #3424.
Links to closed issues are distinct from open issue
I previously reported this fixed in 0.8.5 but it wasn't included in that release.
Now when a closed issue is linked to, Redmine will strike-through the text and also color it in a lighter gray. This makes reading a long list of issues a lot easier. Issue #3495.
Hide user pages without activity
Each user has their own page at /account/show that will list their name, avatar, and any activity they've done in Redmine. With this release, only users who have any activity will be displayed. Issue #3720.
Allow images on headers
With this version, a wiki formatted header can have an image embedded in like h2. !/attachments/download/2690!
. Issue #4112.
Editing an issue reply would escape special characters
If you edited a note on an issue, Redmine would convert special characters like <
or >
into the escaped versions. This would cause the note to lose any special formatting when it's saved, because it was double escaped. This should now be fixed. Issue #3996.
Error when displaying a repository when a changeset has no comments
It's considered bad form to commit code without a comment but some system allow it. If one of these commits was displayed by Redmine, it would throw an error page up. Issue #4126.
Errors when a custom value was set to nil
This fixed an error on the project and users pages when a custom field had a nil (null) value. Issue #3705.
New plugin hooks
0.8.6 also includes some more plugin hooks for developers:
:controller_issues_edit_after_save
:controller_issues_new_after_save
To see more details about all of the changes in 0.8.6, check out the Changelog posted to Redmine.org.
Asynchronous Email Delivery
I wanted to share a simple performance tweak for Redmine's email notifications that you might not know about
Overview
Redmine sends email notifications when an event happens, like an issue update. This happens entirely within the HTTP request/response cycle; so if your email server is slow, Redmine will also be slow because it's waiting on the server to respond. The basic steps Redmine takes during an issue update is:
- User updates issue #100 with a new comment
- Redmine saves the comment to the database
- Redmine connects to the email server to deliver the email notifications
- The email server receives the connection and sends the email
- Redmine redirects the User to the updated issue #100
So if the emailing steps (#3 and #4) take a long time, the user would have to wait for the email server to send the email before the user saw the new page. If we can bypass the email steps, the user would be able to do keep working while the email is processed.
The standard Rails way for bypassing the email server is to use a message queue and run a background process to send emails. There is a specialized Rails plugin that can do this for email, called ar_mailer. But Redmine comes with another option that is trivial to setup and gives good enough performance. This option is the :async_smtp
and :async_sendmail
delivery_methods, added in issue #613. To configure them, all you have to do is to change one option in your config/email.yml
and restart Redmine.
SMTP configuration example
production:
# Was "delivery_method: :smtp"
delivery_method: :async_smtp
smtp_settings:
tls: true
address: "secure.emailsrvr.com"
port: 587
domain: "littlestreamsoftware.com"
authentication: :plain
user_name: 'projects@littlestreamsoftware.com'
password: 'plugins'
Sendmail configuration example
production:
# Was "delivery_method: :sendmail"
delivery_method: :async_sendmail
How it works
The code for this is so trivial, I'm going to include it entirely in this post:
### From config/initializers/10-patches.rb
# Adds :async_smtp and :async_sendmail delivery methods
# to perform email deliveries asynchronously
module AsynchronousMailer
%w(smtp sendmail).each do |type|
define_method("perform_delivery_async_#{type}") do |mail|
Thread.start do
send "perform_delivery_#{type}", mail
end
end
end
end
ActionMailer::Base.send :include, AsynchronousMailer
The guts of this code is in the Thread.start
method call. That will start a new Ruby thread to connect to the email server and perform the actual email delivery. The original thread can continue on it's merry way and return the HTML response back to the user. So the flow above would let steps 3 and 4 happen in parallel to step 5. This might not be a large performance improvement, due to how Ruby threads work, but it's an easy thing to setup and could shave seconds off of your response time.
If your looking for an easy performance tweak, or you've noticed that your email server is responding slowly this would be worth the 10 minutes to test out.
Technical note: This is a grossly simplified version of Ruby thread performance. There are a lot of factors that will determine how much faster (if at all) this will make Redmine, including if either thread becomes blocked while waiting on IO (e.g. network IO to the web server, network IO to the email server). At the very worst case, the performance will be almost as good as sending mail synchronously.
Rails 2.3.4 Support
Recently Redmine was upgraded to run on the latest version of Ruby on Rails, 2.3.4. Redmine has been running on older versions of Ruby on Rails, 2.2.2 in trunk and 2.1.2 in 0.8.x. This upgrade will also allow us to take advantage of new Ruby on Rails APIs and third party code. I was able to fix the major bugs during the upgrade but like any other major change, there will be a few small bugs that appear over the next few weeks.
If you are able to run Redmine in a test environment, please upgrade to the latest trunk and let us know about any bugs or odd behavior you find. If you can troubleshoot the bug and are able to provide a patch, that would be awesome.
With this upgrade complete, I'm going to focus my energy into building the REST API for Redmine. I'm hoping to build out the authentication part first so plugin developers will be able to add their own APIs. If you have an idea of what you'd like to use a Redmine API for, please comment on the API ideas forum thread I've posted.