101 lines
2.9 KiB
Python
101 lines
2.9 KiB
Python
import re
|
|
import os
|
|
import argparse
|
|
|
|
|
|
module = 'pina'
|
|
meta_file = os.path.join(module, 'meta.py')
|
|
version_line = r'__version__.*=.*"(.+?)"'
|
|
|
|
|
|
class Version:
|
|
def __init__(self, major, minor, patch, date_patch=None):
|
|
self.major = major
|
|
self.minor = minor
|
|
self.patch = patch
|
|
self.date_patch = date_patch
|
|
|
|
def __str__(self):
|
|
|
|
if self.date_patch:
|
|
version_string = '{}.{}.{}.{}'.format(
|
|
self.major,
|
|
self.minor,
|
|
self.patch,
|
|
self.date_patch
|
|
)
|
|
else:
|
|
version_string = '{}.{}.{}'.format(
|
|
self.major,
|
|
self.minor,
|
|
self.patch,
|
|
)
|
|
return version_string
|
|
|
|
|
|
def get_version():
|
|
with open(meta_file, 'r') as fp:
|
|
content = fp.read()
|
|
|
|
try:
|
|
found = re.search(r'__version__.*=.*"(.+?)"', content).group(1)
|
|
except AttributeError:
|
|
pass
|
|
|
|
version = re.split(r'[-\.]', found)
|
|
v = Version(*version)
|
|
return v
|
|
|
|
|
|
def set_version(version):
|
|
with open(meta_file, 'r') as fp:
|
|
content = fp.read()
|
|
|
|
line_string = '__version__ = "{}"'.format(version)
|
|
text_after = re.sub('__version__.*=.*"(.+?)"', line_string, content)
|
|
|
|
with open(meta_file, 'w') as fp:
|
|
fp.write(text_after)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
parser = argparse.ArgumentParser(description='Manipulate Version')
|
|
|
|
subparsers = parser.add_subparsers(dest='command')
|
|
|
|
get_ = subparsers.add_parser('get',
|
|
help='Get information about current version')
|
|
set_ = subparsers.add_parser('set', help='Set version')
|
|
flags = set_.add_mutually_exclusive_group(required=False)
|
|
flags.add_argument('--only-major', action='store_true')
|
|
flags.add_argument('--only-minor', action='store_true')
|
|
flags.add_argument('--only-patch', action='store_true')
|
|
flags.add_argument('--only-date', action='store_true')
|
|
set_.add_argument('version', nargs='+', action="store")
|
|
|
|
args = parser.parse_args()
|
|
|
|
if args.command == 'get':
|
|
print(get_version())
|
|
elif args.command == 'set':
|
|
if args.only_major:
|
|
current_version = get_version()
|
|
current_version.major = args.version[0]
|
|
set_version(current_version)
|
|
elif args.only_minor:
|
|
current_version = get_version()
|
|
current_version.minor = args.version[0]
|
|
set_version(current_version)
|
|
elif args.only_patch:
|
|
current_version = get_version()
|
|
current_version.patch = args.version[0]
|
|
set_version(current_version)
|
|
elif args.only_date:
|
|
current_version = get_version()
|
|
current_version.date_patch = args.version[0]
|
|
set_version(current_version)
|
|
elif len(args.version) in [3, 4]:
|
|
set_version(Version(*args.version))
|
|
else:
|
|
raise RuntimeError
|