1
0
mirror of https://github.com/openSUSE/osc.git synced 2025-02-26 12:12:11 +01:00

- support modification flages on creation of submit request

(for auto update or clean up packages or to avoid it, when submit request got accepted)
- show request ids from package source logs
This commit is contained in:
Adrian Schröter 2009-09-05 13:46:55 +00:00
parent 5f35c67b63
commit e040ae85f5
3 changed files with 51 additions and 16 deletions

12
NEWS
View File

@ -1,8 +1,5 @@
0.122
- option to download server side generated _service:* files on update
- support for running source services locally. Happens by default on source update
and build.
- added missing code for 'osc sr -l [ID]'
- allow osc cat with one parameter, if it is a url.
- make osc getpac really get the package (instead of branch only)!
@ -10,6 +7,15 @@
- added default project to new getpac and bco subcommand. .oscrc:getpac_default_project = OpenSUSE:Factory
(not added to branch subcommand, to not interfere with its syntax.)
- add support for generic python-keyring lib, supports KWallet, Gnome keyring, MacOS and Windows.
#
# Features which require OBS 1.7
#
- option to download server side generated _service:* files on update
- support for running source services locally. Happens by default on source update
and build.
- support modification flages on creation of submit request
(for auto update or clean up packages or to avoid it, when submit request got accepted)
- show request ids from package source logs
0.121.1
- fixed creation of new ~/.oscrc files

View File

@ -501,6 +501,12 @@ class Osc(cmdln.Cmdln):
@cmdln.option('--nodevelproject', action='store_true',
help='do not follow a defined devel project ' \
'(primary project where a package is developed)')
@cmdln.option('--cleanup', action='store_true',
help='remove package if submission gets accepted (default for home:<id>:branch projects)')
@cmdln.option('--no-cleanup', action='store_true',
help='never remove source package on accept, but update its content')
@cmdln.option('--no-update', action='store_true',
help='never touch source package on accept (will break source links)')
@cmdln.option('-d', '--diff', action='store_true',
help='show diff only instead of creating the actual request')
@cmdln.option('-l', '--list', action='store_true',
@ -534,6 +540,15 @@ class Osc(cmdln.Cmdln):
opts.days = conf.config['request_list_days']
return self.do_request('list', opts, *args)
flags = None
# we should check here for home:<id>:branch and default to update, but that would require OBS 1.7 server
if opts.cleanup:
flags = "cleanup"
elif opts.no_cleanup:
flags = "update"
elif opts.no_update:
flags = "noupdate"
args = slash_split(args)
# remove this block later again
@ -633,7 +648,7 @@ Please submit there instead, or use --nodevelproject to force direct submission.
result = create_submit_request(apiurl,
src_project, src_package,
dst_project, dst_package,
opts.message, orev=opts.revision)
opts.message, orev=opts.revision, flags=flags)
if repl == 'y':
for req in myreqs:
change_request_state(apiurl, str(req.reqid), 'revoked',

View File

@ -1411,11 +1411,12 @@ class RequestState:
class Action:
"""represents an action"""
def __init__(self, type, src_project, src_package, src_rev, dst_project, dst_package):
def __init__(self, type, src_project, src_package, src_rev, src_modifier, dst_project, dst_package):
self.type = type
self.src_project = src_project
self.src_package = src_package
self.src_rev = src_rev
self.src_modifier = src_modifier
self.dst_project = dst_project
self.dst_package = dst_package
@ -1442,17 +1443,18 @@ class Request:
for action in actions:
type = action.get('type', 'submit')
try:
src_prj = src_pkg = src_rev = dst_prj = dst_pkg = None
src_prj = src_pkg = src_rev = dst_prj = dst_pkg = src_modifier = None
if action.findall('source'):
n = action.find('source')
src_prj = n.get('project', None)
src_pkg = n.get('package', None)
src_rev = n.get('rev', None)
src_modifier = n.get('modifier', None)
if action.findall('target'):
n = action.find('target')
dst_prj = n.get('project', None)
dst_pkg = n.get('package', None)
self.add_action(type, src_prj, src_pkg, src_rev, dst_prj, dst_pkg)
self.add_action(type, src_prj, src_pkg, src_rev, src_modifier, dst_prj, dst_pkg)
except:
msg = 'invalid request format:\n%s' % ET.tostring(root)
raise oscerr.APIError(msg)
@ -1486,8 +1488,8 @@ class Request:
except:
pass
def add_action(self, type, src_prj, src_pkg, src_rev, dst_prj, dst_pkg):
self.actions.append(Action(type, src_prj, src_pkg, src_rev,
def add_action(self, type, src_prj, src_pkg, src_rev, src_modifier, dst_prj, dst_pkg):
self.actions.append(Action(type, src_prj, src_pkg, src_rev, src_modifier,
dst_prj, dst_pkg)
)
@ -1532,7 +1534,10 @@ class Request:
r=""
if action.src_rev:
r="(r%s)" % (action.src_rev)
action_list=action_list+" %s/%s%s -> %s" % ( action.src_project, action.src_package, r, action.dst_project )
m=""
if action.src_modifier:
m="(%s)" % (action.src_modifier)
action_list=action_list+" %s/%s%s%s -> %s" % ( action.src_project, action.src_package, r, m, action.dst_project )
if action.dst_package:
action_list=action_list+"/%s" % ( action.dst_package )
elif action.type=="delete":
@ -2337,14 +2342,18 @@ def create_change_devel_request(apiurl,
def create_submit_request(apiurl,
src_project, src_package,
dst_project, dst_package,
message, orev=None):
message, orev=None, flags=None):
import cgi
modifier=""
if flags:
modifier="""modifier="%s" """ % (flags)
# XXX: keep the old template for now in order to work with old obs instances
xml = """\
<request type="submit">
<submit>
<source project="%s" package="%s" rev="%s"/>
<source project="%s" package="%s" rev="%s" %s/>
<target project="%s" package="%s" />
</submit>
<state name="new"/>
@ -2353,6 +2362,7 @@ def create_submit_request(apiurl,
""" % (src_project,
src_package,
orev or show_upstream_rev(apiurl, src_project, src_package),
modifier,
dst_project,
dst_package,
cgi.escape(message or ''))
@ -2821,7 +2831,6 @@ def make_dir(apiurl, project, package, pathname=None, prj_dir=None):
def checkout_package(apiurl, project, package,
revision=None, pathname=None, prj_obj=None,
expand_link=False, prj_dir=None, service_files=None):
try:
# the project we're in might be deleted.
# that'll throw an error then.
@ -3459,24 +3468,29 @@ def get_commitlog(apiurl, prj, package, revision, format = 'text'):
comment = node.find('comment').text.encode(locale.getpreferredencoding(), 'replace')
except:
comment = '<no message>'
try:
requestid = node.find('requestid').text.encode(locale.getpreferredencoding(), 'replace')
except:
requestid = ""
t = time.localtime(int(node.find('time').text))
t = time.strftime('%Y-%m-%d %H:%M:%S', t)
if format == 'csv':
s = '%s|%s|%s|%s|%s|%s' % (rev, user, t, srcmd5, version,
comment.replace('\\', '\\\\').replace('\n', '\\n').replace('|', '\\|'))
s = '%s|%s|%s|%s|%s|%s|%s' % (rev, user, t, srcmd5, version,
comment.replace('\\', '\\\\').replace('\n', '\\n').replace('|', '\\|'), requestid)
r.append(s)
elif format == 'xml':
r.append('<logentry')
r.append(' revision="%s" srcmd5="%s">' % (rev, srcmd5))
r.append('<author>%s</author>' % user)
r.append('<date>%s</date>' % t)
r.append('<requestid>%s</requestid>' % requestid)
r.append('<msg>%s</msg>' %
comment.replace('&', '&amp;').replace('<', '&gt;').replace('>', '&lt;'))
r.append('</logentry>')
else:
s = '-' * 76 + \
'\nr%s | %s | %s | %s | %s\n' % (rev, user, t, srcmd5, version) + \
'\nr%s | %s | %s | %s | %s | %s\n' % (rev, user, t, srcmd5, version, requestid) + \
'\n' + comment
r.append(s)