PHP Conference Japan 2024

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); // 项目将被添加和删除
}
?>
deleted
项目是否被删除,但父修订版本滞后。(仅在 true 时设置。)
absent
项目是否不存在,也就是说,Subversion 知道应该存在某些东西但不存在。(仅在 true 时设置。)
incomplete
目录的条目文件是否不完整。(仅在 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