CN109634591B - 一种文件处理方法及装置 - Google Patents
一种文件处理方法及装置 Download PDFInfo
- Publication number
- CN109634591B CN109634591B CN201811631391.1A CN201811631391A CN109634591B CN 109634591 B CN109634591 B CN 109634591B CN 201811631391 A CN201811631391 A CN 201811631391A CN 109634591 B CN109634591 B CN 109634591B
- Authority
- CN
- China
- Prior art keywords
- file
- header
- source
- item
- modification time
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/51—Source to source
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Stored Programmes (AREA)
Abstract
本说明书提供一种文件处理方法及装置,所述方法包括:读取预设的第一依赖关系,所述第一依赖关系包括第一目标项、第一依赖项与第一命令项,所述第一目标项为源文件、所述第一依赖项为头文件、所述第一命令项为根据所述依赖项生成所述目标项;读取所述源文件的源修改时间;读取所述头文件的头修改时间;若所述源修改时间小于所述头修改时间,则执行所述第一命令项,以根据所述头文件生成新的源文件。通过修改时间的比较,自动根据头文件生成源文件,不仅能够避免漏执行根据头文件生成源文件的操作,保证头文件与源文件一致性,而且节省了开发调试花费的时间。
Description
技术领域
本说明书涉及计算机处理的技术领域,尤其涉及一种文件处理方法及装置。
背景技术
开发平台在开发某些项目的应用时,将该应用的开发数据定义在头文件中。
例如,使用简单对象访问协议(Simple Object Access Protocol,SOAP)开发网络服务WebService,以支持其产品对外提供Web服务,不同的业务模块的WebService接口及相关数据结构定义在各自的wsdl头文件中。
开发人员在对头文件进行新增或修改或删除等编辑操作时,需要手动根据头文件生成新的源文件,再执行源文件的编译,将源文件编译成一个目标文件。
在实际开发工作中,由于技术理解深度和细心程度的问题,有些开发人员可能在修改头文件后没有根据头文件生成新的源文件,导致源文件没有同步更新,头文件中的编辑不会生效;或者,本不需要编辑头文件,但错误编辑了头文件,也没有去根据头文件生成新的源文件,此时,对头文件的任何修改不会造成任何功能问题,但是,如果该开发人员提交了该头文件,后续根据头文件生成新的源文件时,此次编辑的影响就会体现出来,造成功能问题。
对于头文件与源文件不一致的问题,当前主要依靠以下两点进行防范:
一、宣传编程规范和代码管理规范,要求开发人员在修改头文件后立即根据头文件生成新的源文件,并对相关修改进行充分验证,同时加强代码审核,防止出现误修改。
二、规定提交头文件之前使用代码规范性检查脚本对所修改代码的规范性进行检查,若发现有头文件被编辑,则提醒开发人员根据头文件生成新的源文件。
发明内容
为克服相关技术中存在的问题,本说明书提供了一种文件处理方法及装置。
根据本说明书实施例的第一方面,提供一种文件处理方法,包括:
读取预设的第一依赖关系,所述第一依赖关系包括第一目标项、第一依赖项与第一命令项,所述第一目标项为源文件、所述第一依赖项为头文件、所述第一命令项为根据所述依赖项生成所述目标项;
读取所述源文件的源修改时间;
读取所述头文件的头修改时间;
若所述源修改时间小于所述头修改时间,则执行所述第一命令项,以根据所述头文件生成新的源文件。
根据本说明书实施例的第二方面,提供一种文件处理装置,包括:
第一依赖关系读取模块,用于读取预设的第一依赖关系,所述第一依赖关系包括第一目标项、第一依赖项与第一命令项,所述第一目标项为源文件、所述第一依赖项为头文件、所述第一命令项为根据所述依赖项生成所述目标项;
源修改时间读取模块,用于读取所述源文件的源修改时间;
头修改时间读取模块,用于读取所述头文件的头修改时间;
第一命令项执行模块,用于若所述源修改时间小于所述头修改时间,则执行所述第一命令项,以根据所述头文件生成新的源文件。
根据本说明书实施例的第三方面,提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如下方法:
读取预设的第一依赖关系,所述第一依赖关系包括第一目标项、第一依赖项与第一命令项,所述第一目标项为源文件、所述第一依赖项为头文件、所述第一命令项为根据所述依赖项生成所述目标项;
读取所述源文件的源修改时间;
读取所述头文件的头修改时间;
若所述源修改时间小于所述头修改时间,则执行所述第一命令项,以根据所述头文件生成新的源文件。
本说明书的实施例提供的技术方案可以包括以下有益效果:
本说明书实施例中,读取预设的第一依赖关系,第一依赖关系包括第一目标项、第一依赖项与第一命令项,第一目标项为源文件、第一依赖项为头文件、第一命令项为根据依赖项生成目标项,读取源文件的源修改时间,读取头文件的头修改时间,若源修改时间小于头修改时间,则执行第一命令项,以根据头文件生成新的源文件,通过修改时间的比较,自动根据头文件生成源文件,不仅能够避免漏执行根据头文件生成源文件的操作,保证头文件与源文件一致性,而且节省了开发调试花费的时间。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实施例,并与说明书一起用于解释本说明书的原理。
图1是本说明书根据一示例性实施例示出的一种文件处理方法的流程图。
图2是本说明书根据一示例性实施例示出的另一种文件处理方法的流程图。
图3是本说明书实施例文件处理装置所在计算机设备的一种硬件结构图。
图4是本说明书根据一示例性实施例示出的一种文件处理装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
接下来对本说明书实施例进行详细说明。
如图1所示,图1是本说明书根据一示例性实施例示出的一种文件处理方法的流程图,包括以下步骤:
步骤101、读取预设的第一依赖关系。
在具体实现中,本说明书实施例可应用于版本管理工具,如SVN(Subversion,时间机器),该版本管理工具包括服务器(保存代码的服务器一般称为代码服务器)和客户端,可用于多个人共同开发同一个项目,共用资源。
开发项目时,一般都会使用版本管理工具对该项目的文件和文档资料进行管理,服务器中会保存原始的文件,开发人员在客户端中通过签出操作操作获取该项目中文件的副本,通过提交操作向服务器提交本地副本中的编辑,通过更新操作获取本地已有项目的文件的最新版本。
开发人员在客户端的每次提交操作都会在服务器中产生一个提交记录和递增的版本号,开发人员可以指定签出或更新指定版本号的文件。
在本说明书实施例中,以应用简单对象访问协议SOAP制作网络服务WebService作为开发项目的示例。
简单对象访问协议SOAP是一种轻量的、简单的、基于XML(Extensible MarkupLanguage,可扩展标记语言)的协议,它被设计成在Web上交换结构化的和固化的信息。
网络服务WebService是一个应用程序,它向外界暴露出一个可以通过Web进行调用的API(Application Programming Interface,应用程序编程接口),是分布式的服务组件,本质上就是要以标准的形式实现企业内外各个不同服务系统之间的互调和集成。
简单对象访问协议SOAP是一个基于XML格式的web交互协议,而网络服务WebService是一种使用web方式实现的功能,如同网络视频服务器和HTTP(HyperTextTransfer Protocol,超文本传输协议)的关系,就是这里的网络服务WebService服务器和简单对象访问协议SOAP的关系。
在本示例中,通常使用gSOAP(一种跨平台的C和C++软件开发工具包)应用简单对象访问协议SOAP制作网络服务WebService。
gSOAP是一种能够把C/C++语言的接口转换成基于简单对象访问协议SOAP的网络服务WebService的工具集,其中包括wsdl2h和soapcpp。
wsdl2h利用WSDL(Web Services Description Language,网络服务描述语言)和XML schemas(可扩展标记语言架构)生成包含WS属性和操作的C++风格gSOAP头文件,即wsdl头文件。
soapcpp用于根据wsdl头文件生成客户端/服务端等开发需要的C/C++文件,即soap C文件。
例如,执行soapcpp-SLc wsdl_xxx.h生成的soap C文件如下:
soapC.c soapH.h soapServer.c soapStup.h
需要说明的是,wsdl2h并不一定是必要的,因为很多基于C/C++语言的开发项目中开发人员可直接编辑wsdl头文件,但是,soap C文件一般是通过soapcpp生成,开发人员一般不会手动修改soap C文件。
wsdl头文件与C/C++头文件相比较,二者一般都是以.h作为文件扩展名,但存在如下区别:
一、文件内容的语法不同。
wsdl头文件是按SOAP协议规定的语法进行编写,C/C++头文件是按C/C++语言的语法进行编写。
二、C/C++头文件是被C/C++源文件或其它C/C++头文件包含的文件,要参与对目标文件的编译,错误编辑该文件后进行编译,会导致编译失败或功能异常。
而wsdl头文件不会被C/C++头文件或源文件包含,其被编辑后,需要另行翻译成soap C(源文件),否则对现有C/C++源码的编译和功能没有任何影响。
在实际应用中,在版本管理工具中设置有第一依赖关系,第一依赖关系包括第一目标项、第一依赖项与第一命令项。
以Makefile作为实现第一依赖关系的示例,Makefile是make命令的配置文件,决定了make时所进行的操作。
在此示例中,第一目标项为target、第一依赖项为prerequisites,第一命令项为command。
target可以是Object File(对象文件),也可以是执行文件,还可以是一个标签(Label)。
Prerequisites可以是要生成那个target所需要的文件或是目标。
command也就是make需要执行的命令,可以是任意的Shell(壳)命令。
这是一个文件的依赖关系,也就是说,target的文件依赖于prerequisites中的文件,其生成规则定义在command中。
对于Makefile,prerequisites中如果有一个以上的文件比target的文件要新的话,command所定义的命令就会被执行。
在本说明书实施例中,第一目标项为源文件(由特定wsdl源文件翻译生成的soapC文件)、第一依赖项为上述wsdl头文件、第一命令项为根据依赖项生成目标项。
其中,在头文件中,记录了生成源文件的相关参数。
源文件,是相对于编译而言的,即使用源语言编写的源程序。
对于应用简单对象访问协议SOAP制作网络服务WebService,该源文件可以为应用简单对象访问协议SOAP的源文件,即soap C文件,该头文件可以为应用简单对象访问协议SOAP的头文件,即wsdl头文件。
一个wsdl文件的根元素是definitions元素,包含如下元素:
1、types
Types为数据类型定义的容器,它使用某种类型系统(一般地使用XML Schema中的类型系统)。
2、import
import元素可以让当前的wsdl文件使用其他wsdl文件中指定命名空间中的定义。
3、message
Message为通信消息的数据结构的抽象类型化定义,使用types所定义的类型来定义整个消息的数据结构。
4、portType
portType为对于某个访问入口点类型所支持的操作的抽象集合,这些操作可以由一个或多个服务访问点来支持。
5、operation
operation对服务中所支持的操作的抽象描述,一般单个operation描述了一个访问入口的请求/响应消息对。
6、binding
binding为特定端口类型的具体协议和数据格式规范的绑定。
7、service
service为相关服务访问点的集合。
需要说明的是,第一依赖关系先于Makefile等工具中原有的依赖关系(即用于执行目标文件编译的依赖关系)执行。
步骤102、读取所述源文件的源修改时间。
在实际应用中,源文件的源修改时间为最近修改时间(或者称最后修改时间),为源文件自身的属性。
在版本管理工具中,可调用指定的查询命令,检测源文件的属性,从而获知源修改时间。
例如,在SVN中,可调用get_last_mtime查询某个文件(以存储地址表示,如URL(Uniform Resource Locator,统一资源定位符))的最后修改时间。
如果查询失败,则返回undef,如果查询成功,则返回时间字符串,如20140821130515。
步骤103、读取所述头文件的头修改时间。
在实际应用中,头文件的头修改时间为最近修改时间(或者称最后修改时间),为头文件自身的属性。
在版本管理工具中,可调用指定的查询命令,检测头文件的属性,从而获知头修改时间。
步骤104、若所述源修改时间小于所述头修改时间,则执行所述第一命令项,以根据所述头文件生成新的源文件。
在本说明书实施例中,如果源文件的源修改时间小于头文件的头修改时间,即目标项的最近修改时间(或者称最后修改时间)小于依赖项的最近修改时间(或者称最后修改时间),则可以执行第一命令项,即根据依赖项生成目标项,从而根据所头文件生成新的源文件,更新源文件。
对于应用简单对象访问协议SOAP制作网络服务WebService,则可以运行soapcpp,根据wsdl头文件生成新的soap C文件。
如图2所示,是根据一示例性实施例示出的另一种文件处理方法的流程图,包括如下步骤:
步骤201、确定具有关联关系的头文件。
步骤202、确定所述头文件的最近修改时间。
步骤203、更新所述头文件的头修改时间为值最大的所述最近修改时间。
在本说明书实施例中,所谓关联关系,可以指包含关系,包括直接包含关系与间接包含关系。
进一步而言,当前某个模块目录下的头文件,如果当前的头文件中记录有其它头文件,则当前头文件直接包含该其它头文件(即关联关系为直接包含关系),若当前的头文件直接包含的头文件中包含其他头文件,则当前的头文件间接包含该其它头文件(即关联关系为间接包含关系)。
例如,头文件A中包含头文件B,头文件B中包含头文件C,则头文件A与头文件B的关联关系为直接包含关系,头文件A与头文件C的关联关系为间接包含关系。
在具体实现中,由于头文件存在包含其它头文件的情况,因此,在模块目录下的头文件及它直接或间接包含的其它所有头文件,都加入第一依赖关系的第一依赖项中。
由于某个头文件包含其它头文件的语法与C语言不同,C编译器不支持直接检查,因此,可实现一个头文件包含关系的分析单元,其可读取头文件中指定的标记,该标记后的字符串即为其所包含的其它头文件(以存储地址表示)。
例如,该指定的标记可以为wsdl头文件非注释行中的import元素,该import元素具有namespace属性和location属性:
namespace属性:值与正导入的wsdl头文件中声明的targetNamespace相匹配。
location属性:指向一个实际的wsdl头文件,并且该wsdl头文件不能为空。
对于头文件,可对比这些头文件的最近修改时间(或者称最后修改时间),以值最大的最近修改时间(或者称最后修改时间)设置为所述头文件的头修改时间。
当然,如果头文件为单独一个,则值最大的最近修改时间(或者称最后修改时间)为其本身的最近修改时间(或者称最后修改时间)。
步骤204、若不存在源文件,则将第一依赖关系中的第一目标项设置为源文件的文件名。
在实际应用中,可判断模块目录下是否存在源文件,在如下情况中,可能会发生头文件存在,而源文件不存在的情况。
其中一种情况是,头文件是新增的,开发人员尚未执行根据头文件生成源文件的命令(如soapcpp),尚未生成源文件就执行编译了。
另外一种情况是,由于开发人员在版本管理工具中更新客户端本地的头文件时,由于其他开发人员向服务器提交了对同一头文件的修改,因而本地更新源文件时出现冲突,由于源文件是通过工具自动生成的,没必要手动解决冲突,开发人员有可能直接删除冲突状态的源文件,后续执行根据头文件生成源文件的命令(如soapcpp)时,可以重新生成源文件,但是,在编译源文件前未执行根据头文件生成源文件的命令(如soapcpp)。
对于头文件存在而相应的源文件不存在的这种情况,要执行根据头文件生成源文件的命令(如soapcpp),以生成新的源文件,因此,在本实施例中,由于已知源文件的文件名,因此,可将第一目标项为源文件的文件名,后续检查第一依赖关系时,按照Makefile等工具的规则,此时会触发执行第一命令项。
步骤205、若存在源文件,则确定所述源文件的源编辑状态。
步骤206、若所述源编辑状态为冲突状态,则确定第一目标时间。
其中,第一目标时间大于源文件的源修改时间。
步骤207、更新所述头文件的头修改时间为所述第一目标时间。
在具体实现中,若开发人员修改了某个头文件并执行了根据头文件生成源文件的命令(如soapcpp),从而生成了新的源文件,后续在版本管理工具执行更新操作时与其他开发人员对相同的源文件作的修改发生了冲突,使源文件处于冲突状态。
由于冲突状态的文件中用特殊字符串标记了差异信息,这种特殊字符串不符合编程语言的语法,如果直接编译冲突状态的源文件,会导致编译失败。
在头文件正确的情况下,重新执行根据头文件生成源文件的命令(如soapcpp),即可生成新的源文件,之前的差异信息会被抹除,从而能够正常编译。
因此,在本说明书实施例中,对于任一源文件为冲突状态的情况,则可以将相应的头文件的头修改时间设置为大于源文件的源修改时间的第一目标时间,例如,将当前的系统时间设置为第一目标时间。
进一步地,为了减少修改量,可直接将直接包含的头文件的最近修改时间修改为第一目标时间,即可将具有关联关系的头文件的头修改时间设置为第一目标时间。
从而在后续检查第一依赖关系时,头文件的头修改时间大于源文件的源修改时间,从而触发执行第一命令项,生成新的源文件。
步骤208、若所述源编辑状态非冲突状态,则确定头文件的头编辑状态。
步骤209、根据所述头编辑状态对所述源文件的源修改时间进行处理。
步骤210、将所述源文件设置为第一依赖关系中的第一目标项。
在本说明书实施例中,对于任一源文件非冲突状态的情况,在不需要执行第一依赖关系中的第一命令项(即根据头文件生成源文件,如soapcpp)的情况下,有可能因为签出或更新本地代码时先签出或更新了源文件,后更新了相应的头文件等原因,造成头文件的头修改时间大于源文件中的源修改时间,从而触发执行第一命令项。
这种情况虽然不会影响功能(更新源文件中记录的源修改时间),但是会影响代码的编译效率。
假设在通过版本管理工具签出一套代码时,先签出了包含源文件在内的源文件,然后才签出了头文件,这将导致整套代码所有头文件都会被重新执行第一命令项,从而大大拉长代码的编译时间。
这个问题在编译服务器上尤其容易发生,一旦发生会严重影响代码编译和版本发布的效率。
为了解决这个问题,在本说明书实施例中,可通过版本管理工具的命令,对头文件的编辑状态进行检查,从而对源文件的源修改时间进行相应的处理。
以SVN作为版本管理工具的示例,从服务器签出到客户端上的文件,通常会有如下几种状态(用svn st可见文件标记状态):
普通状态(标记为空):客户端上的文件与服务器上同一文件的内容完全一致。
未知状态(标记为?):客户端新增的文件,服务器上同一目录下无此文件,客户端尚未将其纳入svn控制。(该状态的文件不可提交至服务器)
新增状态(标记为A):客户端新增的文件,服务器上同一目录下无此文件,客户端已将其纳入svn控制,尚未提交。(提交后转换为无状态)
修改状态(标记为M):文件存在于服务器上,但客户端的文件的内容与服务器上同一文件有所不同。(提交后转换为无状态)
失踪状态(标记为!):文件已从客户端删除,但仍存在于服务器上。(执行更新操作可从服务器恢复;该状态的文件不可提交至服务器)
删除状态(标记为D):文件已从客户端删除,但尚未提交。(提交后从服务器消失)
冲突状态(标记为C):修改状态的文件执行更新操作时,该修改与服务器上他人提交的同一位置的修改有所不同。冲突行附近会添加表示本地文件、原始文件和服务器上指定版本的文件的差异信息。(该状态的文件不可提交至服务器)
在此示例中,可将普通状态视为未修改状态,可将未知状态、新增状态、修改状态视为已修改状态。
在一种情况中,若头编辑状态为已修改状态(即客户端的头文件与服务器的头文件不一致),则可以读取源文件的生成时间,更新源文件的源修改时间为源文件的生成时间。
需要说明的是,源文件的生成时间为根据头文件最近一次生成该源文件的时间。
进一步而言,每次根据头文件生成源文件时,均会记录执行的时间。
对于应用简单对象访问协议SOAP制作网络服务WebService,执行soapcpp命令时,soapcpp命令均会在对应的soapC.c和soapServer.c中记录执行soapcpp命令的时间戳,作为生成时间。
例如,假设以SOAP_SOURCE_STAMP开头的行中即记录了根据wsdl头文件生成soapC文件的时间:
soapC.c:SOAP_SOURCE_STAMP(“@(#)soapC.c ver 2.8.43 2018-04-02 07:15:37GMT”)
soapServer.c:SOAP_SOURCE_STAMP(“@(#)soapServer.c ver 2.8.43 2018-04-02 07:15:37GMT”)
在本示例中,soapC.c和soapServer.c中记录执行soapcpp命令的时间戳均为2018-04-02 07:15:37。
因此,可以检查源文件的生成时间,源修改时间时以该生成时间为准,而不以源文件自带属性中的最近修改时间(或者称最后修改时间)为准。
而头文件如果被开发人员手动修改,其头修改时间会晚于源文件中记录的源修改时间(即生成时间),因此避免了漏执行第一命令项的可能。
在另一种情况中,若头编辑状态为未修改状态(即客户端的头文件与服务器的头文件一致),则确定第二目标时间。
其中,该第二目标时间大于头修改时间,例如,可将当前的系统时间设置为第二目标时间。
使用Linux操作系统中的touch<file>等命令,可将目标时间更新源文件的源修改时间,即将该第二目标时间赋值给源文件新的源修改时间,使得源文件的源修改时间大于头文件的头修改时间,从而避免触发执行第一命令项。
需要说明的是,如果头文件为冲突状态,执行根据头文件生成源文件的命令(如soapcpp)时,会因差异信息的存在导致解析失败,当前源文件以外的其它源文件编译时,若为冲突状态也会因此编译失败。因此,开发人员执行版本管理工具的更新操作时,若有文件变为冲突状态,一般都会先解决冲突,将文件恢复为修改状态或其它正常状态,因此,对于头文件为冲突状态可以不考虑。
步骤211、将所述头文件设置为第一依赖关系中的第一依赖项。
在本实施例说明书中,将头修改时间为最近修改时间或者第一目标时间的头文件,设置为第一依赖关系中的第一依赖项。
在本实施例说明书中,由于Makefile等工具的语法支持读文件属性中的最近修改时间(或者称最后修改时间),而不支持读文件内容中特定行中的时间戳。
为了兼容Makefile等工具语法实现简化处理,可增加第二依赖关系,第二依赖关系包括第二目标项、第二依赖项与第二命令项。
其中,第二目标项为指定的标签,第二依赖项为空,
若确定第二目标项为指定的标签,即第二目标项声明为伪目标(当一个目标项被声明为伪目标后,make在执行此规则时不会试图去查找该目标项的依赖项,而是执行一些辅助命令,如第二命令项),则可以执行第二命令项。
因此,可读取预设的第二依赖关系,以及,执行所述第二命令项,以执行如下至少一种操作:
若不存在源文件,则将第一依赖关系中的第一目标项设置为源文件的文件名;
或者,
若存在源文件,则确定所述源文件的源编辑状态;
若所述源编辑状态为冲突状态,则确定第一目标时间,所述第一目标时间大于源文件的源修改时间;
更新所述头文件的头修改时间为所述第一目标时间;
若所述源编辑状态非冲突状态,则确定头文件的头编辑状态;
根据所述头编辑状态对所述源文件的源修改时间进行处理;
将所述源文件设置为第一依赖关系中的第一目标项;
或者,
确定具有关联关系的头文件;
确定所述头文件的最近修改时间;
将值最大的所述最近修改时间设置为所述头文件的头修改时间;
将所述头文件设置为第一依赖关系中的第一依赖项。
步骤212、读取预设的第一依赖关系。
其中,第一依赖关系包括第一目标项、第一依赖项与第一命令项。
第一目标项为源文件、第一依赖项为头文件、第一命令项为根据依赖项生成目标项。
步骤213、读取所述源文件的源修改时间。
步骤214、读取所述头文件的头修改时间。
步骤215、若所述源修改时间大于所述头修改时间,则将所述源文件编译为目标文件。
在具体实现中,在执行步骤201-步骤211之后,可保证源文件的源修改时间大于头文件的头修改时间,此时,可以将代码输出至编译服务器,将源文件编译为目标文件。
其中,编译服务器为用于定期编译开发项目全套代码、生成软件版本并进行发布的服务器。
编译服务器会在预设的时间点从代码服务器签出开发项目的全套代码进行编译,生成软件版本并发布。
使用编译服务器而不使用开发人员本地环境编译和发布软件版本,可排除开发人员本地有修改未提交的情况,确保发布的软件版本总是使用正式提交到代码服务器的代码进行编译的结果。
由于编译服务器只签出代码并进行编译,而不会对代码作任何修改,因此应用此机制后,编译服务器上编译代码时,不会有任何模块触发对头文件进行时间检查及进行后续的根据头文件生成源文件的操作,从而避免了影响编译服务器编译代码和发布版本的效率;而开发人员在平时开发维护工作中,一般只会修改一两个模块的头文件,即使偶尔因更新本地代码而触发某模块重新执行根据头文件生成源文件的操作,花费的时间也很少(短则一两秒,多则十秒左右,与头文件的内容长度有关);一旦执行过根据头文件生成源文件的操作,如果不再通过版本管理工具更新头文件,则后续编译时就不会再触发执行根据头文件生成源文件的操作,从而该项检查能够最大程度地避免误执行根据头文件生成源文件的操作,避免浪费编译代码的时间。
当然,除了当前的源文件之外,还可以将其他源文件一同进行编译,从而生成目标文件,本说明书实施例对此不加以限制。
对于应用简单对象访问协议SOAP制作网络服务WebService,则将soap C文件与实现网络服务WebService接口的C文件共同编译成一个目标文件-网络服务WebService共享库文件,即为提供后台服务的web后台程序。
需要说明的是,第二依赖关系可先于第一依赖关系执行,第一依赖关系可先于Makefile等工具中原有的依赖关系(即用于执行目标文件编译的依赖关系)执行。
若某开发人员在某模块新增了头文件,调试通过后,由于源文件是自动生成的,不是开发人员手动新增和编辑的,故缺乏经验的开发人员经常提交时却只提交了该头文件而遗漏提交相关的源文件,其它开发人员或编译服务器更新代码后进行编译时,根据本说明书实施例,也会执行相应第一命令项生成对应的源文件,因而,该模块能正确编译且模块功能正常,从而减少了因开发人员失误忘提交新增的源文件而引入功能问题的概率。
与前述方法的实施例相对应,本说明书还提供了装置及其所应用的终端的实施例。
本说明书文件处理装置的实施例可以应用在计算机设备上,例如服务器或终端设备。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在文件处理的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图3所示,为本说明书实施例文件处理装置所在计算机设备的一种硬件结构图,除了图3所示的处理器310、内存330、网络接口320、以及非易失性存储器340之外,实施例中装置331所在的服务器或电子设备,通常根据该计算机设备的实际功能,还可以包括其他硬件,对此不再赘述。
如图4所示,图4是本说明书根据一示例性实施例示出的一种文件处理装置的框图,所述装置包括:
第一依赖关系读取模块401,用于读取预设的第一依赖关系,所述第一依赖关系包括第一目标项、第一依赖项与第一命令项,所述第一目标项为源文件、所述第一依赖项为头文件、所述第一命令项为根据所述依赖项生成所述目标项;
源修改时间读取模块402,用于读取所述源文件的源修改时间;
头修改时间读取模块403,用于读取所述头文件的头修改时间;
第一命令项执行模块404,用于若所述源修改时间小于所述头修改时间,则执行所述第一命令项,以根据所述头文件生成新的源文件。
在本说明书中的一个实施例中,还包括:
文件名设置模块,用于若不存在源文件,则将第一依赖关系中的第一目标项设置为源文件的文件名。
在本说明书中的一个实施例中,还包括:
源编辑状态确定模块,用于若存在源文件,则确定所述源文件的源编辑状态;
第一目标时间确定模块,用于若所述源编辑状态为冲突状态,则确定第一目标时间,所述第一目标时间大于源文件的源修改时间;
头修改时间更新模块,用于更新所述头文件的头修改时间为所述第一目标时间;
头编辑状态确定模块,用于若所述源编辑状态非冲突状态,则确定头文件的头编辑状态;
源修改时间处理模块,用于根据所述头编辑状态对所述源文件的源修改时间进行处理;
目标项设置模块,用于将所述源文件设置为第一依赖关系中的第一目标项。
在本说明书中的一个实施例中,所述源修改时间处理模块包括:
生成时间更新子模块,用于若所述头编辑状态为已修改状态,则更新所述源文件的源修改时间为所述生成时间,所述源文件的生成时间为根据所述头文件生成所述源文件的时间。
在本说明书中的一个实施例中,所述源修改时间处理模块包括:
第二目标时间确定子模块,用于若所述头编辑状态为未修改状态,则确定第二目标时间,所述第二目标时间大于所述头修改时间;
源修改时间更新子模块,用于更新所述源文件的源修改时间为所述第二目标时间。
在本说明书中的一个实施例中,还包括:
头文件确定模块,用于确定具有关联关系的头文件;
头文件确定模块,用于确定所述头文件的最近修改时间;
头修改时间设置模块,用于更新所述头文件的头修改时间为值最大的所述最近修改时间;
依赖项设置模块,用于将所述头文件设置为第一依赖关系中的第一依赖项。
在本说明书中的一个实施例中,还包括:
第二依赖关系读取模块,用于读取预设的第二依赖关系,所述第二依赖关系包括第二目标项、第二依赖项与第二命令项,所述第二目标项为指定的标签,所述第二依赖项为空;
第二命令项执行模块,用于执行所述第二命令项,以执行如下至少一种操作:
若不存在源文件,则将第一依赖关系中的第一目标项设置为源文件的文件名;
或者,
若存在源文件,则确定所述源文件的源编辑状态;
若所述源编辑状态为冲突状态,则确定第一目标时间,所述第一目标时间大于源文件的源修改时间;
更新所述头文件的头修改时间为所述第一目标时间;
若所述源编辑状态非冲突状态,则确定头文件的头编辑状态;
根据所述头编辑状态对所述源文件的源修改时间进行处理;
将所述源文件设置为第一依赖关系中的第一目标项;
或者,
确定具有关联关系的头文件;
确定所述头文件的最近修改时间;
将值最大的所述最近修改时间设置为所述头文件的头修改时间;
将所述头文件设置为第一依赖关系中的第一依赖项。
在本说明书中的一个实施例中,还包括:
源文件编译模块,用于若所述源修改时间大于所述头修改时间,则将所述源文件编译为目标文件。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书实施例中,读取预设的第一依赖关系,第一依赖关系包括第一目标项、第一依赖项与第一命令项,第一目标项为源文件、第一依赖项为头文件、第一命令项为根据依赖项生成目标项,读取源文件的源修改时间,读取头文件的头修改时间,若源修改时间小于头修改时间,则执行第一命令项,以根据头文件生成新的源文件,通过修改时间的比较,自动根据头文件生成源文件,不仅能够避免漏执行根据头文件生成源文件的操作,保证头文件与源文件一致性,而且节省了开发调试花费的时间。
相应的,本说明书还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如下方法:
读取预设的第一依赖关系,所述第一依赖关系包括第一目标项、第一依赖项与第一命令项,所述第一目标项为源文件、所述第一依赖项为头文件、所述第一命令项为根据所述依赖项生成所述目标项;
读取所述源文件的源修改时间;
读取所述头文件的头修改时间;
若所述源修改时间小于所述头修改时间,则执行所述第一命令项,以根据所述头文件生成新的源文件。
本说明书实施例中,读取预设的第一依赖关系,第一依赖关系包括第一目标项、第一依赖项与第一命令项,第一目标项为源文件、第一依赖项为头文件、第一命令项为根据依赖项生成目标项,读取源文件的源修改时间,读取头文件的头修改时间,若源修改时间小于头修改时间,则执行第一命令项,以根据头文件生成新的源文件,通过修改时间的比较,自动根据头文件生成源文件,不仅能够避免漏执行根据头文件生成源文件的操作,保证头文件与源文件一致性,而且节省了开发调试花费的时间。
上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本领域技术人员在考虑说明书及实践这里申请的发明后,将容易想到本说明书的其它实施方案。本说明书旨在涵盖本说明书的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本说明书的一般性原理并包括本说明书未申请的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本说明书的真正范围和精神由下面的权利要求指出。
应当理解的是,本说明书并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本说明书的范围仅由所附的权利要求来限制。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。
Claims (10)
1.一种文件处理方法,包括:
读取预设的第一依赖关系,所述第一依赖关系包括第一目标项、第一依赖项与第一命令项,所述第一目标项为源文件、所述第一依赖项为头文件、所述第一命令项为根据所述依赖项生成所述目标项;
读取所述源文件的源修改时间;
读取所述头文件的头修改时间;
若所述源修改时间小于所述头修改时间,则执行所述第一命令项,以根据所述头文件生成新的源文件。
2.根据权利要求1所述的方法,其特征在于,还包括:
若不存在源文件,则将第一依赖关系中的第一目标项设置为源文件的文件名。
3.根据权利要求1所述的方法,其特征在于,还包括:
若存在源文件,则确定所述源文件的源编辑状态;
若所述源编辑状态为冲突状态,则确定第一目标时间,所述第一目标时间大于源文件的源修改时间;
更新所述头文件的头修改时间为所述第一目标时间;
若所述源编辑状态非冲突状态,则确定头文件的头编辑状态;
根据所述头编辑状态对所述源文件的源修改时间进行处理;
将所述源文件设置为第一依赖关系中的第一目标项。
4.根据权利要求3所述的方法,其特征在于,所述根据所述头编辑状态对所述源文件的源修改时间进行处理,包括:
若所述头编辑状态为已修改状态,则读取所述源文件的生成时间,更新所述源文件的源修改时间为所述源文件的生成时间,所述源文件的生成时间为根据所述头文件生成所述源文件的时间。
5.根据权利要求3所述的方法,其特征在于,所述根据所述头编辑状态对所述源文件的源修改时间进行处理,包括:
若所述头编辑状态为未修改状态,则确定第二目标时间,所述第二目标时间大于所述头修改时间;
更新所述源文件的源修改时间为所述第二目标时间。
6.根据权利要求1所述的方法,其特征在于,还包括:
确定具有关联关系的头文件;
确定所述头文件的最近修改时间;
更新所述头文件的头修改时间为值最大的所述最近修改时间;
将所述头文件设置为第一依赖关系中的第一依赖项。
7.根据权利要求1-6任一项所述的方法,其特征在于,还包括:
读取预设的第二依赖关系,所述第二依赖关系包括第二目标项、第二依赖项与第二命令项,所述第二目标项为指定的标签,所述第二依赖项为空;
执行所述第二命令项,以执行如下至少一种操作:
若不存在源文件,则将第一依赖关系中的第一目标项设置为源文件的文件名;
或者,
若存在源文件,则确定所述源文件的源编辑状态;
若所述源编辑状态为冲突状态,则确定第一目标时间,所述第一目标时间大于源文件的源修改时间;
更新所述头文件的头修改时间为所述第一目标时间;
若所述源编辑状态非冲突状态,则确定头文件的头编辑状态;
根据所述头编辑状态对所述源文件的源修改时间进行处理;
将所述源文件设置为第一依赖关系中的第一目标项;
或者,
确定具有关联关系的头文件;
确定所述头文件的最近修改时间;
将值最大的所述最近修改时间设置为所述头文件的头修改时间;
将所述头文件设置为第一依赖关系中的第一依赖项。
8.根据权利要求1-6任一项所述的方法,其特征在于,还包括:
若所述源修改时间大于所述头修改时间,则将所述源文件编译为目标文件。
9.一种文件处理装置,包括:
第一依赖关系读取模块,用于读取预设的第一依赖关系,所述第一依赖关系包括第一目标项、第一依赖项与第一命令项,所述第一目标项为源文件、所述第一依赖项为头文件、所述第一命令项为根据所述依赖项生成所述目标项;
源修改时间读取模块,用于读取所述源文件的源修改时间;
头修改时间读取模块,用于读取所述头文件的头修改时间;
第一命令项执行模块,用于若所述源修改时间小于所述头修改时间,则执行所述第一命令项,以根据所述头文件生成新的源文件。
10.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如下方法:
读取预设的第一依赖关系,所述第一依赖关系包括第一目标项、第一依赖项与第一命令项,所述第一目标项为源文件、所述第一依赖项为头文件、所述第一命令项为根据所述依赖项生成所述目标项;
读取所述源文件的源修改时间;
读取所述头文件的头修改时间;
若所述源修改时间小于所述头修改时间,则执行所述第一命令项,以根据所述头文件生成新的源文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811631391.1A CN109634591B (zh) | 2018-12-29 | 2018-12-29 | 一种文件处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811631391.1A CN109634591B (zh) | 2018-12-29 | 2018-12-29 | 一种文件处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109634591A CN109634591A (zh) | 2019-04-16 |
CN109634591B true CN109634591B (zh) | 2022-03-01 |
Family
ID=66079360
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811631391.1A Active CN109634591B (zh) | 2018-12-29 | 2018-12-29 | 一种文件处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109634591B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110262997A (zh) * | 2019-05-06 | 2019-09-20 | 阿里巴巴集团控股有限公司 | 用于管理公共文件的方法和系统 |
CN111045748B (zh) * | 2019-12-04 | 2023-06-30 | 方正株式(武汉)科技开发有限公司 | 快速读取配置文件的方法及系统、服务器及介质 |
CN112114903B (zh) * | 2020-09-28 | 2023-10-24 | 中国银行股份有限公司 | 文件加载方法及装置 |
CN112965946B (zh) * | 2021-03-31 | 2022-12-13 | 建信金融科技有限责任公司 | 处理文档的方法、装置、设备和计算机可读介质 |
CN113448553B (zh) * | 2021-06-23 | 2023-11-03 | 南京大学 | 一种c语言项目依赖信息管理和可视化的方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0350628A (ja) * | 1989-07-18 | 1991-03-05 | Nec Corp | ソースファイルを利用したメイク・ファイル作成方式 |
CN105335137A (zh) * | 2014-07-23 | 2016-02-17 | 国际商业机器公司 | 用于处理源文件的方法和装置 |
CN107729066A (zh) * | 2017-11-08 | 2018-02-23 | 重庆扬讯软件技术股份有限公司 | 一种基于svn资源库自动化构建发布方法与装置 |
CN108153529A (zh) * | 2017-12-22 | 2018-06-12 | 杭州迪普科技股份有限公司 | 一种文件编译的方法及装置 |
-
2018
- 2018-12-29 CN CN201811631391.1A patent/CN109634591B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0350628A (ja) * | 1989-07-18 | 1991-03-05 | Nec Corp | ソースファイルを利用したメイク・ファイル作成方式 |
CN105335137A (zh) * | 2014-07-23 | 2016-02-17 | 国际商业机器公司 | 用于处理源文件的方法和装置 |
CN107729066A (zh) * | 2017-11-08 | 2018-02-23 | 重庆扬讯软件技术股份有限公司 | 一种基于svn资源库自动化构建发布方法与装置 |
CN108153529A (zh) * | 2017-12-22 | 2018-06-12 | 杭州迪普科技股份有限公司 | 一种文件编译的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN109634591A (zh) | 2019-04-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109634591B (zh) | 一种文件处理方法及装置 | |
KR100995199B1 (ko) | 명령에 입력되는 파라미터들에 반영 기반 프로세싱을 수행하는 시스템 및 컴퓨터 판독 가능 저장 매체 | |
US9471282B2 (en) | System and method for using annotations to automatically generate a framework for a custom javaserver faces (JSF) component | |
US7194730B2 (en) | System and method for the configuration of software products | |
US8156473B2 (en) | Model oriented debugging | |
US20160335057A1 (en) | Parsing and compiling data system queries | |
US7836106B2 (en) | Method, apparatus and computer program product for change management in a data processing environment | |
US8141035B2 (en) | Method for accessing internal states of objects in object oriented programming | |
US20050278695A1 (en) | System and method for modifying code assist within an integrated development environment | |
US8266588B2 (en) | Creating projects in a rational application developer workspace | |
US20040078689A1 (en) | Automatically identifying a program error in a computer program | |
WO2001082071A1 (en) | Methods and systems for supporting and deploying distributed computing components | |
US7562342B2 (en) | Method and apparatus for incrementally processing program annotations | |
CN109471634B (zh) | 源代码格式的检查方法及设备 | |
JP2003256202A (ja) | 整合性検査支援プログラム、整合性検査支援方法および整合性検査支援装置 | |
US20050065953A1 (en) | System and method for changing defined elements in a previously compiled program using a description file | |
CN111399853A (zh) | 机器学习模型与自定义算子的模板化部署方法 | |
WO2022134915A1 (zh) | 一种接口测试方法、计算机设备及计算机可读存储介质 | |
US8347265B1 (en) | Method and apparatus for generating a command line interpreter | |
US11288062B2 (en) | Automatic source code refactoring | |
US9535687B2 (en) | Audited builds based upon separate class dependency records | |
US8135757B2 (en) | Generating references to reusable code in a schema | |
CN112000334A (zh) | 页面开发方法、装置、服务器及存储介质 | |
US7171650B2 (en) | System and method for integrating resources in a network | |
JP2004516574A (ja) | ソフトウェアコンパイラ用の組み込みシステム用のロバストロギングシステム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |