65.9K
CodeProject 正在变化。 阅读更多。
Home

VssReporter 2.1 - 用于生成 Visual SourceSafe 报告的工具,面向构建管理员

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.88/5 (96投票s)

2003 年 8 月 6 日

10分钟阅读

viewsIcon

687894

downloadIcon

8877

一个支持工具,允许执行构建的人员独立确定哪些源文件已更改以及由谁更改

下载次数

Sample Image - VssReporter.jpg

重要提示

VssReporter 需要预先安装 Visual SourceSafe 5 或 6,才能运行和构建它。

据我所知,由于这不是一个可免费重新分发的组件,因此我无法包含 VssReporter 所需的 VSS 组件(ssapi.dll)。

注意:如果有人能指出微软的文档证明我错了,我将很乐意包含 ssapi.dll - 但目前不行。

引言

在大多数现实世界的活动中,很容易确定某人是否做了某事。

“吉米,你打扫房间了吗?”

“是的,爸爸。”

(砰,砰,砰 - 爸爸上楼的声音)

“不,你根本没打扫(或者类似的话)。快去!”

然而,软件则完全是另一回事了。

你看得到的部分(二进制文件的 UI、网页或其他)通常只是冰山一角(尤其是二进制文件),而真正构成组件的大部分都隐藏在视线之外。

此外,编译过程造成的额外间接层使得编译后的二进制文件更加复杂;对于那些负责对多人项目执行定期构建的不幸者来说,这一点会变得非常痛苦。

听起来很简单,给所有程序员发邮件了解他们在上次构建后做了什么。但那时你会发现,很少有程序员能清晰地记住他们在前一周(甚至一天)内具体修复(或破坏)了什么。

事实上,有些人几乎记不起他们早餐吃了什么 ;)

我们几乎是下意识地做的事情,比如小的重构(又称“春季大扫除”或“整理”),尤其容易被遗忘。

我曾有过很多经历,无论是自己还是别人,一个看似无害的“小”代码更改会带来很多麻烦,因为没有人记得在出现问题的代码中进行过任何更改。

这时,VssReporter 就派上用场了!

VssReporter

最简单来说,VssReporter 是一个查询 SourceSafe 的工具,用于查找在某个日期(或多个日期)之前、之后或之间已更改了哪些源文件。

日期可以是显式的,例如“2002/08/02”,也可以是隐式的,例如标签。

它将允许你查询由任何人、仅由你自己或指定程序员进行的修改。

然而,尽管听起来(可能)很有用,但我发现 VssReporter 最有价值之处在于它能够解决的各种问题。

以下是一些例子:

  • 定期构建

    正如我之前提到的,负责构建意味着你必须确切地知道自上次构建以来发生了什么变化。否则,你不可能写出合适的发布说明,这意味着你正在构建的产品会随着时间的推移变得越来越不明确。

    在我负责的几个项目中,我也编写了代码,VssReporter 对我来说是不可或缺的。

    这是我的工作方式:

    • 首先,我决定一个标签,用于每次构建后,例如“上次构建”。注意:在 VSS 中重复使用相同的标签只会将标签移动到最新的使用位置,而不是复制它。
    • 然后,在每次构建之前,我都会在 VssReporter 中运行相同的查询,以确定自上次使用标签以来哪些文件发生了更改。
    • 然后,我会去找程序员,询问他们所做的任何文件更改,这些更改不符合我们计划为此次构建进行更改的内容。
    • 最后,我在完成构建后重新标记项目。

    我甚至几次抓住了自己,因为我发现我做了一些“微不足道”的更改,但我几乎不记得做了!

  • 重构项目

    最近,我需要对一些组件进行多项小改动,这些组件名义上都包含在单个 Vss 项目根目录下。

    以前从事过这些组件开发的所有人员都已离职,因此这项任务就委托给了我。

    当我尝试构建这些组件时,我发现情况一团糟。

    • 源代码文件和项目存在多个副本,分布在不同的工作区中。
    • 项目被移动了,导致它们无法再构建。
    • 每个项目都有大量由不同程序员在不同时间创建的测试项目。

    “只有一件事可以做,”我对同事说,“重构整个该死的东西!” 他回答说:“早就该这样了。”

    这时我遇到了一个难题:如何确定哪些代码确实需要重新构建,因为(如果你认为这是一个简单的任务)我在根文件夹下计算了 47 个项目,这些项目都属于 7 个主要组件。

    我花了整整一个小时尝试用困难的方式解决,但变得越来越沮丧,直到我再也受不了了,去找 Ed(我最亲近的同事)抱怨。

    当我向他诉说多年来那些目光短浅的改动时,我突然想到,我只需要一种方法来确定哪些代码在过去一年里发生了变化,以此作为当前正在使用的代码的指标。

    使用 VssReporter 进行两次查询,几小时后,整个事情就完成了!

  • 窥探!

    令我作为程序员持续感到沮丧的是,我总是惊叹于有多少同事仅仅因为他们可以,就去修改别人的代码。

    这更多地是我观察到的情况(我发现人们从不修改我的代码超过一次,如果你明白我的意思的话),而不是我自己的直接经历。几年前,我观察了一个由 4 个人组成的团队在一个 3D 引擎上工作。

    过了一段时间,你会听到一声尖叫,因为某人实施的修复几天后被“取消”了。

    共享代码库也会出现类似的问题:一个项目的修复可能会破坏另一个项目。

    所以,我时不时地使用 VssReporter 查询某些项目,看看是否有任何变化——“有备无患”(或者差不多是这个意思)。

安装 VssReporter

  1. VssReporter.exe 复制到合适的工具位置。
  2. 运行它。
  3. 如果 ssapi.dll 未注册,您可能会被提示查找它,但如果 VSS 安装正确,这种情况不太可能发生。

使用 VssReporter

使用 VssReporter 几乎和安装它一样简单。

  1. 选择(或浏览)到您选择的 VSS 数据库。
    注意:这将会在关闭 VssReporter 时保存,并在下次运行时恢复。
  2. 突出显示您要对其运行查询的 VSS 项目。
  3. 选择您是想查看所有人、仅您自己还是特定程序员所做的文件更改。
  4. 选择查询“之后”、“之前”或“之间”的日期或标签。
  5. 输入日期或标签。
  6. 点击“报告”按钮。

这将生成一个文件列表,显示在右侧列表控件中。如果滚动列表到右侧,还会显示文件的最后修改时间和修改人。

之后,您可以将结果复制到剪贴板作为格式化文本,或者右键单击单个文件并在 SourceSafe 中打开其父项目。

VssReporter 内部

VssReporter 通过 ssapi.dll 中包含的类型库导出的对象模型来操作 VSS(听起来对吗?)。

基本上,就是调用

#import "ssapi.dll" no_namespace
来访问 VSS 的对象模型,无论您想访问哪个文件。

然后,就是阅读你能找到的任何文档,并进行大量的试错。

我认为 VssReporter 中 VSS 代码的核心来自 MSDN,但如果有人认为我可能使用了其代码,应该得到表彰,请告诉我,我将添加致谢。

其他值得关注的方面

由于 VssReporter 中与 VSS 相关的部分不是那么令人兴奋,我想指出一些其他您可能觉得有用的部分。

这些是:

  • 按需填充树控件(参见 VSSTreeCtrl.cpp 中的 CVSSTreeCtrl::OnItemexpanding()
  • 实现“停止”按钮以取消耗时操作(参见 VSSReporterDlg.cpp 中的 CVssreporterDlg::ReportOnItem()CVssreporterDlg::Continue()
  • 执行应用程序并等待其终止后再继续(参见 VSSReporterDlg.cpp 中的 CVssreporterDlg::OnInitDialog()
  • 简单的剪贴板使用(参见 VSSReporterDlg.cpp 中的 CVssreporterDlg::OnCopytoclipboard()

进一步工作

  • 打印
  • 此外,还可以检查当前被签出的文件。

Copyright

代码在此提供给您无限制地使用和滥用,但您不能修改它并声称是自己的。

历史

  • 2.1(2006 年 3 月 26 日)
    • 搜索结束时播放系统“星号”声音。
    • 添加了清单(以提供主题支持)。
    • 修复了制表符分隔文件的错误。
    • 在结果列表中添加了文件标签。
    • 将标签搜索更改为“包含”而非“等于”,以提供更大的灵活性。
    • 调用 VSS 时,将用户名/密码添加到命令行。
    • 文件类型图标已移至单独的结果列,以便按类型排序。
    • 对话框字体更改为 Tahoma。
    • 添加了提示,告知用户不要在复制文件时重建树(即文件夹结构被展平)。
  • 2.0(2004 年 9 月 10 日)
    • 增加了对 Visual SourceSafe 5 的支持。
    • 增加了对已删除文件的支持。
    • 在结果列表中添加了图标,以区分添加、编辑和删除。
  • 1.9.2(2004 年 3 月 10 日)
    • 修复了与智能指针清理不正确的相关的错误。
  • 1.9.1(2004 年 3 月 3 日)
    • 微小调整。
  • 1.9(2004 年 2 月 12 日)
    • 修复了与在标签上搜索相关的错误,即附加到签入的标签未被搜索到。
    • 向结果列表添加了“差异”功能。通过“差异配置...”按钮指定您自己选择的差异工具。
    • 向结果列表添加了注释。
    • 对查询描述文本进行了小的澄清调整。
  • 1.71
    • 修复了包含空格的“其他程序员”姓名搜索相关的错误(感谢 Miles Davies)。
    • 包含空格的“其他程序员”姓名现在用单引号括起来。
  • 1.7
    • 增加了将结果另存为 xml 的选项(由 Rob Hegt 建议)。
    • 尝试澄清查询结果(由 Judd 建议)。
    • 修复了一些与查询相关的 UI 错误(感谢 Judd)。
    • 向结果上下文菜单添加了“全选”和“复制”选项(由 KLIKLI 建议)。
    • 现在仅复制/保存选定的结果。
    • 添加了将结果文本进行制表符分隔的选项,以便轻松导入 Excel(由 KLIKLI 建议)。
    • 修复了日期/时间未随其他结果文本一起复制的错误(感谢 KLIKLI)。
    • 添加了递归复选框,以提供对搜索深度的更多控制(由 KLIKLI 建议)。
    • 结果文件名和路径现在显示在单独的列中(由 KLIKLI 建议)。
    • 结果标题控件现在显示排序方向。
  • 1.6
    • 各种查询对话框相关的 UI 调整(感谢 Judd)。
    • 修复了标签查询中的错误,其中显示的是标签的详细信息,而不是紧随标签之前的最后一次修改的详细信息(感谢 KLIKLI)。
    • 修复了“最后修改”查询中显示重复条目的错误(感谢 KLIKLI)。
    • 密码编辑框在启动时获得焦点(由 KLIKLI 建议)。
    • 对话框标题栏中添加了版本号(由 KLIKLI 建议)。
  • 1.5
    • 进行了大量的重构。
    • 效率更高 => 报告速度更快。
    • 对当前查询的简明摘要。
    • 添加了结果列排序(由 KLIKLI 建议)。
    • 添加了报告具有特定标签的文件的功能(由 Uli Grepel 建议)。
    • 添加了报告指定标签或日期之前/之后所有文件版本的功能(由 KLIKLI 建议)。
  • 1.4
    • 在关键的 ssapi.dll 调用周围添加了一些 try/catch 代码。
    • 修复了本地化问题(感谢 tbrammer)。
    • 添加了将结果直接保存到文件的功能(感谢 ???)。
    • 添加了将结果文件复制到用户定义文件夹的功能(感谢 Henrik Grek)。
    • 修复了过滤代码中的错误,该错误导致某些项未被正确报告(感谢 tbrammer)。
    • 添加了对回车键的处理,以便当用户名/密码字段获得焦点时,它将重新加载选定的数据库(感谢 KLIKLI)。
    • 在 exe 资源中添加了版本号(感谢 KLIKLI)。
    • 小错误修复。
    • 在复制结果到剪贴板或文件时,显著加快了“结果->文本”的生成速度。
  • 1.3
    • 在关键的 ssapi.dll 调用周围添加了一些 try/catch 代码。这些调用可能会抛出异常,例如,如果用户没有查看文件的正确权限(感谢 Robert Harber)。
    • 如果一个或两个标签找不到,改进了用户反馈。
    • 进行了小范围的修改,以便“标签查找”也可以使用“停止”按钮来停止。
    • 可能修复了 Vision Guy 关于日期和标签报告的问题(不保证!)。
  • 1.2
    • 增加了对修改 vss 登录名和密码的支持(感谢 shtwang, Judd, Marco)。
  • 1.1
    • vssreporterdlg.h 中删除了对 vsdiff.h 的无关引用(感谢 Dfens)。
  • 1.0
    • 初始发布
© . All rights reserved.