{"id":12664,"date":"2010-07-05T12:39:55","date_gmt":"2010-07-05T10:39:55","guid":{"rendered":"https:\/\/mamchenkov.net\/wordpress\/?p=12664"},"modified":"2010-07-05T12:40:58","modified_gmt":"2010-07-05T10:40:58","slug":"integrating-rt3-with-subversion","status":"publish","type":"post","link":"https:\/\/mamchenkov.net\/wordpress\/2010\/07\/05\/integrating-rt3-with-subversion\/","title":{"rendered":"Integrating RT3 with Subversion"},"content":{"rendered":"<!-- google_ad_section_start -->\n<p>As I have mentioned a few times before, I am a big fan of using <a href=\"http:\/\/bestpractical.com\/rt\/\">BestPractical RT3<\/a> for all sorts of things, including, but not limited to, bug tracking during project development. \u00a0I see a great benefit in having a single system for both technical support and development departments. \u00a0Bugs can be reported by customers, investigated by technical support department, passed on to developers, fixed and tested, and then passed back to technical support department to verify with the customer and resolve.<\/p>\n<p>Needless to say, integrating RT3 with Subversion can be of great benefit. \u00a0In this case, not only you will have full history of bug reports, but you&#8217;ll also see which code changes were made for each bug report. \u00a0Learning from previous\u00a0bug fixes\u00a0and having a quick way to see why something was changed is priceless.<\/p>\n<p>Read more to see how RT3 can be integrated with Subversion. \u00a0You can also easily adopt the same approach to other version control systems.<\/p>\n<p><!--more-->A quick Google search for integration of RT3 with Subversion will suggest using <a href=\"http:\/\/search.cpan.org\/dist\/RT-Integration-SVN\/\">RT::Integration::SVN<\/a> package and will also point to <a href=\"https:\/\/rt.cpan.org\/\">https:\/\/rt.cpan.org\/<\/a> for an example of such RT3 bug tracking setup. \u00a0While that approach is nice and handy, it&#8217;s not the one that I prefer. \u00a0I like simple and universal things. \u00a0So here is how I do it.<\/p>\n<p>First of all, you should have a working instance of RT3. \u00a0Secondly, you should have some Subversion repository. \u00a0Got those? \u00a0We can proceed.<\/p>\n<p><strong>Step 1. Create a separate queue for commit messages.<\/strong><\/p>\n<p>I prefer having a separate commits queue for each project. \u00a0This way I can better manage who gets notified about commits. \u00a0Here are the settings for the queue:<\/p>\n<ul>\n<li>Queue name: project.commits<\/li>\n<li>Subject tag: Project<\/li>\n<li>Reply address: project.commits@rt.domain<\/li>\n<li>Comment address: project.commits-comment@rt.domain<\/li>\n<\/ul>\n<p><strong>Step 2. Create a separate user group.<\/strong><\/p>\n<p>This is, of course, not a requirement. \u00a0You an utilize any of your existing user groups. \u00a0But I prefer to have a user group for each queue. \u00a0This way I have better control on who has access where. \u00a0When things get complicated with a lot of groups, I can always group the groups into more abstract groups. \u00a0Like group Developers consisting of groups project.bugs and project.commits.<\/p>\n<p>For this example, I create a user group called project.commits and assign a developers who work on this project to this group.<\/p>\n<p><strong>Step 3. Assign user group to the queue.<\/strong><\/p>\n<p>Now, obviously, I need to configure the queue to use the new user group. \u00a0Usually I create the user group first, and then the queue, but it would have been more difficult to explain. \u00a0So for now you&#8217;ll have to go to queue editing for the second time in two minutes. \u00a0Here is what I change in project.commits queue now:<\/p>\n<ul>\n<li>Watchers: add project.commits user group as AdminCC<\/li>\n<li>Group rights: add CommentOnTicket, CreateTicket, ForwardMessage, ModifyCustomField, ModifyTicket, OwnTicket, ReplyToTicket, SeeCustomField, SeeQueue, ShowOutgoingEmail, ShowTicket, ShowTicketComments, TakeTicket, Watch, WatchAsAdminCc rights to project.commits group<\/li>\n<\/ul>\n<p><strong>Step 4. Modify Subversion post-commit hook.<\/strong><\/p>\n<p>You probably already know that Subversion has a wonderful system of hooks, which are just scripts triggered in different stages of different operations. One of such hooks is a post-commit hook, which is triggered just after the commit goes into the repository. \u00a0Here is the source of my post-commit hook, which you should drop into the hooks folder of your Subversion repository installation and make executable. \u00a0See comments in the source for better understanding of what is what.<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n#!\/bin\/sh\r\n\r\n# Path to the repository\r\nREPOS=&quot;$1&quot;\r\n\r\n# The number of the revision which was just commited\r\nREV=&quot;$2&quot;\r\n\r\n# Path to svnlook executable which was installed as part of the Subversion\r\nSVNLOOK=\/usr\/bin\/svnlook\r\n\r\n# Default email for RT3 commit. You should have the user in project.commits with such email\r\nEMAIL=&quot;rt@rt.domain&quot;\r\n\r\n# Find out who was the author of this commit\r\nAUTHOR=`$SVNLOOK author &quot;$REPOS&quot; -r &quot;$REV&quot;`\r\n\r\n# In our case, Subversion usernames are different from usernames in RT3, so\r\n# we map Subversion users to emails of developers as they are registered in RT3\r\ncase &quot;$AUTHOR&quot; in\r\n\t&quot;developer1&quot;)\r\n\t\tEMAIL=&quot;developer1@company.domain&quot;\r\n\t\t;;\r\n\t&quot;subcontractor1&quot;)\r\n\t\tEMAIL=&quot;someone@some.domain&quot;\r\n\t\t;;\r\n\t&quot;consultant1&quot;)\r\n\t\tEMAIL=&quot;weirdguy@surname.domain&quot;\r\n\t\t;;\r\nesac\r\n\r\n# Default queue for commits. If we can't figure out for which project this commit is, we send the notification there\r\nRT_EMAIL=&quot;misc.commits@rt.domain&quot;\r\n\r\n# Choose the queue to send the commit message to based on the project.\r\n# In our scenario, we have the following structure of folders in  Subversion:\r\n# \/projects\/\r\n# \/projects\/one\/\r\n# \/projects\/one\/branches\/\r\n# \/projects\/one\/tags\/\r\n# \/projects\/one\/trunk\/\r\n# ...\r\n# \/projects\/more\/\r\n# \/projects\/more\/branches\/\r\n# \/projects\/more\/tags\/\r\n# \/projects\/more\/trunk\/\r\n#\r\n# If you structure is different, you'll have to play with this line a bit.\r\nPROJECTS=`$SVNLOOK changed $REPOS --revision $REV | awk '{print $2}' | grep '^projects' | sed -e 's#projects\/##' -e 's#\/.*##' | sort | uniq`\r\n\r\n# Since we examined the path of every committed file,\r\n# we can have a situation where one commit modifies more than one project.\r\n# This is bad, but theoretically might happen.  In such a case, we send commit\r\n# notification to the queue of the last file.  Feel free to change the behavior as\r\n# you see fit.\r\nfor PROJECT in `echo $PROJECTS`\r\ndo\r\n\tcase &quot;$PROJECT&quot; in\r\n\t\t&quot;project1&quot;)\r\n\t\t\tRT_EMAIL=&quot;project.commits@rt.domain&quot;\r\n\t\t\t;;\r\n\t\t&quot;project2&quot;)\r\n\t\t\tRT_EMAIL=&quot;other.commits@rt.domain&quot;\r\n\t\t\t;;\r\n\tesac\r\ndone\r\n\r\n# Send commit notification email.  There are many scripts online that do the same, but I prefer\r\n# this one.  You can install it via 'cpan install SVN::Notify'.\r\n# If you the structure of your Subversion repository is different from ours, you'll need to tweak some\r\n# of these parameters.\r\n\/usr\/bin\/svnnotify \\\r\n\t\t\t--repos &quot;$REPOS&quot; \\\r\n\t\t\t--revision &quot;$REV&quot; \\\r\n\t\t\t--to &quot;${RT_EMAIL}&quot; \\\r\n\t\t\t--from &quot;$EMAIL&quot; \\\r\n\t\t\t--set-sender \\\r\n\t\t\t--subject-prefix &quot;&#x5B;r%d] &quot; \\\r\n\t\t\t--subject-cx \\\r\n\t\t\t--strip-cx-regex '^projects\/' \\\r\n\t\t\t--strip-cx-regex '^people\/' \\\r\n\t\t\t--strip-cx-regex '\/trunk.*$' \\\r\n\t\t\t--strip-cx-regex '\/tags.*$' \\\r\n\t\t\t--strip-cx-regex '\/branches.*$' \\\r\n\t\t\t--ticket-map &quot;rt=https:\/\/rt.domain\/rt3\/Ticket\/Display.html?id=%s&quot; \\\r\n\t\t\t--with-diff\r\n<\/pre>\n<p>Try doing a commit to the project now.  If you&#8217;ve done everything OK, you should get a nice email with commit notification to the project.commits queue, from where RT will distribute it to all the members of the project.commits user group.<\/p>\n<p>That&#8217;s nice, but that&#8217;s not all. \u00a0We are still missing the important bit &#8211; linking of commits to tickets. \u00a0For that, we need to do one more step.<\/p>\n<p><strong>Step 5. Add AutoReference scrip to RT3.<\/strong><\/p>\n<p>I found this among many contributions in RT3 wiki. \u00a0You can set the script only for specific queue, but this one is so useful that I usually add it as a global scrip for all queues. \u00a0In short, AutoReference scrip looks for a string pattern like &#8220;ticket #123&#8221; in ticket updates (both comments and replies) and if finds, automatically links current ticket to ticket #123 (or whatever the number is). \u00a0 The pattern matching is case insensitive, so &#8220;ticket #123&#8221;, &#8220;Ticket #123&#8221;, and &#8220;tIcKeT #123&#8221; will all work. \u00a0Also, pattern matching is done in the whole text of the update, so you won&#8217;t have to waste a whole lunch just for ticket number. \u00a0This allows you to do things like &#8220;Fixed a bug from ticket #123 and cleaned up the SQL a bit&#8221;. \u00a0Also, the scrip will handle multiple pattern matches with no problem. \u00a0So you can do things lke &#8220;Fixed a bug from ticket #123 and cleaned up the SQL as per ticket #124&#8221;. \u00a0Both tickets will be linked to the current one.<\/p>\n<p>Here are the parameters for the scrip:<\/p>\n<ul>\n<li>Description: AutoReference<\/li>\n<li>Condition: OnTransaction<\/li>\n<li>Action: UserDefined<\/li>\n<li>Template: Global Template: Blank<\/li>\n<li>Stage: TransactionCreate<\/li>\n<\/ul>\n<p>And here are the code chunks that you will need:<\/p>\n<p>Custom condition:<\/p>\n<pre class=\"brush: perl; title: ; notranslate\" title=\"\">\r\nmy $txn = $self-&gt;TransactionObj;\r\nreturn undef if $txn-&gt;Type =~ \/^AddLink$\/i;\r\nreturn undef if $txn-&gt;Type =~ \/^DeleteLink$\/i;\r\nreturn 1;\r\n<\/pre>\n<p>Custom action preparation code:<\/p>\n<pre class=\"brush: perl; title: ; notranslate\" title=\"\">\r\nreturn 1;\r\n<\/pre>\n<p>Custom action cleanup code:<\/p>\n<pre class=\"brush: perl; title: ; notranslate\" title=\"\">\r\nmy $attachObj = $self-&gt;TransactionObj-&gt;Attachments-&gt;First;\r\nmy $content = ($attachObj &amp;&amp; $attachObj-&gt;Content) ? $attachObj-&gt;Content : '';\r\nmy @matches = $content =~ m\/ticket\\s+#(\\d+)\/gi;\r\n\r\nforeach my $ticket_id (@matches) {\r\n  chomp($ticket_id);\r\n  my $ticket = $self-&gt;TicketObj-&gt;new($RT::SystemUser);\r\n  $ticket-&gt;LoadById($self-&gt;TransactionObj-&gt;ObjectId);\r\n  my ($j,$k) = $ticket-&gt;AddLink('Target'=&gt;$ticket_id,'Type'=&gt;'RefersTo');\r\n}\r\n<\/pre>\n<p>Now that the AutoReference is in and your commit notifications are going into RT3, the magic kicks in.  First of all, you can reference tickets in your commit log messages.  Commit log messages will be a part of commit notification email, which is sent to the RT3, which in turn will get parsed for ticket references by AutoReference scrip.  But that gets even better.  If you check back at the parameters to svnnotify in the post-commit hook above, you&#8217;ll notice the &#8220;&#8211;with-diff&#8221; parameter.  Guess what?  This will cause a diff of the commit&#8217;s changes to be inside the email body.  Not a big deal, eh?  That&#8217;s until you realize that that will get parsed by AutoReference too.  Which means that if you have ticket references inside your code, the commit message will get linked to those tickets also.  This is extremely handy!  You can use ticket references in comments to your code, and every time you modify a line with such reference (either add, edit, or remove), the commit will get linked to the mentioned ticket number.<\/p>\n<p>The best part of it is that in RT3 links are always two ways.  Not only you will be able to see the link to original bug from the commit ticket, but also from the original bug you will links to all commits that were done about this ticket.  This provides with valuable information on when each change was done, who was working on the ticket, how much time was spent, and so on, and so forth.  Also, this helps with related commits, which are not that easy to find using other ways.  For example, when you commit code changes separately from the unit test.  If both commits reference the original ticket number with the bug, than from one commit you&#8217;ll go to the bug, and from the bug you&#8217;ll go the other related commit ticket.<\/p>\n<p>On top of that, tickets in your commit queue are created using the accounts of the developers who did the commits.  With that, you can have a quick and easy access to some charts, using the RT3 charting system.  For example, you can create a chart by Requestor of all tickets in project.commits queue, which will show you something like this:<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"12667\" data-permalink=\"https:\/\/mamchenkov.net\/wordpress\/2010\/07\/05\/integrating-rt3-with-subversion\/commits_chart\/\" data-orig-file=\"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2010\/07\/commits_chart.png?fit=500%2C333&amp;ssl=1\" data-orig-size=\"500,333\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"Commits chart\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2010\/07\/commits_chart.png?fit=500%2C333&amp;ssl=1\" class=\"aligncenter size-full wp-image-12667\" title=\"Commits chart\" src=\"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2010\/07\/commits_chart.png?resize=500%2C333&#038;ssl=1\" alt=\"\" width=\"500\" height=\"333\" srcset=\"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2010\/07\/commits_chart.png?w=500&amp;ssl=1 500w, https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2010\/07\/commits_chart.png?resize=300%2C199&amp;ssl=1 300w, https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2010\/07\/commits_chart.png?resize=160%2C106&amp;ssl=1 160w, https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2010\/07\/commits_chart.png?resize=75%2C49&amp;ssl=1 75w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/p>\n<p>Elegant, isn&#8217;t it?<\/p>\n<p>Also, this being an RT3, you can now comment and discuss specific commits, create tickets based on commits (refactoring tasks, for example), and so on and so forth.<\/p>\n<p>The only drawback I might think of is that now you have a queue with project.commits tickets which are created fast, but nobody bothers to close them. \u00a0For that there is an easy solution &#8211; cron job to automatically resolve old tickets. \u00a0Again, there are a few scripts online to handle the task. \u00a0Here is one that I am using, and I don&#8217;t remember where from I got it. \u00a0Let me know, if you know, so I link to the author.<\/p>\n<pre class=\"brush: perl; title: ; notranslate\" title=\"\">\r\n#!\/usr\/bin\/perl -w\r\n\r\n# This script resolves old tickets in commit queue. Based on rt-escalate script\r\n#\r\n### Configuration\r\n\r\n# Queues to operate on (default is all)\r\nmy @queues = qw ( project.commits );\r\n\r\n# How many days should ticket live?\r\nmy $old = 2;\r\n\r\n# Location of RT3's libs\r\nuse lib (&quot;\/usr\/lib\/perl5\/vendor_perl\/5.8.8\/RT&quot;, &quot;\/var\/lib\/rt3&quot;);\r\n\r\n### Code\r\n\r\nuse strict;\r\nuse Carp;\r\n\r\n# Pull in the RT stuff\r\npackage RT;\r\nuse RT::Interface::CLI qw(CleanEnv GetCurrentUser GetMessageContent loc);\r\n\r\n# Clean our the environment\r\nCleanEnv();\r\n\r\n# Load the RT configuration\r\nRT::LoadConfig();\r\n\r\n# Initialise RT\r\nRT::Init();\r\n\r\n# Drop any setgid permissions we might have\r\n#RT::DropSetGIDPermissions();\r\n\r\nuse RT::Date;\r\nuse RT::Tickets;\r\nuse Date::Calc qw(Delta_Days Today);\r\n\r\ndie &quot;No queues defined&quot; unless @queues;\r\n\r\nforeach my $queuename (@queues) {\r\n    # Load in the queue\r\n    my $queue = new RT::Queue($RT::SystemUser);\r\n    $queue-&gt;Load($queuename);\r\n\r\n    # Get hold of new and open tickets only\r\n    my $tickets = new RT::Tickets($RT::SystemUser);\r\n    $tickets-&gt;LimitStatus(VALUE =&gt; 'open');\r\n    $tickets-&gt;LimitStatus(VALUE =&gt; 'new');\r\n    $tickets-&gt;LimitQueue(VALUE =&gt; $queue-&gt;Id);\r\n\r\n    # Process each ticket\r\n    while (my $ticket = $tickets-&gt;Next) {\r\n\tmy ($date_str,$time_str) = split(\/\\s+\/, $ticket-&gt;LastUpdated);\r\n\tmy ($y,$m,$d) = split(\/-\/, $date_str);\r\n\tmy ($H,$M,$S) = split(\/:\/, $time_str);\r\n\r\n\tmy ($ny, $nm, $nd) = Today();\r\n\r\n\tmy $diff = Delta_Days($y, $m, $d, $ny, $nm, $nd);\r\n\tif ($diff &gt;= $old) {\r\n\t    $ticket-&gt;SetStatus('resolved');\r\n\t}\r\n    }\r\n}\r\n\r\n# Disconnect before we finish off\r\n$RT::Handle-&gt;Disconnect();\r\nexit 0;\r\n<\/pre>\n<p>Create the file like <em>\/etc\/cron.daily\/rt-resolve.pl<\/em>, make it executable, and paste the above code into it.  From now on, all tickets in queues specified in that script will be checked, and those tickets that haven&#8217;t been updated for more than 2 days will be automatically resolved.  This way you can still have discussions and comments on your commits, but once the discussion dies out the ticket will be automatically closed.  Also, keeping tickets from the last couple of days gives an easy way of reviewing the most recent changes to the project, in case, for example, something breaks.<\/p>\n<p>I&#8217;ve played with different ways of integrating RT3 with Subversion in at least 3 different companies, and found that the above works the best. \u00a0It&#8217;s simple, straight-forward, and easy to explain to anyone who works either with RT3 or Subversion. \u00a0Also, it can be easily extended with additional scrips to handle commands from the emails to do things like resolve tickets via Subversion log messages. \u00a0But since I never had the really used it (only proof of concept configurations were done), I&#8217;m not going to explain it here.<\/p>\n<p>Enjoy!<\/p>\n<!-- google_ad_section_end -->\n","protected":false},"excerpt":{"rendered":"<!-- google_ad_section_start -->\n<p>As I have mentioned a few times before, I am a big fan of using BestPractical RT3 for all sorts of things, including, but not limited to, bug tracking during project development. \u00a0I see a great benefit in having a single system for both technical support and development departments. \u00a0Bugs can be reported by customers, &hellip; <a href=\"https:\/\/mamchenkov.net\/wordpress\/2010\/07\/05\/integrating-rt3-with-subversion\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Integrating RT3 with Subversion<\/span><\/a><\/p>\n<!-- google_ad_section_end -->\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false,"_links_to":"","_links_to_target":""},"categories":[1,18,133,62],"tags":[2348,3150,2158,1588],"keyring_services":[],"class_list":["post-12664","post","type-post","status-publish","format-standard","hentry","category-general","category-programming","category-sysadmin","category-technology","tag-bug-tracking","tag-request-tracker","tag-subversion","tag-version-control"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"As I have mentioned a few times before, I am a big fan of using BestPractical RT3 for all sorts of things, including, but not limited to, bug tracking during project development. I see a great benefit in having a single system for both technical support and development departments. Bugs can be reported by customers,\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Leonid Mamchenkov\"\/>\n\t<meta name=\"google-site-verification\" content=\"VHvdD0_usx1_4DzKy_QCVcICVgX2EgA2ybELT-wl7kQ\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/mamchenkov.net\/wordpress\/2010\/07\/05\/integrating-rt3-with-subversion\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Leonid Mamchenkov - Life, universe, and everything else\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Integrating RT3 with Subversion - Leonid Mamchenkov\" \/>\n\t\t<meta property=\"og:description\" content=\"As I have mentioned a few times before, I am a big fan of using BestPractical RT3 for all sorts of things, including, but not limited to, bug tracking during project development. I see a great benefit in having a single system for both technical support and development departments. Bugs can be reported by customers,\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/mamchenkov.net\/wordpress\/2010\/07\/05\/integrating-rt3-with-subversion\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2010-07-05T10:39:55+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2010-07-05T10:40:58+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/MamchenkovBlog\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@mamchenkov\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Integrating RT3 with Subversion - Leonid Mamchenkov\" \/>\n\t\t<meta name=\"twitter:description\" content=\"As I have mentioned a few times before, I am a big fan of using BestPractical RT3 for all sorts of things, including, but not limited to, bug tracking during project development. I see a great benefit in having a single system for both technical support and development departments. Bugs can be reported by customers,\" \/>\n\t\t<meta name=\"twitter:creator\" content=\"@mamchenkov\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2010\\\/07\\\/05\\\/integrating-rt3-with-subversion\\\/#blogposting\",\"name\":\"Integrating RT3 with Subversion - Leonid Mamchenkov\",\"headline\":\"Integrating RT3 with Subversion\",\"author\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#person\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/mamchenkov.net\\\/wordpress\\\/wp-content\\\/uploads\\\/2010\\\/07\\\/commits_chart.png?fit=500%2C333&ssl=1\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2010\\\/07\\\/05\\\/integrating-rt3-with-subversion\\\/#articleImage\",\"width\":500,\"height\":333},\"datePublished\":\"2010-07-05T12:39:55+02:00\",\"dateModified\":\"2010-07-05T12:40:58+02:00\",\"inLanguage\":\"en-US\",\"commentCount\":3,\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2010\\\/07\\\/05\\\/integrating-rt3-with-subversion\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2010\\\/07\\\/05\\\/integrating-rt3-with-subversion\\\/#webpage\"},\"articleSection\":\"All, Programming, Sysadmin, Technology, bug tracking, Request Tracker, subversion, version control\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2010\\\/07\\\/05\\\/integrating-rt3-with-subversion\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/#listItem\",\"name\":\"Technology\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/#listItem\",\"position\":2,\"name\":\"Technology\",\"item\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/programming\\\/#listItem\",\"name\":\"Programming\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/programming\\\/#listItem\",\"position\":3,\"name\":\"Programming\",\"item\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/programming\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2010\\\/07\\\/05\\\/integrating-rt3-with-subversion\\\/#listItem\",\"name\":\"Integrating RT3 with Subversion\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/#listItem\",\"name\":\"Technology\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2010\\\/07\\\/05\\\/integrating-rt3-with-subversion\\\/#listItem\",\"position\":4,\"name\":\"Integrating RT3 with Subversion\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/programming\\\/#listItem\",\"name\":\"Programming\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#person\",\"name\":\"Leonid Mamchenkov\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2010\\\/07\\\/05\\\/integrating-rt3-with-subversion\\\/#personImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"Leonid Mamchenkov\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/#author\",\"url\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/\",\"name\":\"Leonid Mamchenkov\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2010\\\/07\\\/05\\\/integrating-rt3-with-subversion\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"Leonid Mamchenkov\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2010\\\/07\\\/05\\\/integrating-rt3-with-subversion\\\/#webpage\",\"url\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2010\\\/07\\\/05\\\/integrating-rt3-with-subversion\\\/\",\"name\":\"Integrating RT3 with Subversion - Leonid Mamchenkov\",\"description\":\"As I have mentioned a few times before, I am a big fan of using BestPractical RT3 for all sorts of things, including, but not limited to, bug tracking during project development. I see a great benefit in having a single system for both technical support and development departments. Bugs can be reported by customers,\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2010\\\/07\\\/05\\\/integrating-rt3-with-subversion\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/#author\"},\"datePublished\":\"2010-07-05T12:39:55+02:00\",\"dateModified\":\"2010-07-05T12:40:58+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#website\",\"url\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/\",\"name\":\"Blog of Leonid Mamchenkov\",\"description\":\"Life, universe, and everything else\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#person\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Integrating RT3 with Subversion - Leonid Mamchenkov","description":"As I have mentioned a few times before, I am a big fan of using BestPractical RT3 for all sorts of things, including, but not limited to, bug tracking during project development. I see a great benefit in having a single system for both technical support and development departments. Bugs can be reported by customers,","canonical_url":"https:\/\/mamchenkov.net\/wordpress\/2010\/07\/05\/integrating-rt3-with-subversion\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"google-site-verification":"VHvdD0_usx1_4DzKy_QCVcICVgX2EgA2ybELT-wl7kQ","miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/mamchenkov.net\/wordpress\/2010\/07\/05\/integrating-rt3-with-subversion\/#blogposting","name":"Integrating RT3 with Subversion - Leonid Mamchenkov","headline":"Integrating RT3 with Subversion","author":{"@id":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/#author"},"publisher":{"@id":"https:\/\/mamchenkov.net\/wordpress\/#person"},"image":{"@type":"ImageObject","url":"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2010\/07\/commits_chart.png?fit=500%2C333&ssl=1","@id":"https:\/\/mamchenkov.net\/wordpress\/2010\/07\/05\/integrating-rt3-with-subversion\/#articleImage","width":500,"height":333},"datePublished":"2010-07-05T12:39:55+02:00","dateModified":"2010-07-05T12:40:58+02:00","inLanguage":"en-US","commentCount":3,"mainEntityOfPage":{"@id":"https:\/\/mamchenkov.net\/wordpress\/2010\/07\/05\/integrating-rt3-with-subversion\/#webpage"},"isPartOf":{"@id":"https:\/\/mamchenkov.net\/wordpress\/2010\/07\/05\/integrating-rt3-with-subversion\/#webpage"},"articleSection":"All, Programming, Sysadmin, Technology, bug tracking, Request Tracker, subversion, version control"},{"@type":"BreadcrumbList","@id":"https:\/\/mamchenkov.net\/wordpress\/2010\/07\/05\/integrating-rt3-with-subversion\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress#listItem","position":1,"name":"Home","item":"https:\/\/mamchenkov.net\/wordpress","nextItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/#listItem","name":"Technology"}},{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/#listItem","position":2,"name":"Technology","item":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/#listItem","name":"Programming"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/#listItem","position":3,"name":"Programming","item":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/2010\/07\/05\/integrating-rt3-with-subversion\/#listItem","name":"Integrating RT3 with Subversion"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/#listItem","name":"Technology"}},{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/2010\/07\/05\/integrating-rt3-with-subversion\/#listItem","position":4,"name":"Integrating RT3 with Subversion","previousItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/#listItem","name":"Programming"}}]},{"@type":"Person","@id":"https:\/\/mamchenkov.net\/wordpress\/#person","name":"Leonid Mamchenkov","image":{"@type":"ImageObject","@id":"https:\/\/mamchenkov.net\/wordpress\/2010\/07\/05\/integrating-rt3-with-subversion\/#personImage","url":"https:\/\/secure.gravatar.com\/avatar\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g","width":96,"height":96,"caption":"Leonid Mamchenkov"}},{"@type":"Person","@id":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/#author","url":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/","name":"Leonid Mamchenkov","image":{"@type":"ImageObject","@id":"https:\/\/mamchenkov.net\/wordpress\/2010\/07\/05\/integrating-rt3-with-subversion\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g","width":96,"height":96,"caption":"Leonid Mamchenkov"}},{"@type":"WebPage","@id":"https:\/\/mamchenkov.net\/wordpress\/2010\/07\/05\/integrating-rt3-with-subversion\/#webpage","url":"https:\/\/mamchenkov.net\/wordpress\/2010\/07\/05\/integrating-rt3-with-subversion\/","name":"Integrating RT3 with Subversion - Leonid Mamchenkov","description":"As I have mentioned a few times before, I am a big fan of using BestPractical RT3 for all sorts of things, including, but not limited to, bug tracking during project development. I see a great benefit in having a single system for both technical support and development departments. Bugs can be reported by customers,","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/mamchenkov.net\/wordpress\/#website"},"breadcrumb":{"@id":"https:\/\/mamchenkov.net\/wordpress\/2010\/07\/05\/integrating-rt3-with-subversion\/#breadcrumblist"},"author":{"@id":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/#author"},"creator":{"@id":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/#author"},"datePublished":"2010-07-05T12:39:55+02:00","dateModified":"2010-07-05T12:40:58+02:00"},{"@type":"WebSite","@id":"https:\/\/mamchenkov.net\/wordpress\/#website","url":"https:\/\/mamchenkov.net\/wordpress\/","name":"Blog of Leonid Mamchenkov","description":"Life, universe, and everything else","inLanguage":"en-US","publisher":{"@id":"https:\/\/mamchenkov.net\/wordpress\/#person"}}]},"og:locale":"en_US","og:site_name":"Leonid Mamchenkov - Life, universe, and everything else","og:type":"article","og:title":"Integrating RT3 with Subversion - Leonid Mamchenkov","og:description":"As I have mentioned a few times before, I am a big fan of using BestPractical RT3 for all sorts of things, including, but not limited to, bug tracking during project development. I see a great benefit in having a single system for both technical support and development departments. Bugs can be reported by customers,","og:url":"https:\/\/mamchenkov.net\/wordpress\/2010\/07\/05\/integrating-rt3-with-subversion\/","og:image":"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg","og:image:secure_url":"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg","og:image:width":1024,"og:image:height":1024,"article:published_time":"2010-07-05T10:39:55+00:00","article:modified_time":"2010-07-05T10:40:58+00:00","article:publisher":"https:\/\/www.facebook.com\/MamchenkovBlog","twitter:card":"summary_large_image","twitter:site":"@mamchenkov","twitter:title":"Integrating RT3 with Subversion - Leonid Mamchenkov","twitter:description":"As I have mentioned a few times before, I am a big fan of using BestPractical RT3 for all sorts of things, including, but not limited to, bug tracking during project development. I see a great benefit in having a single system for both technical support and development departments. Bugs can be reported by customers,","twitter:creator":"@mamchenkov","twitter:image":"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg"},"aioseo_meta_data":{"post_id":"12664","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2023-07-19 22:05:41","updated":"2026-01-15 05:45:46","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/mamchenkov.net\/wordpress\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/\" title=\"Technology\">Technology<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/\" title=\"Programming\">Programming<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tIntegrating RT3 with Subversion\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/mamchenkov.net\/wordpress"},{"label":"Technology","link":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/"},{"label":"Programming","link":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/"},{"label":"Integrating RT3 with Subversion","link":"https:\/\/mamchenkov.net\/wordpress\/2010\/07\/05\/integrating-rt3-with-subversion\/"}],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":12633,"url":"https:\/\/mamchenkov.net\/wordpress\/2010\/06\/23\/mantisbt-vs-rt3\/","url_meta":{"origin":12664,"position":0},"title":"MantisBT vs. RT3","author":"Leonid Mamchenkov","date":"June 23, 2010","format":false,"excerpt":"I've been praising Best Pratical's RT3 (aka Request Tracker) for a long time. \u00a0So at my new job, given a new start, I thought that I maybe need to explore other options and widen my horizons. \u00a0After all, the needs were much less and much simpler. \u00a0We just needed a\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":11449,"url":"https:\/\/mamchenkov.net\/wordpress\/2008\/12\/08\/fixing-rt3-on-fedora-10\/","url_meta":{"origin":12664,"position":1},"title":"Fixing RT3 on Fedora 10","author":"Leonid Mamchenkov","date":"December 8, 2008","format":false,"excerpt":"We upgraded our development server to Fedora 10 over the weekend.\u00a0 Among other things, it runs RT3 - excellent support, issue management, and bug tracking tool.\u00a0 Once the upgrade was over, we ended up with a semi-working setup of RT3.\u00a0 The emails were going through just fine, but the web\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":11491,"url":"https:\/\/mamchenkov.net\/wordpress\/2009\/01\/19\/fixing-advanced-search-performance-in-rt3\/","url_meta":{"origin":12664,"position":2},"title":"Fixing advanced search performance in RT3","author":"Leonid Mamchenkov","date":"January 19, 2009","format":false,"excerpt":"It's been bugging me for a while now that advanced search is extremely slow in our RT3.\u00a0 I thought it was something related to the famous Perl bug, but apparently it wasn't.\u00a0 Then I was I waiting for Fedora 10 to come out, so that we'd upgrade our RT3 installation\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":18395,"url":"https:\/\/mamchenkov.net\/wordpress\/2013\/06\/21\/phabricator-code-review-browser-bug-tracker-and-wiki\/","url_meta":{"origin":12664,"position":3},"title":"Phabricator &#8211; code review, browser, bug tracker, and wiki","author":"Leonid Mamchenkov","date":"June 21, 2013","format":"link","excerpt":"Phabricator - code review, browser, bug tracker, and wiki Phabricator is an open source collection of web applications which makes it easier to scale software companies. For those people who can't afford GitHub, this should be a pretty good alternative. \u00a0Developed at Facebook. \u00a0All you'll need to do is setup\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":14695,"url":"https:\/\/mamchenkov.net\/wordpress\/2011\/03\/28\/rt3-automatically-assign-owner-by-queue\/","url_meta":{"origin":12664,"position":4},"title":"RT3 : Automatically assign owner by queue","author":"Leonid Mamchenkov","date":"March 28, 2011","format":false,"excerpt":"There is one bit of functionality that I keep reusing for pretty much every installation of RT3 - automatic assignment of tickets to specific users based on queue. \u00a0There are a few solutions to this problem and some are documented in RT3 wiki. \u00a0But I always keep forgetting which solution\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":10751,"url":"https:\/\/mamchenkov.net\/wordpress\/2007\/07\/04\/daily-tweets\/","url_meta":{"origin":12664,"position":5},"title":"Daily tweets","author":"Leonid Mamchenkov","date":"July 4, 2007","format":false,"excerpt":"making a weak attempt to catch up with feeds... at least with personal stuff # Trying to figure out a way to have time tracking in RT3. Per person, per ticket, per parent ticket. # In less than two month our repository grew over 1,000 commits. And we haven't even\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/12664","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/comments?post=12664"}],"version-history":[{"count":0,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/12664\/revisions"}],"wp:attachment":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/media?parent=12664"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/categories?post=12664"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/tags?post=12664"},{"taxonomy":"keyring_services","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/keyring_services?post=12664"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}