博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为perforce添加nothave命令,查找尚未添加到depot中的文件(in Ruby)
阅读量:4120 次
发布时间:2019-05-25

本文共 1680 字,大约阅读时间需要 5 分钟。

以前在使用Perforce时犯过这样的错误:编写了新的文件,忘了添加到 Perforce depot 中就匆匆submit,别人sync下来编译不过,影响团队进度。编写了一个Ruby脚本,用于检查当前client中有哪些文件没有添加到depot中,每次submit之前运行一下 p4nothave,就能知道还有哪些文件没有add进去。另外用 p4nothave | p4 -x - add 可以把这些文件都add到depot中。

基本思路,先用 p4 have 获得当前目录下有哪些文件是在depot中的,再遍历目录,找出不在depot的中的文件。在实现时要考虑到有些文件已经add但还没有submit,那么p4 have不会显示它,需要再运行p4 opened找出那些已经add却还没有submit的文件。

#!/usr/bin/env ruby

# Usage: p4nothave [paths]

require 'find'

def filter_out(f)

  # filter out temp files
  if File.basename(f) =~ /^/./
    return true
  end
  false
end

def check_p4_output(firstline)

  if firstline =~ /^Client '(.*?)' unknown/
    puts "Client '#$1' unknown at path '#{Dir.getwd}'"
    exit 1
  end
end

def p4have(path)

  have = IO.popen("p4 have 2>&1").readlines

  check_p4_output(have[0])

  in_depot = {}
  have.each do |line|
    # format of p4 have:
    #
    # //depot/trunk/hello#1 - /home/schen/p4client/trunk/hello
    #
    if line =~ /^.*? - (.*)$/
      in_depot[$1] = 1
    end
  end
  return in_depot
end

def p4added(path)

  opened = IO.popen("p4 opened 2>&1").readlines

  check_p4_output(opened[0])

  in_depot = {}
  opened.each do |line|
    # format of p4 opened:
    #
    # //depot/trunk/p4scripts/p4nothave.rb#1 - add default change (text)
    #
    if line =~ /^(.*?)((#|@)(.*?))? - add/
      # get the local filename from remote filename
      # format of p4 where:
      #
      # //depot/trunk/temp //schen_asus_1/trunk/temp /home/schen/p4client/trunk/temp
      #
      `p4 where #$1` =~ /^(.*) (.*) (.*)/
      in_depot[$3] = 1
    end
  end
  return in_depot
end

def nothave(path)

  in_depot = p4have(path).merge(p4added(path))
  Find.find(path) do |f|
    if File.file?(f) && !in_depot.include?(File.expand_path(f))
      if !filter_out(f)
        puts f
      end
    end
  end
end

paths = ARGV.empty? ? ["."] : ARGV

paths.each do |path|
  nothave(path)
end

转载地址:http://dqvpi.baihongyu.com/

你可能感兴趣的文章
后台服务的变慢排查思路(轻量级应用服务器中测试)
查看>>
MySQL中InnoDB事务的默认隔离级别测试
查看>>
微服务的注册与发现
查看>>
bash: service: command not found
查看>>
linux Crontab 使用 --定时任务
查看>>
shell编程----目录操作(文件夹)
查看>>
机器学习-----K近邻算法
查看>>
HBASE安装和简单测试
查看>>
关于程序员的59条搞笑但却真实无比的编程语录
查看>>
搞笑--一篇有趣的文章编译自一篇西班牙博客。有一位美丽的公主,被关押在一个城堡中最高的塔上,一条凶恶的巨龙看守着她,需要有一位勇士营救她…
查看>>
非常不错 Hadoop 的HDFS (Hadoop集群(第8期)_HDFS初探之旅)
查看>>
Tomcat启动错误,端口占用
查看>>
laravel 修改api返回默认的异常处理
查看>>
高德坐标转换百度坐标 javascript
查看>>
tp5封装通用的修改某列值
查看>>
laravel控制器与模型名称不统一
查看>>
vue登录拦截
查看>>
npm配置淘宝镜像仓库以及electron镜像
查看>>
linux设置开机自启动脚本的最佳方式
查看>>
VUE SPA 单页面应用 微信oauth网页授权
查看>>