1
0
mirror of https://github.com/openSUSE/osc.git synced 2024-12-26 18:06:13 +01:00

Merge branch 'master' of gitorious.org:opensuse/osc

This commit is contained in:
Adrian Schröter 2011-07-13 15:47:57 +02:00
commit 182284ef49
4 changed files with 51 additions and 87 deletions

View File

@ -3,7 +3,11 @@
# this wrapper exists so it can be put into /usr/bin, but still allows the # this wrapper exists so it can be put into /usr/bin, but still allows the
# python module to be called within the source directory during development # python module to be called within the source directory during development
import sys, locale import locale
import sys
from osc import commandline, babysitter
# this is a hack to make osc work as expected with utf-8 characters, # this is a hack to make osc work as expected with utf-8 characters,
# no matter how site.py is set... # no matter how site.py is set...
reload(sys) reload(sys)
@ -13,9 +17,6 @@ if not loc:
sys.setdefaultencoding(loc) sys.setdefaultencoding(loc)
del sys.setdefaultencoding del sys.setdefaultencoding
from osc import commandline
from osc import babysitter
osccli = commandline.Osc() osccli = commandline.Osc()
r = babysitter.run(osccli) r = babysitter.run(osccli)

View File

@ -3,13 +3,14 @@
# and distributed under the terms of the GNU General Public Licence, # and distributed under the terms of the GNU General Public Licence,
# either version 2, or (at your option) any later version. # either version 2, or (at your option) any later version.
import errno
import os.path import os.path
import pdb
import sys import sys
import signal import signal
import errno import traceback
from osc import oscerr from osc import oscerr
from urllib2 import URLError, HTTPError
from httplib import HTTPException, BadStatusLine
from oscsslexcp import NoSecureSSLError from oscsslexcp import NoSecureSSLError
from osc.util.cpio import CpioError from osc.util.cpio import CpioError
from osc.util.packagequery import PackageError from osc.util.packagequery import PackageError
@ -28,79 +29,65 @@ except:
# if rpm-python isn't installed (we might be on a debian system): # if rpm-python isn't installed (we might be on a debian system):
RPMError = None RPMError = None
from httplib import HTTPException, BadStatusLine
from urllib2 import URLError, HTTPError
# the good things are stolen from Matt Mackall's mercurial # the good things are stolen from Matt Mackall's mercurial
def catchterm(*args): def catchterm(*args):
raise oscerr.SignalInterrupt raise oscerr.SignalInterrupt
for name in 'SIGBREAK', 'SIGHUP', 'SIGTERM': for name in 'SIGBREAK', 'SIGHUP', 'SIGTERM':
num = getattr(signal, name, None) num = getattr(signal, name, None)
if num: signal.signal(num, catchterm) if num:
signal.signal(num, catchterm)
def run(prg): def run(prg):
try: try:
try: try:
if '--debugger' in sys.argv: if '--debugger' in sys.argv:
import pdb
pdb.set_trace() pdb.set_trace()
# here we actually run the program: # here we actually run the program:
return prg.main() return prg.main()
except: except:
# look for an option in the prg.options object and in the config dict # look for an option in the prg.options object and in the config
# print stack trace, if desired # dict print stack trace, if desired
if getattr(prg.options, 'traceback', None) or getattr(prg.conf, 'config', {}).get('traceback', None) or \ if getattr(prg.options, 'traceback', None) or getattr(prg.conf, 'config', {}).get('traceback', None) or \
getattr(prg.options, 'post_mortem', None) or getattr(prg.conf, 'config', {}).get('post_mortem', None): getattr(prg.options, 'post_mortem', None) or getattr(prg.conf, 'config', {}).get('post_mortem', None):
import traceback
traceback.print_exc(file=sys.stderr) traceback.print_exc(file=sys.stderr)
# we could use http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/52215 # we could use http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/52215
# enter the debugger, if desired # enter the debugger, if desired
if getattr(prg.options, 'post_mortem', None) or getattr(prg.conf, 'config', {}).get('post_mortem', None): if getattr(prg.options, 'post_mortem', None) or getattr(prg.conf, 'config', {}).get('post_mortem', None):
if sys.stdout.isatty() and not hasattr(sys, 'ps1'): if sys.stdout.isatty() and not hasattr(sys, 'ps1'):
import pdb
pdb.post_mortem(sys.exc_info()[2]) pdb.post_mortem(sys.exc_info()[2])
else: else:
print >>sys.stderr, 'sys.stdout is not a tty. Not jumping into pdb.' print >>sys.stderr, 'sys.stdout is not a tty. Not jumping into pdb.'
raise raise
except oscerr.SignalInterrupt: except oscerr.SignalInterrupt:
print >>sys.stderr, 'killed!' print >>sys.stderr, 'killed!'
return 1
except KeyboardInterrupt: except KeyboardInterrupt:
print >>sys.stderr, 'interrupted!' print >>sys.stderr, 'interrupted!'
return 1
except oscerr.UserAbort: except oscerr.UserAbort:
print >>sys.stderr, 'aborted.' print >>sys.stderr, 'aborted.'
return 1
except oscerr.APIError, e: except oscerr.APIError, e:
print >>sys.stderr, 'BuildService API error:', e.msg print >>sys.stderr, 'BuildService API error:', e.msg
return 1
except oscerr.LinkExpandError, e: except oscerr.LinkExpandError, e:
print >>sys.stderr, 'Link "%s/%s" cannot be expanded:\n' % (e.prj, e.pac), e.msg print >>sys.stderr, 'Link "%s/%s" cannot be expanded:\n' % (e.prj, e.pac), e.msg
print >>sys.stderr, 'Use "osc repairlink" to fix merge conflicts.\n' print >>sys.stderr, 'Use "osc repairlink" to fix merge conflicts.\n'
return 1
except oscerr.WorkingCopyWrongVersion, e: except oscerr.WorkingCopyWrongVersion, e:
print >>sys.stderr, e print >>sys.stderr, e
except oscerr.NoWorkingCopy, e: except oscerr.NoWorkingCopy, e:
print >>sys.stderr, e print >>sys.stderr, e
if os.path.isdir('.git'): print >>sys.stderr, "Current directory looks like git." if os.path.isdir('.git'):
if os.path.isdir('.hg'): print >>sys.stderr, "Current directory looks like mercurial." print >>sys.stderr, "Current directory looks like git."
if os.path.isdir('.svn'): print >>sys.stderr, "Current directory looks like svn." if os.path.isdir('.hg'):
if os.path.isdir('CVS'): print >>sys.stderr, "Current directory looks like cvs." print >>sys.stderr, "Current directory looks like mercurial."
return 1 if os.path.isdir('.svn'):
print >>sys.stderr, "Current directory looks like svn."
if os.path.isdir('CVS'):
print >>sys.stderr, "Current directory looks like cvs."
except HTTPError, e: except HTTPError, e:
print >>sys.stderr, 'Server returned an error:', e print >>sys.stderr, 'Server returned an error:', e
if hasattr(e, 'osc_msg'): if hasattr(e, 'osc_msg'):
@ -116,105 +103,65 @@ def run(prg):
print >>sys.stderr, e.hdrs print >>sys.stderr, e.hdrs
print >>sys.stderr, body print >>sys.stderr, body
if e.code in [ 400, 403, 404, 500 ]: if e.code in [400, 403, 404, 500]:
if '<summary>' in body: if '<summary>' in body:
msg = body.split('<summary>')[1] msg = body.split('<summary>')[1]
msg = msg.split('</summary>')[0] msg = msg.split('</summary>')[0]
print >>sys.stderr, msg print >>sys.stderr, msg
return 1
except BadStatusLine, e: except BadStatusLine, e:
print >>sys.stderr, 'Server returned an invalid response:', e print >>sys.stderr, 'Server returned an invalid response:', e
print >>sys.stderr, e.line print >>sys.stderr, e.line
return 1
except HTTPException, e: except HTTPException, e:
print >>sys.stderr, e print >>sys.stderr, e
return 1
except URLError, e: except URLError, e:
print >>sys.stderr, 'Failed to reach a server:\n', e.reason print >>sys.stderr, 'Failed to reach a server:\n', e.reason
return 1
except IOError, e: except IOError, e:
# ignore broken pipe # ignore broken pipe
if e.errno != errno.EPIPE: if e.errno != errno.EPIPE:
raise raise
return 1
except OSError, e: except OSError, e:
if e.errno != errno.ENOENT: if e.errno != errno.ENOENT:
raise raise
print >>sys.stderr, e print >>sys.stderr, e
return 1
except (oscerr.ConfigError, oscerr.NoConfigfile), e: except (oscerr.ConfigError, oscerr.NoConfigfile), e:
print >>sys.stderr, e.msg print >>sys.stderr, e.msg
return 1
except oscerr.OscIOError, e: except oscerr.OscIOError, e:
print >>sys.stderr, e.msg print >>sys.stderr, e.msg
if getattr(prg.options, 'debug', None) or \ if getattr(prg.options, 'debug', None) or \
getattr(prg.conf, 'config', {}).get('debug', None): getattr(prg.conf, 'config', {}).get('debug', None):
print >>sys.stderr, e.e print >>sys.stderr, e.e
return 1
except (oscerr.WrongOptions, oscerr.WrongArgs), e: except (oscerr.WrongOptions, oscerr.WrongArgs), e:
print >>sys.stderr, e print >>sys.stderr, e
return 2 return 2
except oscerr.ExtRuntimeError, e: except oscerr.ExtRuntimeError, e:
print >>sys.stderr, e.msg print >>sys.stderr, e.msg
return 1
except oscerr.WorkingCopyOutdated, e: except oscerr.WorkingCopyOutdated, e:
print >>sys.stderr, e print >>sys.stderr, e
return 1
except (oscerr.PackageExists, oscerr.PackageMissing, oscerr.WorkingCopyInconsistent), e: except (oscerr.PackageExists, oscerr.PackageMissing, oscerr.WorkingCopyInconsistent), e:
print >>sys.stderr, e.msg print >>sys.stderr, e.msg
return 1
except oscerr.PackageInternalError, e: except oscerr.PackageInternalError, e:
import traceback
print >>sys.stderr, 'a package internal error occured\n' \ print >>sys.stderr, 'a package internal error occured\n' \
'please file a bug and attach your current package working copy ' \ 'please file a bug and attach your current package working copy ' \
'and the following traceback to it:' 'and the following traceback to it:'
print >>sys.stderr, e.msg print >>sys.stderr, e.msg
traceback.print_exc(file=sys.stderr) traceback.print_exc(file=sys.stderr)
return 1
except oscerr.PackageError, e: except oscerr.PackageError, e:
print >>sys.stderr, e.msg print >>sys.stderr, e.msg
return 1
except PackageError, e: except PackageError, e:
print >>sys.stderr, '%s:' % e.fname, e.msg print >>sys.stderr, '%s:' % e.fname, e.msg
return 1
except RPMError, e: except RPMError, e:
print >>sys.stderr, e print >>sys.stderr, e
return 1
except SSLError, e: except SSLError, e:
print >>sys.stderr, "SSL Error:", e print >>sys.stderr, "SSL Error:", e
return 1
except SSLVerificationError, e: except SSLVerificationError, e:
print >>sys.stderr, "Certificate Verification Error:", e print >>sys.stderr, "Certificate Verification Error:", e
return 1
except NoSecureSSLError, e: except NoSecureSSLError, e:
print >>sys.stderr, e print >>sys.stderr, e
return 1
except CpioError, e: except CpioError, e:
print >>sys.stderr, e print >>sys.stderr, e
return 1
except oscerr.OscBaseError, e: except oscerr.OscBaseError, e:
print >>sys.stderr, '*** Error:', e print >>sys.stderr, '*** Error:', e
finally:
return 1 return 1
# vim: sw=4 et # vim: sw=4 et

View File

@ -4,14 +4,17 @@
# either version 2, or version 3 (at your option). # either version 2, or version 3 (at your option).
from core import *
import cmdln import cmdln
import conf import conf
import oscerr import oscerr
import sys import sys
from util import safewriter import time
from optparse import SUPPRESS_HELP from optparse import SUPPRESS_HELP
from core import *
from util import safewriter
MAN_HEADER = r""".TH %(ucname)s "1" "%(date)s" "%(name)s %(version)s" "User Commands" MAN_HEADER = r""".TH %(ucname)s "1" "%(date)s" "%(name)s %(version)s" "User Commands"
.SH NAME .SH NAME
%(name)s \- openSUSE build service command-line tool. %(name)s \- openSUSE build service command-line tool.
@ -1878,6 +1881,10 @@ Please submit there instead, or use --nodevelproject to force direct submission.
package = store_read_package(os.curdir) package = store_read_package(os.curdir)
except oscerr.NoWorkingCopy: except oscerr.NoWorkingCopy:
pass pass
elif opts.project:
project = opts.project
if opts.package:
package = opts.package
if len(args) > 1: if len(args) > 1:
package = args[1] package = args[1]
@ -1950,8 +1957,16 @@ Please submit there instead, or use --nodevelproject to force direct submission.
results = get_request_list(apiurl, project, package, who, results = get_request_list(apiurl, project, package, who,
state_list, opts.type, opts.exclude_target_project or []) state_list, opts.type, opts.exclude_target_project or [])
# Check if project actually exists if result list is empty
if not results:
try:
show_project_meta(apiurl, project)
print 'No results for {0}'.format(project)
except:
print 'Project {0} does not exist'.format(project)
return
results.sort(reverse=True) results.sort(reverse=True)
import time
days = opts.days or conf.config['request_list_days'] days = opts.days or conf.config['request_list_days']
since = '' since = ''
try: try:

View File

@ -15,6 +15,7 @@ try:
except: except:
HAVE_PY2EXE = False HAVE_PY2EXE = False
class build_osc(distutils.command.build.build, object): class build_osc(distutils.command.build.build, object):
""" """
Custom build command which generates man page. Custom build command which generates man page.
@ -27,9 +28,9 @@ class build_osc(distutils.command.build.build, object):
man_path = os.path.join('build', 'osc.1.gz') man_path = os.path.join('build', 'osc.1.gz')
distutils.log.info('generating %s' % man_path) distutils.log.info('generating %s' % man_path)
outfile = gzip.open(man_path, 'w') outfile = gzip.open(man_path, 'w')
osccli = commandline.Osc(stdout = outfile) osccli = commandline.Osc(stdout=outfile)
# FIXME: we cannot call the main method because osc expects an ~/.oscrc file # FIXME: we cannot call the main method because osc expects an ~/.oscrc
# (this would break builds in environments like the obs) # file (this would break builds in environments like the obs)
#osccli.main(argv = ['osc','man']) #osccli.main(argv = ['osc','man'])
osccli.optparser = osccli.get_optparser() osccli.optparser = osccli.get_optparser()
osccli.do_man(None) osccli.do_man(None)
@ -43,11 +44,11 @@ addparams = {}
if HAVE_PY2EXE: if HAVE_PY2EXE:
addparams['console'] = [{'script': 'osc-wrapper.py', 'dest_base': 'osc', 'icon_resources': [(1, 'osc.ico')]}] addparams['console'] = [{'script': 'osc-wrapper.py', 'dest_base': 'osc', 'icon_resources': [(1, 'osc.ico')]}]
addparams['zipfile'] = 'shared.lib' addparams['zipfile'] = 'shared.lib'
addparams['options'] = {'py2exe': { 'optimize': 0, 'compressed': True, 'packages': ['xml.etree', 'StringIO', 'gzip'] }} addparams['options'] = {'py2exe': {'optimize': 0, 'compressed': True, 'packages': ['xml.etree', 'StringIO', 'gzip']}}
data_files = [] data_files = []
if sys.platform[:3] != 'win': if sys.platform[:3] != 'win':
data_files.append((os.path.join('share','man','man1'), [os.path.join('build', 'osc.1.gz')])) data_files.append((os.path.join('share', 'man', 'man1'), [os.path.join('build', 'osc.1.gz')]))
setup(name='osc', setup(name='osc',
version = osc.core.__version__, version = osc.core.__version__,
@ -56,7 +57,7 @@ setup(name='osc',
author = 'openSUSE project', author = 'openSUSE project',
author_email = 'opensuse-buildservice@opensuse.org', author_email = 'opensuse-buildservice@opensuse.org',
license = 'GPL', license = 'GPL',
platforms = ['Linux','Mac OSX','Windows XP/2000/NT','Windows 95/98/ME'], platforms = ['Linux', 'Mac OSX', 'Windows XP/2000/NT', 'Windows 95/98/ME'],
keywords = ['openSUSE', 'SUSE', 'RPM', 'build', 'buildservice'], keywords = ['openSUSE', 'SUSE', 'RPM', 'build', 'buildservice'],
url = 'http://en.opensuse.org/openSUSE:OSC', url = 'http://en.opensuse.org/openSUSE:OSC',
download_url = 'http://gitorious.org/opensuse/osc', download_url = 'http://gitorious.org/opensuse/osc',