Concourse CI 中的资源类型:如果始终 returns 只检查最新版本会怎样?

Resource Type in Concourse CI: What happens if Check always returns just the latest version?

我正在查看 git 资源,发现 Check 正在做一个克隆而不是更轻量级的 ls-remote 很奇怪。我认为有两个原因:

  1. 可以根据元数据和回购中更改的文件过滤提交
  2. 因为文档说它应该 return 一系列版本,而不仅仅是最新的

第一个很明显,但我不明白第二个的原因。

It is given the configured source and current version on stdin, and must print the array of new versions, in chronological order, to stdout, including the requested version if it's still valid.

但后来它说:

If your resource is unable to determine which versions are newer than the given version (e.g. if it's a git commit that was push -fed over), then the current version of your resource should be returned (i.e. the new HEAD).

所以我的问题是,为什么资源不能总是 return 一个版本 - 最新的。 IE。如果源已经移动,甚至没有请求的版本? 什么功能会丢失?

请注意,此问题与

有关

如果您这样做,您的资源将与一组版本一起出现,并且您的 get 步骤不会 return 明确请求的文件版本(由 check 编辑的版本 return 传递给 in),这将违反资源类型设计,坦率地说,这是一种不好的做法(为什么 return 一些东西仅仅因为它较新而不被要求?如果您需要将资源固定到特定版本怎么办?)

为什么 git 资源 clone 而不是 ls-remote 的答案是因为您可以将资源配置为仅在某些文件发生更改(或相反的情况下)时才识别新版本其中,如果有新提交但更改的文件位于源配置的 ignore_paths 节中,则 check 不会 return 新资源。

所以最大的问题是,你为什么要这么做?易于编程?性能问题?