2024/6/25

rearrage local repo to mirror format

用.repo提供bsp,不給 repo server access 權限的。
自己要做 repo mirror.
用repo forall 來run 這個:
$ cat pp.py
#!/usr/bin/python
import os
import subprocess

rfolder ='/home/charles-chang/rr3/'
lfolder ='/home/charles-chang/MY_Android14/'

repo_project = os.getenv('REPO_PROJECT','test/demo')
repo_path = os.getenv('REPO_PATH','repomirror')

pname = rfolder + os.path.dirname(repo_project)
print(f"REPO_PROJECT: {repo_project} {pname}")
print(f"REPO_PATH: {repo_path}")

os.makedirs(pname,exist_ok=True)
tname = rfolder + repo_project +'.git'
print(f"{tname}")

result = subprocess.run(["git","clone","--no-local","--mirror",lfolder+repo_path,tname])
就是:
repo forall -c /home/charles-chang/pp.py
就會create一個 repo server folder: rr3

第一步,repo sync -l 後,要做 git clone 其中的 project,會出現 Error:
結果是因為 symbolic link 的關係: 所以mirror 的時候要加上 --no-local

結果 .repo/project-object 裡面的 folder 安排方式就是 mirror 的方式,可惜 git 內容不是 mirror 的...

一些問題:

repo init 指定 -m XXX時,不單純只是把 manifest.xml 內容寫成 include XXX,同時會讀取 XXX 的內容,如果有問題,就會出現 Error,
然後這個 repo init 命令就會 Fail

manifests.git 所在位置和 manifest.xml 中,remote tag 的 fetch 有關,fetch="..\.." 的話,manifests.git 就要在 跟目錄的下一層通常是 platform 下。
如果直接在 project root,就用 fetch=".." 就可以。


做 repo sync動作時,會把git commit 內容輸出到 .repo/TRACE_FILE。
或是(舊版?),宣告環境變數 REPO_TRACE=1,可以輸出 Trace( ) 到 stdout.

同樣的,git 也可以輸出trace 就是用
GIT_CURL_VERBOSE=1
GIT_TRACE=1

沒有留言:

張貼留言