1
0
mirror of https://github.com/openSUSE/osc.git synced 2025-01-27 07:06:13 +01:00

- fix test for modified files

- print message after the repairlink commit
- destroy upload revision if commit fails
- use "latest" when revision is not specified
This commit is contained in:
Michael Schröder 2009-04-22 13:14:17 +00:00
parent 7c423392e1
commit 90cb8163b6
2 changed files with 47 additions and 39 deletions

View File

@ -1555,7 +1555,7 @@ Please submit there instead, or use --nodevelproject to force direct submission.
# FIXME: ugly workaround for #399247 # FIXME: ugly workaround for #399247
if opts.expand_link or opts.unexpand_link: if opts.expand_link or opts.unexpand_link:
if [ i for i in p.filenamelist+p.filenamelist_unvers if p.status(i) != ' ' ]: if [ i for i in p.filenamelist+p.filenamelist_unvers if p.status(i) != ' ' and p.status(i) != '?']:
print >>sys.stderr, 'osc: cannot expand/unexpand because your working ' \ print >>sys.stderr, 'osc: cannot expand/unexpand because your working ' \
'copy has local modifications. Please remove them ' \ 'copy has local modifications. Please remove them ' \
'and try again' 'and try again'
@ -2811,11 +2811,9 @@ Please submit there instead, or use --nodevelproject to force direct submission.
f = http_GET(u) f = http_GET(u)
meta = f.readlines() meta = f.readlines()
root_new = ET.parse(StringIO(''.join(meta))).getroot() root_new = ET.parse(StringIO(''.join(meta))).getroot()
dir_new = {'apiurl': apiurl} dir_new = { 'apiurl': apiurl, 'project': prj, 'package': package }
dir_new['srcmd5'] = root_new.get('srcmd5') dir_new['srcmd5'] = root_new.get('srcmd5')
dir_new['entries'] = map(lambda e: [e.get('name'), e.get('md5')], root_new.findall('entry')) dir_new['entries'] = map(lambda e: [e.get('name'), e.get('md5')], root_new.findall('entry'))
dir_new['project'] = prj
dir_new['package'] = package
query = { 'rev': lastworkingrev } query = { 'rev': lastworkingrev }
u = makeurl(apiurl, ['source', prj, package], query=query) u = makeurl(apiurl, ['source', prj, package], query=query)
@ -2826,22 +2824,20 @@ Please submit there instead, or use --nodevelproject to force direct submission.
raise oscerr.APIError('lastworking is not a source link?') raise oscerr.APIError('lastworking is not a source link?')
if linkinfo_oldpatched.get('error') != None: if linkinfo_oldpatched.get('error') != None:
raise oscerr.APIError('lastworking is not working?') raise oscerr.APIError('lastworking is not working?')
dir_oldpatched = {'apiurl': apiurl} dir_oldpatched = { 'apiurl': apiurl, 'project': prj, 'package': package }
dir_oldpatched['srcmd5'] = root_oldpatched.get('srcmd5') dir_oldpatched['srcmd5'] = root_oldpatched.get('srcmd5')
dir_oldpatched['entries'] = map(lambda e: [e.get('name'), e.get('md5')], root_oldpatched.findall('entry')) dir_oldpatched['entries'] = map(lambda e: [e.get('name'), e.get('md5')], root_oldpatched.findall('entry'))
dir_oldpatched['project'] = prj
dir_oldpatched['package'] = package
query = {} query = {}
query['rev'] = linkinfo_oldpatched.get('srcmd5') query['rev'] = linkinfo_oldpatched.get('srcmd5')
u = makeurl(apiurl, ['source', linkinfo_oldpatched.get('project'), linkinfo_oldpatched.get('package')], query=query) u = makeurl(apiurl, ['source', linkinfo_oldpatched.get('project'), linkinfo_oldpatched.get('package')], query=query)
f = http_GET(u) f = http_GET(u)
root_old = ET.parse(f).getroot() root_old = ET.parse(f).getroot()
dir_old = {'apiurl': apiurl} dir_old = { 'apiurl': apiurl }
dir_old['srcmd5'] = root_old.get('srcmd5')
dir_old['entries'] = map(lambda e: [e.get('name'), e.get('md5')], root_old.findall('entry'))
dir_old['project'] = linkinfo_oldpatched.get('project') dir_old['project'] = linkinfo_oldpatched.get('project')
dir_old['package'] = linkinfo_oldpatched.get('package') dir_old['package'] = linkinfo_oldpatched.get('package')
dir_old['srcmd5'] = root_old.get('srcmd5')
dir_old['entries'] = map(lambda e: [e.get('name'), e.get('md5')], root_old.findall('entry'))
entries_old = dict(dir_old['entries']) entries_old = dict(dir_old['entries'])
entries_oldpatched = dict(dir_oldpatched['entries']) entries_oldpatched = dict(dir_oldpatched['entries'])

View File

@ -675,8 +675,8 @@ class Package:
# the working copy may be updated, so the .r* ending may be obsolete... # the working copy may be updated, so the .r* ending may be obsolete...
# then we don't care # then we don't care
os.unlink(upfilename) os.unlink(upfilename)
if self.islinkrepair(): if self.islinkrepair():
os.unlink(os.path.join(self.dir, n + '.old')) os.unlink(os.path.join(self.dir, n + '.old'))
except: except:
pass pass
@ -729,6 +729,7 @@ class Package:
pathn = getTransActPath(self.dir) pathn = getTransActPath(self.dir)
have_conflicts = False
for filename in self.todo: for filename in self.todo:
st = self.status(filename) st = self.status(filename)
if st == 'A' or st == 'M': if st == 'A' or st == 'M':
@ -736,7 +737,13 @@ class Package:
print statfrmt('Sending', os.path.join(pathn, filename)) print statfrmt('Sending', os.path.join(pathn, filename))
elif st == 'D': elif st == 'D':
self.todo_delete.append(filename) self.todo_delete.append(filename)
print statfrmt('Deleting', os.path.join(pathn, filename)) print statfrmt('Deleting', os.path.join(pathn, filename))
elif st == 'C':
have_conflicts = True
if have_conflicts and self.islinkrepair():
print 'Please resolve all conflicts before committing!'
return 1
if not self.todo_send and not self.todo_delete and not self.rev == "upload": if not self.todo_send and not self.todo_delete and not self.rev == "upload":
print 'nothing to do for package %s' % self.name print 'nothing to do for package %s' % self.name
@ -750,30 +757,29 @@ class Package:
f = http_POST(u) f = http_POST(u)
print 'Transmitting file data ', print 'Transmitting file data ',
for filename in self.todo_delete:
# do not touch local files on commit --
# delete remotely instead
self.delete_remote_source_file(filename)
self.to_be_deleted.remove(filename)
for filename in self.todo_send:
sys.stdout.write('.')
sys.stdout.flush()
self.put_source_file(filename)
# all source files are committed - now comes the log
query = { 'cmd' : 'commit',
'rev' : 'upload',
'user' : conf.get_apiurl_usr(self.apiurl),
'comment': msg }
if self.islink() and self.isexpanded():
query['keeplink'] = '1'
if self.islinkrepair():
query['repairlink'] = '1'
u = makeurl(self.apiurl, ['source', self.prjname, self.name], query=query)
try: try:
for filename in self.todo_delete:
# do not touch local files on commit --
# delete remotely instead
self.delete_remote_source_file(filename)
self.to_be_deleted.remove(filename)
for filename in self.todo_send:
sys.stdout.write('.')
sys.stdout.flush()
self.put_source_file(filename)
# all source files are committed - now comes the log
query = { 'cmd' : 'commit',
'rev' : 'upload',
'user' : conf.get_apiurl_usr(self.apiurl),
'comment': msg }
if self.islink() and self.isexpanded():
query['keeplink'] = '1'
if self.islinkrepair():
query['repairlink'] = '1'
u = makeurl(self.apiurl, ['source', self.prjname, self.name], query=query)
f = http_POST(u) f = http_POST(u)
except urllib2.HTTPError, e: except urllib2.HTTPError, e:
e.osc_msg = 'commit failed'
# delete upload revision # delete upload revision
try: try:
query = { 'cmd': 'deleteuploadrev' } query = { 'cmd': 'deleteuploadrev' }
@ -782,6 +788,7 @@ class Package:
except: except:
pass pass
raise e raise e
root = ET.parse(f).getroot() root = ET.parse(f).getroot()
self.rev = int(root.get('rev')) self.rev = int(root.get('rev'))
print print
@ -791,6 +798,7 @@ class Package:
os.unlink(os.path.join(self.storedir, '_linkrepair')) os.unlink(os.path.join(self.storedir, '_linkrepair'))
self.linkrepair = False self.linkrepair = False
# XXX: mark package as invalid? # XXX: mark package as invalid?
print 'The source link has been repaired. This directory can now be removed.'
if self.islink() and self.isexpanded(): if self.islink() and self.isexpanded():
self.update_local_filesmeta(revision=self.latest_rev()) self.update_local_filesmeta(revision=self.latest_rev())
else: else:
@ -1627,6 +1635,8 @@ def meta_get_filelist(apiurl, prj, package, verbose=False, expand=False, revisio
query['expand'] = 1 query['expand'] = 1
if revision: if revision:
query['rev'] = revision query['rev'] = revision
else:
query['rev'] = 'latest'
u = makeurl(apiurl, ['source', prj, package], query=query) u = makeurl(apiurl, ['source', prj, package], query=query)
f = http_GET(u) f = http_GET(u)
@ -1850,15 +1860,17 @@ def edit_meta(metatype,
def show_files_meta(apiurl, prj, pac, expand=False, revision=None, linkrev=None, linkrepair=False): def show_files_meta(apiurl, prj, pac, expand=False, revision=None, linkrev=None, linkrepair=False):
query = None query = {}
if revision: if revision:
query = { 'rev': revision } query['rev'] = revision
else:
query['rev'] = 'latest'
if linkrev: if linkrev:
query = { 'linkrev': linkrev } query['linkrev'] = linkrev
if expand: if expand:
query = { 'expand': 1 } query['expand'] = 1
if linkrepair: if linkrepair:
query = { 'emptylink': 1 } query['emptylink'] = 1
f = http_GET(makeurl(apiurl, ['source', prj, pac], query=query)) f = http_GET(makeurl(apiurl, ['source', prj, pac], query=query))
return f.readlines() return f.readlines()