aboutsummaryrefslogtreecommitdiffstats
path: root/MgaRepo/commands/getsrpm.py
diff options
context:
space:
mode:
Diffstat (limited to 'MgaRepo/commands/getsrpm.py')
-rw-r--r--MgaRepo/commands/getsrpm.py100
1 files changed, 100 insertions, 0 deletions
diff --git a/MgaRepo/commands/getsrpm.py b/MgaRepo/commands/getsrpm.py
new file mode 100644
index 0000000..6c238ba
--- /dev/null
+++ b/MgaRepo/commands/getsrpm.py
@@ -0,0 +1,100 @@
+#!/usr/bin/python
+#
+# This program will extract given version/revision of the named package
+# from the Conectiva Linux repository system.
+#
+from MgaRepo import Error, config, disable_mirror
+from MgaRepo.command import *
+from MgaRepo.layout import package_url
+from MgaRepo.rpmutil import get_srpm
+import tempfile
+import shutil
+import getopt
+import glob
+import sys
+import os
+
+HELP = """\
+Usage: mgarepo getsrpm [OPTIONS] REPPKGURL
+
+Generates the source RPM (.srpm) file of a given package.
+
+Options:
+ -c Use files in current/ directory (default)
+ -p Use files in pristine/ directory
+ -v VER Use files from the version specified by VER (e.g. 2.2.1-2cl)
+ -r REV Use files from current directory, in revision REV (e.g. 1001)
+ -t DIR Put SRPM file in directory DIR when done (default is ".")
+ -P USER Define the RPM packager inforamtion to USER
+ -s FILE Run script with "FILE TOPDIR SPECFILE" command
+ -n Rename the package to include the revision number
+ -l Use subversion log to build rpm %changelog
+ -T FILE Template to be used to generate the %changelog
+ -M Do not use the mirror (use the main repository)
+ -h Show this message
+ -S Do not download sources from the binary repository
+ --check Check integrity of files fetched from the binary repository
+ --strict Check if the given revision contains changes in REPPKGURL
+
+Examples:
+ mgarepo getsrpm python
+ mgarepo getsrpm -l python
+ mgarepo getsrpm http://foo.bar/svn/cnc/snapshot/python
+ mgarepo getsrpm -p http://foo.bar/svn/cnc/releases/8cl/python
+ mgarepo getsrpm -r 1001 file:///svn/cnc/snapshot/python
+"""
+
+def mode_callback(option, opt, val, parser, mode):
+ opts = parser.values
+ opts.mode = mode
+ if mode == "version":
+ try:
+ opts.version, opts.release = val.split("-", 1)
+ except ValueError:
+ raise Error, "wrong version, use something like 2.2-1mdk"
+ elif mode == "revision":
+ opts.revision = val
+
+def parse_options():
+ parser = OptionParser(help=HELP)
+ parser.defaults["mode"] = "current"
+ parser.defaults["version"] = None
+ parser.defaults["release"] = None
+ parser.defaults["revision"] = None
+ parser.defaults["submit"] = False
+ callback_options = dict(action="callback", callback=mode_callback,
+ type="string", dest="__ignore")
+ parser.add_option("-c", callback_kwargs={"mode": "current"}, nargs=0,
+ **callback_options)
+ parser.add_option("-p", callback_kwargs={"mode": "pristine"}, nargs=0,
+ **callback_options)
+ parser.add_option("-r", callback_kwargs={"mode": "revision"}, nargs=1,
+ **callback_options)
+ parser.add_option("-v", callback_kwargs={"mode": "version"}, nargs=1,
+ **callback_options)
+ parser.add_option("-t", dest="targetdirs", action="append", default=[])
+ parser.add_option("-s", dest="scripts", action="append", default=[])
+ parser.add_option("-P", dest="packager", default="")
+ parser.add_option("-n", dest="revname", action="store_true")
+ parser.add_option("-l", dest="svnlog", action="store_true")
+ parser.add_option("-T", dest="template", type="string", default=None)
+ parser.add_option("-S", dest="use_binrepo", default=True,
+ action="store_false")
+ parser.add_option("--check", dest="binrepo_check", default=False,
+ action="store_true")
+ parser.add_option("-M", "--no-mirror", action="callback",
+ callback=disable_mirror)
+ parser.add_option("--strict", dest="strict", default=False,
+ action="store_true")
+ opts, args = parser.parse_args()
+ del opts.__ignore
+ if len(args) != 1:
+ raise Error, "invalid arguments"
+ opts.pkgdirurl = package_url(args[0])
+ opts.verbose = 1
+ return opts
+
+def main():
+ do_command(parse_options, get_srpm)
+
+# vim:et:ts=4:sw=4