codeStriker(及与svn、bugzilla集成)使用过程记录 续

2023-10-31

下面是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.");
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

codeStriker(及与svn、bugzilla集成)使用过程记录 续 的相关文章

  • 无法将 Visual Studio 项目中的多个文件提交到 subversion

    几周以来 我在使用 Subversion 时遇到了一些问题 当我尝试从 Visual Studio 2017 项目提交文件时 有些文件无法提交到我的 Visual SVN 服务器 准确地说 项目文件夹中的所有文件 如 cs config c
  • 如何从命令行运行scala文件?

    scala是否支持scala run xxx scala go语言支持这样运行 go my go 并且Python支持 python my py 但看来 scala xxx scala 仅进行语法检查 未观察到任何输出或运行行为 那么有没有
  • Python Subversion 包装器库

    在颠覆的文档 http svnbook red bean com en 1 7 svn developer usingapi html svn developer usingapi otherlangs有一个从 Python 使用 Subv
  • 您使用分支/标签/主干约定吗?

    您是否始终遵循将分支 标签和主干目录放在 Subversion 存储库顶层的惯例 最近 我不再打扰 也没有发生任何不好的事情 还 如果需要创建目录树 应该可以移动目录树 我是不是给以后惹麻烦了 您是否尝试过分支或标记 到那时 就没有问题了
  • 下载文件并自动保存到文件夹

    我正在尝试制作一个用于从我的网站下载文件的用户界面 该站点有 zip 文件 需要将这些文件下载到用户输入的目录中 但是 我无法成功下载该文件 它只是从临时文件夹中打开 Code private void webBrowser1 Naviga
  • 使用 ASP.NET 发送邮件

    我使用标准的 web config mailSettings 作为我的 ASP NET 电子邮件的骨干 然而 我发现它的能力越来越有限 例如 我想从许多不同的用户帐户 支持 销售 管理等 发送电子邮件 但 mailSettings 似乎不支
  • 如何“修复”SVN 分支/树冲突?

    我接手了一个软件项目 决定把所有东西都放在SVN下 上Assembla http www assembla com 使用 Tortoise SVN 树干在ROOT下 所以主干包含了整个应用程序 我标记为 1 0 对于我的第一个重要功能 我创
  • 移动文件并覆盖[重复]

    这个问题在这里已经有答案了 即使同名文件已存在 我也尝试移动文件 NSFileManager moveItemAtURL location1 toURL location2 Does NSFileManager的方法moveItemAtUR
  • svn获取当前用户

    如何获取特定工作站上使用 svn 的当前用户 我可以使用 svn exe 可执行文件和一些开关来获取该信息吗 Thanks 在 Linux 中 您将在主目录中找到以下文件 subversion auth svn simple 在此文件中 您
  • 如何将 SVN 修订号注入 JAR 中?

    我希望我的 JAR WAR 应用程序知道其源代码的 SVN 修订号是多少 我希望稍后在网页底部等处为网络最终用户呈现此修订号 是否有任何现有的 Maven 插件可以自动化该过程 我认为该插件必须从以下位置收集信息svn并保存到某个文件 例如
  • svn:使用vim合并冲突

    我正在尝试看看如何使 svn 中的合并变得容易 This page http svnbook red bean com en 1 7 svn advanced externaldifftools html提到可以使用外部工具进行合并 vim
  • Javascript 文件到 Blob

    我正在使用 Cordova Media 将音频录制到空文件中 要上传它 我需要文件的内容类型 我正在尝试将文件转换为 Blob 以便我可以设置内容类型 但是我正在努力将文件转换为 Blob state cordova localDirect
  • 打开文件路径在 python 中不起作用[重复]

    这个问题在这里已经有答案了 我正在编写一个数据库程序 personica 是我的测试主题 我通常在文件路径的位置有一个变量 但出于测试和演示的目的 我只有一个字符串 在我的计算机上的这个确切位置有一个文本文件 顺便说一句 因为我很偏执 所以
  • 在 HTML 电子邮件中嵌入附加图像

    如果我将图像附加到电子邮件中 如何将其放置在 HTML 内容中 我尝试仅使用文件名作为图像源 但这似乎不起作用 更具体地说明如何构建 HTML 邮件消息 结果将是一条多部分 MIME 消息 其中包含 text html 部分 如果您确实使用
  • 如何在 Windows 7 中使用 Python 廉价地创建非常大的文件? [复制]

    这个问题在这里已经有答案了 可能的重复 在Windows系统上快速创建大文件 https stackoverflow com questions 982659 quickly create large file on a windows s
  • 跨平台 C++ IMAP 库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何可以从 C 使用的跨平台 仅对 Windows 和 OS X 感兴趣 IMAP 库 最好也是
  • 如何查看提交修订后所做的更改并解析它以获取评论?

    我希望自动化一些与 SubVersion 相关的任务 所以我使用了 SharpSvn 不幸的是我找不到太多的文档 我希望能够在用户提交新修订后查看更改 以便我可以解析代码以获取特殊注释 然后将其上传到我的票证系统中 如果您只想浏览 Shar
  • PHP将数据写入文件中间而不重写文件的最佳方法是什么

    我正在 php 1GB 中处理大型文本文件 我正在使用 file get contents file txt NULL NULL 100000000 100 要从文件中间获取数据 但如果我想将文件中的数据更改为与原始数据不同的更改 我将不得
  • 相当于“svn update -r”的 git 是什么?

    我是最近的 git 转换者 能够使用 git svn 将我的分支保留在本地而不干扰 svn 服务器真是太棒了 最新版本的代码中存在一个错误 我想确定一个它起作用的时间 以便我可以使用 git bisect 我找不到正确的命令来及时返回 谢谢
  • IMAP 转发器

    我想知道从 IMAP 帐户转发邮件的最快 最可靠的方法是什么 我的大学不允许我们的学生邮箱转发到私人电子邮件帐户 这里每个人都使用 Gmail 或 Hotmail 这是一个政治问题 而不是技术问题 我们确实可以通过 IMAP 访问邮箱 我想

随机推荐

  • 什么是区块链?区块链详解

    区块链简介 什么是区块链 目前没有看到很好的定义和介绍 网上要么是讲一些区块链意义的空泛文章 比如 区块链技术颠覆谁谁谁 又或 互联网已颠覆世界 区块链要颠覆互联网等等 要么就是通篇介绍比特币 矿工 挖矿等 那么区块链到底是个什么东西 它跟
  • python bottle 制作表单_使用Bottle(Python)的AJAX提交表单

    我在使用Bottle框架进行 AJAX通信时遇到了一些问题 这是我第一次使用AJAX 所以我可能只是错误的基础知识 希望瓶子 AJAX大师可以指出这个新手正确的方向 这是我正在使用的代码 usr bin env python from bo
  • dm9000网卡,uboot代码分析

    uboot移植 九 移植网卡DM9000 一 原理 TQ210 板载的网卡芯片是 DM9000A 接在 S5PV210 的 SROM 控制器的 BANK1 上 S5PV210 的 SROM 控制器支持 8 16 位 NOR Flash PR
  • 人工智能数学基础6:极限、极限运算、ε-δ语言、ε-N语言、级数和函数连续性

    老猿Python博文目录 一 极限的定义及四则运算 极限 某一个函数中的某一个变量 此变量在变大 或者变小 的永远变化的过程中 逐渐向某一个确定的数值A不断地逼近而 永远不能够重合到A 永远不能够等于A 但是取等于A 已经足够取得高精度计算
  • framebuffer驱动详解

    裸机中如何操作LCD LCD的显示原理 DDR中分出一块内存 将要显示的内容放到显存中 硬件自动将显存数据放到驱动器中 驱动器操控LCD显示内容 裸机操作LCD的方法由LCD的本身的工作原理决定 OS下操作LCD的难点 内核 驱动 做底层硬
  • c++中数组的使用

    在c 中 有三个强而有力的工具 分别是数组 指针还有字符串 可以说 没有熟练掌握这三个工具的不能算是一个合格的程序员 1 数组 数组 实际上就是向系统申请一个连续的内存空间 每个内存空间的地址连续 并且大小相同 关于数组的声明 语法如下 类
  • Object类、String类、字符串、异常

    快捷键 再IDEA中查看JDK的源代码 ctrl 7 查看一个类的所有方法或者属性 alt 7 快捷生成toString方法 alt insert enter 一 Object类 Object类是参数的最高统一类型 1 1 Java lan
  • Unity发布抖音小游戏:SDK接入

    上篇介绍Unity小游戏发布抖音平台的开发者账号注册以及小游戏创建和申请 本篇介绍字节SDK接入Unity游戏项目中 接入参考教程 Docs 下载bgdt package包 并导入Unity项目工程 打开ByteGame菜单 弹出字节工具面
  • NumPy库的学习

    本文主要记录的是笔者在B站自学Numpy库的学习笔记 引入numpy库 import numpy as np 矩阵的创建 创建一个二行三列的矩阵 array np array 1 2 3 2 3 4 查看array的行数 形状 元素数量 p
  • 第一次发布自己的npm包

    背景 在做表单的时候 会遇到很多的表单项的验证工作 几乎很多验证都是重复的 有一个比较好的lodash库来做了这些工作 但是里面有些方法与自己的期望不符 比如 lodash isEmpty 2 true是会认为是空的 这显然与实际的业务是不
  • Jsch性能问题

    Jsch是纯Java实现的SSH开源框架 可以用来执行shell命令 实现sftp上传 其中在使用中发现在session connect时连接非常耗时 很慢 经研究 log调试发现是开启gssapi认证导致 因为本程序中只使用密码认证 所以
  • JS 页面显示图片

    HTML页面 div class mini datagrid div div div
  • 程序员失业2个月找不到工作,狂刷了5遍这份pdf终获字节跳动offer

    写在前面 1月初失业 找了近2个多月的工作了 还没找到心仪的工作 感觉心好慌 不知道该怎么办了 找不到工作的时候压力很大 有人说自信会很受打击 还有人说会很绝望 是人生的低谷 尽管很多时候我们自己知道 我不是找不到工作 只是找不到理想中的好
  • 有源光网络VS无源光网络

    有源光网络 AON Active Optical Network 有源光网络 是指信号在传输过程中 从局端设备到用户分配单元之间采用光电转换设备 有源光电器件以及光纤等有源光纤传输设备进行传输的网络 有源光器件包括光源 激光器 光接收机 光
  • 助力游戏开发者,看 Google 有哪些“上新”?

    Cloud Ace 是谷歌云全球战略合作伙伴 拥有 300 多名工程师 也是谷歌最高级别合作伙伴 多次获得 Google Cloud 合作伙伴奖 作为谷歌托管服务商 我们提供谷歌云 谷歌地图 谷歌办公套件 谷歌云认证培训服务 官网 http
  • docker: Error response from daemon: driver failed programming external connectivity on endpoint lamp

    Docker容器做端口映射报错 docker Error response from daemon driver failed programming external connectivity on endpoint lamp3 46b7
  • 【C语言精讲】——代码调试方法

    1 调试 调试 Debugging Debug 又称除错 是发现和减少计算机程序或电子仪器设备中程序 错误的一个过程 1 1 调试的基本步骤 发现程序错误的存在 以隔离 消除等方式对错误进行定位 确定错误产生的原因 提出纠正错误的解决办法
  • node.js 与 redis 与 express 和session协同工作

    var RedisStore require connect redis express var redis ip 192 168 238 135 redis port 6379 app use express session secret
  • 基于 Opencv python实现批量图片去黑边—裁剪—压缩软件

    简介 批量处理图片文件 批量提取GIF图片中的每一帧 具有范围裁剪 自动去除黑 白边 调整大小 压缩体积等功能 先看一些软件的界面 是基于Tkinter写的GUI 裁剪等功能基于Opencv 下载 我添加了处理GIF的github 原作者的
  • codeStriker(及与svn、bugzilla集成)使用过程记录 续

    下面是codeStriker与svn bugzilla集成使用的脚本 放在codestriker安装目录的bin下 usr bin perl w Create codestriker topic based on subversion co