Mercurial > treepkg > treepkg
diff treepkg/packager.py @ 224:6bac65dcf258
Handle the svn repositories and working copies in a more object oriented way
author | Bernhard Herzog <bh@intevation.de> |
---|---|
date | Thu, 08 Jan 2009 16:55:18 +0000 |
parents | 01c043f13f13 |
children | 653a45adda50 |
line wrap: on
line diff
--- a/treepkg/packager.py Thu Jan 08 14:26:12 2009 +0000 +++ b/treepkg/packager.py Thu Jan 08 16:55:18 2009 +0000 @@ -16,7 +16,7 @@ import new import util -import subversion +from subversion import SvnRepository, SvnWorkingCopy import run import status import debian @@ -322,7 +322,6 @@ signing_key_id="", do_build=True): self.name = name self.base_dir = base_dir - self.svn_url = svn_url self.builder = PBuilder(pbuilderrc, root_cmd, release_signing_keyid=signing_key_id) self.deb_email = deb_email @@ -335,6 +334,9 @@ self.pkg_dir_template = "%(revision)d-%(increment)d" self.pkg_dir_regex \ = re.compile(r"(?P<revision>[0-9]+)-(?P<increment>[0-9]+)$") + repo = SvnRepository(svn_url, self.svn_external_subdirs) + self.working_copy = SvnWorkingCopy(repo, self.checkout_dir, + logger=logging) checkout_dir = util.filenameproperty("checkout") debian_dir = util.filenameproperty("debian") @@ -386,11 +388,7 @@ self.pkg_dir_template % locals()) def last_changed_revision(self): - revisions = [] - for directory in [self.checkout_dir] + self.svn_external_subdirs: - directory = os.path.join(self.checkout_dir, directory) - revisions.append(subversion.last_changed_revision(directory)) - return max(revisions) + return self.working_copy.last_changed_revision() def get_revision_numbers(self): """Returns a list of the numbers of the packaged revisions""" @@ -404,33 +402,17 @@ return revisions def update_checkout(self, revision=None): - """Updates the working copy of self.svn_url in self.checkout_dir. + """Updates the working copy. - If self.checkout_dir doesn't exist yet, self.svn_url is checked - out into that directory. The value of the revision parameter is - passed through to subversion.update. + If the checkout_dir doesn't exist yet, a new checkout is made + into that directory. The value of the revision parameter is + passed through to the update method. """ - localdir = self.checkout_dir - if os.path.exists(localdir): - logging.info("Updating the working copy in %r", localdir) - subversion.update(localdir, revision=revision) - else: - logging.info("The working copy in %r doesn't exist yet." - " Checking out from %r", localdir, - self.svn_url) - subversion.checkout(self.svn_url, localdir) + self.working_copy.update_or_checkout(revision=revision) def export_sources(self, to_dir): logging.info("Exporting sources for tarball to %r", to_dir) - subversion.export(self.checkout_dir, to_dir) - # some versions of svn (notably version 1.4.2 shipped with etch) - # do not export externals such as the admin subdirectory. We - # may have to do that in an extra step. - for subdir in self.svn_external_subdirs: - absdir = os.path.join(to_dir, subdir) - if not os.path.isdir(absdir): - subversion.export(os.path.join(self.checkout_dir, subdir), - absdir) + self.working_copy.export(to_dir) def copy_debian_directory(self, to_dir): logging.info("Copying debian directory to %r", to_dir)