summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'g_cran/g_cran.py')
-rw-r--r--g_cran/g_cran.py50
1 files changed, 40 insertions, 10 deletions
diff --git a/g_cran/g_cran.py b/g_cran/g_cran.py
index d005d38..9a7a347 100644
--- a/g_cran/g_cran.py
+++ b/g_cran/g_cran.py
@@ -1,8 +1,9 @@
#!/usr/bin/python
-import getopt, sys, os, string, urllib, re
+import getopt, sys, os, string, urllib, re, tarfile, StringIO
from ebuild import *
import phases
from cran_read import *
+from filetricks import *
from settings import *
__doc__="Usage: "+sys.argv[0]+" <local repository directory> <action> [<action arguments>...]"
@@ -24,16 +25,44 @@ def action_sync(repo_location,remote_uri):
urllib.urlretrieve(remote_uri+'/src/contrib/PACKAGES',packages_filename)
repo_file=open(os.path.join(repo_location,REPO_MYDIR,'remote_uri'),'w')
repo_file.write(remote_uri)
+ repo_file.close()
+
+ import rfc822
+ packages_file=open(packages_filename,"r")
+ file_parts=EmptyLinesFile(packages_file)
+ database_tarball=tarfile.open(os.path.join(repo_location,REPO_MYDIR,'database.tgz'),'w:gz')
+ #read PACKAGES file
+ while not file_parts.eof:
+ current_package=''
+ while True:
+ line=file_parts.readline()
+ if len(line.strip()): #nonempty line, add to current_package
+ current_package=current_package+line
+ else:
+ break
+ rfc822_file=StringIO.StringIO(current_package)
+ cran_package=dict(rfc822.Message(rfc822_file).items()) #read part of PACKAGES file
+ if len(cran_package):
+ pms_package=pmsify_package_data(cran_package,remote_uri) #fix values
+ #now add the package to the database tarball
+ file_contents=StringIO.StringIO(current_package)
+ new_tar_file=tarfile.TarInfo(name=pms_package.ebuild_vars['pn'])
+ new_tar_file.size=len(file_contents.buf)
+ database_tarball.addfile(tarinfo=new_tar_file,fileobj=file_contents)
+ database_tarball.close()
+ return 0
#list categories in this repository
def list_categories(repo_location):
print "dev-R"
+ return 0
#idem ditto
def list_packages(repo_location):
packages=read_packages(os.path.join(repo_location,REPO_MYDIR,'PACKAGES'),repo_location)
for package in packages:
print 'dev-R/'+package.ebuild_vars['pn'],package.ebuild_vars['pv']
+ return 0
#list package details, in PMS's format
def action_package(repo_location,package_name):
@@ -56,9 +85,11 @@ def action_package(repo_location,package_name):
if hasattr(phases,pms_func):
defined_phases.append(pms_func)
print 'GCOMMON_PHASES='+' '.join(defined_phases)
+ return 0
def usage():
print __doc__
+ return 0
def main():
arguments=sys.argv[1:]
@@ -74,11 +105,11 @@ def main():
print " * remote_repository_uri"
sys.exit(1)
remote_repo=arguments[2]
- action_sync(repo_location,remote_repo)
+ return action_sync(repo_location,remote_repo)
elif action=='list-categories':
- list_categories(repo_location)
+ return list_categories(repo_location)
elif action=='list-packages':
- list_packages(repo_location)
+ return list_packages(repo_location)
elif action=='package':
if len(arguments)<3:
print "The 'package' action takes the following parameters:"
@@ -86,18 +117,17 @@ def main():
print " * [version]"
sys.exit(1)
package_name=arguments[2]
- action_package(repo_location,package_name)
+ return action_package(repo_location,package_name)
elif action=='usage':
- usage()
+ return usage()
elif action in pms_phases and hasattr(phases,action):
- getattr(phases,action)(os.environ,repo_location)
+ return getattr(phases,action)(os.environ,repo_location)
elif action in actions_wanted:
raise NotImplementedError
else:
- usage()
- sys.exit(0)
+ return usage()
if __name__ == "__main__":
- main()
+ sys.exit(main())