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:
parent
5f35c67b63
commit
e040ae85f5
12
NEWS
12
NEWS
@ -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
|
||||
|
@ -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',
|
||||
|
38
osc/core.py
38
osc/core.py
@ -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('&', '&').replace('<', '>').replace('>', '<'))
|
||||
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)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user