summaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
authorYaakov M. Nemoy <loupgaroublond@gmail.com>2009-02-03 18:54:48 +0100
committerYaakov M. Nemoy <loupgaroublond@gmail.com>2009-02-03 18:54:48 +0100
commit9d06b341952ff641d4e82734c3df302e464f4ce5 (patch)
treeb7bea1ec899ea93970dbb9c55d457bdefa645b5f /modules
parentf1bfe46bfd67ee2d817cd9ecdd7c5380003e39da (diff)
downloadfedora-devshell-9d06b341952ff641d4e82734c3df302e464f4ce5.tar.gz
fedora-devshell-9d06b341952ff641d4e82734c3df302e464f4ce5.tar.xz
fedora-devshell-9d06b341952ff641d4e82734c3df302e464f4ce5.zip
Refactors HaskellPort and Port to be more generic
Diffstat (limited to 'modules')
-rw-r--r--modules/darcs.py4
-rw-r--r--modules/hackage.py2
-rw-r--r--modules/haskellport.py88
-rw-r--r--modules/port.py100
4 files changed, 105 insertions, 89 deletions
diff --git a/modules/darcs.py b/modules/darcs.py
index 68bea98..4d2038f 100644
--- a/modules/darcs.py
+++ b/modules/darcs.py
@@ -51,7 +51,7 @@ class Darcs(RevisionControl):
with pwd(self.branches_dir):
self.get(self.dir, 'orig')
self.set_current_src()
-
+
def get(self, src, tgt, *args):
'''sets up a branch given arguments, taken from a source with a target
@@ -112,7 +112,7 @@ class Darcs(RevisionControl):
if len(args) >= 2 and args[0] == 'new':
branch_name = args[1]
args = args[2:]
- else:
+ else:
branch_name = ''
if len(args) == 1 and args[0] == 'head':
log.debug('doing head')
diff --git a/modules/hackage.py b/modules/hackage.py
index a38ccab..861f55e 100644
--- a/modules/hackage.py
+++ b/modules/hackage.py
@@ -42,5 +42,5 @@ class Hackage(Fetcher):
return 'http://hackage.haskell.org/packages/archive/' + \
pkg + '/' + ver + '/' + pkg + '-' + ver + '.tar.gz'
- def darcs_url(self, pkg):
+ def vcs_url(self, pkg):
return 'http://darcs.haskell.org/' + pkg
diff --git a/modules/haskellport.py b/modules/haskellport.py
index 3ca6555..1121dab 100644
--- a/modules/haskellport.py
+++ b/modules/haskellport.py
@@ -30,38 +30,11 @@ from modules.port import Port
from modules.sourceball import SourceBall
class HaskellPort(Port):
- def __init__(self, package=None):
- super(HaskellPort, self).__init__()
- if not package:
- package = getcwd()
- self.pkg = DirFactory(package)
- self.hackage = Hackage()
-
- def add_sourceball(self, sourceball):
- '''copies a tarball into the package
-
- tarball is a path to some tarball
- '''
- with pwd(self.pkg.dir):
- pkg_src = SourceBall('', sourceball)
- pkg_src.set_buildsystem('cabal')
- name = pkg_src.name
- self.pkg.add_source(name)
- return self.close_later(pkg_src)
+ sourceball = SourceBall
+ revision_control = Darcs
+ builder = Cabal
+ fetcher = Hackage
- def add_darcs(self, url, tgt, *args):
- '''creates a darcs variant of a cabal package using darcs source
-
- url is a url to some darcs repo
- tgt is the local name of the darcs repo
- '''
- with pwd(self.pkg.dir):
- pkg_src = Darcs(tgt, url, *args)
- pkg_src.set_buildsystem('cabal')
- name = pkg_src.name
- self.pkg.add_source(name)
- return self.close_later(pkg_src)
-
def install_tag(self, tag):
'''assuming a package that supports tagging, install a specific tag
@@ -71,56 +44,3 @@ class HaskellPort(Port):
with self.package.tag(tag):
self.install()
- def install_sourceball(self, tarball, target='home', *args):
- '''given a tarball, copy it in and install it
- '''
- pkg_src = self.add_sourceball(tarball)
- Cabal(pkg_src).install_source(target, *args)
-
- def add_from_hackage(self, pkg, ver):
- '''get a specific package from hackage
-
- pkg is the name of the package desired
- ver is the version wanted
- '''
- sb_loc = self.hackage.url(pkg, ver)
- sb = self.add_sourceball(sb_loc)
- sb.cfg['hackage_name'] = pkg
- return sb
-
- def add_latest(self, pkg):
- '''get the latest version of a package from hackage
-
- pkg is the package desired
- '''
- ver = self.hackage.latest_version(pkg)
- return self.add_from_hackage(pkg, ver)
-
- def install_from_hackage(self, pkg, ver, target='home', *args):
- '''get and install a specific package from hackage
-
- pkg is the desired package
- ver is the version wanted
- target is the location to install to, either 'home' or 'root'
- '''
- sb_loc = self.hackage.url(pkg, ver)
- self.install_sourceball(sb_loc, target, *args)
-
- def install_latest(self, pkg, target='home', *args):
- '''get and install the latest version of a package from hackage'''
- ver = self.hackage.latest_version(pkg)
- self.install_from_hackage(pkg, ver, target, *args)
-
- def add_upstream(self, pkg, tgt=None, *args):
- if not tgt:
- tgt = pkg
- return self.add_darcs(self.hackage.darcs_url(pkg), tgt, *args)
-
- def install_upstream(self, pkg, tgt=None, target='home', *args):
- pkg_src = self.add_upstream(pkg, tgt, *args)
- Cabal(pkg_src).install_source(target)
-
-
- def close(self):
- super(HaskellPort, self).close()
- self.pkg.close()
diff --git a/modules/port.py b/modules/port.py
index fe3083d..d6edcdb 100644
--- a/modules/port.py
+++ b/modules/port.py
@@ -18,9 +18,104 @@
from base.module import Module
-class Port(Module):
- def __init__(self):
+class Port(Module):
+ @property
+ def sourceball(self):
+ raise NotImplementedError
+
+ @property
+ def revision_control(self):
+ raise NotImplementedError
+
+ @property
+ def builder(self):
+ raise NotImplementedError
+
+ @property
+ def fetcher(self):
+ raise NotImplementedError
+
+ def __init__(self, package=None):
self._to_close = list()
+ if not package:
+ package = getcwd()
+ self.pkg = DirFactory(package)
+ self.hackage = Hackage()
+
+ def add_sourceball(self, sourceball):
+ '''copies a tarball into the package
+
+ tarball is a path to some tarball
+ '''
+ with pwd(self.pkg.dir):
+ pkg_src = self.sourceball('', sourceball)
+ pkg_src.set_buildsystem(self.builder._type)
+ name = pkg_src.name
+ self.pkg.add_source(name)
+ return self.close_later(pkg_src)
+
+ def add_vcs(self, url, tgt, *args):
+ '''creates a darcs variant of a cabal package using darcs source
+
+ url is a url to some darcs repo
+ tgt is the local name of the darcs repo
+ '''
+ with pwd(self.pkg.dir):
+ pkg_src = self.revision_control(tgt, url, *args)
+ pkg_src.set_buildsystem(self.builder._type)
+ name = pkg_src.name
+ self.pkg.add_source(name)
+ return self.close_later(pkg_src)
+
+ def install_sourceball(self, tarball, target='home', *args):
+ '''given a tarball, copy it in and install it
+ '''
+ pkg_src = self.add_sourceball(tarball)
+ self.builder(pkg_src).install_source(target, *args)
+
+ def add_from_release(self, pkg, ver):
+ '''get a specific package from hackage
+
+ pkg is the name of the package desired
+ ver is the version wanted
+ '''
+ sb_loc = self.fetcher().url(pkg, ver)
+ sb = self.add_sourceball(sb_loc)
+ sb.cfg['release_name'] = pkg
+ return sb
+
+ def add_latest(self, pkg):
+ '''get the latest version of a package from hackage
+
+ pkg is the package desired
+ '''
+ ver = self.fetcher().latest_version(pkg)
+ return self.add_from_release(pkg, ver)
+
+ def install_from_release(self, pkg, ver, target='home', *args):
+ '''get and install a specific package from hackage
+
+ pkg is the desired package
+ ver is the version wanted
+ target is the location to install to, either 'home' or 'root'
+ '''
+ sb_loc = self.fetcher().url(pkg, ver)
+ self.install_sourceball(sb_loc, target, *args)
+
+ def install_latest(self, pkg, target='home', *args):
+ '''get and install the latest version of a package from hackage'''
+ ver = self.hackage.latest_version(pkg)
+ self.install_from_hackage(pkg, ver, target, *args)
+
+ def add_upstream(self, pkg, tgt=None, *args):
+ if not tgt:
+ tgt = pkg
+ return self.add_darcs(self.fetcher().vcs_url(pkg), tgt, *args)
+
+ def install_upstream(self, pkg, tgt=None, target='home', *args):
+ pkg_src = self.add_upstream(pkg, tgt, *args)
+ self.builder(pkg_src).install_source(target)
+
def close_later(self, directory):
if directory not in self._to_close:
@@ -30,3 +125,4 @@ class Port(Module):
def close(self):
for directory in self._to_close:
directory.close()
+ self.pkg.close()