diff options
| author | Yaakov Nemoy <loupgaroublond@gmail.com> | 2008-09-28 10:29:00 -0400 |
|---|---|---|
| committer | Yaakov M. Nemoy <loupgaroublond@gmail.com> | 2008-09-28 10:29:00 -0400 |
| commit | d491ac3a2199cb1f3cdcd4f2f6b3d877b3a65a65 (patch) | |
| tree | 9940bed9d7c8edd1d416659f23b5c56c929ef8c9 /modules/pkg.py | |
| parent | 40119a669a625b839503d91aa5d40e112f7e46e2 (diff) | |
| download | fedora-devshell-d491ac3a2199cb1f3cdcd4f2f6b3d877b3a65a65.tar.gz fedora-devshell-d491ac3a2199cb1f3cdcd4f2f6b3d877b3a65a65.tar.xz fedora-devshell-d491ac3a2199cb1f3cdcd4f2f6b3d877b3a65a65.zip | |
Make the shell functions a bit more modular for scripting
Diffstat (limited to 'modules/pkg.py')
| -rw-r--r-- | modules/pkg.py | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/modules/pkg.py b/modules/pkg.py new file mode 100644 index 0000000..a748b92 --- /dev/null +++ b/modules/pkg.py @@ -0,0 +1,132 @@ +import os +import commands + +from os.path import isdir, join +from devshell import FEDORA_DIR + + +# Hack-filled at the moment. + +UPDATE, CLONE, COMMIT, LOG, DIFF = range(5) +scm_cmds = { + 'git' : ('update', 'clone', 'log', 'diff'), + 'hg' : ('update', 'clone', 'log', 'diff'), + 'cvs' : ('update', 'checkout', 'log', 'diff'), +} +scms = { + 'cvs.fedoraproject.org' : 'cvs -d :ext:cvs.fedoraproject.org:/cvs/pkgs %(command)s %(module)s', + 'git.fedorahosted.org' : 'git %(command)s ssh+git://git.fedorahosted.org/git/%(module)s', + 'hg.fedorahosted.org' : 'hg %(command)s ssh://hg.fedorahosted.org//hg/%(module)s', +} + + +class CannotFindPackage(Exception): + pass + +#FIXME: use this? +class SCM: + cmds = dict(update='update', clone='clone', log='log', diff='diff') + +class Package(object): + + def __init__(self, name, branch='devel'): + self.name = name + self.branch = branch + self.scm = None + self.__path = None + self.__checkout() + + def __set_path(self, p): + """ Set our path and make it our current working directory """ + if isdir(join(p, self.branch)): + p = join(p, self.branch) + print p + self.__path = p + os.chdir(p) + + def __get_path(self): + return self.__path + + path = property(__get_path, __set_path) + + def __checkout(self): + """ Find where this package lives """ + + # Look in FEDORA_DIR/<scm>/<pkg> + for scm in scms.keys(): + scmdir = join(FEDORA_DIR, scm, self.name) + if isdir(scmdir): + self.scm = scm + self.path = scmdir + return + + # Find this module in our scms + for scm in scms.keys(): + scmdir = join(FEDORA_DIR, scm) + if not isdir(scmdir): + print "Creating %s" % scmdir + os.mkdir(scmdir) + os.chdir(scmdir) + cmd = scms[scm] % { + 'command' : scm_cmds[scm.split('.')[0]][CLONE], + 'module' : self.name + } + print "Running %s" % cmd + status, output = commands.getstatusoutput(cmd) + if status == 0: + self.scm = scm + self.path = join(scmdir, self.name) + return + + raise CannotFindPackage + + def spec(self): + """ View the RPM spec file for this project """ + editor = os.getenv('EDITOR', 'vi') + os.system("%s %s.spec" % (editor, self.name)) + + def sh(self): + """ Drop into a shell """ + os.system("bash") + + def update(self): + self.scm.update() + cmd = scms[self.scm] % { + 'command' : scm_cmds[self.scm.split('.')[0]][UPDATE], + 'module' : '' + } + print "Executing `%s`" % cmd + status, output = commands.getstatusoutput(cmd) + print output + + def log(self, item=''): + """ Show the history of this package """ + cmd = scms[self.scm] % { + 'command' : scm_cmds[self.scm.split('.')[0]][LOG], + 'module' : item + } + print "Executing `%s | less`" % cmd + os.system("%s | less" % cmd) + + def diff(self, item=''): + cmd = scms[self.scm] % { + 'command' : scm_cmds[self.scm.split('.')[0]][DIFF], + 'module' : item + } + print "Executing `%s | colordiff | less -R`" % cmd + os.system("%s | colordiff | less -R" % cmd) + + def build(self): + raise NotImplementedError + + def srpm(self): + raise NotImplementedError + + def qa(self): + raise NotImplementedError + + def audit(self): + raise NotImplementedError + + def bugs(self): + raise NotImplementedError |
