c语言调用 svn api,Subversion API 使用简介
使用Subversion庫API開發應用看起來相當的直接,所有的公共頭文件放在源文件的subversion/include目錄,從源代碼編譯和安裝Subve
使用 API
使用Subversion庫API開發應用看起來相當的直接,所有的公共頭文件放在源文件的subversion/include目錄,從源代碼編譯和安裝Subversion本身,需要這些頭文件拷貝到系統位置。這些頭文件包括了所有用戶和Subversion庫可以訪問的功能和類型。Subversion開發者社區仔細的確保所有的公共API有完好的文檔—直接引用頭文件的文檔。
你首先應該注意Subversion的數據類型和方法是命名空間保護的,每一個公共Subversion對象名以svn_開頭,然后緊跟一個這個對象定義(如wc、client和fs等等)所在的庫的簡短編碼,然后是一個下劃線(_)和后面的對象名稱。半公開的方法(庫使用,但是但庫之外代碼不可以使用并且只可以在庫自己的目錄看到)與這個命名模式不同,并不是庫代碼之后緊跟一個下劃線,他們是用兩個下劃線(__)。給定源文件的私有方法沒有特殊前綴,使用static聲明。當然,一個編譯器不會關心命名習慣,只是用來區分給定方法或數據類型的應用范圍。
關于Subversion的API編程的另一個好的資源是hacking指南,可以在找到,這個文檔包含了有用的信息,同時滿足Subversion本身的開發者和將Subversion作為第三方庫的開發者。[50]
Apache 可移植運行庫
伴隨Subversion自己的數據類型,你會看到許多apr開頭的數據類型引用—來自Apache可移植運行庫(APR)的對象。APR是Apache可移植運行庫,源自為了服務器代碼的多平臺性,嘗試將不同的操作系統特定字節與操作系統無關代碼隔離。結果就提供了一個基礎API的庫,只有一些適度區別—或者是廣泛的—來自各個操作系統。Apache HTTP服務器很明顯是APR庫的第一個用戶,Subversion開發者立刻發現了使用APR庫的價值。意味著Subversion沒有操作系統特定的代碼,也意味著Subversion客戶端可以在Server存在的平臺編譯和運行。當前這個列表包括,各種類型的Unix、Win32、OS/2和Mac OS X。
除了提供了跨平臺一致的系統調用, [51]APR給Subversion對多種數據類型有快速的訪問,如動態數組和哈希表。Subversion在代碼中廣泛使用這些類型,但是Subversion的API原型中最常見的APR類型是apr_pool_t—APR內存池,Subversion使用內部緩沖池用來進行內存分配(除非外部庫在API傳遞參數時需要一個不同的內存管理模式), [52]而且一個人如果針對Subversion的API編碼不需要做同樣的事情,他們可以在需要時給API提供緩沖池,這意味著Subversion的API使用者也必須鏈接到APR,必須調用apr_initialize()來初始化APR子系統,而且在使用Subversion API時必須創建和管理池,通常是使用svn_pool_create()、svn_pool_clear()和svn_pool_destroy()。
使用內存池編程
幾乎每一個使用過C語言的開發者曾經感嘆令人畏縮的內存管理,分配足夠的內存,并且追蹤內存的分配,在不需要時釋放內存—這個任務會非常復雜。當然,如果沒有正確地做到這一點會導致程序毀掉自己,或者更加嚴重一點,把電腦搞癱。
另一方面高級語言使開發者完全擺脫了內存管理,[53]Java和Python之類的語言使用垃圾收集原理,在需要的時候分配對象內存,在不使用時進行清理。
APR提供了一種叫做池基礎的中等的內存管理方法,允許開發者以一種低分辨率的方式控制內存—每塊(或池“pool”)的內存,而不是每個對象。不是使用malloc()和其他按照對象分配內存的方式,你要求APR從內存創建一段內存池,當你結束使用在池中創建的對象,你銷毀池,可以有效地取消其中的對象消耗的內存。通過池,你不需要跟蹤每個對象的內存釋放,你的程序只需要跟蹤這些對象,將對象分配到池中,而池的生命周期(池的創建和刪除之間的時間)滿足所有對象的需要。
URL 和路徑需求
因為分布式版本控制操作是Subversion存在的重點,有意義來關注一下國際化(i18n)支持。畢竟,當“分布式”或許意味著“橫跨辦公室”,它也意味著“橫跨全球”。為了更容易一點,Subversion的所有公共接口只接受路徑參數,這些參數是傳統的,使用UTF-8編碼。這意味著,舉個例子,任何新的使用libsvn_client接口客戶端庫,在把這些參數傳遞給Subversion庫前,需要首先將路徑從本地代碼轉化為UTF-8代碼,然后將Subversion傳遞回來的路徑轉換為本地代碼,很幸運,Subversion提供了一組任何程序可以使用的轉化方法(見subversion/include/svn_utf.h)。
同樣,Subversion的API需要所有的URL參數是正確的URI編碼,所以,我們不會傳遞file:///home/username/My File.txt作為My File.txt的URL,而要傳遞file:///home/username/My%20File.txt。再次,Subversion提供了一些你可以使用的助手方法—svn_path_uri_encode()和svn_path_uri_decode(),分別用來URI的編碼和解碼。
使用 C 和 C++ 以外的語言
除C語言以外,如果你對使用其他語言結合Subversion庫感興趣—如Python腳本或是Java應用—Subversion通過簡單包裹生成器(SWIG)提供了最初的支持。Subversion的SWIG綁定位于subversion/bindings/swig,并且慢慢的走向成熟進入可用狀態。這個綁定允許你直接調用Subversion的API方法,使用包裹器會把腳本數據類型轉化為Subversion需要的C語言庫類型。
非常不幸,Subversion的語言綁定缺乏對核心Subversion模塊的關注,但是,花了很多力氣處理創建針對Python、Perl和Ruby的功能綁定,在一定程度上,在這些接口上的工作量可以在其他語言的SWIG(包括C#、Guile、Java、MzScheme、OCaml、PHP、Tcl等等)接口上得到重用。然而,為了完成復雜的API,一些SWIG接口仍然需要額外的編程工作,關于SWIG本身的更多信息可以看項目的網站。
Subversion也有Java的語言綁定,JavaJL綁定(位于Subversion源目錄樹的subversion/bindings/java)不是基于SWIG的,而是javah和手寫JNI的混合,JavaHL幾乎覆蓋Subversion客戶端的API,目標是作為Java基礎的Subversion客戶端和集成IDE的實現。
Subversion的語言綁定缺乏Subversion核心模塊的關注,但是通??梢宰鳛橐粋€產品信賴。大量腳本、應用、Subversion的GUI客戶端和其他第三方工具現在已經成功地運用了Subversion語言綁定來完成Subversion的集成。
總結
以上是生活随笔為你收集整理的c语言调用 svn api,Subversion API 使用简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 点灯游戏原生JS实现与jQuery实现
- 下一篇: VMware ESXI 7服务器中安装虚