2024 日本 PHP 研討會

svn_status

(PECL svn >= 0.1.0)

svn_status返回工作副本檔案和目錄的狀態

說明

svn_status(字串 $path, 整數 $flags = 0): 陣列

返回工作副本檔案和目錄的狀態,提供工作副本中項目的修改、新增、刪除和其他變更。

參數

path

要擷取狀態的檔案或目錄的本地路徑。

注意相對路徑將會解析為如同目前工作目錄是包含 PHP 執行檔的目錄一樣。要使用呼叫指令稿的工作目錄,請使用 realpath() 或 dirname(__FILE__)。

flags

Svn::NON_RECURSIVESvn::ALL(不論修改狀態)、Svn::SHOW_UPDATES(將會為過時的項目新增項目)、Svn::NO_IGNORE(掃描新檔案時忽略 svn:ignore 屬性)和 Svn::IGNORE_EXTERNALS 的任意組合。

回傳值

返回一個以數字索引的關聯陣列,詳細說明儲存庫中項目的狀態

Array (
    [0] => Array (
        // information on item
    )
    [1] => ...
)

項目資訊是一個關聯陣列,可以包含以下鍵值

path
此項目在本地檔案系統上的檔案/目錄字串路徑。
text_status
項目文字的狀態。有關可能的值,請參考 狀態常數
repos_text_status
項目在儲存庫中文字的狀態。僅當 update 設定為 true 時才準確。有關可能的值,請參考 狀態常數
prop_status
項目屬性的狀態。有關可能的值,請參考 狀態常數
repos_prop_status
項目在儲存庫中屬性的狀態。僅當 update 設定為 true 時才準確。有關可能的值,請參考 狀態常數
locked
項目是否被鎖定。(僅在設定為 true 時設定。)
copied
項目是否已複製(已排程新增,包含歷史記錄)。(僅在設定為 true 時設定。)
switched
項目是否已使用 switch 命令切換。(僅在設定為 true 時設定。)

只有當項目已版本控制時,才會設定這些鍵值

name
儲存庫中項目的基本名稱。
url
儲存庫中項目的 URL。
repos
儲存庫的基本 URL。
revision
工作副本中項目的整數修訂版號。
kind
項目的類型,例如檔案或目錄。有關可能的值,請參考 類型常數
schedule
項目的排程動作,例如新增或刪除。這些魔術數字的常數不可用,可以使用以下方式模擬
<?php
if (!defined('svn_wc_schedule_normal')) {
define('svn_wc_schedule_normal', 0); // 沒有特殊情況
define('svn_wc_schedule_add', 1); // 項目將被新增
define('svn_wc_schedule_delete', 2); // 項目將被刪除
define('svn_wc_schedule_replace', 3); // 項目將被新增和刪除
}
?>
已刪除
項目是否已被刪除,但父版本落後。(僅在設定為 true 時才會設定。)
缺失
項目是否缺失,也就是 Subversion 知道那裡應該有東西,但實際上沒有。(僅在設定為 true 時才會設定。)
不完整
目錄的 entries 檔案是否不完整。(僅在設定為 true 時才會設定。)
cmt_date
最後提交日期的整數 Unix 時間戳記。(不受 update 影響。)
cmt_rev
最後提交的整數版本號。(不受 update 影響。)
cmt_author
最後提交的字串作者。(不受 update 影響。)
prop_time
屬性最後更新時間的整數 Unix 時間戳記
text_time
文字最後更新時間的整數 Unix 時間戳記

範例

範例 #1 基本範例

此範例示範了此函數的基本理論用法。

<?php
print_r
(svn_status(realpath('wc')));
?>

上述範例將輸出類似以下的內容

Array (
    [0] => Array (
        [path] => /home/bob/wc/sandwich.txt
        [text_status] => 8 // item was modified
        [repos_text_status] => 1 // no information available, use update
        [prop_status] => 3 // no changes
        [repos_prop_status] => 1 // no information available, use update
        [name] => sandwich.txt
        [url] => http://www.example.com/svnroot/deli/trunk/sandwich.txt
        [repos] => http://www.example.com/svnroot/
        [revision] => 123
        [kind] => 1 // file
        [schedule] => 0 // no special actions scheduled
        [cmt_date] => 1165543135
        [cmt_rev] => 120
        [cmt_author] => Alice
        [prop_time] => 1180201728
        [text_time] => 1180201729
    )
)

注意事項

警告

此函數是*實驗性*的。此函數的行為、其名稱以及周圍的說明文件可能會在未來的 PHP 版本中更改,恕不另行通知。使用此函數的風險由您自行承擔。

參見

新增註記

使用者貢獻的筆記 1 則筆記

matthijs at fragfrog dot nl
13 年前
似乎有一個未記載的函式 svn_info(可以說是此功能的正確名稱),它的作用幾乎與 svn_status 相同,但忽略第二個參數。

遺憾的是,兩者都不能直接用於僅擷取工作副本的目前版本,但 svn_status 和 SVN_NON_RECURSIVE|SVN_ALL 的組合可以達成;只需執行以下指令

<?php
svn_status
(ROOT, SVN_NON_RECURSIVE|SVN_ALL);
?>

其中 ROOT 當然是您要檢查的工作目錄的根目錄。其中一個項目將是該工作目錄,包括其目前狀態。
To Top