#!/usr/bin/perl # # Create an issue in an external bug tracker # # As an example we're using Fog Creek FogBugz but this # script can be adapted to any external issue tracker. # # *********************************************************** # You should edit these variables to reflect your environment: # URL to the Code Collaborator Server $CCOLLAB_URL = "http://localhost:8080"; # Login of Code Collaborator User who will mark the Defect as external $CCOLLAB_USER = "admin"; # Password of Code Collaborator User who will mark Defect as external $CCOLLAB_PASSWORD = ""; # URL to the FogBugz server $FOGBUGZ_URL = "http://bugs"; # Email of user to use to create Case in to FogBugz $FOGBUGZ_USER_EMAIL = "person\@yourcompany.com"; # Password of user to use to create Case in to FogBugz $FOGBUGZ_USER_PASSWORD = "yourpasswordhere"; #*********************************************************** # # usage: mirror-defect.pl # use LWP::Simple; use URI::Escape; # read parameters from command-line $reviewId = $ARGV[0]; $defectId = $ARGV[1]; $defectTitle = $ARGV[2]; # logon to FogBugz my $response = get("$FOGBUGZ_URL/api.php?cmd=logon&email=$FOGBUGZ_USER_EMAIL&password=$FOGBUGZ_USER_PASSWORD"); # extract authentication token $response =~ /(?:)?<\/token>/; my $token = $1; # create new Case $defectTitle = uri_escape($defectTitle); $description = uri_escape("Defect D$defectId mirrored from Code Collaborator Review $reviewId ($CCOLLAB_URL/index.jsp?page=ReviewDisplay&reviewid=$reviewId)"); $response = get("$FOGBUGZ_URL/api.php?token=$token&cmd=new&sTitle=$defectTitle&sEvent=$description"); # extract Case id $response =~ /ixBug="(\d+)"/; my $case = $1; print("Mirrored Defect D$defectId in FogBugz as Case $case\n"); # log off from FogBugz (invalidate authentication token) $response = get("$FOGBUGZ_URL/api.php?token=$token&cmd=logoff"); # mark Defect as "external" in Code Collaborator $ccollabOptions = "--url $CCOLLAB_URL"; $ccollabOptions .= " --user $CCOLLAB_USER"; $ccollabOptions .= " --password \"$CCOLLAB_PASSWORD\""; $ccollabOptions .= " --quiet --non-interactive"; system("ccollab $CCOLLAB_OPTIONS admin review defect mark-external $defectId \"Case $case\"");