<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Knight of the round table

    wansong

    codeStriker(及與svn、bugzilla集成)使用過程記錄 續

    下面是codeStriker與svn、bugzilla集成使用的腳本(放在codestriker安裝目錄的bin下):

     

    #!/usr/bin/perl -w
    #########################################################################
    # Create codestriker topic based on subversion commit.
    # Install as a post-commit subversion hook.
    # dmp 03/23/07
    #########################################################################

    # Absolute path of file mapping the author of a commit to a reviewer for it.
    # Each line of the file should contain an author email address,
    # followed by whitespace, followed by a reviewer email address.
    # Lines starting with '#' are comments.
    $REVIEWERS_FILE = "D:/hooks/reviewers.txt";

    # Reviewer email to use if no mapping found in REVIEWERS_FILE
    $DEFAULT_REVIEWER = "username\@hotmail.com";

    # Suffix to add to username to get email address.
    # TODO:  Would be better to get mappings from a file.
    $EMAIL_SUFFIX = "\@hotmail.com";

    # Codestriker specific parameters for topic creation.
    $CODESTRIKER_URL = 'http://localhost/codestriker/codestriker.pl?action=create';
    $CODESTRIKER_PROJECT = '2';
    $CODESTRIKER_REPOSITORY = 'svn:file:///D:/svnroo';
    $CODESTRIKER_CC = '';

    # Used for development - write verbosely to log file
    $DEBUG = 1;
    $LOGFILE = "D:/codestriker-1.9.8/bin/post-commit-codestriker.log";

    use lib 'D:/codestriker-1.9.8/bin';
    ########################################################################
    # Shouldn't need to change anything under here.

    # Codestriker-specific imports.
    use CodestrikerClient;

    use LWP::UserAgent;
    use HTTP::Request;
    use HTTP::Request::Common;

    # Print message to stdout if DEBUG is set.
    sub debug {
        local($msg) = @_;

        if ($DEBUG) {
            open(LOG, ">>$LOGFILE") || die ("Cannot open log file $LOGFILE: $!\n");
            print(LOG $msg, "\n");
            close(LOG);
        }
    }

    # Get the email address for the given username.  Currently this just adds
    # $EMAIL_SUFFIX to the username, but it would be better to use a mapping file.
    # param username
    # return email address
    sub get_email {
        local($username) = @_;
        return $username . $EMAIL_SUFFIX;
    }

    # Determine reviewer for review, based on mappings in
    # REVIEWERS file.
    # param:  author email address
    # returns: the reviewer email address from the file, or DEFAULT_REVIEWER
    sub determine_reviewer {
        local($author_email) = @_;
        my $reviewer = '';

        debug("author email is: " . $author_email);
        debug("attempting to open reviewers file: $REVIEWERS_FILE");
        open (RECLIST, "< $REVIEWERS_FILE") ||
            return $DEFAULT_REVIEWER;

        while (<RECLIST>) {
            # skip comment lines
            if (/^#/) {
                next;
            }

            @fields = split;
            if ($fields[0] eq $author_email) {
                $reviewer = $fields[1];
                debug("The reviewer for " . $author_email . " is: " . $reviewer);
                last;
            }
        }

        close RECLIST;

        if (! $reviewer) {
            $reviewer = $DEFAULT_REVIEWER;
            debug("Assigned default reviewer: " . $reviewer);
        }

        return $reviewer;
    }

    ########################################################################
    # Main program

    my $repo=$ARGV[0];
    my $rev=$ARGV[1];

    debug("repos=$repo; rev=$rev");

    my @svninfo_out=split("\n", `svnlook info -r $rev $repo`);
    my $user=$svninfo_out[0];
    my $date=$svninfo_out[1];
    my $loglength=$svninfo_out[2];
    my $topic_title = "SVN commit: " . $svninfo_out[3];
    my $mesg=join("\n", @svninfo_out[3..$#svninfo_out]);

    debug("user=$user");
    debug("date=$date");
    debug("loglength=$loglength");
    debug("mesg=$mesg");

    my $createTopic = 0;
    if ($mesg =~ /REVIEW/) {
        debug("Found REVIEW - creating topic.");
        $createTopic = 1;
    }

    # Look for bug numbers in the log message, which need to be in the form:
    # " Bug: 4250 " (without quotes, case insensitive, colon and space optional).
    my @bugs = ();
    my $bug_ids = $mesg;
    while ($bug_ids =~ /\b[Bb][Uu][Gg]:?\s*(\d+)\b/g) {
        push @bugs, $1;
        debug("Found bug number $1; creating topic.");
        $createTopic = 1;
    }

    if ($createTopic) {
        # Truncate the title if necessary.
        if (length($topic_title) > 57) {
            $topic_title = substr($topic_title, 0, 57) . "...";
        }

        my $reviewer = determine_reviewer(get_email($user));

        debug("Creating topic...");
        my $ua = new LWP::UserAgent;
        my $content = [ action => 'submit_new_topic',
                    topic_title => $topic_title,
                    topic_description => $mesg,
                    projectid => $CODESTRIKER_PROJECT,
                    repository => $CODESTRIKER_REPOSITORY,
                    bug_ids => join(", ", @bugs),
                    email => get_email($user),
                    reviewers => $reviewer,
                    cc => $CODESTRIKER_CC,
      topic_state => 'Open',
                    module => "/",
                    start_tag => $rev - 1,
                    end_tag => $rev];
        my $response =
            $ua->request(HTTP::Request::Common::POST($CODESTRIKER_URL,
                                 Content_Type => 'form-data',
                                 Content => $content));

        # Indicate if the operation was successful.
        my $response_content = $response->content;
        my $rc = $response_content =~ /Topic URL: \<A HREF=\"(.*)\"/i;
        print STDERR "Failed to create topic, response: " .
                        $response_content . "\n" if $rc == 0;

    } else {
        debug("Not creating topic.");
    }

    posted on 2009-04-03 10:06 w@ns0ng 閱讀(1260) 評論(0)  編輯  收藏 所屬分類: J2EE

    主站蜘蛛池模板: 七色永久性tv网站免费看| 日本免费一区二区在线观看| 成年女人免费视频播放77777 | 亚洲另类精品xxxx人妖| 亚洲砖码砖专无区2023| 九九视频高清视频免费观看 | 91久久成人免费| 亚洲最大视频网站| 国产精品亚洲综合| 又粗又硬免费毛片| 欧洲美女大片免费播放器视频| 国产小视频在线免费| 蜜桃传媒一区二区亚洲AV| 日韩精品成人亚洲专区| 国产精品免费久久| 久久国产精品亚洲综合| 3d成人免费动漫在线观看| 精品亚洲国产成人| 国产大片线上免费看| 成人国产网站v片免费观看| 伊人久久综在合线亚洲91| 人妻丰满熟妇无码区免费| 亚洲jjzzjjzz在线观看| 国产又大又长又粗又硬的免费视频 | 性生大片视频免费观看一级| 亚洲欧洲中文日韩久久AV乱码 | 中文字幕a∨在线乱码免费看| 国产亚洲精品国产| 222www免费视频| 久久水蜜桃亚洲AV无码精品 | 精品久久久久久无码免费| 亚洲日本一区二区三区在线不卡| 亚洲成a人片在线看| 亚洲AV网站在线观看| 色www永久免费网站| 最近中文字幕无吗高清免费视频| 亚洲AV无码成人精品区日韩| 亚洲AV永久纯肉无码精品动漫| 亚洲丁香婷婷综合久久| 国产亚洲美日韩AV中文字幕无码成人| 日本免费一区二区久久人人澡|