【问题标题】:cleartool find difference recursive in certain file type to predecessorcleartool 在某些文件类型中找到与前任递归的差异
【发布时间】:2017-12-04 03:26:56
【问题描述】:

在我的脚本中,我调用 ClearCase 来检查当前路径(包括所有子文件夹)中的某个文件类型的任何文件是否已更改。我对cleartool一点也不熟悉,命令应该是这样的:

cleartool diff -predecessor -recursive *.filetype

作为返回值,我只需要一个布尔值:如果存在差异则为 true,如果没有任何变化则为 false

【问题讨论】:

  • 最好不要为 cleartool diff 使用通配符,而是结合查找查询:我将在今天晚些时候发布答案
  • 请求的基本目的是什么?如果您将此作为计划作业运行以触发构建,那么如果所有有问题的文件都已签入,则几乎每次都会返回“它已更改”。(除非 checkin -identical 在您的位置是正常发生的。)

标签: version-control clearcase difference


【解决方案1】:

作为返回值,我只需要一个布尔值:如果存在差异则为 true,如果没有任何变化则为 false

你需要一个脚本。一个简单的 find + exec 是不够的,因为退出状态不会完全符合您的需要。

#! /bin/bash
noChange=0  ### "cleartool diff" exit status means no difference
files=$(cleartool find . -name "*.filetype")
for f in ${file}; do;
  cleartool diff -pre -options "-status_only" "${f}"
  if [ $? != $noChange ]; then
    exit 0
  fi
done
exit 1

(0 is true, false is 1 in shell)

注意cleartool diff-options参数的使用:

opt/ions pass-through-opts

指定 diff 不直接支持的一个或多个比较方法选项。

这样,您只能从cleartool diff 获得状态,这正是您要在您的案例中测试的内容。

由于您的 previous question 表明您也有 Git,因此您可以轻松地在 bash 会话中执行该脚本,即使在 Windows 上也是如此。

【讨论】:

    【解决方案2】:

    乍一看,您要查找的命令是这样的:

    cleartool find . -name "*.filetype" -exec 'cleartool diff -pred "$CLEARCASE_PN"'
    

    在 Windows 上,它看起来像这样:

    cleartool find . -name "*.filetype" -exec "cleartool diff -pred \"%CLEARCASE_PN%\""
    

    Unix 示例中的单引号很重要,否则“CLEARCASE_PN”环境变量引用将在您启动命令时展开,而不是在实际触发 -exec 时展开。

    Windows 命令行中的 \"%CLEARCASE_PN%\" 结构和 unix 上的 "$CLEARCASE_PN" 用于说明包含空格的文件名。

    现在,看看你想要什么……我不确定它是否能实现根本目的,不管是什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-05
      • 1970-01-01
      • 2013-07-28
      • 1970-01-01
      • 2019-02-13
      • 1970-01-01
      相关资源
      最近更新 更多