1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 import os
16 import mail
17 import shutil
18 import logging
19 import tempfile
20 import cherrypy
21 import commands
22
23 from datetime import datetime
24 from turbogears import expose, redirect, config, identity, controllers
25
26 from bodhi.util import mkmetadatadir, header
27 from bodhi.model import PackageUpdate
28 from bodhi.metadata import ExtendedMetadata
29 from bodhi.modifyrepo import RepoMetadata
30
31 from os.path import isfile, isdir, basename, join
32
33 log = logging.getLogger(__name__)
34
36 require = identity.in_group("releng")
37
40
42 """
43 When this method is first called, it saves a snapshot of the
44 updates-stage tree (tree -s output). When called a second time,
45 it takes another snapshot, diffs it with the original, and stores
46 the diff in 'repodiff_dir'.
47 """
48 if not self.orig_repo:
49 self.orig_repo = tempfile.mkstemp()
50 tree = commands.getoutput("tree -s %s" % self.stage_dir)
51 os.write(self.orig_repo[0], tree)
52 else:
53 self.new_repo = tempfile.mkstemp()
54 tree = commands.getoutput("tree -s %s" % self.stage_dir)
55 os.write(self.new_repo[0], tree)
56 os.close(self.new_repo[0])
57 os.close(self.orig_repo[0])
58 diff = join(config.get('repodiff_dir'), '%s' %
59 datetime.now().strftime("%Y%m%d-%H%M%S"))
60 diff = open(diff, 'w')
61 diff.write(commands.getoutput("diff -u %s %s" % (self.orig_repo[1],
62 self.new_repo[1])))
63 diff.close()
64 os.unlink(self.orig_repo[1])
65 os.unlink(self.new_repo[1])
66 self.orig_repo = None
67
68 @expose(template='bodhi.templates.push', allow_json=True)
73
74 @expose(allow_json=True)
75 - def mash(self, updates, **kw):
85