feat: skip re-clone if CrossPoint repo is already up to date, add --reclone flag
This commit is contained in:
+50
-3
@@ -37,11 +37,53 @@ def rmtree(path):
|
|||||||
shutil.rmtree(path, onerror=remove_readonly)
|
shutil.rmtree(path, onerror=remove_readonly)
|
||||||
|
|
||||||
|
|
||||||
def clone_repo():
|
def get_remote_head_sha():
|
||||||
print("[1/3] Cloning CrossPoint repository...")
|
try:
|
||||||
|
result = subprocess.run(
|
||||||
|
f"git ls-remote {REPO_URL} HEAD",
|
||||||
|
shell=True, capture_output=True, text=True, timeout=10
|
||||||
|
)
|
||||||
|
if result.returncode == 0 and result.stdout:
|
||||||
|
return result.stdout.split()[0]
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def get_local_head_sha():
|
||||||
|
try:
|
||||||
|
result = subprocess.run(
|
||||||
|
"git rev-parse HEAD",
|
||||||
|
shell=True, capture_output=True, text=True, cwd=REPO_DIR
|
||||||
|
)
|
||||||
|
if result.returncode == 0:
|
||||||
|
return result.stdout.strip()
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def clone_repo(force: bool = False):
|
||||||
|
print("[1/3] Preparing CrossPoint repository...")
|
||||||
|
|
||||||
|
if os.path.exists(REPO_DIR) and not force:
|
||||||
|
print(" Existing repo found, checking remote for updates...")
|
||||||
|
remote_sha = get_remote_head_sha()
|
||||||
|
local_sha = get_local_head_sha()
|
||||||
|
|
||||||
|
if remote_sha and local_sha and remote_sha == local_sha:
|
||||||
|
print(f" Already up to date ({local_sha[:8]}), skipping clone.")
|
||||||
|
return
|
||||||
|
elif remote_sha:
|
||||||
|
print(f" Remote has changed ({remote_sha[:8]} vs local {(local_sha or 'unknown')[:8]}), re-cloning...")
|
||||||
|
else:
|
||||||
|
print(" Could not reach remote, re-using existing repo.")
|
||||||
|
return
|
||||||
|
|
||||||
if os.path.exists(REPO_DIR):
|
if os.path.exists(REPO_DIR):
|
||||||
print(f" Removing existing '{REPO_DIR}'...")
|
print(f" Removing existing '{REPO_DIR}'...")
|
||||||
rmtree(REPO_DIR)
|
rmtree(REPO_DIR)
|
||||||
|
|
||||||
run(f"git clone --recursive {REPO_URL} {REPO_DIR}")
|
run(f"git clone --recursive {REPO_URL} {REPO_DIR}")
|
||||||
|
|
||||||
|
|
||||||
@@ -235,6 +277,11 @@ def parse_args():
|
|||||||
action="store_true",
|
action="store_true",
|
||||||
help="Auto-answer Y to all plugin install prompts",
|
help="Auto-answer Y to all plugin install prompts",
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--reclone",
|
||||||
|
action="store_true",
|
||||||
|
help="Force re-clone of the CrossPoint repository even if it already exists",
|
||||||
|
)
|
||||||
return parser.parse_args()
|
return parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
@@ -258,7 +305,7 @@ def main():
|
|||||||
print(" Aborted.")
|
print(" Aborted.")
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
print()
|
print()
|
||||||
clone_repo()
|
clone_repo(force=args.reclone)
|
||||||
apply_plugins(yes_all=args.yes)
|
apply_plugins(yes_all=args.yes)
|
||||||
build_and_flash(args.environment)
|
build_and_flash(args.environment)
|
||||||
print("\nDone.")
|
print("\nDone.")
|
||||||
|
|||||||
Reference in New Issue
Block a user