| OLD | NEW | 
|---|
|  | 1 # | 
|  | 2 # Copyright 2007 IBM Corp. Released under the GPL v2 | 
|  | 3 # Authors: Ryan Harper <ryanh@us.ibm.com> | 
|  | 4 # | 
|  | 5 | 
| 1 """ | 6 """ | 
| 2 This module defines the GitKernel class | 7 This module defines the GitKernel class | 
| 3 |  | 
| 4 @author: Ryan Harper (ryanh@us.ibm.com) |  | 
| 5 @copyright: IBM 2007 |  | 
| 6 """ | 8 """ | 
| 7 | 9 | 
| 8 import os, logging | 10 __author__ = """ | 
|  | 11 ryanh@us.ibm.com (Ryan Harper) | 
|  | 12 """ | 
|  | 13 | 
|  | 14 | 
|  | 15 import os | 
| 9 import git, source_kernel | 16 import git, source_kernel | 
| 10 | 17 | 
| 11 | 18 | 
| 12 class GitKernel(git.InstallableGitRepo): | 19 class GitKernel(git.GitRepo): | 
| 13     """ | 20     """ | 
| 14     This class represents an installable git kernel repo. | 21     This class represents a git kernel repo. | 
| 15 | 22 | 
| 16     It is used to pull down a local copy of a git repo, check if the local repo | 23     It is used to pull down a local copy of a git repo, check if the local repo | 
| 17     is up-to-date, if not update and then build the kernel from the git repo. | 24     is up-to-date, if not update and then build the kernel from the git repo. | 
|  | 25 | 
| 18     """ | 26     """ | 
| 19     def __init__(self, repodir, giturl, weburl): | 27     def __init__(self, repodir, giturl, weburl): | 
| 20         super(GitKernel, self).__init__(repodir, giturl, weburl) | 28         git.GitRepo.__init__(self, repodir, giturl, weburl) | 
| 21         self._patches = [] | 29         self.__patches = [] | 
| 22         self._config = None | 30         self.__config = None | 
| 23         self._build = None | 31         self.__build = None | 
| 24         self._branch = None |  | 
| 25         self._revision = None |  | 
| 26 | 32 | 
| 27 | 33 | 
| 28     def configure(self, config): | 34     def configure(self, config): | 
| 29         self._config = config | 35         self.__config = config | 
| 30 | 36 | 
| 31 | 37 | 
| 32     def patch(self, patch): | 38     def patch(self, patch): | 
| 33         self._patches.append(patch) | 39         self.__patches.append(patch) | 
| 34 | 40 | 
| 35 | 41 | 
| 36     def checkout(self, revision, local=None): | 42     def install(self, host, build=True, builddir=None): | 
| 37         """ | 43         # use tmpdir if no builddir specified | 
| 38         Checkout the commit id, branch, or tag. | 44         # NB: pass a builddir to install() method if you | 
| 39 | 45         # need to ensure the build remains after the completion | 
| 40         @param revision: Name of the git remote branch, revision or tag | 46         # of a job | 
| 41         @param local: Name of the local branch, implies -b |  | 
| 42         """ |  | 
| 43         logging.info('Checking out %s', revision) |  | 
| 44         super(GitKernel, self).checkout(revision) |  | 
| 45         self._revision = super(GitKernel, self).get_revision() |  | 
| 46         self._branch = super(GitKernel, self).get_branch() |  | 
| 47         logging.info('Checked out %s on branch %s', self._revision, |  | 
| 48                      self._branch) |  | 
| 49 |  | 
| 50 |  | 
| 51     def show_branch(self): |  | 
| 52         """ |  | 
| 53         Print the current local branch name. |  | 
| 54         """ |  | 
| 55         self._branch = super(GitKernel, self).get_branch() |  | 
| 56         logging.info(self._branch) |  | 
| 57 |  | 
| 58 |  | 
| 59     def show_branches(self, all=True): |  | 
| 60         """ |  | 
| 61         Print the local and remote branches. |  | 
| 62 |  | 
| 63         @param all: Whether to show all branches (True) or only local branches |  | 
| 64                 (False). |  | 
| 65         """ |  | 
| 66         self._branch = super(GitKernel, self).get_branch() |  | 
| 67         logging.info(super(GitKernel, self).get_branch(all=all)) |  | 
| 68 |  | 
| 69 |  | 
| 70     def show_revision(self): |  | 
| 71         """ |  | 
| 72         Show the current git revision. |  | 
| 73         """ |  | 
| 74         self._revision = super(GitKernel, self).get_revision() |  | 
| 75         logging.info(self._revision) |  | 
| 76 |  | 
| 77 |  | 
| 78     def install(self, host, build=True, builddir=None, revision=None): |  | 
| 79         """ |  | 
| 80         Install the git tree in a host. |  | 
| 81 |  | 
| 82         @param host: Host object |  | 
| 83         @param build: Whether to build the source tree |  | 
| 84         @param builddir: Specify a build dir. If no build dir is specified, |  | 
| 85                 the job temporary directory will be used, so the build won't |  | 
| 86                 be persistent. |  | 
| 87         @param revision: Desired commit hash. If ommited, will build from HEAD |  | 
| 88                 of the branch. |  | 
| 89         """ |  | 
| 90         if revision: |  | 
| 91             self.checkout(revision) |  | 
| 92             self._revision = super(GitKernel, self).get_revision() |  | 
| 93             logging.info('Checked out revision: %s', self._revision) |  | 
| 94 |  | 
| 95         if not builddir: | 47         if not builddir: | 
| 96             self._build = os.path.join(host.get_tmp_dir(), "build") | 48             self.__build = os.path.join(host.get_tmp_dir(),"build") | 
| 97             logging.warning('Builddir %s is not persistent (it will be erased ' | 49             print 'warning: builddir %s is not persistent' %(self.__build) | 
| 98                             'in future jobs)', self._build) |  | 
| 99 | 50 | 
| 100         # push source to host for install | 51         # push source to host for install | 
| 101         logging.info('Pushing %s to host', self.source_material) | 52         print 'pushing %s to host' %(self.source_material) | 
| 102         host.send_file(self.source_material, self._build) | 53         host.send_file(self.source_material, self.__build) | 
|  | 54         remote_source_material= os.path.join(self.__build, | 
|  | 55                         os.path.basename(self.source_material)) | 
| 103 | 56 | 
| 104         # use a source_kernel to configure, patch, build and install. | 57         # use a source_kernel to configure, patch, build and install. | 
| 105         sk = source_kernel.SourceKernel(self._build) | 58         sk = source_kernel.SourceKernel(remote_source_material) | 
| 106 | 59 | 
| 107         if build: | 60         if build: | 
| 108             # apply patches | 61             # apply patches | 
| 109             for p in self._patches: | 62             for p in self.__patches: | 
| 110                 sk.patch(p) | 63                 sk.patch(p) | 
| 111 | 64 | 
| 112             # configure | 65             # configure | 
| 113             sk.configure(self._config) | 66             sk.configure(self.__config) | 
| 114 | 67 | 
| 115             # build | 68             # build | 
| 116             sk.build(host) | 69             sk.build(host) | 
| 117 | 70 | 
| 118         # install | 71         # install | 
| 119         sk.install(host) | 72         sk.install(host) | 
| OLD | NEW | 
|---|