如何获取无任何changelist的Perforce depots列表及创建日期
查询无关联changelist的Perforce depot清单方案
有可行方案,直接用Perforce自带的原生命令就能实现,不需要安装第三方工具,最终输出可以直接拿到depot名称、对应创建日期两个要求的字段,具体逻辑和操作如下:
- 核心判断逻辑:Perforce中如果一个depot下没有任何已提交(submitted)的changelist,对该depot根路径执行changelist查询会返回空结果;depot的创建日期直接存储在depot元数据中,可以直接拉取。
- 前置校验:先确认当前登录的P4账号拥有所有depot的列表读取权限、以及对应depot路径的changelist查询权限,避免结果漏统。
具体操作命令
单depot快速校验
如果只需要排查个别depot,直接执行两条命令即可:
- 拉取depot元数据获取创建时间:执行
p4 -ztag depot <目标depot名称>,返回结果里的Date字段就是depot创建时的Unix时间戳,转换为可读时间格式即可。 - 校验是否存在提交记录:执行
p4 changes -s submitted //<目标depot名称>/...,如果返回结果为空,就说明这个depot从创建至今没有产生过任何已提交的changelist。
批量查询全量符合条件的depot
如果要一次性拉取所有符合要求的depot清单,Linux/macOS环境下直接在终端执行下面的shell脚本即可,输出结果会直接打印格式化后的depot名称和创建日期:
p4 -ztag depots | awk '/^Depot:/ {depot_name=$2} /^Date:/ {print depot_name","$2}' | while IFS=',' read -r dname ctimestamp; do submitted_count=$(p4 -F "%change%" changes -s submitted "//${dname}/..." | wc -l | tr -d '[:space:]') if [ "$submitted_count" -eq 0 ]; then format_date=$(date -d "@${ctimestamp}" "+%Y-%m-%d %H:%M:%S") echo "- Depot名称:${dname},创建日期:${format_date}" fi done
补充说明:如果需要把待提交(pending)状态的changelist也纳入校验范围,只需要把脚本里的
changes -s submitted参数改成changes即可,此时输出的是既没有已提交changelist、也没有任何待提交changelist关联的depot清单。
Windows PowerShell环境的实现逻辑完全一致,遍历p4 depots返回的depot列表,逐个统计changelist数量、拉取创建时间字段格式化输出即可,不需要额外安装插件。
内容的提问来源于stack exchange,提问作者Manu Mishra
相关产品推荐
相关产品推荐

