2017-07-31 177 views
1

「(new_)git_repository」和「(new_)http_archive」工作空間規則以這種方式處理外部項目,以便在構建或預取時將任何外部依賴項複製到鏈接到工作空間的臨時目錄${WORKSPACE}/bazel-workspace/external/${EXTERNAL_DEP_NAME}將外部依賴項保存到項目存儲庫

我想在本地存儲在我的回購中的外部依賴關係,所以如果遠程存儲庫消失,即使在新計算機上,它也沒有被緩存,我會有依賴副本。

我可以在不編寫自定義工作區規則的情況下以某種方式更改默認行爲嗎?

回答

0

我可能是錯的,但它聽起來像你想在VCS中檢查它。如果我們談論的是一個http檔案,然後手動下載它,那麼將它粘貼在相關的「third_party」子文件夾下,並使用您製作的BUILD文件完成。

如果您想使用Bazel機制來下載和簽入外部依賴關係,那麼目前不支持此功能。 也許你應該打開一個issue

+0

是的,我想檢查他們到VCS中,但我想使用bazel機制來下載/更新它們。 – Redwan

+1

我明白了。不知道這是否受支持,我不認爲自定義工作區規則會幫助你。我建議稍微改變一下問題,關注如何使用bazel機制來管理**簽入**外部依賴 – Ittai

+1

Ittai是正確的,現在bazel不支持自動更新外部存儲庫。 – mhlopko

2

巴澤爾確實有一個標誌,你可以用這個:--experimental_repository_cache。它被設計成一個系統級的緩存,因此一臺機器上的多個項目不必重新下載依賴關係,但是可以使用它的每個存儲庫。基本上,你會說:

bazel build --experimental_repository_cache=$PWD/my_cache //foo 

然後,所有外部存儲庫將被下載到您的項目中my_cache目錄。

您的外部依賴內容的哈希鍵緩存,所以它不會是非常可讀的,但它會讓你保持你的外部依賴於你的VCS相當容易。

(理論上你甚至可以簽入.bazelrc文件中指定默認此選項,但--experimental_repository_cache只需要一個絕對路徑,現在,所以這是一個有點不切實際的。我申請a bug處理的相對路徑使用情況。)

+0

因此,如果我更新路徑中的庫哈希值將會改變,並且repo中的差異將變成「刪除舊版本庫並添加新版本」? – Redwan

+0

不,緩存只會添加一個新條目(因爲它不知道另一個項目是否仍在使用該存檔)。你必須手動清理舊的條目(絕對是一個缺點!)。 – kristina

相關問題