comparison recipes/kde/enterprise/tags.py @ 499:e44c9c3f69f8

consolidate enterprise packagers
author Bjoern Ricks <bricks@intevation.de>
date Wed, 20 Oct 2010 07:51:53 +0000
parents 1c8cc563ac80
children e90a21cfbc3b
comparison
equal deleted inserted replaced
498:1c8cc563ac80 499:e44c9c3f69f8
4 # Bjoern Ricks <bjoern.ricks@intevation.de> 4 # Bjoern Ricks <bjoern.ricks@intevation.de>
5 # 5 #
6 # This program is free software under the GPL (>=v2) 6 # This program is free software under the GPL (>=v2)
7 # Read the file COPYING coming with the software for details. 7 # Read the file COPYING coming with the software for details.
8 8
9 """Base classes for all kde entperprise packagers""" 9 """PackageTrack for kde entperprise tag only builds"""
10 10
11 import re
12 import time
13 import logging 11 import logging
14 12
15 import treepkg.packager 13 import recipes.kde.enterprise.generic as enterprise
16 import treepkg.subversion as subversion
17 14
15 class PackageTrack(enterprise.PackageTrack):
18 16
19 class SourcePackager(treepkg.packager.SourcePackager): 17 """In contrast to recipes.kde.enterprise.generic.PackageTrack
18 this PackageTrack either builds trunk or newest tag"""
19
20 revision_packager_cls = enterprise.RevisionPackager
20 21
21 def __init__(self, *args, **kw): 22 def __init__(self, *args, **kw):
22 super(SourcePackager, self).__init__(*args, **kw)
23 self.enterprise_version = (self.parent.pkg_date + "."
24 + str(self.revision))
25
26 def determine_package_version(self, directory):
27 enterprise_version = self.enterprise_version
28 revision = self.revision
29 rules_revision = self.parent.rules_revision
30 pkg_revision = self.parent.pkg_revision
31 pkg_date = self.parent.pkg_date
32
33 return super(SourcePackager, self).determine_package_version(
34 directory, locals())
35
36 def prepare_sources_for_tarball(self, pkgbasedir, pkgbaseversion):
37 self.update_version_numbers(pkgbasedir)
38
39 def get_change_msg(self):
40 return self.changemsg_template % dict(revision=self.revision,
41 pkg_date=self.parent.pkg_date,
42 rules_revision=self.parent.rules_revision)
43
44 def update_version_numbers(self, pkgbasedir):
45 """Updates the version numbers in the code in pkgbasedir.
46 The default implementation does nothing. Derived classes should
47 override this method if necessary.
48 """
49
50
51 class RevisionPackager(treepkg.packager.RevisionPackager):
52
53 source_packager_cls = SourcePackager
54
55 def __init__(self, *args, **kw):
56 self.pkg_date = kw.pop("pkg_date",
57 time.strftime("%Y%m%d", time.localtime()))
58 super(RevisionPackager, self).__init__(*args, **kw)
59
60
61 class PackageTrack(treepkg.packager.PackageTrack):
62
63 revision_packager_cls = RevisionPackager
64
65 extra_config_desc = [("tags_url", str, ""),
66 ("tags_pattern", str, ""),
67 ("tags_subdir", str, ""),
68 ("tags_rules_subdir", str, "")]
69
70 def __init__(self, *args, **kw):
71 tags_url = kw.pop("tags_url")
72 tags_pattern = kw.pop("tags_pattern")
73 tags_subdir = kw.pop("tags_subdir")
74 tags_rules_subdir = kw.pop("tags_rules_subdir")
75 super(PackageTrack, self).__init__(*args, **kw) 23 super(PackageTrack, self).__init__(*args, **kw)
76 self.tag_detector = subversion.TagDetector(tags_url, tags_pattern,
77 tags_subdir)
78 self.tag_rules_detector = subversion.TagDetector(tags_url, tags_pattern,
79 tags_rules_subdir)
80 self.found_tag_rules = False
81 if tags_rules_subdir:
82 self.found_tag_rules = True
83 24
84 def packager_for_new_revision(self): 25 def packager_for_new_revision(self):
85 logging.info("Checking tags") 26 logging.info("Checking tags")
86 self.tag_url = None 27 self.tag_url = None
87 self.use_tag_rules = self.found_tag_rules 28 self.use_tag_rules = self.found_tag_rules
116 revision) 57 revision)
117 58
118 else: # tag_url is not set -> build trunk 59 else: # tag_url is not set -> build trunk
119 # don't use rules from tags for trunk builds 60 # don't use rules from tags for trunk builds
120 self.use_tag_rules = False 61 self.use_tag_rules = False
121 return super(PackageTrack, self).packager_for_new_revision() 62 return super(PackageTrack, self).new_revsision_packager()
122
123 def export_sources(self, to_dir):
124 if self.tag_url is not None:
125 logging.info("Exporting sources for tarball from %r to %r",
126 self.tag_url, to_dir)
127 self.working_copy.export_tag(self.tag_url, to_dir,
128 revision=self.tag_revision)
129 else:
130 super(PackageTrack, self).export_sources(to_dir)
131
132 def copy_debian_directory(self, to_dir):
133 if self.use_tag_rules:
134 logging.info("Exporting debian package description from %s to %s",
135 self.tag_rules_url, to_dir)
136 self.rules_working_copy.export_tag(self.tag_rules_url, to_dir)
137 else:
138 super(PackageTrack, self).copy_debian_directory(to_dir)
139
140 def tag_pkg_parameters(self, tag_url):
141 match = re.search(r"/enterprise[^.]*\.[^.]*\."
142 r"(?P<date>[0-9]{8})\.(?P<baserev>[0-9]+)/",
143 tag_url)
144 if match:
145 date = match.group("date")
146 baserev = match.group("baserev")
147 xml_log = subversion.log_xml(tag_url, baserev)
148 revisions = subversion.extract_tag_revisions(xml_log)
149 tag_change_count = len(revisions)
150 return (date, tag_change_count)
151 else:
152 raise RuntimeError("Cannot determine tag parameters from %r"
153 % tag_url)
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)