本發(fā)明涉及軟件技術(shù)領(lǐng)域,特別是涉及一種文件處理方法和一種文件處理裝置。
背景技術(shù):
在軟件開發(fā)時(shí),代碼開發(fā)完成后要進(jìn)行發(fā)布操作,對于服務(wù)端而言就是將開發(fā)的代碼部署到線上服務(wù)器上。
但是,在代碼開發(fā)過程中,有一些項(xiàng)目的代碼文件是多個(gè)程序員合作開發(fā)的,不同程序員開發(fā)同一個(gè)代碼文件就可能出現(xiàn)代碼文件未完善就上線的問題,導(dǎo)致上線程序出現(xiàn)錯(cuò)誤,影響線上服務(wù)器的正常運(yùn)行。
例如,兩個(gè)程序員合作開發(fā)一個(gè)項(xiàng)目,程序員A修改了文件a.txt并提交到遠(yuǎn)程主庫master上準(zhǔn)備上線,但是由于某些原因?qū)е挛瓷暇€。此時(shí)程序員B也要修改文件a.txt,但是B可能沒有注意到A也修改了這個(gè)代碼文件,B修改完成后就將a.txt上線了,導(dǎo)致程序員A的修改也就被帶上線了,導(dǎo)致可能出現(xiàn)bug產(chǎn)生,影響線上服務(wù)器的正常運(yùn)行。
技術(shù)實(shí)現(xiàn)要素:
鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的文件處理方法和相應(yīng)的文件處理裝置。
依據(jù)本發(fā)明實(shí)施例的一個(gè)方面,提供了一種文件處理方法,包括:接收到文件上傳命令時(shí),獲取用戶上傳的代碼文件,其中,所述文件上傳命令用于上傳代碼文件到遠(yuǎn)程主庫master;對所述代碼文件執(zhí)行加鎖操作,鎖定所述代碼文件,其中,將上傳所述代碼文件的用戶作為鎖定用戶,則鎖定的代碼文件禁止非鎖定用戶發(fā)布;將鎖定的代碼文件上傳到master;依據(jù)所述鎖定用戶針對鎖定的代碼文件的發(fā)布操作,解除對代碼文件的鎖定。
可選的,所述接收到文件上傳命令時(shí),獲取用戶上傳的代碼文件,包括:接收到文件上傳命令時(shí),觸發(fā)腳本調(diào)用鉤子程序;采用所述鉤子程序獲取用戶上傳的代碼文件,以及所述代碼文件的文件信息。
可選的,對所述代碼文件執(zhí)行加鎖操作,包括:依據(jù)所述文件信息確定所述鎖定用戶的鎖記錄。
可選的,依據(jù)所述文件信息確定所述鎖定用戶的鎖記錄,包括:判斷所述鎖定用戶是否具有鎖記錄;若所述鎖定用戶具有鎖記錄,則將所述文件信息添加到所述鎖定用戶的鎖記錄中。
可選的,其中,還包括:若所述鎖定用戶不具有鎖記錄,則建立所述鎖定用戶的鎖記錄,在所述鎖定用戶的鎖記錄中添加所述文件信息。
可選的,依據(jù)所述鎖定用戶針對鎖定的代碼文件的發(fā)布操作,解除對代碼文件的鎖定,包括:判斷所述鎖定用戶從master將鎖定的代碼文件發(fā)布到線上服務(wù)器后,解除對代碼文件的鎖定。
可選的,解除對代碼文件的鎖定,包括:從所述鎖定用戶的鎖記錄中刪除所述代碼文件的文件信息??蛇x的,所述的方法還包括:對上線目錄進(jìn)行轉(zhuǎn)換,確定上線的代碼文件,從所述上線的代碼文件中確定鎖定的代碼文件。
可選的,獲取用戶上傳的代碼文件之后,所述的方法還包括:判斷所述代碼文件是否被鎖定;若代碼文件已被鎖定,拒絕執(zhí)行對鎖定的代碼文件的上傳操作。
根據(jù)本發(fā)明實(shí)施例的另一個(gè)方面,提供了一種文件處理裝置,包括:獲取模塊,用于接收到文件上傳命令時(shí),獲取用戶上傳的代碼文件,其中,所述文件上傳命令用于上傳代碼文件到遠(yuǎn)程主庫master;鎖定模塊,用于對所述代碼文件執(zhí)行加鎖操作,鎖定所述代碼文件,其中,將上傳所述代碼文件的用戶作為鎖定用戶,則鎖定的代碼文件禁止非鎖定用戶發(fā)布;上傳模塊,用于將鎖定的代碼文件上傳到master;解鎖模塊,用于依據(jù)所述鎖定用戶針對鎖定的代碼文件的發(fā)布操作,解除對代碼文件的鎖定。
可選的,所述獲取模塊,包括:觸發(fā)子模塊,用于接收到文件上傳命令時(shí),觸發(fā)腳本調(diào)用鉤子程序;文件獲取子模塊,用于采用所述鉤子程序獲取用戶上傳的代碼文件,以及所述代碼文件的文件信息。
可選的,所述鎖定模塊,用于依據(jù)所述文件信息確定所述鎖定用戶的鎖記錄。
可選的,所述鎖定模塊,包括:判斷子模塊,用于判斷所述鎖定用戶是否具有鎖記錄;記錄鎖定子模塊,用于在所述鎖定用戶具有鎖記錄時(shí),將所述文件信息添加到所述鎖定用戶的鎖記錄中。
可選的,所述記錄鎖定子模塊,還用于在所述鎖定用戶不具有鎖記錄時(shí),建立所述鎖定用戶的鎖記錄,在所述鎖定用戶的鎖記錄中添加所述文件信息。
可選的,所述解鎖模塊,用于判斷所述鎖定用戶從master將鎖定的代碼文件發(fā)布到線上服務(wù)器后,解除對代碼文件的鎖定。
可選的,所述解鎖模塊,用于從所述鎖定用戶的鎖記錄中刪除所述代碼文件的文件信息。
可選的,所述解鎖模塊,還用于對上線目錄進(jìn)行轉(zhuǎn)換,確定上線的代碼文件,從所述上線的代碼文件中確定鎖定的代碼文件。
可選的,所述的方法還包括:加鎖判斷模塊,用于判斷所述代碼文件是否被鎖定;若代碼文件已被鎖定,拒絕執(zhí)行對鎖定的代碼文件的上傳操作。
在接收到文件上傳命令時(shí)獲取用戶上傳的代碼文件,然后鎖定該上傳的代碼文件,從而除鎖定代碼文件的用戶外,其他非鎖定用戶均無法發(fā)布該鎖定的代碼文件,然后將鎖定的代碼文件上傳到master,在鎖定用戶將鎖定的代碼文件發(fā)布上線后,再接觸對代碼文件的鎖定,保證在代碼文件上傳到master后不會被其他用戶上線,防止由于誤上線代碼文件而導(dǎo)致的上線安全問題。
上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的具體實(shí)施方式。
附圖說明
通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號表示相同的部件。在附圖中:
圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種文件處理方法實(shí)施例的步驟流程圖;
圖2示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的一種文件處理方法實(shí)施例的步驟流程圖;
圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種文件處理裝置實(shí)施例的結(jié)構(gòu)框圖;以及
圖4示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的一種文件處理裝置實(shí)施例的結(jié)構(gòu)框圖。
具體實(shí)施方式
下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
程序員在開發(fā)項(xiàng)目過程中,可以依據(jù)需求修改代碼文件,在代碼文件修改完畢后,可以上傳到發(fā)布系統(tǒng)的遠(yuǎn)程主庫master,準(zhǔn)備上線。但是多人開發(fā)同一項(xiàng)目時(shí)可能存在誤上傳修改中的代碼文件的問題。為了防止多人開發(fā)同一項(xiàng)目時(shí),誤上線其他程序員修改中的代碼文件而導(dǎo)致的上線安全問題,本實(shí)施例可以通過代碼文件上傳master時(shí)加鎖來防止其他程序員誤上線。
參照圖1,示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種文件處理方法實(shí)施例的步驟流程圖,具體可以包括如下步驟:
步驟102,接收到文件上傳命令時(shí),獲取用戶上傳的代碼文件,其中,所述文件上傳命令用于上傳代碼文件到遠(yuǎn)程主庫master。
本實(shí)施例采用在代碼文件上傳master時(shí)加鎖的方式,使得鎖定的代碼文件不能被其他用戶上線,從而防止出現(xiàn)問題。其中,文件上傳命令用于上傳代碼文件到發(fā)布系統(tǒng)的master,本實(shí)施例可以在接收到文件上傳命令時(shí),獲取用戶要上傳的代碼文件。
例如,基于git進(jìn)行軟件開發(fā)時(shí),git提供了一種鉤子機(jī)制,可指定執(zhí)行某個(gè)命令時(shí)觸發(fā)某個(gè)腳本的執(zhí)行,因此實(shí)施例可以指定執(zhí)行文件上傳命令時(shí)觸發(fā)加鎖腳本的執(zhí)行,即加鎖的時(shí)機(jī)是在push到遠(yuǎn)程時(shí),即在pre-push時(shí)在腳本中進(jìn)行加鎖操作。其中,Git是一個(gè)開源的分布式版本控制系統(tǒng),可以有效、高速的處理從很小到非常大的項(xiàng)目版本管理。
步驟104,對所述代碼文件執(zhí)行加鎖操作,鎖定所述代碼文件,其中,將上傳所述代碼文件的用戶作為鎖定用戶,則鎖定的代碼文件禁止非鎖定用戶發(fā)布。
步驟106,將鎖定的代碼文件上傳到master。
對該代碼文件執(zhí)行加鎖操作,即添加代碼文件的文件鎖來鎖定所述代碼文件,其中代碼文件的鎖定與用戶綁定,即上傳代碼文件的用戶即為鎖定代碼文件的用戶,從而定義鎖定的代碼文件禁止其他用戶(即非鎖定用戶)發(fā)布到線上服務(wù)器,即禁止代碼文件被非鎖定用戶上線。在代碼文件鎖定后,可將鎖定的代碼文件上傳到master。
步驟108,依據(jù)所述鎖定用戶針對鎖定的代碼文件的發(fā)布操作,解除對述代碼文件的鎖定。
鎖定用戶在上傳的代碼文件沒有問題后,可以將代碼文件發(fā)布上線,即鎖定用戶可執(zhí)行對鎖定的代碼文件的發(fā)布操作,將該代碼文件發(fā)布到線上服務(wù)器中,在代碼文件上線成功后,解除對該代碼文件的鎖定。其他用戶可以修改該代碼文件上傳到master。
例如,基于git用戶A和用戶B合作開發(fā)一個(gè)項(xiàng)目,其中代碼文件a.txt用戶A和B各自開發(fā)部分內(nèi)容。用戶A對該代碼文件a.txt進(jìn)行修改后,發(fā)送文件上傳命令以上傳到master,在接收到文件上傳命令pre-push時(shí)獲取該a.txt,將該a.txt執(zhí)行加鎖操作鎖定a.txt,然后將文件a.txt上傳到master。在文件a.txt被用戶A上傳到master,但未上線的過程中,若用戶B也修改了代碼文件a.txt要上傳到master,在接收到用戶B的上傳命令時(shí),獲取該代碼文件a.txt及其文件信息,判斷該代碼文件a.txt已被鎖定,則拒絕用戶B的文件上傳指令,還可以提示用戶B:用戶A已上傳該文件到master,請等待用戶A上線該文件后再上傳等提示信息。用戶A在測試代碼文件a.txt沒有問題,可以將代碼文件a.txt發(fā)布到線上服務(wù)器,在代碼文件a.txt上線成功后,解鎖該代碼文件a.txt。此后用戶B可執(zhí)行文件上傳命令。
綜上,在接收到文件上傳命令時(shí)獲取用戶上傳的代碼文件,然后鎖定該上傳的代碼文件,從而除鎖定代碼文件的用戶外,其他非鎖定用戶均無法發(fā)布該鎖定的代碼文件,然后將鎖定的代碼文件上傳到master,在鎖定用戶將鎖定的代碼文件發(fā)布上線后,再接觸對代碼文件的鎖定,保證在代碼文件上傳到master后不會被其他用戶上線,防止由于誤上線代碼文件而導(dǎo)致的上線安全問題。
本實(shí)施例對上傳到master的代碼文件加鎖,以防止誤上線,因此加鎖的時(shí)機(jī)可在上傳代碼文件即push master時(shí),因?yàn)橐坏┩频竭h(yuǎn)端master,其他程序員如果上線這個(gè)代碼文件就會把修改帶上去,因此在push master的時(shí)候加鎖和檢查鎖是比較合理的。將代碼文件push master時(shí),如果檢測到該代碼文件沒加鎖,則執(zhí)行加鎖操作鎖定該代碼文件后上傳;如果檢測到該代碼文件已經(jīng)加鎖了,表征之前有用戶修改了該代碼文件但是沒有進(jìn)行上線操作,此時(shí)不能將該代碼文件push master,需要等待鎖定用戶將該鎖定發(fā)的代碼文件上線并接觸鎖定后,再將自己修改的代碼文件push master。
參照圖2,示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的一種文件處理方法實(shí)施例的步驟流程圖,具體可以包括如下步驟:
步驟202,接收到文件上傳命令時(shí),觸發(fā)腳本調(diào)用鉤子程序。
步驟204,采用所述鉤子程序獲取用戶上傳的代碼文件,以及所述代碼文件的文件信息。
在接收到到文件上傳命令時(shí),觸發(fā)腳本調(diào)用鉤子程序,采用鉤子程序獲取用戶上傳的代碼文件,并獲取該代碼文件的文件信息,文件信息可以包括文件名稱、文件標(biāo)識等。如基于git進(jìn)行軟件開發(fā)時(shí),git提供了一種鉤子機(jī)制,可指定執(zhí)行某個(gè)命令時(shí)觸發(fā)某個(gè)腳本的執(zhí)行,因此實(shí)施例可以指定執(zhí)行文件上傳命令時(shí)觸發(fā)加鎖腳本的執(zhí)行,即加鎖的時(shí)機(jī)是在push到遠(yuǎn)程時(shí),即在pre-push時(shí)在腳本中進(jìn)行加鎖操作。
步驟206,判斷所述代碼文件是否被鎖定。
在獲取到代碼文件后,判斷該代碼文件是否已被鎖定,即可判斷該代碼文件的文件信息是否在某一鎖記錄中,若已存儲在某一鎖記錄中,則表征該代碼文件已被鎖定,執(zhí)行步驟208;若不存在該文件信息對應(yīng)鎖記錄,表征該代碼文件未被鎖定,執(zhí)行步驟210。
步驟208,拒絕執(zhí)行對鎖定的代碼文件的上傳操作。
若判斷代碼文件已被鎖定,可拒絕執(zhí)行對鎖定的代碼文件的上傳操作。并且可以反饋上傳失敗、該文件已XX被鎖定等提示信息,來提示用戶該文件暫時(shí)無法上傳,需要等鎖定用戶解鎖后再處理。
本實(shí)施例中,在鎖定用戶的鎖記錄中配置文件信息來表征代碼文件被鎖定,因此在代碼文件未被鎖定時(shí),可以依據(jù)所述文件信息確定所述鎖定用戶的鎖記錄,來鎖定該代碼文件。
步驟210,判斷所述鎖定用戶是否具有鎖記錄。
本實(shí)施例中,鎖記錄與用戶綁定,即一個(gè)用戶對應(yīng)一個(gè)鎖記錄,一個(gè)鎖記錄可以對應(yīng)有文件列表,在該文件列表中存儲鎖定代碼文件的文件信息。因此在判斷在代碼文件未被鎖定時(shí),判斷上傳該代碼文件的用戶即鎖定用戶是否具有鎖記錄。如果該鎖定用戶具有鎖記錄,執(zhí)行步驟212;如果該鎖定用戶不具有鎖記錄,執(zhí)行步驟214。
步驟212,將所述文件信息添加到所述鎖定用戶的鎖記錄中。
若所述鎖定用戶具有鎖記錄,則將所述文件信息添加到所述鎖定用戶的鎖記錄的文件列表中,即采用腳本在該鎖定用戶的鎖記錄中添加該代碼文件的文件信息。
步驟214,建立所述鎖定用戶的鎖記錄,在所述鎖定用戶的鎖記錄中添加所述文件信息。
若所述鎖定用戶不具有鎖記錄,則建立所述鎖定用戶的鎖記錄,在所述鎖定用戶的鎖記錄中添加所述文件信息。
步驟216,將鎖定的代碼文件上傳到master。
步驟218,判斷所述鎖定用戶從master將鎖定的代碼文件發(fā)布到線上服務(wù)器后,解除對代碼文件的鎖定。
鎖定用戶在測試鎖定的代碼文件通過后,可以從master將鎖定的代碼文件發(fā)布到線上服務(wù)器,在該鎖定的代碼文件上線成功后,可以解除對代碼文件的鎖定。其中,解除對代碼文件的鎖定,包括:從所述鎖定用戶的鎖記錄中刪除所述代碼文件的文件信息??梢垣@取該鎖定用戶的鎖記錄,然后從該鎖記錄的文件列表中刪除該代碼文件的文件信息。
其中,還包括:對上線目錄進(jìn)行轉(zhuǎn)換,確定上線的代碼文件,從所述上線的代碼文件中確定鎖定的代碼文件。即上線代碼文件較多等情況下,可能存在上線目錄,如果存在上線目錄可以進(jìn)一步進(jìn)行轉(zhuǎn)化,確定上線的代碼文件,從所述上線的代碼文件中確定鎖定的代碼文件,然后從對應(yīng)鎖定用戶的鎖記錄中刪除該文件信息。
例如,基于git用戶A和用戶B合作開發(fā)一個(gè)項(xiàng)目,其中代碼文件a.txt用戶A和B各自開發(fā)部分內(nèi)容。用戶A對該代碼文件a.txt進(jìn)行修改后,發(fā)送文件上傳命令以上傳到master,在接收到文件上傳命令pre-push時(shí),觸發(fā)腳本調(diào)用鉤子程序獲取該a.txt,然后可判斷a.txt是否已被鎖定,即a.txt的文件信息是否再某一鎖記錄中,若沒有在鎖記錄中即a.txt未鎖定,可采用該腳本執(zhí)行加鎖操作??梢耘袛嘤脩鬉是否存在鎖記錄如Lock_A,若存在該鎖記錄Lock_A,則可以將該代碼文件a.txt的文件信息添加到Lock_A中;若不存在該鎖記錄Lock_A,則創(chuàng)建用戶A的鎖記錄Lock_A,將該代碼文件a.txt的文件信息添加到Lock_A中,然后將文件a.txt上傳到master。
在文件a.txt被用戶A上傳到master,但未上線的過程中,若用戶B也修改了代碼文件a.txt要上傳到master,在接收到用戶B的上傳命令pre-push時(shí),獲取該代碼文件a.txt及其文件信息,判斷該代碼文件a.txt的文件信息已存儲在用戶A的鎖記錄Lock_A中,即代碼文件a.txt已被鎖定,則拒絕用戶B的文件上傳指令,還可以提示用戶B:用戶A已上傳該文件到master,請等待用戶A上線該文件后再上傳等提示信息。
用戶A在測試代碼文件a.txt沒有問題,可以將代碼文件a.txt發(fā)布到線上服務(wù)器,在代碼文件a.txt上線成功后,從用戶A的鎖記錄Lock_A中刪除a.txt的文件信息,此后用戶B可執(zhí)行文件上傳命令。若用戶A的鎖記錄Lock_A中無其他文件,則刪除該鎖記錄Lock_A,以后需要時(shí)再創(chuàng)建即可。
本實(shí)施例實(shí)現(xiàn)了基于文件的鎖機(jī)制。一個(gè)用戶保持一個(gè)鎖記錄,如果當(dāng)前該用戶沒有鎖記錄,加鎖操作時(shí)插入一條該用戶的鎖記錄,如果當(dāng)前用戶已經(jīng)有一條沒有解鎖的鎖記錄,則直接在該鎖記錄中添加即可。其中,在軟件開發(fā)過程中,往往上傳到master的是項(xiàng)目的一系列文件,因此可以這些文件的文件信息構(gòu)成一個(gè)文件列表,將要加鎖的文件列表添加到已經(jīng)存在的鎖記錄當(dāng)中,解鎖時(shí)在該鎖定用戶的鎖記錄的文件列表中,把需要解鎖的文件列表刪除出去。
從而在push操作執(zhí)行時(shí)對修改的文件進(jìn)行加鎖操作,在上線完成之后,對上線成功的文件進(jìn)行解鎖操作,將上線成功的文件列表在鎖記錄的文件列表中去除掉。其中,在解鎖文件時(shí)涉及到文件列表file_list的設(shè)計(jì),文件列表file_list都是文件,則直接從鎖記錄中刪除即可,如果file_list有目錄則需要做一步轉(zhuǎn)化操作,全都轉(zhuǎn)換成文件,然后從鎖記錄中刪除。
對于方法實(shí)施例,為了簡單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明實(shí)施例并不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本發(fā)明實(shí)施例,某些步驟可以采用其他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作并不一定是本發(fā)明實(shí)施例所必須的。
在上述實(shí)施例基礎(chǔ)上,本實(shí)施例還提供了一種文件處理裝置。
參照圖3,示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種文件處理裝置實(shí)施例的結(jié)構(gòu)框圖,具體可以包括如下模塊:
獲取模塊302,用于接收到文件上傳命令時(shí),獲取用戶上傳的代碼文件,其中,所述文件上傳命令用于上傳代碼文件到遠(yuǎn)程主庫master。
鎖定模塊304,用于對所述代碼文件執(zhí)行加鎖操作,鎖定所述代碼文件,其中,將上傳所述代碼文件的用戶作為鎖定用戶,則鎖定的代碼文件禁止非鎖定用戶發(fā)布。
上傳模塊306,用于將鎖定的代碼文件上傳到master。
解鎖模塊308,用于依據(jù)所述鎖定用戶針對鎖定的代碼文件的發(fā)布操作,解除對代碼文件的鎖定。
綜上,在接收到文件上傳命令時(shí)獲取用戶上傳的代碼文件,然后鎖定該上傳的代碼文件,從而除鎖定代碼文件的用戶外,其他非鎖定用戶均無法發(fā)布該鎖定的代碼文件,然后將鎖定的代碼文件上傳到master,在鎖定用戶將鎖定的代碼文件發(fā)布上線后,再接觸對代碼文件的鎖定,保證在代碼文件上傳到master后不會被其他用戶上線,防止由于誤上線代碼文件而導(dǎo)致的上線安全問題。
參照圖4,示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的一種文件處理裝置實(shí)施例的結(jié)構(gòu)框圖,具體可以包括如下模塊:
獲取模塊302,用于接收到文件上傳命令時(shí),獲取用戶上傳的代碼文件,其中,所述文件上傳命令用于上傳代碼文件到遠(yuǎn)程主庫master。
加鎖判斷模塊310,用于判斷所述代碼文件是否被鎖定;若代碼文件已被鎖定,拒絕執(zhí)行對鎖定的代碼文件的上傳操作。
鎖定模塊304,用于對所述代碼文件執(zhí)行加鎖操作,鎖定所述代碼文件,其中,將上傳所述代碼文件的用戶作為鎖定用戶,則鎖定的代碼文件禁止非鎖定用戶發(fā)布。
上傳模塊306,用于將鎖定的代碼文件上傳到master。
解鎖模塊308,用于依據(jù)所述鎖定用戶針對鎖定的代碼文件的發(fā)布操作,解除對代碼文件的鎖定。
其中,所述獲取模塊302,包括:
觸發(fā)子模塊3022,用于接收到文件上傳命令時(shí),觸發(fā)腳本調(diào)用鉤子程序。
文件獲取子模塊3024,用于采用所述鉤子程序獲取用戶上傳的代碼文件,以及所述代碼文件的文件信息。
其中,所述鎖定模塊304,用于依據(jù)所述文件信息確定所述鎖定用戶的鎖記錄。
所述鎖定模塊304,包括:
判斷子模塊3042,用于判斷所述鎖定用戶是否具有鎖記錄。
記錄鎖定子模塊3044,用于在所述鎖定用戶具有鎖記錄時(shí),將所述文件信息添加到所述鎖定用戶的鎖記錄中。
所述記錄鎖定子模塊3044,還用于在所述鎖定用戶不具有鎖記錄時(shí),建立所述鎖定用戶的鎖記錄,在所述鎖定用戶的鎖記錄中添加所述文件信息。
所述解鎖模塊308,用于判斷所述鎖定用戶從master將鎖定的代碼文件發(fā)布到線上服務(wù)器后,解除對代碼文件的鎖定。
所述解鎖模塊308,用于從所述鎖定用戶的鎖記錄中刪除所述代碼文件的文件信息。
所述解鎖模塊308,還用于對上線目錄進(jìn)行轉(zhuǎn)換,確定上線的代碼文件,從所述上線的代碼文件中確定鎖定的代碼文件。
本實(shí)施例實(shí)現(xiàn)了基于文件的鎖機(jī)制。一個(gè)用戶保持一個(gè)鎖記錄,如果當(dāng)前該用戶沒有鎖記錄,加鎖操作時(shí)插入一條該用戶的鎖記錄,如果當(dāng)前用戶已經(jīng)有一條沒有解鎖的鎖記錄,則直接在該鎖記錄中添加即可。其中,在軟件開發(fā)過程中,往往上傳到master的是項(xiàng)目的一系列文件,因此可以這些文件的文件信息構(gòu)成一個(gè)文件列表,將要加鎖的文件列表添加到已經(jīng)存在的鎖記錄當(dāng)中,解鎖時(shí)在該鎖定用戶的鎖記錄的文件列表中,把需要解鎖的文件列表刪除出去。
從而在push操作執(zhí)行時(shí)對修改的文件進(jìn)行加鎖操作,在上線完成之后,對上線成功的文件進(jìn)行解鎖操作,將上線成功的文件列表在鎖記錄的文件列表中去除掉。其中,在解鎖文件時(shí)涉及到文件列表file_list的設(shè)計(jì),文件列表file_list都是文件,則直接從鎖記錄中刪除即可,如果file_list有目錄則需要做一步轉(zhuǎn)化操作,全都轉(zhuǎn)換成文件,然后從鎖記錄中刪除。
對于裝置實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實(shí)施例的部分說明即可。
在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。
在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。
類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個(gè)實(shí)施例的所有特征。因此,遵循具體實(shí)施方式的權(quán)利要求書由此明確地并入該具體實(shí)施方式,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。
本領(lǐng)域那些技術(shù)人員可以理解,可以對實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們設(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中。可以把實(shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來使用。
本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號處理器(DSP)來實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的文件處理方法和裝置設(shè)備中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
應(yīng)該注意的是上述實(shí)施例對本發(fā)明進(jìn)行說明而不是對本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號之間的任何參考符號構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過同一個(gè)硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序。可將這些單詞解釋為名稱。
本發(fā)明公開了A1、一種文件處理方法,包括:
接收到文件上傳命令時(shí),獲取用戶上傳的代碼文件,其中,所述文件上傳命令用于上傳代碼文件到遠(yuǎn)程主庫master;
對所述代碼文件執(zhí)行加鎖操作,鎖定所述代碼文件,其中,將上傳所述代碼文件的用戶作為鎖定用戶,則鎖定的代碼文件禁止非鎖定用戶發(fā)布;
將鎖定的代碼文件上傳到master;
依據(jù)所述鎖定用戶針對鎖定的代碼文件的發(fā)布操作,解除對代碼文件的鎖定。
A2、如A1所述的方法,其中,所述接收到文件上傳命令時(shí),獲取用戶上傳的代碼文件,包括:
接收到文件上傳命令時(shí),觸發(fā)腳本調(diào)用鉤子程序;
采用所述鉤子程序獲取用戶上傳的代碼文件,以及所述代碼文件的文件信息。
A3、如A2所述的方法,其中,對所述代碼文件執(zhí)行加鎖操作,包括:
依據(jù)所述文件信息確定所述鎖定用戶的鎖記錄。
A4、如A3所述的方法,其中,依據(jù)所述文件信息確定所述鎖定用戶的鎖記錄,包括:
判斷所述鎖定用戶是否具有鎖記錄;
若所述鎖定用戶具有鎖記錄,則將所述文件信息添加到所述鎖定用戶的鎖記錄中。
A5、如A4所述的方法,其中,還包括:
若所述鎖定用戶不具有鎖記錄,則建立所述鎖定用戶的鎖記錄,在所述鎖定用戶的鎖記錄中添加所述文件信息。
A6、如A3所述的方法,其中,依據(jù)所述鎖定用戶針對鎖定的代碼文件的發(fā)布操作,解除對代碼文件的鎖定,包括:
判斷所述鎖定用戶從master將鎖定的代碼文件發(fā)布到線上服務(wù)器后,解除對代碼文件的鎖定。
A7、如A6所述的方法,其中,解除對代碼文件的鎖定,包括:
從所述鎖定用戶的鎖記錄中刪除所述代碼文件的文件信息。
A8、如A6所述的方法,其中,所述的方法還包括:
對上線目錄進(jìn)行轉(zhuǎn)換,確定上線的代碼文件,從所述上線的代碼文件中確定鎖定的代碼文件。
A9、如A1所述的方法,其中,獲取用戶上傳的代碼文件之后,所述的方法還包括:
判斷所述代碼文件是否被鎖定;
若代碼文件已被鎖定,拒絕執(zhí)行對鎖定的代碼文件的上傳操作。
本發(fā)明實(shí)施例還公開了B10、一種文件處理裝置,包括:
獲取模塊,用于接收到文件上傳命令時(shí),獲取用戶上傳的代碼文件,其中,所述文件上傳命令用于上傳代碼文件到遠(yuǎn)程主庫master;
鎖定模塊,用于對所述代碼文件執(zhí)行加鎖操作,鎖定所述代碼文件,其中,將上傳所述代碼文件的用戶作為鎖定用戶,則鎖定的代碼文件禁止非鎖定用戶發(fā)布;
上傳模塊,用于將鎖定的代碼文件上傳到master;
解鎖模塊,用于依據(jù)所述鎖定用戶針對鎖定的代碼文件的發(fā)布操作,解除對代碼文件的鎖定。
B11、如B10所述的裝置,其中,所述獲取模塊,包括:
觸發(fā)子模塊,用于接收到文件上傳命令時(shí),觸發(fā)腳本調(diào)用鉤子程序;
文件獲取子模塊,用于采用所述鉤子程序獲取用戶上傳的代碼文件,以及所述代碼文件的文件信息。
B12、如B11所述的裝置,其中,
所述鎖定模塊,用于依據(jù)所述文件信息確定所述鎖定用戶的鎖記錄。
B13、如B12所述的裝置,其中,所述鎖定模塊,包括:
判斷子模塊,用于判斷所述鎖定用戶是否具有鎖記錄;
記錄鎖定子模塊,用于在所述鎖定用戶具有鎖記錄時(shí),將所述文件信息添加到所述鎖定用戶的鎖記錄中。
B14、如B13所述的裝置,其中,
所述記錄鎖定子模塊,還用于在所述鎖定用戶不具有鎖記錄時(shí),建立所述鎖定用戶的鎖記錄,在所述鎖定用戶的鎖記錄中添加所述文件信息。
B15、如B12所述的裝置,其中,
所述解鎖模塊,用于判斷所述鎖定用戶從master將鎖定的代碼文件發(fā)布到線上服務(wù)器后,解除對代碼文件的鎖定。
B16、如B15所述的裝置,其中,
所述解鎖模塊,用于從所述鎖定用戶的鎖記錄中刪除所述代碼文件的文件信息。
B17、如B15所述的裝置,其中,
所述解鎖模塊,還用于對上線目錄進(jìn)行轉(zhuǎn)換,確定上線的代碼文件,從所述上線的代碼文件中確定鎖定的代碼文件。
B18、如B10所述的裝置,其中,所述的方法還包括:
加鎖判斷模塊,用于判斷所述代碼文件是否被鎖定;若代碼文件已被鎖定,拒絕執(zhí)行對鎖定的代碼文件的上傳操作。