1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 import os
17
18 from buildslave.commands.base import SourceBaseCommand
19 from buildslave import runprocess
20
21
22 -class Darcs(SourceBaseCommand):
23 """Darcs-specific VC operation. In addition to the arguments
24 handled by SourceBaseCommand, this command reads the following keys:
25
26 ['repourl'] (required): the Darcs repository string
27 """
28
29 header = "darcs operation"
30
36
43
45 darcs = self.getCommand('darcs')
46 assert not self.revision
47
48 d = os.path.join(self.builder.basedir, self.srcdir)
49 command = [darcs, 'pull', '--all', '--verbose']
50 c = runprocess.RunProcess(self.builder, command, d,
51 sendRC=False, timeout=self.timeout,
52 maxTime=self.maxTime, usePTY=False)
53 self.command = c
54 return c.start()
55
57 darcs = self.getCommand('darcs')
58
59 d = self.builder.basedir
60 command = [darcs, 'get', '--verbose', '--partial',
61 '--repo-name', self.srcdir]
62 if self.revision:
63
64 n = os.path.join(self.builder.basedir, ".darcs-context")
65 f = open(n, "wb")
66 f.write(self.revision)
67 f.close()
68
69 command.append('--context')
70 command.append(n)
71 command.append(self.repourl)
72
73 c = runprocess.RunProcess(self.builder, command, d,
74 sendRC=False, timeout=self.timeout,
75 maxTime=self.maxTime, usePTY=False)
76 self.command = c
77 d = c.start()
78 if self.revision:
79 d.addCallback(self.removeContextFile, n)
80 return d
81
82 - def removeContextFile(self, res, n):
83 os.unlink(n)
84 return res
85
87 darcs = self.getCommand('darcs')
88
89
90 command = [darcs, "changes", "--context"]
91 c = runprocess.RunProcess(self.builder, command,
92 os.path.join(self.builder.basedir, self.srcdir),
93 environ=self.env, timeout=self.timeout,
94 sendStdout=False, sendStderr=False, sendRC=False,
95 keepStdout=True, usePTY=False)
96 d = c.start()
97 d.addCallback(lambda res: c.stdout)
98 return d
99