225a3b12 |
#! /usr/bin/python2
#
# Copyright (C) 2015 VMware, Inc. All rights reserved.
# publishtool for working with photonpublish
#
# Author(s): Priyesh Padmavilasom
#
import sys
import getopt
from photonpublish import photonPublish
from publishconst import publishConst
const = publishConst()
class publishTool:
def __init__(self, context):
self._context = context
self._publish = photonPublish(context)
#check local files against remote repo
def check(self):
result = self._publish.check(self._context['srcroot'])
print 'Updates: %d' % len(result[const.updates])
print 'New: %d' % len(result[const.new])
print 'Verified: %d' % len(result[const.verified])
print 'Obsoletes: %d' % len(result[const.obsoletes])
return result
def hasPendingSync(self, advice):
return (len(advice[const.updates]) > 0 or len(advice[const.new]) > 0)
#apply advices to sync remote.
#note: discarding/removing is stll getting resolved pending bintray api
def push(self):
advice = self.check()
if(not self._context['silent']):
if not self.hasPendingSync(advice):
print 'No changes to push.'
return
choice = raw_input('Continue? y/N:')
if choice <> 'y':
print 'Aborted on user command'
return
print 'push local changes to remote...'
self._publish.syncRemote(self._context['srcroot'], advice)
def printsha1(self, files, label):
print 'sha1sum of %s >>>' % label
for f in files:
print '%s - %s' % (f['name'], f['sha1'])
def makesha1(self):
advice = self.check()
verified = len(advice[const.verified])
if(verified <= 0):
print 'no files verified. nothing to do.'
return
self.printsha1(advice[const.verified], const.verified)
def writesha1(self):
if 'sha1file' not in self._context.keys():
raise Exception('writesha1 requires a file to write to. specify in --sha1file')
advice = self.check()
verified = advice[const.verified]
verifiedLen = len(advice[const.verified])
if(verifiedLen <= 0):
print 'no files verified. nothing to do.'
return
with open(self._context['sha1file'], 'w') as sha1file:
for f in verified:
if f['name'] == const.sha1allfilename:
continue
sha1file.write('%s - %s\n' % (f['name'], f['sha1']))
def publish(self):
pending = self._publish.getUnpublished()
pendingCount = len(pending)
if(not self._context['silent']):
if pendingCount == 0:
print 'No pending changes to publish.'
return
print 'Found %d pending files to publish' % pendingCount
choice = raw_input('Continue? y/N:')
if choice <> 'y':
print 'Aborted on user command'
return
print self._publish.publish()
def showUsage():
print 'Usage:'
print 'check status: publishTool.py \
--config <config file> --srcroot <source root folder> \
--action check'
print 'push files: publishTool.py \
--config <config file> --srcroot <source root folder> \
--action push'
print 'publish pushed files: publishTool.py \
--config <config file> folder> --action publish'
print 'make sha1 file: publishTool.py \
--config <config file> folder> --srcroot <source root folder> \
--action makesha1'
print 'write sha1 file: publishTool.py \
--config <config file> folder> --srcroot <source root folder> \
--sha1file <sha1 file path> --action writesha1'
#
def main(argv):
try:
context = {'silent':False}
opts, args = getopt.getopt(
sys.argv[1:],
'',
['config=',
'srcroot=',
'action=',
'sha1file=',
'silent=',
'help'])
for opt, arg in opts:
if opt == '--config':
context['config'] = arg
elif opt == '--srcroot':
context['srcroot'] = arg
elif opt == '--action':
context['action'] = arg
elif opt == '--silent':
context['silent'] = arg
elif opt == '--sha1file':
context['sha1file'] = arg
elif opt == '--help':
showUsage()
return
except Exception, e:
showUsage()
sys.exit(1)
try:
tool = publishTool(context)
if(context['action'] == 'push'):
tool.push()
elif(context['action'] == 'check'):
tool.check()
elif(context['action'] == 'makesha1'):
tool.makesha1()
elif(context['action'] == 'writesha1'):
tool.writesha1()
elif(context['action'] == 'publish'):
tool.publish()
except Exception, e:
print "Error: %s" % e
sys.exit(1)
if __name__ == "__main__":
main(sys.argv)
|