用于源代码补丁的装置和方法

文档序号:6397891阅读:113来源:国知局
专利名称:用于源代码补丁的装置和方法
技术领域
本公开一般地涉及计算机编程,更具体地说,涉及源代码补丁。
背景技术
许多软件开发都使用迭代修改-审查过程完成。开发人员修改源代码-例如,修复错误或添加新特性。然而,这种修改无法立即加入项目中-在它可以被接受之前,所述修改需要由整个团队或由项目的多个管理人员之一审查。在某些组织中,可能进行面对面审查,其中开发人员将其代码提供给审查者。然而,在许多其他组织中,开发人员遍布各个国家和时区,或者只是发现难以协调会议,并且从远方执行审查,例如通过电子邮件:开发人员将其建议的源代码修改打包在补丁文件中并将此更改信息发送给审查者。具体地说,此过程常见于对等生产模型,例如开源开发。在本公开中,“源代码补丁”或“补丁”是一组在概念上关联的源代码修改指令,例如所有修改都致力于共同目标,例如添加特性或解决现有错误。补丁可以被提供为文本文件(例如,在Unix 环境中使用diff软件实用程序生成),或者提供为源代码控制系统(例如,CVS 、Rational ClearCase 等)中的修订。在许多场合下,补丁附带有人类可读的更改描述,以使审查者更容易理解补丁。审查者可以按原样接受建议的更改,或者要求修复某些问题,之后开发人员应发送改进的补丁以进行另一轮审查-直到补丁被最终接受并“提交”到项目的主要源代码中。

发明内容
所公开的主题的一个示例性实施例是一种具有处理器的计算机化装置,所述装置包括:源代码获得器,其用于获得计算机程序的源代码;补丁指令获得器,其用于获得一组源代码补丁指令,其中第一补丁指令包括与第一源代码补丁关联的一组源代码修改指令,其中第二补丁指令包括与第二源代码补丁关联的一组源代码修改指令;源代码编辑器,其被配置为向用户同时显示所述源代码和与应用每个源代码补丁关联的批注;其中所述源代码编辑器还被配置为根据用户输入编辑所述源代码,其中基于用户输入而修改所述第一和第二源代码补丁指令。所公开的主题的另一个示例性实施例是一种由处理器执行的计算机实现的方法,所述方法包括:获得计算机程序的源代码;获得一组源代码补丁指令,其中第一补丁指令包括与第一源代码补丁关联的一组源代码修改指令,其中第二补丁指令包括与第二源代码补丁关联的一组源代码修改指令;同时显示所述源代码和与应用每个源代码补丁关联的批注;以及根据用户输入编辑所述源代码,其中基于用户输入而修改所述第一和第二源代码补丁指令。所公开的主题的另一个示例性实施例是一种计算机程序产品,包括:在其上保存计算机程序的非瞬时性计算机可读介质,其中所述计算机程序当由处理器执行时导致所述处理器:获得计算机程序的源代码;获得一组源代码补丁指令,其中第一补丁指令包括与第一源代码补丁关联的一组源代码修改指令,其中第二补丁指令包括与第二源代码补丁关联的一组源代码修改指令;同时显示所述源代码和与应用每个源代码补丁关联的批注;以及根据用户输入编辑所述源代码,其中基于用户输入而修改所述第一和第二源代码补丁指令。所公开的主题的另一个示例性实施例是一种计算机程序产品,包括:在其上保存计算机程序的源代码的非瞬时性计算机可读介质,其中所述源代码包括与源代码补丁指令关联的预处理指令;其中所述源代码补丁指令包括:第一源代码补丁指令,其包括与第一源代码补丁关联的第一组源代码修改指令,其中所述第一源代码补丁指令包括:第一指令,其用于添加第一源代码行,所述第一源代码行包括始终在包括所述第一源代码行的情况下被执行的条件预处理命令;第二指令,其用于删除第二源代码行,所述第二源代码行包括从不在包括所述第二源代码行的情况下被执行的条件预处理命令;第二源代码补丁指令,其包括与第二源代码补丁关联的第二组源代码修改指令,其中所述第二源代码补丁指令包括:第三指令,其用于添加第三源代码行,所述第三源代码行包括始终在包括所述第三源代码行的情况下被执行的条件预处理命令;由此编译所述源代码的处理器可操作以便至少通过添加所述第一源代码行、删除所述第二源代码行以及添加所述第三源代码行而自动应用所述第一和第二源代码补丁。


从下面结合附图的详细说明,将更全面地理解和领会本公开的主题,其中对应或相同的数字或字符指示对应或相同的组件。除非另外指出,否则附图提供本公开的各示例性实施例或方面,并且不限于本公开的范围。这些附图是:图1A和IB示出了根据所公开的主题的某些示例性实施例的计算机化环境的图示;图2A-2C示出了根据所公开的主题的某些示例性实施例的方法中的步骤的流程图;图3示出了根据所公开的主题的某些示例性实施例的计算机化装置的组件的方块图;以及图4示出了根据所公开的主题的示例性实施例的编辑器的图示。
具体实施例方式下面将参考根据所公开的主题的实施例的方法、装置(系统)和计算机程序产品的流程图和/或方块图对所述主题进行描述。将理解,所述流程图和/或方块图的方块以及所述流程图和/或方块图中的方块的组合可以由计算机程序指令来实现。这些计算机程序指令可以被提供给通用计算机、专用计算机、被测试处理器或其他可编程数据处理装置的一个或多个处理器以产生机器,以便通过所述计算机或其他可编程数据处理装置的处理器执行的所述指令产生用于实现在一个或多个流程图和/或方块图方块中指定的功能/操作的装置。这些计算机程序指令也可以被存储在能够引导计算机或其他可编程数据处理装置以特定方式执行功能的非瞬时性计算机可读介质中,以便存储在所述非瞬时性计算机可读介质中的所述指令产生一件包括实现在一个或多个流程图和/或方块图方块中指定的功能/操作的指令装置的制品。所述计算机程序指令还可被加载到设备、计算机或其他可编程数据处理装置,以导致在所述计算机或其他可编程装置上执行一系列操作步骤以产生计算机实现的过程,从而在所述计算机或其他可编程装置上执行的所述指令提供用于实现在一个或多个流程图和/或方块图方块中指定的功能/操作的过程。严格审查补丁 (与仅仅不经审查就批准补丁相反)变得非常困难,因为补丁变得大于一百行左右(修改、添加或删除)。当补丁发展到一千行时,审查者通常无法将大型补丁作为一个整体理解,也无法领会其中每个更改的有效性。此外,简短说明不再足以描述补丁中所有更改的理由。当向代码中添加新特性时,此类大型补丁很常见。一般而言,与理解一个执行所有类型操作的大型1000行补丁相比,更容易理解10个补丁,每个补丁包含100行功能相关代码以及有关此部分代码所执行操作的解释。因此,坚决要求高质量审查过程的项目应该坚持将大型更改分解为一系列较小的补丁。通常,应以如下方式将更改拆分为补丁:按顺序应用每个补丁之后,编译所述代码。此外,应以这样的方式拆分更改:使得易于分别解释和理解每个补丁。在某些示例性实施例中,开发人员可以向每个小型补丁添加单独说明。如果项目希望采取拆分大型补丁以便审查的做法,并且使用现有工具实现此目的,则通常将面临障碍。开发人员需要能够按照审查者的要求继续修改代码,并且通常需要重新组织拆分以使其更容易理解。开发人员需要一直执行此操作,直到代码被最终接受。在某些情况下,迭代开发和审查修改的过程可以涉及在可能包含数周或甚至更多时间的期间内,对不断发展的一组补丁进行许多更改。因此,所公开的主题处理的一个技术问题是提供一种方便的方式,以保持将修改拆分为单独补丁,同时仍然允许更改此拆分以及编辑和测试代码而不会遇到更多麻烦。没有公知的方法可方便地执行此操作。没有公知的工具可将大型补丁拆分为易于跟踪的部分,并且用于手动拆分补丁的常用工具(“diff”、“patch”以及Subversion或Git之类的版本控制系统)使得上述大部分任务难以执行。当具有多个描述大型更改的补丁时,这些工具迫使开发人员在单个补丁的上下文中工作,从而使得开发人员难以将全部修改的源代码作为一个整体查看-这通常是更好地理解,或进行可以跨多个补丁拆分的修改所必需的。使用现有工具,当将大型特性作为多个补丁进行创建或维护时,开发人员通常发现他们自己在补丁“官僚体系”方面(无数次反复应用、编辑、区分、重新应用)花费的时间远远多于实际编写代码所用的时间。一种技术解决方案是使用源代码批注指示与补丁关联的源代码行。在某些示例性实施例中,可以将批注引入源代码文件中。此外或备选地,批注可以在源代码文件的外部并被指示给使用指定编辑器编辑源代码的用户。另一种技术解决方案是在源代码文件中使用预处理命令作为批注,从而在编译源代码文件时,不编译被批注为删除的源代码行,而编译被批注为添加的源代码行。所公开的主题的一种技术效果是使其相对容易地维护和更改多个补丁的拆分,以及在拆分之后继续编辑和使用代码-这全部在固定时间内,甚至当具有多个补丁时也是如此。另一种技术效果是将全部源代码作为一个整体查看和编辑,而不仅仅作为单独的补丁文件或修订。在某些示例性实施例中,补丁具有依赖性顺序,应维护此顺序以便能够在每个补丁之后编译所述代码。所公开的主题提供一种技术解决方案,其中以一组补丁安排对源代码的修改,同时允许用户继续直接处理所述源代码。所公开的主题还使得用户能够轻松调整补丁拆分(例如,向现有补丁添加新更改,在补丁之间移动更改等)。现在参考图1A,其中示出了根据本主题的某些示例性实施例的计算机化环境。计算机化环境20包括若干开发人员(24、28、32)。所述开发人员可以共同开发软件产品,例如开源程序。在某些示例性实施例中,所述开发人员可以彼此远离并使用计算机化网络36(例如因特网)通信。每个开发人员的计算机(例如,33、34、35)可以连接到计算机化网络36。开发人员32进行的修改可以由至少一个其他开发人员(例如管理人员、审查团队等)审查、测试或以其他方式检查。现在参考图1B,其中示出了根据所公开的主题的某些实施例的单个开发人员(例如开发人员32)的计算机化环境。开发人员可以使用例如在软件中实现并由开发人员的计算机(例如,35)执行的编辑器实用程序110来编辑计算机程序的源代码。编辑器110可以使得开发人员能够指示与不同补丁关联的修改,如在下文中说明的那样。在某些示例性实施例中,编辑器110可以是通用文本编辑器。此外或备选地,根据所公开的主题,编辑器110可以被具体设计和配置为协助与不同补丁关联的源代码修改。开发人员可以使用编译器120编译编辑后的源代码。此外或备选地,如果在不需要或不支持编译的计算机程序(例如Perl)中提供源代码,则编译器120可以是解释器。编译器120可操作以便通过生成可执行文件或通过执行源代码本身来准备要执行的源代码。编译器120可以包括预处理器125,其可操作以处理预处理指令,如本领域公知的那样。开发人员可以使用例如在软件中实现并由开发人员的计算机(例如,35)执行的补丁生成器130,基于编辑后的源代码生成一个或多个补丁。在某些示例性实施例中,并且不同于用于维护补丁系列的其他系统,开发人员并不直接处理补丁文件。相反,自动从定义补丁拆分的源代码批注创建补丁文件。例如,开发人员可以批注代码的几个新行,指出这些行属于名为“patchl”的补丁。几个其他行被批注为属于“patch2”。然后,当执行根据所公开的主题的工具时,可以自动创建两个补丁文件“patchl”和“patch2”以便添加这些行。当开发人员想要编辑其更改,或者可能合并这两个补丁或从patchl中将几行拆分到新的patch3时,这些操作如同编辑代码和修改批注那样容易。所公开的主题使得开发人员能够处理单个源代码,并且不再需要在每个微小编辑之间处理一系列较长的diff、patch或版本控制命令。将使用C语言代码片段解释所公开的主题。然而,所公开的主题并不限于此编程语言,并且可以用于任何形式的源代码。考虑下面的代码片段:
权利要求
1.一种具有处理器的计算机化装置,所述装置包括: 源代码获得器,其用于获得计算机程序的源代码; 补丁指令获得器,其用于获得一组源代码补丁指令,其中第一补丁指令包括与第一源代码补丁关联的一组源代码修改指令,其中第二补丁指令包括与第二源代码补丁关联的一组源代码修改指令; 源代码编辑器,其被配置为向用户同时显示所述源代码和与应用每个源代码补丁关联的批注; 其中所述源代码编辑器还被配置为根据用户输入编辑所述源代码,其中基于用户输入而修改所述第一和第二源代码补丁指令。
2.根据权利要求1的计算机化装置,其中所述源代码编辑器被配置为以下面的方式修改所述补丁指令:将与所述第一源代码补丁关联的修改指令修改为与所述第二源代码补丁 关联。
3.根据权利要求1的计算机化装置,其中响应于来自用户的输入,所述源代码编辑器被配置为更新所述源代码以便同时修改所述源代码的第一版本和所述源代码的第二版本,其中所述源代码的所述第一版本是在其上应用所述第一源代码补丁之后的源代码;以及其中所述源代码的所述第二版本是在其上应用所述第二源代码补丁之后的所述源代码的所述第一版本。
4.根据权利要求1的计算机化装置,其中在所述源代码上首先应用所述第一源代码补丁之后,可在所述源代码上应用所述第二源代码补丁。
5.根据权利要求1的计算机化装置,其中所述源代码包括指示所述一组源代码补丁指令的批注,其中所述补丁指令获得器被配置为从所述源代码中的所述批注获得所述一组源代码补丁。
6.根据权利要求5的计算机化装置,其中所述批注被提供为所述源代码中的注释,由此可以编译所述源代码。
7.根据权利要求5的计算机化装置,其中所述批注被提供为所述源代码中的预处理指令,由此可以编译所述源代码。
8.根据权利要求7的计算机化装置,其中所述预处理指令被配置为导致预处理器应用所有补丁 ;由此在编译所述源代码时,编译已应用了所有补丁的版本。
9.根据权利要求5的计算机化装置,还包括补丁应用器,其被配置为通过应用预定补丁所依赖的所有补丁来应用所述预定补丁。
10.根据权利要求9的计算机化装置,其中所述补丁应用器被配置为修改所述预处理指令以便应用所述预定补丁所依赖的所有补丁和所述预定补丁;以及其中所述补丁应用器被配置为修改所述预处理指令以便不应用所有其他补丁。
11.根据权利要求1的计算机化装置,包括补丁生成器,其被配置为基于所述一组源代码补丁指令而生成补丁。
12.根据权利要求11的计算机化装置,其中所述补丁生成器被配置为获得所述补丁的次序,以及其中所述补丁生成器被配置为通过以下操作生成预定补丁: 通过应用由所述预定补丁决定并且不包括所述预定补丁的补丁而生成第一源代码补丁级别;通过应用由所述预定补丁决定并且包括所述预定补丁的补丁而生成第二源代码补丁级别;以及 根据所述第一源代码补丁级别和所述第二源代码补丁级别之间的差异而生成所述预定补丁。
13.一种由处理器执行的计算机实现的方法,所述方法包括: 获得计算机程序的源代码; 获得一组源代码补丁指令,其中第一补丁指令包括与第一源代码补丁关联的一组源代码修改指令,其中第二补丁指令包括与第二源代码补丁关联的一组源代码修改指令; 同时显示所述源代码和与应用每个源代码补丁关联的批注;以及 根据用户输入编辑所述源代码,其中基于用户输入而修改所述第一和第二源代码补丁指令。
14.根据权利要求13的计算机实现的方法,其中所述编辑包括:通过以下操作修改所述补丁指令:将与所述第一源代码补丁关联的修改指令修改为与所述第二源代码补丁关联。
15.根据权利要求13的计算机实现的方法,其中所述源代码包括指示所述一组源代码补丁指令的批注,其中获得所述一组源代码补丁指令的步骤包括从所述源代码中的所述批注获得所述一组源代码补丁。
16.根据权利要求1 5的计算机实现的方法,其中所述批注被提供为所述源代码中的注释,由此可以编译所述源代码。
17.根据权利要求15的计算机实现的方法,其中所述批注被提供为所述源代码中的预处理指令,由此可以编译所述源代码。
18.根据权利要求17的计算机实现的方法,其中所述预处理指令被配置为导致预处理器应用所有补丁 ;由此在编译所述源代码时,编译已应用了所有补丁的版本。
19.根据权利要求13的计算机实现的方法,还包括: 从所述源代码生成预定补丁,所述生成包括: 通过应用由所述预定补丁决定并且不包括所述预定补丁的补丁而生成第一源代码补丁级别; 通过应用由所述预定补丁决定并且包括所述预定补丁的补丁而生成第二源代码补丁级别;以及 根据所述第一源代码补丁级别和所述第二源代码补丁级别之间的差异而生成所述预定补丁。
全文摘要
本发明涉及一种用于源代码补丁的装置和方法。提供了一种对源代码补丁有用的装置、过程和产品。所述计算机化装置具有处理器,所述装置包括源代码获得器,其用于获得计算机程序的源代码;补丁指令获得器,其用于获得一组源代码补丁指令,其中第一补丁指令包括与第一源代码补丁关联的一组源代码修改指令,其中第二补丁指令包括与第二源代码补丁关联的一组源代码修改指令;源代码编辑器,其被配置为向用户同时显示所述源代码和与应用每个源代码补丁关联的批注;以及其中所述源代码编辑器还被配置为根据用户输入编辑所述源代码,其中基于用户输入而修改所述第一和第二源代码补丁指令。
文档编号G06F9/44GK103207779SQ20131001481
公开日2013年7月17日 申请日期2013年1月15日 优先权日2012年1月16日
发明者E·D·法尔基, A·戈登, N·Y·哈雷, M·肖沙 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1