diff options
Diffstat (limited to 'g_cran/g_cran.py')
-rw-r--r-- | g_cran/g_cran.py | 50 |
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()) |