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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
#!/usr/bin/python
"""
To build plugins from MonoDevelop solution:
$ ./repo.py --make
To build the Mono.Addins repository in folder "repo":
$ ./repo.py --build
To publish the repository (example publishes to community repo v0.4):
$ ./repo.py --publish
To do everything:
$ ./repo.py --make --build --publish
"""
from os import system
from os.path import commonprefix, abspath
from subprocess import Popen, PIPE
REPO_VERSION = "0.5.97"
REPO_NAME = "official"
REPO_SCP = "gnomedo@do.davebsd.com:do.davebsd.com/repo/%s/%s" % \
(REPO_VERSION, REPO_NAME)
REPO_DIR = abspath ("repo")
REPO_CONFIG = "Debug"
def main (argv):
if "--clean" in argv or "--all" in argv:
clean ()
if "--make" in argv or "--all" in argv:
make ()
if "--build" in argv or "--all" in argv:
build ()
if "--publish" in argv or "--all" in argv:
publish ()
def clean ():
system ("rm -rf repo */bin")
def make ():
system ("mdtool build")
def build ():
repo = escape (REPO_DIR)
system ("rm -rf %s" % repo)
system ("mkdir -p %s" % repo)
for asm in assemblies ():
system ("cp %s %s" % (escape (asm), repo))
for man in manifests (asm):
system ("cp %s %s" % (escape (man), repo))
system ("mdtool setup pack %s/*.addin.xml -d:%s" % (repo, repo))
system ("mdtool setup rep-build %s" % repo)
system ("rm -rf %s/*.dll %s/*.addin.xml" % (repo, repo))
def publish ():
repo = escape (REPO_DIR)
system ("rsync -rve ssh --delete %s/* %s" % (repo, REPO_SCP))
def manifests (asm=None):
dir = "."
if asm:
ls = map (abspath, shsp ('ls'))
common = [(commonprefix ([p, asm]), p) for p in ls]
dir = abspath (max (common)[1])
dir = escape (dir)
find = 'find %s -name *.addin.xml' % dir
return map (abspath, shsp (find))
def assemblies (config=None):
config = config or REPO_CONFIG
find = 'find . -path *%s* -name *.dll' % config
return map (abspath, shsp (find))
def escape (path):
return path.replace (' ', '\ ')
def shsp (*lines):
return sh (*lines).splitlines ()
def sh (*lines):
"""Pipe commands together and return the output.
Examples:
ls1 = sh ("ls")
ls2 = sh ("ls", "grep Hello")
ps1 = sh ("ps -aux", "grep firefox")
"""
out = None
for argv in map (to_argv, lines):
if out:
out = Popen (argv, stdin=out.stdout, stdout=PIPE)
else:
out = Popen (argv, stdout=PIPE)
if out:
return out.communicate ()[0]
else:
return None
def to_argv (line):
mask = lambda s: s.replace ('\ ', '____')
unmask = lambda s: s.replace ('____', ' ')
return map (unmask, mask (line).split ())
if __name__ == "__main__":
import sys
main (sys.argv)
|