You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.4 KiB
54 lines
1.4 KiB
#!/usr/bin/env python3
|
|
from sh import git, rm, mv
|
|
import re
|
|
import os
|
|
|
|
rm = rm.bake("-rf")
|
|
grm = git.bake("rm", "--cached")
|
|
commit = git.bake("commit", "-am")
|
|
gclone = git.bake("clone", "--recursive")
|
|
gadd = git.bake("add")
|
|
# Read the gitmodules file
|
|
submodules = {}
|
|
|
|
for l in git("submodule").split("\n"):
|
|
if " " not in l:
|
|
continue
|
|
h, d = l.split(" ")
|
|
h = h[1:]
|
|
submodules[d] = {"path": d, "hash": h, "name": None, "url": None}
|
|
|
|
curr = None
|
|
name = None
|
|
r = re.compile(r"(submodule|path|url) [=]?[ ]?\"?([^\"]+)\"?")
|
|
for l in open(".gitmodules", "r"):
|
|
matches = r.search(l.strip())
|
|
if not matches:
|
|
continue
|
|
if matches[1] == "submodule":
|
|
name = matches[2]
|
|
elif matches[1] == "path":
|
|
curr = matches[2]
|
|
submodules[curr]["name"] = name
|
|
elif matches[1] == "url":
|
|
submodules[curr]["url"] = matches[2]
|
|
|
|
grm(".gitmodules")
|
|
for module in submodules.values():
|
|
grm(module["path"])
|
|
rm(module["path"])
|
|
|
|
commit("scripted: Remove submodules for materialization")
|
|
mv(".gitignore", ".gitignore.bak")
|
|
|
|
for module in submodules.values():
|
|
gclone(module["url"], module["path"])
|
|
d = os.getcwd()
|
|
os.chdir(module["path"])
|
|
git("checkout", module["hash"])
|
|
os.chdir(d)
|
|
rm(f"{module['path']}/.git")
|
|
gadd(module["path"])
|
|
|
|
mv(".gitignore.bak", ".gitignore")
|
|
commit("scripted: Materialize submodules")
|
|
|