[您也可以查看此文档的 单页版本。]

错误 / 问题

Subversion 不是完美的软件。它包含错误,缺少功能,并且像任何其他软件一样有改进的空间。与大多数软件项目一样,Subversion 项目使用问题跟踪工具来管理软件已知的未解决问题。但也许与大多数软件项目不同的是,我们试图让我们的问题跟踪器相对干净。这并不是说我们不想听到关于 Subversion 问题的信息——毕竟,我们无法修复我们不知道的问题。只是我们发现管理不善的问题跟踪器弊大于利。

这封邮件几乎说明了一切(除了现在你应该在发布到 dev@ 列表之前发布到 users@ 列表)。

   From: Karl Fogel <[email protected]>
   Subject: Please ask on the list before filing a new issue.
   To: [email protected]
   Date: Tue, 30 Jul 2002 10:51:24 (CDT)
   
   Folks, we're getting tons of new issues, which is a Good Thing in
   general, but some of them don't really belong in the issue tracker.
   They're things that would be better solved by a quick conversation
   here on the dev list.  Compilation problems, behavior questions,
   feature ideas that have been discussed before, that sort of thing.
   
   *Please* be more conservative about filing issues.  The issues
   database is physically much more cumbersome than email.  It wastes
   people's time to have conversations in the issues database that should
   be had in email.  (This is not a libel against the issue tracker, it's
   just a result of the fact that the issues database is for permanent
   storage and flow annotation, not for real-time conversation.)
   
   If you encounter a situation where Subversion is clearly behaving
   wrongly, or behaving opposite to what the documentation says, then
   it's okay to file the issue right away (after searching to make sure
   it isn't already filed, of course!).  But if you're
   
      a) Requesting a new feature, or
      b) Having build problems, or
      c) Not sure what the behavior should be, or
      d) Disagreeing with current intended behavior, or
      e) Not TOTALLY sure that others would agree this is a bug, or
      f) For any reason at all not sure this should be filed,
   
   ...then please post to the dev list first.  You'll get a faster
   response, and others won't be forced to use the issues database to
   have the initial real-time conversations.
   
   Nothing is lost this way.  If we eventually conclude that it should be
   in the issue tracker, then we can still file it later, after the
   description and reproduction recipe have been honed on the dev list.
   
   Thank you,
   -Karl

以下是我们在向 Subversion 报告问题或请求增强功能时要求人们遵守的政策。

如何报告错误

首先,确保这是一个错误。如果 Subversion 的行为与您的预期不符,请查看文档和邮件列表存档,以获取证据证明它应该按您的预期方式运行。当然,如果这是一个常识性的问题,比如 Subversion 只是破坏了您的数据并导致您的显示器冒烟,那么您可以相信自己的判断。但是,如果您不确定,请先在用户邮件列表 [email protected] 上询问,或在 IRC 上询问,irc.libera.chat,频道 #svn网络界面Matrix)。

您还应该在错误跟踪器中搜索,看看是否有人已经报告了此错误。

一旦您确定这是一个错误,并且我们还不知道,您能做的最重要的事情就是想出一个简单的描述和重现方法。例如,如果您最初发现的错误涉及十次提交中的五个文件,请尝试只用一个文件和一次提交来重现它。重现方法越简单,开发人员就越有可能成功重现错误并修复它。

在编写重现方法时,不要仅仅用散文描述您为使错误发生所做的事情。相反,请提供您运行的精确命令序列及其输出的文字记录。使用剪切粘贴来完成此操作。如果涉及文件,请务必包含文件名称,甚至包含您认为可能相关的内容。最好的方法是将您的重现方法打包成一个脚本;这将对我们有很大帮助。以下是一个此类脚本的示例:repro-template.sh (适用于类 Unix 系统和 Bourne shell)或 repro-template.bat(适用于 Windows shell,由 Paolo Compieta 贡献);我们欢迎为其他系统贡献类似的模板脚本。

快速检查:您*正在*运行最新版本的 Subversion,对吧?:-) 可能此错误已经修复;您应该针对最新的 Subversion 开发树测试您的重现方法。

除了重现方法之外,我们还需要您重现错误的环境的完整描述。这意味着

  • 您的操作系统
  • Subversion 的版本和/或修订版
  • 您用来构建 Subversion 的编译器和配置选项
  • 您对 Subversion 所做的任何私有修改
  • 您运行 Subversion 时使用的 Berkeley DB 版本(如果有)
  • 任何其他可能相关的因素。宁可信息过多,也不要信息过少。

准备好所有这些信息后,您就可以开始编写报告了。首先要清楚地描述错误是什么。也就是说,说明您预期 Subversion 的行为,并将其与实际行为进行对比。虽然错误对您来说可能很明显,但对其他人来说可能并不明显,因此最好避免猜测。接下来是环境描述和重现步骤。如果您还想包含关于原因的推测,甚至提供一个修复错误的补丁,那就太好了——请参阅补丁提交指南

将所有这些信息发布到[email protected],或者如果您已经在那里并被要求提交问题,那么请访问问题跟踪器并按照那里的说明操作。

感谢您。我们知道提交有效的错误报告需要很多工作,但一份好的报告可以节省开发人员数小时的时间,并使错误更有可能得到修复。

在哪里报告错误

里程碑管理

问题跟踪器里程碑是 Subversion 开发人员组织工作并与彼此以及 Subversion 用户群进行沟通的重要方面。除了主要用于进行高级问题分类的一些里程碑外,项目的 issue 跟踪器里程碑通常以反映发布版本号及其变体的方式命名。里程碑用于略微不同的目的,具体取决于问题的状态,因此了解这些区别很重要。

开放问题的里程碑

对于开放问题(状态为 OPENIN PROGRESSREOPENED 的问题),里程碑指示开发人员针对该问题解决的目标 Subversion 版本。一般情况下,我们使用 MINORVERSION-consider 形式的里程碑来表示问题的解决被视为我们希望在 MINORVERSION.0 中发布的内容。例如,我们认为可以并且应该添加到 Subversion 1.9.0 中的功能将获得 1.9-consider 里程碑。出于显而易见的原因,这些发布目标的准确性随着你向未来展望的时间越长而越差,因此,鼓励用户不要将它们视为开发人员社区的约束性承诺。

在任何给定时间,社区中都会进行“下一个重大版本”的工作。随着该版本开始成形,开发人员将更好地了解哪些问题是该版本“必须具备的”(也称为“发布阻碍者”),哪些是“不错的”,以及哪些应该完全推迟到未来的版本。问题里程碑是用于承载这些决策结果的机制。被认为是发布阻碍者的问题将从 MINORVERSION-consider 里程碑移动到 MINORVERSION.0 里程碑;“不错的”将保留 MINORVERSION-consider 里程碑;而从该版本中推迟的问题将重新标记为 ANOTHERMINORVERSION-considerunscheduled,具体取决于我们是否清楚地猜测该问题何时会得到解决。

延续之前的例子,随着 Subversion 1.9.0 开发的进行,开发者将评估我们为该版本计划的功能。如果我们认为 Subversion 1.9 应该在没有该功能的情况下发布,我们将把它的里程碑从 1.9-consider 更改为 1.9.0;如果我们希望在包含该功能的情况下发布,但不想承诺,我们将保留里程碑为 1.9-consider;如果我们知道我们不会在 1.9.x 版本系列中实现该功能,我们将把该问题的里程碑重新设置为其他版本(例如 1.10-consider)。

MINORVERSION.0 里程碑的准确性非常重要,因为开发者倾向于在主要版本发布周期的最后几天使用这些问题来集中他们的工作。

已解决问题的里程碑

对于已解决的问题(状态为 RESOLVED 且解决方案为 FIXED 的问题),问题的里程碑将承担新的作用:跟踪第一个包含该问题解决方案的 Subvesion 版本。无论给定问题的目标版本是什么,一旦它被解决,它的里程碑应该反映第一个包含该解决方案的版本的精确版本号。

其他已关闭问题的里程碑

对于其他已关闭的问题(不是“打开”且实际上没有“修复”的问题),问题的里程碑几乎没有任何意义。当问题本身被有效地忽略时,尝试维护该跟踪器字段几乎没有意义,因为它是重复的,或者因为它是一个无效或不准确的报告。

状态之间的转换

在问题状态之间转换时必须小心。已解决的打开问题需要调整其里程碑以反映第一个反映该更改的 Subversion 版本。已解决的问题如果被移植到之前的版本流,需要调整其里程碑以指向该之前版本的版本号。最后,已解决的问题如果被 REOPENED,需要重新评估其里程碑,以确定该问题是否为版本阻塞问题 (MINORVERSION.0) 或不是 (MINORVERSION-consider)。在这种情况下,查看问题的更改历史记录以了解问题被解决为已修复之前使用的里程碑可能会有所帮助。

问题分类

当一个问题被提交时,它会进入一个特殊的里程碑 "---",表示未分配里程碑。这是一个暂存区,问题会在此停留,直到有人有机会查看它们并决定如何处理。

当您按里程碑排序时,未分配里程碑的问题会首先列出,而问题分类是指浏览所有未解决的问题(从未分配里程碑的问题开始),确定哪些问题足够重要需要立即修复,哪些问题可以等到下一个版本再修复,哪些问题是现有问题的重复,哪些问题已经解决等等。对于每个将保持打开状态的问题,还需要确保各种字段设置正确:类型、子组件、平台、操作系统、版本、关键字(如果有)等等。

以下是该流程的概述(在本例中,1.5 是下一个版本,因此紧急问题将被分配到该版本)

    for i in issues_marked_as("---"):
      if issue_is_a_dup_of_some_other_issue(i):
        close_as_dup(i)
      elif issue_is_invalid(i):
        # A frequent reason for invalidity is that the reporter
        # did not follow the "buddy system" for filing.
        close_as_invalid(i)
      elif issue_already_fixed(i):
        version = fixed_in_release(i)
        move_to_milestone(i, version)
        close_as_fixed(i)
      elif issue_unreproducible(i):
        close_as_worksforme(i)
      elif issue_is_real_but_we_won't_fix_it(i):
        close_as_wontfix(i)
      elif issue_is_closeable_for_some_other_reason(i):
        close_it_for_that_reason(i)

      # Else issue should remain open, so DTRT with it...

      # Set priority, environment, component, etc, as needed.
      adjust_all_fields_that_need_adjustment(i)

      # Figure out where to put it.
      if issue_is_a_lovely_fantasy(i):
        move_to_milestone(i, "blue-sky")
      if issue_is_not_important_enough_to_block_any_particular_release(i):
        move_to_milestone(i, "nonblocking")
      elif issue_resolution_would_require_incompatible_changes(i):
        move_to_milestone(i, "2.0-consider")
      elif issue_hurts_people_somewhat(i):
        move_to_milestone(i, "1.6-consider")  # or whatever
      elif issue_hurts_people_a_lot(i):
        move_to_milestone(i, "1.5-consider")
      elif issue_hurts_and_hurts_and_should_block_the_release(i):
        move_to_milestone(i, "1.5")

如何处理安全问题

本文档介绍了 Subversion 开发人员如何响应安全问题。要报告问题,请参阅安全报告说明

Subversion 设计和实现中的安全方法

Subversion 的首要任务是保护您的数据安全。为此,Subversion 开发社区非常重视安全问题。我们证明这一点的一种方式是不假装是密码学或安全专家。我们不为 Subversion 编写大量专有的安全机制,而是更愿意教 Subversion 与那些了解该领域的人提供的安全库和协议进行互操作。例如,Subversion 将线缆加密委托给 OpenSSL 等。它将身份验证和基本授权委托给 Cyrus SASL 或 Apache HTTP Server 及其丰富的模块集合提供的机制。只要我们能够通过使用第三方库和 API 来利用安全专家的知识,我们将继续这样做。

处理报告的安全漏洞

本文档描述了我们在收到或发现可能被归类为具有安全影响的问题时采取的步骤,旨在补充Apache 指南,供提交者参考。

邮件列表

安全问题应在 [email protected] + [email protected] 上讨论。[email protected] 是一个方便的别名,指向这两个列表。(请注意,与 [email protected] 不同,它不是一个邮件列表,因此您无法单独订阅/取消订阅。)

跟踪问题

我们发布了以前安全公告的列表:https://subversion.org.cn/security/

我们在 PMC 的私有仓库中跟踪正在进行的问题:https://svn.apache.org/repos/private/pmc/subversion/security

我们遵循的程序

我们旨在遵循已发布的程序。

我们通常遵循 ASF 推荐的 程序。我们通常也会提前通知预选方;此细节在 PMC 的私有仓库中管理。

我们还有另一种程序,我们可能会使用,记录在 私下发布版本的方式 中。目前我们通常不使用此程序。