1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
#!/usr/bin/python3
# updates repos.gz
import gzip
import os
wwwroot = "/home/packages/www/repos.springrts.com"
prefix = "https://repos.springrts.com/"
streamer = "/home/packages/bin/Streamer"
repos = {
"main": "https://packages.springrts.com"
}
assert(os.path.isfile(streamer))
def SetupStreamer(repodir):
streamercgi = os.path.join(repodir, "streamer.cgi")
if os.path.islink(streamercgi):
if os.readlink(streamercgi) == streamer:
return
print("Deleted invalid link %s" %(streamercgi))
os.unlink(streamercgi)
print("Created symlink %s -> %s" %(streamercgi, streamer))
os.symlink(streamer, streamercgi)
def GetWWWRepos(wwwroot):
for repo in os.listdir(wwwroot):
absname = os.path.join(wwwroot, repo)
if not os.path.isdir(absname):
continue
assert(repo not in repos)
repos[repo] = prefix + repo
return repos
def ParseRepos(reposgz):
res = {}
with gzip.open(os.path.join(wwwroot, "repos.gz"), "rb") as f:
for line in f.readlines():
name, url, _, _ = line.decode().split(",", 4)
res[name] = url
return res
def WriteRepos(reposgz, repos):
with gzip.open(reposgz, "wb") as f:
for reponame, prefix in sorted(repos.items()):
line = "%s,%s,,\n" %(reponame, prefix)
f.write(line.encode())
def SetupRepos(wwwroot, wwwrepos):
for reponame in wwwrepos:
absdir = os.path.join(wwwroot, reponame)
if os.path.isdir(absdir):
SetupStreamer(absdir)
def ReposEqual(repoa, repob):
for a, b in (repoa, repob), (repob, repoa):
for k, v in a.items():
if not k in b:
return False
if v != b[k]:
return False
return True
reposgz = os.path.join(wwwroot, "repos.gz")
repos.update(GetWWWRepos(wwwroot))
SetupRepos(wwwroot, repos)
currentrepos = ParseRepos(reposgz)
if not ReposEqual(repos, currentrepos):
print("Updating %s" %(reposgz))
WriteRepos(reposgz, repos)
assert(ReposEqual(ParseRepos(reposgz), repos))
|