1
0
mirror of https://github.com/openSUSE/osc.git synced 2025-09-07 05:38:43 +02:00

- meta: allow for editing patterns

# list patterns:
  osc meta pattern <prj>

  # show pattern foo:
  osc meta pattern <prj> foo

  # edit pattern foo:
  osc meta pattern <prj> foo -e
This commit is contained in:
Dr. Peter Poeml
2007-07-19 10:08:42 +00:00
parent b1ca1e46ab
commit 04bd877a59
2 changed files with 69 additions and 7 deletions

View File

@@ -140,7 +140,7 @@ class Osc(cmdln.Cmdln):
def do_meta(self, subcmd, opts, *args):
"""${cmd_name}: Show meta information, or edit it
Show or edit build service metadata of type <prj|pkg|prjconf|user>.
Show or edit build service metadata of type <prj|pkg|prjconf|user|pattern>.
This command displays metadata on buildservice objects like projects,
packages, or users. The type of metadata is specified by the word after
@@ -177,14 +177,16 @@ class Osc(cmdln.Cmdln):
cmd = args[0]
del args[0]
if cmd == 'pkg':
required_args = 2
if cmd in ['pkg']:
min_args, max_args = 2, 2
elif cmd in ['pattern']:
min_args, max_args = 1, 2
else:
required_args = 1
if len(args) < required_args:
min_args, max_args = 1, 1
if len(args) < min_args:
print >>sys.stderr, 'Too few arguments.'
return 2
if len(args) > required_args:
if len(args) > max_args:
print >>sys.stderr, 'Too many arguments.'
return 2
@@ -197,9 +199,19 @@ class Osc(cmdln.Cmdln):
project = args[0]
elif cmd == 'user':
user = args[0]
elif cmd == 'pattern':
project = args[0]
if len(args) > 1:
pattern = args[1]
pattern += '.xml'
else:
pattern = None
# enforce pattern argument if needed
if opts.edit or opts.file:
sys.exit('a pattern file argument is required.')
# show
if not opts.edit:
if not opts.edit and not opts.file:
if cmd == 'prj':
sys.stdout.write(''.join(show_project_meta(conf.config['apiurl'], project)))
elif cmd == 'pkg':
@@ -210,6 +222,15 @@ class Osc(cmdln.Cmdln):
r = get_user_meta(conf.config['apiurl'], user)
if r:
sys.stdout.write(''.join(r))
elif cmd == 'pattern':
if pattern:
r = show_pattern_meta(conf.config['apiurl'], project, pattern)
if r:
sys.stdout.write(''.join(r))
else:
r = show_pattern_metalist(conf.config['apiurl'], project)
if r:
sys.stdout.write('\n'.join(r) + '\n')
# edit
if opts.edit and not opts.file:
@@ -233,6 +254,11 @@ class Osc(cmdln.Cmdln):
edit=True,
path_args=(quote_plus(user)),
template_args=(user, user))
elif cmd == 'pattern':
edit_meta(metatype='pattern',
edit=True,
path_args=(project, pattern),
template_args=None)
# upload file
if opts.file:
@@ -265,6 +291,11 @@ class Osc(cmdln.Cmdln):
data=f,
edit=opts.edit,
path_args=(quote_plus(user)))
elif cmd == 'pattern':
edit_meta(metatype='pattern',
data=f,
edit=opts.edit,
path_args=(project, pattern))

View File

@@ -132,6 +132,13 @@ Repository UUID: %s
Revision: %s
"""
new_pattern_template = """\
<!-- See http://svn.opensuse.org/svn/zypp/trunk/libzypp/zypp/parser/yum/schema/patterns.rng -->
<pattern>
</pattern>
"""
buildstatus_symbols = {'succeeded': '.',
'disabled': ' ',
'expansion error': 'E',
@@ -902,6 +909,27 @@ def show_package_meta(apiurl, prj, pac):
return f.readlines()
def show_pattern_metalist(apiurl, prj):
url = makeurl(apiurl, ['source', prj, '_pattern'])
f = http_GET(url)
tree = ET.parse(f)
r = [ node.get('name') for node in tree.getroot() ]
r = [ os.path.splitext(i)[0] for i in r ]
r.sort()
return r
def show_pattern_meta(apiurl, prj, pattern):
url = makeurl(apiurl, ['source', prj, '_pattern', pattern])
try:
f = http_GET(url)
except urllib2.HTTPError, e:
print >>sys.stderr, 'error getting pattern \'%s\' for project \'%s\'' % (pattern, prj)
print >>sys.stderr, e
sys.exit(1)
return f.readlines()
class metafile:
"""metafile that can be manipulated and is stored back after manipulation."""
def __init__(self, url, input, change_is_required=False):
@@ -965,6 +993,9 @@ metatypes = { 'prj': { 'path': 'source/%s/_meta',
'user': { 'path': 'person/%s',
'template': new_user_template,
},
'pattern': { 'path': 'source/%s/_pattern/%s',
'template': new_pattern_template,
},
}
def edit_meta(metatype,