File: update-repos.py

package info (click to toggle)
spring 106.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 55,316 kB
  • sloc: cpp: 543,954; ansic: 44,800; python: 12,575; java: 12,201; awk: 5,889; sh: 1,796; asm: 1,546; xml: 655; perl: 405; php: 211; objc: 194; makefile: 76; sed: 2
file content (83 lines) | stat: -rwxr-xr-x 1,877 bytes parent folder | download | duplicates (3)
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))