~cszikszoy/do-plugins/pastebin

« back to all changes in this revision

Viewing changes to repo.py

  • Committer: David Siegel
  • Date: 2008-06-02 19:48:18 UTC
  • Revision ID: dave@x-20080602194818-i7rtmvlbq2461ey3
Added repo.py

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/python
 
2
 
 
3
"""
 
4
To build plugins from MonoDevelop solution:
 
5
        $ ./repo.py --make
 
6
 
 
7
To build the Mono.Addins repository in folder "repo":
 
8
        $ ./repo.py --build
 
9
 
 
10
To publish the repository (example publishes to community repo v0.4):
 
11
        $ ./repo.py --publish
 
12
 
 
13
To do everything:
 
14
        $ ./repo.py --make --build --publish
 
15
"""
 
16
 
 
17
from os import system
 
18
from os.path import commonprefix, abspath
 
19
from subprocess import Popen, PIPE
 
20
 
 
21
REPO_VERSION = "0.4"
 
22
REPO_NAME = "official"
 
23
REPO_SCP = "gnomedo@do.davebsd.com:do.davebsd.com/repo/%s/%s" % \
 
24
        (REPO_VERSION, REPO_NAME)
 
25
 
 
26
REPO_DIR = abspath ("repo")
 
27
REPO_CONFIG = "Debug"
 
28
 
 
29
def main (argv):
 
30
        if "--make" in argv or "--all" in argv:
 
31
                make ()
 
32
        if "--build" in argv or "--all" in argv:
 
33
                build ()
 
34
        if "--publish" in argv or "--all" in argv:
 
35
                publish ()
 
36
 
 
37
def make ():
 
38
        system ("mdtool build")
 
39
 
 
40
def build ():
 
41
        repo = escape (REPO_DIR)
 
42
        system ("rm -rf %s" % repo)
 
43
        system ("mkdir -p %s" % repo)
 
44
        for asm in assemblies ():
 
45
                system ("cp %s %s" % (escape (asm), repo))
 
46
                for man in manifests (asm):
 
47
                        system ("cp %s %s" % (escape (man), repo))
 
48
        system ("mdtool setup pack %s/*.addin.xml -d:%s" % (repo, repo))
 
49
        system ("mdtool setup rep-build %s" % repo)
 
50
        system ("rm -rf %s/*.dll %s/*.addin.xml" % (repo, repo))
 
51
 
 
52
def publish ():
 
53
        repo = escape (REPO_DIR)
 
54
        system ("scp -r %s/* %s" % (repo, REPO_SCP))
 
55
 
 
56
def manifests (asm=None):
 
57
        dir = "."
 
58
        if asm:
 
59
                ls = map (abspath, shsp ('ls'))
 
60
                common = [(commonprefix ([p, asm]), p) for p in ls]
 
61
                dir = abspath (max (common)[1])
 
62
                dir = escape (dir) 
 
63
        find = 'find %s -name *.addin.xml' % dir
 
64
        return map (abspath, shsp (find))
 
65
 
 
66
def assemblies (config=None):
 
67
        config = config or REPO_CONFIG
 
68
        find = 'find . -path *%s* -name *.dll' % config
 
69
        return map (abspath, shsp (find))
 
70
 
 
71
def escape (path):
 
72
        return path.replace (' ', '\ ')
 
73
 
 
74
def shsp (*lines):
 
75
        return sh (*lines).splitlines ()
 
76
 
 
77
def sh (*lines):
 
78
        """Pipe commands together and return the output.
 
79
 
 
80
        Examples:
 
81
                ls1 = sh ("ls")
 
82
                ls2 = sh ("ls", "grep Hello")
 
83
                ps1 = sh ("ps -aux", "grep firefox")
 
84
        """
 
85
        out = None
 
86
        for argv in map (to_argv, lines):
 
87
                if out:
 
88
                        out = Popen (argv, stdin=out.stdout, stdout=PIPE)
 
89
                else:
 
90
                        out = Popen (argv, stdout=PIPE)
 
91
        if out:
 
92
                return out.communicate ()[0]
 
93
        else:
 
94
                return None
 
95
 
 
96
def to_argv (line):
 
97
        mask = lambda s: s.replace ('\ ', '____')
 
98
        unmask = lambda s: s.replace ('____', ' ')
 
99
        return map (unmask, mask (line).split ())
 
100
 
 
101
if __name__ == "__main__":
 
102
        import sys
 
103
        main (sys.argv)