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






4.88/5 (96投票s)
2003 年 8 月 6 日
10分钟阅读

687894

8877
一个支持工具,
下载次数
- 适用于 VSS6 和 .NET 的可执行文件 - 65 Kb
- 适用于 VSS5 的可执行文件 - 65 Kb
- 源代码 - 104 Kb
重要提示
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
- 将 VssReporter.exe 复制到合适的工具位置。
- 运行它。
- 如果 ssapi.dll 未注册,您可能会被提示查找它,但如果 VSS 安装正确,这种情况不太可能发生。
使用 VssReporter
使用 VssReporter 几乎和安装它一样简单。
- 选择(或浏览)到您选择的 VSS 数据库。
注意:这将会在关闭 VssReporter 时保存,并在下次运行时恢复。 - 突出显示您要对其运行查询的 VSS 项目。
- 选择您是想查看所有人、仅您自己还是特定程序员所做的文件更改。
- 选择查询“之后”、“之前”或“之间”的日期或标签。
- 输入日期或标签。
- 点击“报告”按钮。
这将生成一个文件列表,显示在右侧列表控件中。如果滚动列表到右侧,还会显示文件的最后修改时间和修改人。
之后,您可以将结果复制到剪贴板作为格式化文本,或者右键单击单个文件并在 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
- 初始发布